xref: /llvm-project/llvm/test/CodeGen/AMDGPU/shufflevector.v2i32.v4i32.ll (revision e28e93550a74752714db6fffe50233aa96e536a5)
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s
3; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX90A %s
4; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx940 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX940 %s
5
6
7define void @v_shuffle_v2i32_v4i32__u_u(ptr addrspace(1) inreg %ptr) {
8; GFX9-LABEL: v_shuffle_v2i32_v4i32__u_u:
9; GFX9:       ; %bb.0:
10; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11; GFX9-NEXT:    s_setpc_b64 s[30:31]
12  %vec0 = call <4 x i32> asm "; def $0", "=v"()
13  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> poison
14  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
15  ret void
16}
17
18define void @v_shuffle_v2i32_v4i32__0_u(ptr addrspace(1) inreg %ptr) {
19; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_u:
20; GFX900:       ; %bb.0:
21; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22; GFX900-NEXT:    v_mov_b32_e32 v4, 0
23; GFX900-NEXT:    ;;#ASMSTART
24; GFX900-NEXT:    ; def v[0:3]
25; GFX900-NEXT:    ;;#ASMEND
26; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
27; GFX900-NEXT:    s_waitcnt vmcnt(0)
28; GFX900-NEXT:    s_setpc_b64 s[30:31]
29;
30; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_u:
31; GFX90A:       ; %bb.0:
32; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
34; GFX90A-NEXT:    ;;#ASMSTART
35; GFX90A-NEXT:    ; def v[0:3]
36; GFX90A-NEXT:    ;;#ASMEND
37; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
38; GFX90A-NEXT:    s_waitcnt vmcnt(0)
39; GFX90A-NEXT:    s_setpc_b64 s[30:31]
40;
41; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_u:
42; GFX940:       ; %bb.0:
43; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44; GFX940-NEXT:    v_mov_b32_e32 v4, 0
45; GFX940-NEXT:    ;;#ASMSTART
46; GFX940-NEXT:    ; def v[0:3]
47; GFX940-NEXT:    ;;#ASMEND
48; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
49; GFX940-NEXT:    s_waitcnt vmcnt(0)
50; GFX940-NEXT:    s_setpc_b64 s[30:31]
51  %vec0 = call <4 x i32> asm "; def $0", "=v"()
52  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 poison>
53  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
54  ret void
55}
56
57define void @v_shuffle_v2i32_v4i32__1_u(ptr addrspace(1) inreg %ptr) {
58; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_u:
59; GFX900:       ; %bb.0:
60; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
61; GFX900-NEXT:    v_mov_b32_e32 v4, 0
62; GFX900-NEXT:    ;;#ASMSTART
63; GFX900-NEXT:    ; def v[0:3]
64; GFX900-NEXT:    ;;#ASMEND
65; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
66; GFX900-NEXT:    s_waitcnt vmcnt(0)
67; GFX900-NEXT:    s_setpc_b64 s[30:31]
68;
69; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_u:
70; GFX90A:       ; %bb.0:
71; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
72; GFX90A-NEXT:    ;;#ASMSTART
73; GFX90A-NEXT:    ; def v[0:3]
74; GFX90A-NEXT:    ;;#ASMEND
75; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
76; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
77; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
78; GFX90A-NEXT:    s_waitcnt vmcnt(0)
79; GFX90A-NEXT:    s_setpc_b64 s[30:31]
80;
81; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_u:
82; GFX940:       ; %bb.0:
83; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
84; GFX940-NEXT:    ;;#ASMSTART
85; GFX940-NEXT:    ; def v[0:3]
86; GFX940-NEXT:    ;;#ASMEND
87; GFX940-NEXT:    v_mov_b32_e32 v4, 0
88; GFX940-NEXT:    v_mov_b32_e32 v0, v1
89; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
90; GFX940-NEXT:    s_waitcnt vmcnt(0)
91; GFX940-NEXT:    s_setpc_b64 s[30:31]
92  %vec0 = call <4 x i32> asm "; def $0", "=v"()
93  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 poison>
94  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
95  ret void
96}
97
98define void @v_shuffle_v2i32_v4i32__2_u(ptr addrspace(1) inreg %ptr) {
99; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_u:
100; GFX900:       ; %bb.0:
101; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
102; GFX900-NEXT:    v_mov_b32_e32 v4, 0
103; GFX900-NEXT:    ;;#ASMSTART
104; GFX900-NEXT:    ; def v[0:3]
105; GFX900-NEXT:    ;;#ASMEND
106; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
107; GFX900-NEXT:    s_waitcnt vmcnt(0)
108; GFX900-NEXT:    s_setpc_b64 s[30:31]
109;
110; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_u:
111; GFX90A:       ; %bb.0:
112; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
113; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
114; GFX90A-NEXT:    ;;#ASMSTART
115; GFX90A-NEXT:    ; def v[0:3]
116; GFX90A-NEXT:    ;;#ASMEND
117; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
118; GFX90A-NEXT:    s_waitcnt vmcnt(0)
119; GFX90A-NEXT:    s_setpc_b64 s[30:31]
120;
121; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_u:
122; GFX940:       ; %bb.0:
123; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
124; GFX940-NEXT:    v_mov_b32_e32 v4, 0
125; GFX940-NEXT:    ;;#ASMSTART
126; GFX940-NEXT:    ; def v[0:3]
127; GFX940-NEXT:    ;;#ASMEND
128; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
129; GFX940-NEXT:    s_waitcnt vmcnt(0)
130; GFX940-NEXT:    s_setpc_b64 s[30:31]
131  %vec0 = call <4 x i32> asm "; def $0", "=v"()
132  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 poison>
133  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
134  ret void
135}
136
137define void @v_shuffle_v2i32_v4i32__3_u(ptr addrspace(1) inreg %ptr) {
138; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_u:
139; GFX900:       ; %bb.0:
140; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
141; GFX900-NEXT:    ;;#ASMSTART
142; GFX900-NEXT:    ; def v[0:3]
143; GFX900-NEXT:    ;;#ASMEND
144; GFX900-NEXT:    v_mov_b32_e32 v4, 0
145; GFX900-NEXT:    v_mov_b32_e32 v0, v3
146; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
147; GFX900-NEXT:    s_waitcnt vmcnt(0)
148; GFX900-NEXT:    s_setpc_b64 s[30:31]
149;
150; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_u:
151; GFX90A:       ; %bb.0:
152; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
153; GFX90A-NEXT:    ;;#ASMSTART
154; GFX90A-NEXT:    ; def v[0:3]
155; GFX90A-NEXT:    ;;#ASMEND
156; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
157; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
158; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
159; GFX90A-NEXT:    s_waitcnt vmcnt(0)
160; GFX90A-NEXT:    s_setpc_b64 s[30:31]
161;
162; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_u:
163; GFX940:       ; %bb.0:
164; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
165; GFX940-NEXT:    ;;#ASMSTART
166; GFX940-NEXT:    ; def v[0:3]
167; GFX940-NEXT:    ;;#ASMEND
168; GFX940-NEXT:    v_mov_b32_e32 v4, 0
169; GFX940-NEXT:    v_mov_b32_e32 v0, v3
170; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
171; GFX940-NEXT:    s_waitcnt vmcnt(0)
172; GFX940-NEXT:    s_setpc_b64 s[30:31]
173  %vec0 = call <4 x i32> asm "; def $0", "=v"()
174  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 poison>
175  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
176  ret void
177}
178
179define void @v_shuffle_v2i32_v4i32__4_u(ptr addrspace(1) inreg %ptr) {
180; GFX9-LABEL: v_shuffle_v2i32_v4i32__4_u:
181; GFX9:       ; %bb.0:
182; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
183; GFX9-NEXT:    s_setpc_b64 s[30:31]
184  %vec0 = call <4 x i32> asm "; def $0", "=v"()
185  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 poison>
186  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
187  ret void
188}
189
190define void @v_shuffle_v2i32_v4i32__5_u(ptr addrspace(1) inreg %ptr) {
191; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_u:
192; GFX900:       ; %bb.0:
193; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
194; GFX900-NEXT:    v_mov_b32_e32 v4, 0
195; GFX900-NEXT:    ;;#ASMSTART
196; GFX900-NEXT:    ; def v[0:3]
197; GFX900-NEXT:    ;;#ASMEND
198; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
199; GFX900-NEXT:    s_waitcnt vmcnt(0)
200; GFX900-NEXT:    s_setpc_b64 s[30:31]
201;
202; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_u:
203; GFX90A:       ; %bb.0:
204; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
205; GFX90A-NEXT:    ;;#ASMSTART
206; GFX90A-NEXT:    ; def v[0:3]
207; GFX90A-NEXT:    ;;#ASMEND
208; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
209; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
210; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
211; GFX90A-NEXT:    s_waitcnt vmcnt(0)
212; GFX90A-NEXT:    s_setpc_b64 s[30:31]
213;
214; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_u:
215; GFX940:       ; %bb.0:
216; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
217; GFX940-NEXT:    ;;#ASMSTART
218; GFX940-NEXT:    ; def v[0:3]
219; GFX940-NEXT:    ;;#ASMEND
220; GFX940-NEXT:    v_mov_b32_e32 v4, 0
221; GFX940-NEXT:    v_mov_b32_e32 v0, v1
222; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
223; GFX940-NEXT:    s_waitcnt vmcnt(0)
224; GFX940-NEXT:    s_setpc_b64 s[30:31]
225  %vec0 = call <4 x i32> asm "; def $0", "=v"()
226  %vec1 = call <4 x i32> asm "; def $0", "=v"()
227  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 poison>
228  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
229  ret void
230}
231
232define void @v_shuffle_v2i32_v4i32__6_u(ptr addrspace(1) inreg %ptr) {
233; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_u:
234; GFX900:       ; %bb.0:
235; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
236; GFX900-NEXT:    v_mov_b32_e32 v4, 0
237; GFX900-NEXT:    ;;#ASMSTART
238; GFX900-NEXT:    ; def v[0:3]
239; GFX900-NEXT:    ;;#ASMEND
240; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
241; GFX900-NEXT:    s_waitcnt vmcnt(0)
242; GFX900-NEXT:    s_setpc_b64 s[30:31]
243;
244; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_u:
245; GFX90A:       ; %bb.0:
246; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
247; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
248; GFX90A-NEXT:    ;;#ASMSTART
249; GFX90A-NEXT:    ; def v[0:3]
250; GFX90A-NEXT:    ;;#ASMEND
251; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
252; GFX90A-NEXT:    s_waitcnt vmcnt(0)
253; GFX90A-NEXT:    s_setpc_b64 s[30:31]
254;
255; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_u:
256; GFX940:       ; %bb.0:
257; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
258; GFX940-NEXT:    v_mov_b32_e32 v4, 0
259; GFX940-NEXT:    ;;#ASMSTART
260; GFX940-NEXT:    ; def v[0:3]
261; GFX940-NEXT:    ;;#ASMEND
262; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
263; GFX940-NEXT:    s_waitcnt vmcnt(0)
264; GFX940-NEXT:    s_setpc_b64 s[30:31]
265  %vec0 = call <4 x i32> asm "; def $0", "=v"()
266  %vec1 = call <4 x i32> asm "; def $0", "=v"()
267  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 poison>
268  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
269  ret void
270}
271
272define void @v_shuffle_v2i32_v4i32__7_u(ptr addrspace(1) inreg %ptr) {
273; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_u:
274; GFX900:       ; %bb.0:
275; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
276; GFX900-NEXT:    ;;#ASMSTART
277; GFX900-NEXT:    ; def v[0:3]
278; GFX900-NEXT:    ;;#ASMEND
279; GFX900-NEXT:    v_mov_b32_e32 v4, 0
280; GFX900-NEXT:    v_mov_b32_e32 v0, v3
281; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
282; GFX900-NEXT:    s_waitcnt vmcnt(0)
283; GFX900-NEXT:    s_setpc_b64 s[30:31]
284;
285; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_u:
286; GFX90A:       ; %bb.0:
287; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
288; GFX90A-NEXT:    ;;#ASMSTART
289; GFX90A-NEXT:    ; def v[0:3]
290; GFX90A-NEXT:    ;;#ASMEND
291; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
292; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
293; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
294; GFX90A-NEXT:    s_waitcnt vmcnt(0)
295; GFX90A-NEXT:    s_setpc_b64 s[30:31]
296;
297; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_u:
298; GFX940:       ; %bb.0:
299; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
300; GFX940-NEXT:    ;;#ASMSTART
301; GFX940-NEXT:    ; def v[0:3]
302; GFX940-NEXT:    ;;#ASMEND
303; GFX940-NEXT:    v_mov_b32_e32 v4, 0
304; GFX940-NEXT:    v_mov_b32_e32 v0, v3
305; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
306; GFX940-NEXT:    s_waitcnt vmcnt(0)
307; GFX940-NEXT:    s_setpc_b64 s[30:31]
308  %vec0 = call <4 x i32> asm "; def $0", "=v"()
309  %vec1 = call <4 x i32> asm "; def $0", "=v"()
310  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 poison>
311  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
312  ret void
313}
314
315define void @v_shuffle_v2i32_v4i32__7_0(ptr addrspace(1) inreg %ptr) {
316; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_0:
317; GFX900:       ; %bb.0:
318; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
319; GFX900-NEXT:    ;;#ASMSTART
320; GFX900-NEXT:    ; def v[0:3]
321; GFX900-NEXT:    ;;#ASMEND
322; GFX900-NEXT:    ;;#ASMSTART
323; GFX900-NEXT:    ; def v[1:4]
324; GFX900-NEXT:    ;;#ASMEND
325; GFX900-NEXT:    v_mov_b32_e32 v5, 0
326; GFX900-NEXT:    v_mov_b32_e32 v1, v4
327; GFX900-NEXT:    v_mov_b32_e32 v2, v0
328; GFX900-NEXT:    global_store_dwordx2 v5, v[1:2], s[16:17]
329; GFX900-NEXT:    s_waitcnt vmcnt(0)
330; GFX900-NEXT:    s_setpc_b64 s[30:31]
331;
332; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_0:
333; GFX90A:       ; %bb.0:
334; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
335; GFX90A-NEXT:    ;;#ASMSTART
336; GFX90A-NEXT:    ; def v[0:3]
337; GFX90A-NEXT:    ;;#ASMEND
338; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
339; GFX90A-NEXT:    ;;#ASMSTART
340; GFX90A-NEXT:    ; def v[2:5]
341; GFX90A-NEXT:    ;;#ASMEND
342; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[4:5], v[0:1] op_sel:[1,0]
343; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17]
344; GFX90A-NEXT:    s_waitcnt vmcnt(0)
345; GFX90A-NEXT:    s_setpc_b64 s[30:31]
346;
347; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_0:
348; GFX940:       ; %bb.0:
349; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
350; GFX940-NEXT:    ;;#ASMSTART
351; GFX940-NEXT:    ; def v[0:3]
352; GFX940-NEXT:    ;;#ASMEND
353; GFX940-NEXT:    v_mov_b32_e32 v6, 0
354; GFX940-NEXT:    ;;#ASMSTART
355; GFX940-NEXT:    ; def v[2:5]
356; GFX940-NEXT:    ;;#ASMEND
357; GFX940-NEXT:    s_nop 0
358; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[4:5], v[0:1] op_sel:[1,0]
359; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1
360; GFX940-NEXT:    s_waitcnt vmcnt(0)
361; GFX940-NEXT:    s_setpc_b64 s[30:31]
362  %vec0 = call <4 x i32> asm "; def $0", "=v"()
363  %vec1 = call <4 x i32> asm "; def $0", "=v"()
364  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 0>
365  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
366  ret void
367}
368
369define void @v_shuffle_v2i32_v4i32__7_1(ptr addrspace(1) inreg %ptr) {
370; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_1:
371; GFX900:       ; %bb.0:
372; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
373; GFX900-NEXT:    ;;#ASMSTART
374; GFX900-NEXT:    ; def v[0:3]
375; GFX900-NEXT:    ;;#ASMEND
376; GFX900-NEXT:    v_mov_b32_e32 v6, 0
377; GFX900-NEXT:    ;;#ASMSTART
378; GFX900-NEXT:    ; def v[2:5]
379; GFX900-NEXT:    ;;#ASMEND
380; GFX900-NEXT:    v_mov_b32_e32 v0, v5
381; GFX900-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17]
382; GFX900-NEXT:    s_waitcnt vmcnt(0)
383; GFX900-NEXT:    s_setpc_b64 s[30:31]
384;
385; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_1:
386; GFX90A:       ; %bb.0:
387; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
388; GFX90A-NEXT:    ;;#ASMSTART
389; GFX90A-NEXT:    ; def v[0:3]
390; GFX90A-NEXT:    ;;#ASMEND
391; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
392; GFX90A-NEXT:    ;;#ASMSTART
393; GFX90A-NEXT:    ; def v[2:5]
394; GFX90A-NEXT:    ;;#ASMEND
395; GFX90A-NEXT:    v_mov_b32_e32 v0, v5
396; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17]
397; GFX90A-NEXT:    s_waitcnt vmcnt(0)
398; GFX90A-NEXT:    s_setpc_b64 s[30:31]
399;
400; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_1:
401; GFX940:       ; %bb.0:
402; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
403; GFX940-NEXT:    ;;#ASMSTART
404; GFX940-NEXT:    ; def v[0:3]
405; GFX940-NEXT:    ;;#ASMEND
406; GFX940-NEXT:    v_mov_b32_e32 v6, 0
407; GFX940-NEXT:    ;;#ASMSTART
408; GFX940-NEXT:    ; def v[2:5]
409; GFX940-NEXT:    ;;#ASMEND
410; GFX940-NEXT:    s_nop 0
411; GFX940-NEXT:    v_mov_b32_e32 v0, v5
412; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1
413; GFX940-NEXT:    s_waitcnt vmcnt(0)
414; GFX940-NEXT:    s_setpc_b64 s[30:31]
415  %vec0 = call <4 x i32> asm "; def $0", "=v"()
416  %vec1 = call <4 x i32> asm "; def $0", "=v"()
417  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 1>
418  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
419  ret void
420}
421
422define void @v_shuffle_v2i32_v4i32__7_2(ptr addrspace(1) inreg %ptr) {
423; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_2:
424; GFX900:       ; %bb.0:
425; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
426; GFX900-NEXT:    ;;#ASMSTART
427; GFX900-NEXT:    ; def v[0:3]
428; GFX900-NEXT:    ;;#ASMEND
429; GFX900-NEXT:    v_mov_b32_e32 v7, 0
430; GFX900-NEXT:    ;;#ASMSTART
431; GFX900-NEXT:    ; def v[3:6]
432; GFX900-NEXT:    ;;#ASMEND
433; GFX900-NEXT:    v_mov_b32_e32 v1, v6
434; GFX900-NEXT:    global_store_dwordx2 v7, v[1:2], s[16:17]
435; GFX900-NEXT:    s_waitcnt vmcnt(0)
436; GFX900-NEXT:    s_setpc_b64 s[30:31]
437;
438; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_2:
439; GFX90A:       ; %bb.0:
440; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
441; GFX90A-NEXT:    ;;#ASMSTART
442; GFX90A-NEXT:    ; def v[0:3]
443; GFX90A-NEXT:    ;;#ASMEND
444; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
445; GFX90A-NEXT:    ;;#ASMSTART
446; GFX90A-NEXT:    ; def v[4:7]
447; GFX90A-NEXT:    ;;#ASMEND
448; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[6:7], v[2:3] op_sel:[1,0]
449; GFX90A-NEXT:    global_store_dwordx2 v8, v[0:1], s[16:17]
450; GFX90A-NEXT:    s_waitcnt vmcnt(0)
451; GFX90A-NEXT:    s_setpc_b64 s[30:31]
452;
453; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_2:
454; GFX940:       ; %bb.0:
455; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
456; GFX940-NEXT:    ;;#ASMSTART
457; GFX940-NEXT:    ; def v[0:3]
458; GFX940-NEXT:    ;;#ASMEND
459; GFX940-NEXT:    v_mov_b32_e32 v8, 0
460; GFX940-NEXT:    ;;#ASMSTART
461; GFX940-NEXT:    ; def v[4:7]
462; GFX940-NEXT:    ;;#ASMEND
463; GFX940-NEXT:    s_nop 0
464; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[6:7], v[2:3] op_sel:[1,0]
465; GFX940-NEXT:    global_store_dwordx2 v8, v[0:1], s[0:1] sc0 sc1
466; GFX940-NEXT:    s_waitcnt vmcnt(0)
467; GFX940-NEXT:    s_setpc_b64 s[30:31]
468  %vec0 = call <4 x i32> asm "; def $0", "=v"()
469  %vec1 = call <4 x i32> asm "; def $0", "=v"()
470  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 2>
471  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
472  ret void
473}
474
475define void @v_shuffle_v2i32_v4i32__7_3(ptr addrspace(1) inreg %ptr) {
476; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_3:
477; GFX900:       ; %bb.0:
478; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
479; GFX900-NEXT:    ;;#ASMSTART
480; GFX900-NEXT:    ; def v[0:3]
481; GFX900-NEXT:    ;;#ASMEND
482; GFX900-NEXT:    v_mov_b32_e32 v8, 0
483; GFX900-NEXT:    ;;#ASMSTART
484; GFX900-NEXT:    ; def v[4:7]
485; GFX900-NEXT:    ;;#ASMEND
486; GFX900-NEXT:    v_mov_b32_e32 v2, v7
487; GFX900-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17]
488; GFX900-NEXT:    s_waitcnt vmcnt(0)
489; GFX900-NEXT:    s_setpc_b64 s[30:31]
490;
491; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_3:
492; GFX90A:       ; %bb.0:
493; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
494; GFX90A-NEXT:    ;;#ASMSTART
495; GFX90A-NEXT:    ; def v[0:3]
496; GFX90A-NEXT:    ;;#ASMEND
497; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
498; GFX90A-NEXT:    ;;#ASMSTART
499; GFX90A-NEXT:    ; def v[4:7]
500; GFX90A-NEXT:    ;;#ASMEND
501; GFX90A-NEXT:    v_mov_b32_e32 v2, v7
502; GFX90A-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17]
503; GFX90A-NEXT:    s_waitcnt vmcnt(0)
504; GFX90A-NEXT:    s_setpc_b64 s[30:31]
505;
506; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_3:
507; GFX940:       ; %bb.0:
508; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
509; GFX940-NEXT:    ;;#ASMSTART
510; GFX940-NEXT:    ; def v[0:3]
511; GFX940-NEXT:    ;;#ASMEND
512; GFX940-NEXT:    v_mov_b32_e32 v8, 0
513; GFX940-NEXT:    ;;#ASMSTART
514; GFX940-NEXT:    ; def v[4:7]
515; GFX940-NEXT:    ;;#ASMEND
516; GFX940-NEXT:    s_nop 0
517; GFX940-NEXT:    v_mov_b32_e32 v2, v7
518; GFX940-NEXT:    global_store_dwordx2 v8, v[2:3], s[0:1] sc0 sc1
519; GFX940-NEXT:    s_waitcnt vmcnt(0)
520; GFX940-NEXT:    s_setpc_b64 s[30:31]
521  %vec0 = call <4 x i32> asm "; def $0", "=v"()
522  %vec1 = call <4 x i32> asm "; def $0", "=v"()
523  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 3>
524  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
525  ret void
526}
527
528define void @v_shuffle_v2i32_v4i32__7_4(ptr addrspace(1) inreg %ptr) {
529; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_4:
530; GFX900:       ; %bb.0:
531; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
532; GFX900-NEXT:    ;;#ASMSTART
533; GFX900-NEXT:    ; def v[0:3]
534; GFX900-NEXT:    ;;#ASMEND
535; GFX900-NEXT:    v_mov_b32_e32 v4, 0
536; GFX900-NEXT:    v_mov_b32_e32 v1, v3
537; GFX900-NEXT:    v_mov_b32_e32 v2, v0
538; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
539; GFX900-NEXT:    s_waitcnt vmcnt(0)
540; GFX900-NEXT:    s_setpc_b64 s[30:31]
541;
542; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_4:
543; GFX90A:       ; %bb.0:
544; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
545; GFX90A-NEXT:    ;;#ASMSTART
546; GFX90A-NEXT:    ; def v[0:3]
547; GFX90A-NEXT:    ;;#ASMEND
548; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
549; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
550; GFX90A-NEXT:    v_mov_b32_e32 v3, v0
551; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
552; GFX90A-NEXT:    s_waitcnt vmcnt(0)
553; GFX90A-NEXT:    s_setpc_b64 s[30:31]
554;
555; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_4:
556; GFX940:       ; %bb.0:
557; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
558; GFX940-NEXT:    ;;#ASMSTART
559; GFX940-NEXT:    ; def v[0:3]
560; GFX940-NEXT:    ;;#ASMEND
561; GFX940-NEXT:    v_mov_b32_e32 v4, 0
562; GFX940-NEXT:    v_mov_b32_e32 v2, v3
563; GFX940-NEXT:    v_mov_b32_e32 v3, v0
564; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
565; GFX940-NEXT:    s_waitcnt vmcnt(0)
566; GFX940-NEXT:    s_setpc_b64 s[30:31]
567  %vec0 = call <4 x i32> asm "; def $0", "=v"()
568  %vec1 = call <4 x i32> asm "; def $0", "=v"()
569  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 4>
570  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
571  ret void
572}
573
574define void @v_shuffle_v2i32_v4i32__7_5(ptr addrspace(1) inreg %ptr) {
575; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_5:
576; GFX900:       ; %bb.0:
577; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
578; GFX900-NEXT:    ;;#ASMSTART
579; GFX900-NEXT:    ; def v[0:3]
580; GFX900-NEXT:    ;;#ASMEND
581; GFX900-NEXT:    v_mov_b32_e32 v4, 0
582; GFX900-NEXT:    v_mov_b32_e32 v0, v3
583; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
584; GFX900-NEXT:    s_waitcnt vmcnt(0)
585; GFX900-NEXT:    s_setpc_b64 s[30:31]
586;
587; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_5:
588; GFX90A:       ; %bb.0:
589; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
590; GFX90A-NEXT:    ;;#ASMSTART
591; GFX90A-NEXT:    ; def v[0:3]
592; GFX90A-NEXT:    ;;#ASMEND
593; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
594; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
595; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
596; GFX90A-NEXT:    s_waitcnt vmcnt(0)
597; GFX90A-NEXT:    s_setpc_b64 s[30:31]
598;
599; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_5:
600; GFX940:       ; %bb.0:
601; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
602; GFX940-NEXT:    ;;#ASMSTART
603; GFX940-NEXT:    ; def v[0:3]
604; GFX940-NEXT:    ;;#ASMEND
605; GFX940-NEXT:    v_mov_b32_e32 v4, 0
606; GFX940-NEXT:    v_mov_b32_e32 v0, v3
607; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
608; GFX940-NEXT:    s_waitcnt vmcnt(0)
609; GFX940-NEXT:    s_setpc_b64 s[30:31]
610  %vec0 = call <4 x i32> asm "; def $0", "=v"()
611  %vec1 = call <4 x i32> asm "; def $0", "=v"()
612  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 5>
613  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
614  ret void
615}
616
617define void @v_shuffle_v2i32_v4i32__7_6(ptr addrspace(1) inreg %ptr) {
618; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_6:
619; GFX900:       ; %bb.0:
620; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
621; GFX900-NEXT:    ;;#ASMSTART
622; GFX900-NEXT:    ; def v[0:3]
623; GFX900-NEXT:    ;;#ASMEND
624; GFX900-NEXT:    v_mov_b32_e32 v4, 0
625; GFX900-NEXT:    v_mov_b32_e32 v1, v3
626; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
627; GFX900-NEXT:    s_waitcnt vmcnt(0)
628; GFX900-NEXT:    s_setpc_b64 s[30:31]
629;
630; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_6:
631; GFX90A:       ; %bb.0:
632; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
633; GFX90A-NEXT:    ;;#ASMSTART
634; GFX90A-NEXT:    ; def v[0:3]
635; GFX90A-NEXT:    ;;#ASMEND
636; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
637; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]
638; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
639; GFX90A-NEXT:    s_waitcnt vmcnt(0)
640; GFX90A-NEXT:    s_setpc_b64 s[30:31]
641;
642; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_6:
643; GFX940:       ; %bb.0:
644; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
645; GFX940-NEXT:    ;;#ASMSTART
646; GFX940-NEXT:    ; def v[0:3]
647; GFX940-NEXT:    ;;#ASMEND
648; GFX940-NEXT:    v_mov_b32_e32 v4, 0
649; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]
650; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
651; GFX940-NEXT:    s_waitcnt vmcnt(0)
652; GFX940-NEXT:    s_setpc_b64 s[30:31]
653  %vec0 = call <4 x i32> asm "; def $0", "=v"()
654  %vec1 = call <4 x i32> asm "; def $0", "=v"()
655  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 6>
656  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
657  ret void
658}
659
660define void @v_shuffle_v2i32_v4i32__7_7(ptr addrspace(1) inreg %ptr) {
661; GFX900-LABEL: v_shuffle_v2i32_v4i32__7_7:
662; GFX900:       ; %bb.0:
663; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
664; GFX900-NEXT:    ;;#ASMSTART
665; GFX900-NEXT:    ; def v[0:3]
666; GFX900-NEXT:    ;;#ASMEND
667; GFX900-NEXT:    v_mov_b32_e32 v4, 0
668; GFX900-NEXT:    v_mov_b32_e32 v2, v3
669; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
670; GFX900-NEXT:    s_waitcnt vmcnt(0)
671; GFX900-NEXT:    s_setpc_b64 s[30:31]
672;
673; GFX90A-LABEL: v_shuffle_v2i32_v4i32__7_7:
674; GFX90A:       ; %bb.0:
675; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
676; GFX90A-NEXT:    ;;#ASMSTART
677; GFX90A-NEXT:    ; def v[0:3]
678; GFX90A-NEXT:    ;;#ASMEND
679; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
680; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
681; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
682; GFX90A-NEXT:    s_waitcnt vmcnt(0)
683; GFX90A-NEXT:    s_setpc_b64 s[30:31]
684;
685; GFX940-LABEL: v_shuffle_v2i32_v4i32__7_7:
686; GFX940:       ; %bb.0:
687; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
688; GFX940-NEXT:    ;;#ASMSTART
689; GFX940-NEXT:    ; def v[0:3]
690; GFX940-NEXT:    ;;#ASMEND
691; GFX940-NEXT:    v_mov_b32_e32 v4, 0
692; GFX940-NEXT:    v_mov_b32_e32 v2, v3
693; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
694; GFX940-NEXT:    s_waitcnt vmcnt(0)
695; GFX940-NEXT:    s_setpc_b64 s[30:31]
696  %vec0 = call <4 x i32> asm "; def $0", "=v"()
697  %vec1 = call <4 x i32> asm "; def $0", "=v"()
698  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 7>
699  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
700  ret void
701}
702
703define void @v_shuffle_v2i32_v4i32__u_0(ptr addrspace(1) inreg %ptr) {
704; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_0:
705; GFX900:       ; %bb.0:
706; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
707; GFX900-NEXT:    ;;#ASMSTART
708; GFX900-NEXT:    ; def v[0:3]
709; GFX900-NEXT:    ;;#ASMEND
710; GFX900-NEXT:    v_mov_b32_e32 v4, 0
711; GFX900-NEXT:    v_mov_b32_e32 v1, v0
712; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
713; GFX900-NEXT:    s_waitcnt vmcnt(0)
714; GFX900-NEXT:    s_setpc_b64 s[30:31]
715;
716; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_0:
717; GFX90A:       ; %bb.0:
718; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
719; GFX90A-NEXT:    ;;#ASMSTART
720; GFX90A-NEXT:    ; def v[0:3]
721; GFX90A-NEXT:    ;;#ASMEND
722; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
723; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
724; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
725; GFX90A-NEXT:    s_waitcnt vmcnt(0)
726; GFX90A-NEXT:    s_setpc_b64 s[30:31]
727;
728; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_0:
729; GFX940:       ; %bb.0:
730; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
731; GFX940-NEXT:    ;;#ASMSTART
732; GFX940-NEXT:    ; def v[0:3]
733; GFX940-NEXT:    ;;#ASMEND
734; GFX940-NEXT:    v_mov_b32_e32 v4, 0
735; GFX940-NEXT:    v_mov_b32_e32 v1, v0
736; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
737; GFX940-NEXT:    s_waitcnt vmcnt(0)
738; GFX940-NEXT:    s_setpc_b64 s[30:31]
739  %vec0 = call <4 x i32> asm "; def $0", "=v"()
740  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 0>
741  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
742  ret void
743}
744
745define void @v_shuffle_v2i32_v4i32__0_0(ptr addrspace(1) inreg %ptr) {
746; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_0:
747; GFX900:       ; %bb.0:
748; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
749; GFX900-NEXT:    ;;#ASMSTART
750; GFX900-NEXT:    ; def v[0:3]
751; GFX900-NEXT:    ;;#ASMEND
752; GFX900-NEXT:    v_mov_b32_e32 v4, 0
753; GFX900-NEXT:    v_mov_b32_e32 v1, v0
754; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
755; GFX900-NEXT:    s_waitcnt vmcnt(0)
756; GFX900-NEXT:    s_setpc_b64 s[30:31]
757;
758; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_0:
759; GFX90A:       ; %bb.0:
760; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
761; GFX90A-NEXT:    ;;#ASMSTART
762; GFX90A-NEXT:    ; def v[0:3]
763; GFX90A-NEXT:    ;;#ASMEND
764; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
765; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
766; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
767; GFX90A-NEXT:    s_waitcnt vmcnt(0)
768; GFX90A-NEXT:    s_setpc_b64 s[30:31]
769;
770; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_0:
771; GFX940:       ; %bb.0:
772; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
773; GFX940-NEXT:    ;;#ASMSTART
774; GFX940-NEXT:    ; def v[0:3]
775; GFX940-NEXT:    ;;#ASMEND
776; GFX940-NEXT:    v_mov_b32_e32 v4, 0
777; GFX940-NEXT:    v_mov_b32_e32 v1, v0
778; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
779; GFX940-NEXT:    s_waitcnt vmcnt(0)
780; GFX940-NEXT:    s_setpc_b64 s[30:31]
781  %vec0 = call <4 x i32> asm "; def $0", "=v"()
782  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> zeroinitializer
783  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
784  ret void
785}
786
787define void @v_shuffle_v2i32_v4i32__1_0(ptr addrspace(1) inreg %ptr) {
788; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_0:
789; GFX900:       ; %bb.0:
790; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
791; GFX900-NEXT:    ;;#ASMSTART
792; GFX900-NEXT:    ; def v[0:3]
793; GFX900-NEXT:    ;;#ASMEND
794; GFX900-NEXT:    v_mov_b32_e32 v4, 0
795; GFX900-NEXT:    v_mov_b32_e32 v2, v0
796; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
797; GFX900-NEXT:    s_waitcnt vmcnt(0)
798; GFX900-NEXT:    s_setpc_b64 s[30:31]
799;
800; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_0:
801; GFX90A:       ; %bb.0:
802; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
803; GFX90A-NEXT:    ;;#ASMSTART
804; GFX90A-NEXT:    ; def v[0:3]
805; GFX90A-NEXT:    ;;#ASMEND
806; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
807; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]
808; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
809; GFX90A-NEXT:    s_waitcnt vmcnt(0)
810; GFX90A-NEXT:    s_setpc_b64 s[30:31]
811;
812; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_0:
813; GFX940:       ; %bb.0:
814; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
815; GFX940-NEXT:    ;;#ASMSTART
816; GFX940-NEXT:    ; def v[0:3]
817; GFX940-NEXT:    ;;#ASMEND
818; GFX940-NEXT:    v_mov_b32_e32 v4, 0
819; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]
820; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
821; GFX940-NEXT:    s_waitcnt vmcnt(0)
822; GFX940-NEXT:    s_setpc_b64 s[30:31]
823  %vec0 = call <4 x i32> asm "; def $0", "=v"()
824  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 0>
825  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
826  ret void
827}
828
829define void @v_shuffle_v2i32_v4i32__2_0(ptr addrspace(1) inreg %ptr) {
830; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_0:
831; GFX900:       ; %bb.0:
832; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
833; GFX900-NEXT:    ;;#ASMSTART
834; GFX900-NEXT:    ; def v[0:3]
835; GFX900-NEXT:    ;;#ASMEND
836; GFX900-NEXT:    v_mov_b32_e32 v4, 0
837; GFX900-NEXT:    v_mov_b32_e32 v3, v0
838; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
839; GFX900-NEXT:    s_waitcnt vmcnt(0)
840; GFX900-NEXT:    s_setpc_b64 s[30:31]
841;
842; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_0:
843; GFX90A:       ; %bb.0:
844; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
845; GFX90A-NEXT:    ;;#ASMSTART
846; GFX90A-NEXT:    ; def v[0:3]
847; GFX90A-NEXT:    ;;#ASMEND
848; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
849; GFX90A-NEXT:    v_mov_b32_e32 v3, v0
850; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
851; GFX90A-NEXT:    s_waitcnt vmcnt(0)
852; GFX90A-NEXT:    s_setpc_b64 s[30:31]
853;
854; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_0:
855; GFX940:       ; %bb.0:
856; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
857; GFX940-NEXT:    ;;#ASMSTART
858; GFX940-NEXT:    ; def v[0:3]
859; GFX940-NEXT:    ;;#ASMEND
860; GFX940-NEXT:    v_mov_b32_e32 v4, 0
861; GFX940-NEXT:    v_mov_b32_e32 v3, v0
862; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
863; GFX940-NEXT:    s_waitcnt vmcnt(0)
864; GFX940-NEXT:    s_setpc_b64 s[30:31]
865  %vec0 = call <4 x i32> asm "; def $0", "=v"()
866  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 0>
867  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
868  ret void
869}
870
871define void @v_shuffle_v2i32_v4i32__3_0(ptr addrspace(1) inreg %ptr) {
872; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_0:
873; GFX900:       ; %bb.0:
874; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
875; GFX900-NEXT:    ;;#ASMSTART
876; GFX900-NEXT:    ; def v[0:3]
877; GFX900-NEXT:    ;;#ASMEND
878; GFX900-NEXT:    v_mov_b32_e32 v4, 0
879; GFX900-NEXT:    v_mov_b32_e32 v1, v3
880; GFX900-NEXT:    v_mov_b32_e32 v2, v0
881; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
882; GFX900-NEXT:    s_waitcnt vmcnt(0)
883; GFX900-NEXT:    s_setpc_b64 s[30:31]
884;
885; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_0:
886; GFX90A:       ; %bb.0:
887; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
888; GFX90A-NEXT:    ;;#ASMSTART
889; GFX90A-NEXT:    ; def v[0:3]
890; GFX90A-NEXT:    ;;#ASMEND
891; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
892; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
893; GFX90A-NEXT:    v_mov_b32_e32 v3, v0
894; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
895; GFX90A-NEXT:    s_waitcnt vmcnt(0)
896; GFX90A-NEXT:    s_setpc_b64 s[30:31]
897;
898; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_0:
899; GFX940:       ; %bb.0:
900; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
901; GFX940-NEXT:    ;;#ASMSTART
902; GFX940-NEXT:    ; def v[0:3]
903; GFX940-NEXT:    ;;#ASMEND
904; GFX940-NEXT:    v_mov_b32_e32 v4, 0
905; GFX940-NEXT:    v_mov_b32_e32 v2, v3
906; GFX940-NEXT:    v_mov_b32_e32 v3, v0
907; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
908; GFX940-NEXT:    s_waitcnt vmcnt(0)
909; GFX940-NEXT:    s_setpc_b64 s[30:31]
910  %vec0 = call <4 x i32> asm "; def $0", "=v"()
911  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 0>
912  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
913  ret void
914}
915
916define void @v_shuffle_v2i32_v4i32__4_0(ptr addrspace(1) inreg %ptr) {
917; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_0:
918; GFX900:       ; %bb.0:
919; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
920; GFX900-NEXT:    ;;#ASMSTART
921; GFX900-NEXT:    ; def v[0:3]
922; GFX900-NEXT:    ;;#ASMEND
923; GFX900-NEXT:    v_mov_b32_e32 v4, 0
924; GFX900-NEXT:    v_mov_b32_e32 v1, v0
925; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
926; GFX900-NEXT:    s_waitcnt vmcnt(0)
927; GFX900-NEXT:    s_setpc_b64 s[30:31]
928;
929; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_0:
930; GFX90A:       ; %bb.0:
931; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
932; GFX90A-NEXT:    ;;#ASMSTART
933; GFX90A-NEXT:    ; def v[0:3]
934; GFX90A-NEXT:    ;;#ASMEND
935; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
936; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
937; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
938; GFX90A-NEXT:    s_waitcnt vmcnt(0)
939; GFX90A-NEXT:    s_setpc_b64 s[30:31]
940;
941; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_0:
942; GFX940:       ; %bb.0:
943; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
944; GFX940-NEXT:    ;;#ASMSTART
945; GFX940-NEXT:    ; def v[0:3]
946; GFX940-NEXT:    ;;#ASMEND
947; GFX940-NEXT:    v_mov_b32_e32 v4, 0
948; GFX940-NEXT:    v_mov_b32_e32 v1, v0
949; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
950; GFX940-NEXT:    s_waitcnt vmcnt(0)
951; GFX940-NEXT:    s_setpc_b64 s[30:31]
952  %vec0 = call <4 x i32> asm "; def $0", "=v"()
953  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 0>
954  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
955  ret void
956}
957
958define void @v_shuffle_v2i32_v4i32__5_0(ptr addrspace(1) inreg %ptr) {
959; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_0:
960; GFX900:       ; %bb.0:
961; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
962; GFX900-NEXT:    ;;#ASMSTART
963; GFX900-NEXT:    ; def v[0:3]
964; GFX900-NEXT:    ;;#ASMEND
965; GFX900-NEXT:    ;;#ASMSTART
966; GFX900-NEXT:    ; def v[1:4]
967; GFX900-NEXT:    ;;#ASMEND
968; GFX900-NEXT:    v_mov_b32_e32 v5, 0
969; GFX900-NEXT:    v_mov_b32_e32 v3, v0
970; GFX900-NEXT:    global_store_dwordx2 v5, v[2:3], s[16:17]
971; GFX900-NEXT:    s_waitcnt vmcnt(0)
972; GFX900-NEXT:    s_setpc_b64 s[30:31]
973;
974; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_0:
975; GFX90A:       ; %bb.0:
976; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
977; GFX90A-NEXT:    ;;#ASMSTART
978; GFX90A-NEXT:    ; def v[0:3]
979; GFX90A-NEXT:    ;;#ASMEND
980; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
981; GFX90A-NEXT:    ;;#ASMSTART
982; GFX90A-NEXT:    ; def v[2:5]
983; GFX90A-NEXT:    ;;#ASMEND
984; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]
985; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17]
986; GFX90A-NEXT:    s_waitcnt vmcnt(0)
987; GFX90A-NEXT:    s_setpc_b64 s[30:31]
988;
989; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_0:
990; GFX940:       ; %bb.0:
991; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
992; GFX940-NEXT:    ;;#ASMSTART
993; GFX940-NEXT:    ; def v[0:3]
994; GFX940-NEXT:    ;;#ASMEND
995; GFX940-NEXT:    v_mov_b32_e32 v6, 0
996; GFX940-NEXT:    ;;#ASMSTART
997; GFX940-NEXT:    ; def v[2:5]
998; GFX940-NEXT:    ;;#ASMEND
999; GFX940-NEXT:    s_nop 0
1000; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]
1001; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1
1002; GFX940-NEXT:    s_waitcnt vmcnt(0)
1003; GFX940-NEXT:    s_setpc_b64 s[30:31]
1004  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1005  %vec1 = call <4 x i32> asm "; def $0", "=v"()
1006  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 0>
1007  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1008  ret void
1009}
1010
1011define void @v_shuffle_v2i32_v4i32__6_0(ptr addrspace(1) inreg %ptr) {
1012; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_0:
1013; GFX900:       ; %bb.0:
1014; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1015; GFX900-NEXT:    ;;#ASMSTART
1016; GFX900-NEXT:    ; def v[0:3]
1017; GFX900-NEXT:    ;;#ASMEND
1018; GFX900-NEXT:    ;;#ASMSTART
1019; GFX900-NEXT:    ; def v[1:4]
1020; GFX900-NEXT:    ;;#ASMEND
1021; GFX900-NEXT:    v_mov_b32_e32 v5, 0
1022; GFX900-NEXT:    v_mov_b32_e32 v4, v0
1023; GFX900-NEXT:    global_store_dwordx2 v5, v[3:4], s[16:17]
1024; GFX900-NEXT:    s_waitcnt vmcnt(0)
1025; GFX900-NEXT:    s_setpc_b64 s[30:31]
1026;
1027; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_0:
1028; GFX90A:       ; %bb.0:
1029; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1030; GFX90A-NEXT:    ;;#ASMSTART
1031; GFX90A-NEXT:    ; def v[0:3]
1032; GFX90A-NEXT:    ;;#ASMEND
1033; GFX90A-NEXT:    ;;#ASMSTART
1034; GFX90A-NEXT:    ; def v[2:5]
1035; GFX90A-NEXT:    ;;#ASMEND
1036; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
1037; GFX90A-NEXT:    v_mov_b32_e32 v5, v0
1038; GFX90A-NEXT:    global_store_dwordx2 v6, v[4:5], s[16:17]
1039; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1040; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1041;
1042; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_0:
1043; GFX940:       ; %bb.0:
1044; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1045; GFX940-NEXT:    ;;#ASMSTART
1046; GFX940-NEXT:    ; def v[0:3]
1047; GFX940-NEXT:    ;;#ASMEND
1048; GFX940-NEXT:    v_mov_b32_e32 v6, 0
1049; GFX940-NEXT:    ;;#ASMSTART
1050; GFX940-NEXT:    ; def v[2:5]
1051; GFX940-NEXT:    ;;#ASMEND
1052; GFX940-NEXT:    s_nop 0
1053; GFX940-NEXT:    v_mov_b32_e32 v5, v0
1054; GFX940-NEXT:    global_store_dwordx2 v6, v[4:5], s[0:1] sc0 sc1
1055; GFX940-NEXT:    s_waitcnt vmcnt(0)
1056; GFX940-NEXT:    s_setpc_b64 s[30:31]
1057  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1058  %vec1 = call <4 x i32> asm "; def $0", "=v"()
1059  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 0>
1060  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1061  ret void
1062}
1063
1064define void @v_shuffle_v2i32_v4i32__u_1(ptr addrspace(1) inreg %ptr) {
1065; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_1:
1066; GFX900:       ; %bb.0:
1067; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1068; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1069; GFX900-NEXT:    ;;#ASMSTART
1070; GFX900-NEXT:    ; def v[0:3]
1071; GFX900-NEXT:    ;;#ASMEND
1072; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1073; GFX900-NEXT:    s_waitcnt vmcnt(0)
1074; GFX900-NEXT:    s_setpc_b64 s[30:31]
1075;
1076; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_1:
1077; GFX90A:       ; %bb.0:
1078; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1079; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1080; GFX90A-NEXT:    ;;#ASMSTART
1081; GFX90A-NEXT:    ; def v[0:3]
1082; GFX90A-NEXT:    ;;#ASMEND
1083; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1084; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1085; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1086;
1087; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_1:
1088; GFX940:       ; %bb.0:
1089; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1090; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1091; GFX940-NEXT:    ;;#ASMSTART
1092; GFX940-NEXT:    ; def v[0:3]
1093; GFX940-NEXT:    ;;#ASMEND
1094; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
1095; GFX940-NEXT:    s_waitcnt vmcnt(0)
1096; GFX940-NEXT:    s_setpc_b64 s[30:31]
1097  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1098  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 1>
1099  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1100  ret void
1101}
1102
1103define void @v_shuffle_v2i32_v4i32__0_1(ptr addrspace(1) inreg %ptr) {
1104; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_1:
1105; GFX900:       ; %bb.0:
1106; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1107; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1108; GFX900-NEXT:    ;;#ASMSTART
1109; GFX900-NEXT:    ; def v[0:3]
1110; GFX900-NEXT:    ;;#ASMEND
1111; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1112; GFX900-NEXT:    s_waitcnt vmcnt(0)
1113; GFX900-NEXT:    s_setpc_b64 s[30:31]
1114;
1115; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_1:
1116; GFX90A:       ; %bb.0:
1117; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1118; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1119; GFX90A-NEXT:    ;;#ASMSTART
1120; GFX90A-NEXT:    ; def v[0:3]
1121; GFX90A-NEXT:    ;;#ASMEND
1122; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1123; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1124; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1125;
1126; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_1:
1127; GFX940:       ; %bb.0:
1128; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1129; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1130; GFX940-NEXT:    ;;#ASMSTART
1131; GFX940-NEXT:    ; def v[0:3]
1132; GFX940-NEXT:    ;;#ASMEND
1133; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
1134; GFX940-NEXT:    s_waitcnt vmcnt(0)
1135; GFX940-NEXT:    s_setpc_b64 s[30:31]
1136  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1137  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
1138  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1139  ret void
1140}
1141
1142define void @v_shuffle_v2i32_v4i32__1_1(ptr addrspace(1) inreg %ptr) {
1143; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_1:
1144; GFX900:       ; %bb.0:
1145; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1146; GFX900-NEXT:    ;;#ASMSTART
1147; GFX900-NEXT:    ; def v[0:3]
1148; GFX900-NEXT:    ;;#ASMEND
1149; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1150; GFX900-NEXT:    v_mov_b32_e32 v2, v1
1151; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
1152; GFX900-NEXT:    s_waitcnt vmcnt(0)
1153; GFX900-NEXT:    s_setpc_b64 s[30:31]
1154;
1155; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_1:
1156; GFX90A:       ; %bb.0:
1157; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1158; GFX90A-NEXT:    ;;#ASMSTART
1159; GFX90A-NEXT:    ; def v[0:3]
1160; GFX90A-NEXT:    ;;#ASMEND
1161; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1162; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1163; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1164; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1165; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1166;
1167; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_1:
1168; GFX940:       ; %bb.0:
1169; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1170; GFX940-NEXT:    ;;#ASMSTART
1171; GFX940-NEXT:    ; def v[0:3]
1172; GFX940-NEXT:    ;;#ASMEND
1173; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1174; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1175; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
1176; GFX940-NEXT:    s_waitcnt vmcnt(0)
1177; GFX940-NEXT:    s_setpc_b64 s[30:31]
1178  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1179  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 1>
1180  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1181  ret void
1182}
1183
1184define void @v_shuffle_v2i32_v4i32__2_1(ptr addrspace(1) inreg %ptr) {
1185; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_1:
1186; GFX900:       ; %bb.0:
1187; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1188; GFX900-NEXT:    ;;#ASMSTART
1189; GFX900-NEXT:    ; def v[0:3]
1190; GFX900-NEXT:    ;;#ASMEND
1191; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1192; GFX900-NEXT:    v_mov_b32_e32 v3, v1
1193; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1194; GFX900-NEXT:    s_waitcnt vmcnt(0)
1195; GFX900-NEXT:    s_setpc_b64 s[30:31]
1196;
1197; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_1:
1198; GFX90A:       ; %bb.0:
1199; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1200; GFX90A-NEXT:    ;;#ASMSTART
1201; GFX90A-NEXT:    ; def v[0:3]
1202; GFX90A-NEXT:    ;;#ASMEND
1203; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1204; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
1205; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1206; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1207; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1208;
1209; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_1:
1210; GFX940:       ; %bb.0:
1211; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1212; GFX940-NEXT:    ;;#ASMSTART
1213; GFX940-NEXT:    ; def v[0:3]
1214; GFX940-NEXT:    ;;#ASMEND
1215; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1216; GFX940-NEXT:    v_mov_b32_e32 v3, v1
1217; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
1218; GFX940-NEXT:    s_waitcnt vmcnt(0)
1219; GFX940-NEXT:    s_setpc_b64 s[30:31]
1220  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1221  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 1>
1222  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1223  ret void
1224}
1225
1226define void @v_shuffle_v2i32_v4i32__3_1(ptr addrspace(1) inreg %ptr) {
1227; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_1:
1228; GFX900:       ; %bb.0:
1229; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1230; GFX900-NEXT:    ;;#ASMSTART
1231; GFX900-NEXT:    ; def v[0:3]
1232; GFX900-NEXT:    ;;#ASMEND
1233; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1234; GFX900-NEXT:    v_mov_b32_e32 v0, v3
1235; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1236; GFX900-NEXT:    s_waitcnt vmcnt(0)
1237; GFX900-NEXT:    s_setpc_b64 s[30:31]
1238;
1239; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_1:
1240; GFX90A:       ; %bb.0:
1241; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1242; GFX90A-NEXT:    ;;#ASMSTART
1243; GFX90A-NEXT:    ; def v[0:3]
1244; GFX90A-NEXT:    ;;#ASMEND
1245; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1246; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
1247; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1248; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1249; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1250;
1251; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_1:
1252; GFX940:       ; %bb.0:
1253; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1254; GFX940-NEXT:    ;;#ASMSTART
1255; GFX940-NEXT:    ; def v[0:3]
1256; GFX940-NEXT:    ;;#ASMEND
1257; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1258; GFX940-NEXT:    v_mov_b32_e32 v0, v3
1259; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
1260; GFX940-NEXT:    s_waitcnt vmcnt(0)
1261; GFX940-NEXT:    s_setpc_b64 s[30:31]
1262  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1263  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 1>
1264  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1265  ret void
1266}
1267
1268define void @v_shuffle_v2i32_v4i32__4_1(ptr addrspace(1) inreg %ptr) {
1269; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_1:
1270; GFX900:       ; %bb.0:
1271; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1272; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1273; GFX900-NEXT:    ;;#ASMSTART
1274; GFX900-NEXT:    ; def v[0:3]
1275; GFX900-NEXT:    ;;#ASMEND
1276; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1277; GFX900-NEXT:    s_waitcnt vmcnt(0)
1278; GFX900-NEXT:    s_setpc_b64 s[30:31]
1279;
1280; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_1:
1281; GFX90A:       ; %bb.0:
1282; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1283; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1284; GFX90A-NEXT:    ;;#ASMSTART
1285; GFX90A-NEXT:    ; def v[0:3]
1286; GFX90A-NEXT:    ;;#ASMEND
1287; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1288; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1289; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1290;
1291; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_1:
1292; GFX940:       ; %bb.0:
1293; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1294; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1295; GFX940-NEXT:    ;;#ASMSTART
1296; GFX940-NEXT:    ; def v[0:3]
1297; GFX940-NEXT:    ;;#ASMEND
1298; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
1299; GFX940-NEXT:    s_waitcnt vmcnt(0)
1300; GFX940-NEXT:    s_setpc_b64 s[30:31]
1301  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1302  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 1>
1303  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1304  ret void
1305}
1306
1307define void @v_shuffle_v2i32_v4i32__5_1(ptr addrspace(1) inreg %ptr) {
1308; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_1:
1309; GFX900:       ; %bb.0:
1310; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1311; GFX900-NEXT:    ;;#ASMSTART
1312; GFX900-NEXT:    ; def v[0:3]
1313; GFX900-NEXT:    ;;#ASMEND
1314; GFX900-NEXT:    ;;#ASMSTART
1315; GFX900-NEXT:    ; def v[2:5]
1316; GFX900-NEXT:    ;;#ASMEND
1317; GFX900-NEXT:    v_mov_b32_e32 v6, 0
1318; GFX900-NEXT:    v_mov_b32_e32 v4, v1
1319; GFX900-NEXT:    global_store_dwordx2 v6, v[3:4], s[16:17]
1320; GFX900-NEXT:    s_waitcnt vmcnt(0)
1321; GFX900-NEXT:    s_setpc_b64 s[30:31]
1322;
1323; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_1:
1324; GFX90A:       ; %bb.0:
1325; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1326; GFX90A-NEXT:    ;;#ASMSTART
1327; GFX90A-NEXT:    ; def v[0:3]
1328; GFX90A-NEXT:    ;;#ASMEND
1329; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
1330; GFX90A-NEXT:    ;;#ASMSTART
1331; GFX90A-NEXT:    ; def v[2:5]
1332; GFX90A-NEXT:    ;;#ASMEND
1333; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
1334; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17]
1335; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1336; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1337;
1338; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_1:
1339; GFX940:       ; %bb.0:
1340; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1341; GFX940-NEXT:    ;;#ASMSTART
1342; GFX940-NEXT:    ; def v[0:3]
1343; GFX940-NEXT:    ;;#ASMEND
1344; GFX940-NEXT:    v_mov_b32_e32 v6, 0
1345; GFX940-NEXT:    ;;#ASMSTART
1346; GFX940-NEXT:    ; def v[2:5]
1347; GFX940-NEXT:    ;;#ASMEND
1348; GFX940-NEXT:    s_nop 0
1349; GFX940-NEXT:    v_mov_b32_e32 v0, v3
1350; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1
1351; GFX940-NEXT:    s_waitcnt vmcnt(0)
1352; GFX940-NEXT:    s_setpc_b64 s[30:31]
1353  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1354  %vec1 = call <4 x i32> asm "; def $0", "=v"()
1355  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 1>
1356  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1357  ret void
1358}
1359
1360define void @v_shuffle_v2i32_v4i32__6_1(ptr addrspace(1) inreg %ptr) {
1361; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_1:
1362; GFX900:       ; %bb.0:
1363; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1364; GFX900-NEXT:    ;;#ASMSTART
1365; GFX900-NEXT:    ; def v[0:3]
1366; GFX900-NEXT:    ;;#ASMEND
1367; GFX900-NEXT:    ;;#ASMSTART
1368; GFX900-NEXT:    ; def v[2:5]
1369; GFX900-NEXT:    ;;#ASMEND
1370; GFX900-NEXT:    v_mov_b32_e32 v6, 0
1371; GFX900-NEXT:    v_mov_b32_e32 v5, v1
1372; GFX900-NEXT:    global_store_dwordx2 v6, v[4:5], s[16:17]
1373; GFX900-NEXT:    s_waitcnt vmcnt(0)
1374; GFX900-NEXT:    s_setpc_b64 s[30:31]
1375;
1376; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_1:
1377; GFX90A:       ; %bb.0:
1378; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1379; GFX90A-NEXT:    ;;#ASMSTART
1380; GFX90A-NEXT:    ; def v[0:3]
1381; GFX90A-NEXT:    ;;#ASMEND
1382; GFX90A-NEXT:    ;;#ASMSTART
1383; GFX90A-NEXT:    ; def v[2:5]
1384; GFX90A-NEXT:    ;;#ASMEND
1385; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
1386; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
1387; GFX90A-NEXT:    global_store_dwordx2 v6, v[4:5], s[16:17]
1388; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1389; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1390;
1391; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_1:
1392; GFX940:       ; %bb.0:
1393; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1394; GFX940-NEXT:    ;;#ASMSTART
1395; GFX940-NEXT:    ; def v[0:3]
1396; GFX940-NEXT:    ;;#ASMEND
1397; GFX940-NEXT:    v_mov_b32_e32 v6, 0
1398; GFX940-NEXT:    ;;#ASMSTART
1399; GFX940-NEXT:    ; def v[2:5]
1400; GFX940-NEXT:    ;;#ASMEND
1401; GFX940-NEXT:    s_nop 0
1402; GFX940-NEXT:    v_mov_b32_e32 v5, v1
1403; GFX940-NEXT:    global_store_dwordx2 v6, v[4:5], s[0:1] sc0 sc1
1404; GFX940-NEXT:    s_waitcnt vmcnt(0)
1405; GFX940-NEXT:    s_setpc_b64 s[30:31]
1406  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1407  %vec1 = call <4 x i32> asm "; def $0", "=v"()
1408  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 1>
1409  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1410  ret void
1411}
1412
1413define void @v_shuffle_v2i32_v4i32__u_2(ptr addrspace(1) inreg %ptr) {
1414; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_2:
1415; GFX900:       ; %bb.0:
1416; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1417; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1418; GFX900-NEXT:    ;;#ASMSTART
1419; GFX900-NEXT:    ; def v[0:3]
1420; GFX900-NEXT:    ;;#ASMEND
1421; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
1422; GFX900-NEXT:    s_waitcnt vmcnt(0)
1423; GFX900-NEXT:    s_setpc_b64 s[30:31]
1424;
1425; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_2:
1426; GFX90A:       ; %bb.0:
1427; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1428; GFX90A-NEXT:    ;;#ASMSTART
1429; GFX90A-NEXT:    ; def v[0:3]
1430; GFX90A-NEXT:    ;;#ASMEND
1431; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1432; GFX90A-NEXT:    v_mov_b32_e32 v1, v2
1433; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1434; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1435; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1436;
1437; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_2:
1438; GFX940:       ; %bb.0:
1439; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1440; GFX940-NEXT:    ;;#ASMSTART
1441; GFX940-NEXT:    ; def v[0:3]
1442; GFX940-NEXT:    ;;#ASMEND
1443; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1444; GFX940-NEXT:    v_mov_b32_e32 v1, v2
1445; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
1446; GFX940-NEXT:    s_waitcnt vmcnt(0)
1447; GFX940-NEXT:    s_setpc_b64 s[30:31]
1448  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1449  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 2>
1450  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1451  ret void
1452}
1453
1454define void @v_shuffle_v2i32_v4i32__0_2(ptr addrspace(1) inreg %ptr) {
1455; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_2:
1456; GFX900:       ; %bb.0:
1457; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1458; GFX900-NEXT:    ;;#ASMSTART
1459; GFX900-NEXT:    ; def v[0:3]
1460; GFX900-NEXT:    ;;#ASMEND
1461; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1462; GFX900-NEXT:    v_mov_b32_e32 v1, v2
1463; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1464; GFX900-NEXT:    s_waitcnt vmcnt(0)
1465; GFX900-NEXT:    s_setpc_b64 s[30:31]
1466;
1467; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_2:
1468; GFX90A:       ; %bb.0:
1469; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1470; GFX90A-NEXT:    ;;#ASMSTART
1471; GFX90A-NEXT:    ; def v[0:3]
1472; GFX90A-NEXT:    ;;#ASMEND
1473; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1474; GFX90A-NEXT:    v_mov_b32_e32 v1, v2
1475; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1476; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1477; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1478;
1479; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_2:
1480; GFX940:       ; %bb.0:
1481; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1482; GFX940-NEXT:    ;;#ASMSTART
1483; GFX940-NEXT:    ; def v[0:3]
1484; GFX940-NEXT:    ;;#ASMEND
1485; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1486; GFX940-NEXT:    v_mov_b32_e32 v1, v2
1487; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
1488; GFX940-NEXT:    s_waitcnt vmcnt(0)
1489; GFX940-NEXT:    s_setpc_b64 s[30:31]
1490  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1491  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 2>
1492  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1493  ret void
1494}
1495
1496define void @v_shuffle_v2i32_v4i32__1_2(ptr addrspace(1) inreg %ptr) {
1497; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_2:
1498; GFX900:       ; %bb.0:
1499; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1500; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1501; GFX900-NEXT:    ;;#ASMSTART
1502; GFX900-NEXT:    ; def v[0:3]
1503; GFX900-NEXT:    ;;#ASMEND
1504; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
1505; GFX900-NEXT:    s_waitcnt vmcnt(0)
1506; GFX900-NEXT:    s_setpc_b64 s[30:31]
1507;
1508; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_2:
1509; GFX90A:       ; %bb.0:
1510; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1511; GFX90A-NEXT:    ;;#ASMSTART
1512; GFX90A-NEXT:    ; def v[0:3]
1513; GFX90A-NEXT:    ;;#ASMEND
1514; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1515; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1516; GFX90A-NEXT:    v_mov_b32_e32 v1, v2
1517; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1518; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1519; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1520;
1521; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_2:
1522; GFX940:       ; %bb.0:
1523; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1524; GFX940-NEXT:    ;;#ASMSTART
1525; GFX940-NEXT:    ; def v[0:3]
1526; GFX940-NEXT:    ;;#ASMEND
1527; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1528; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1529; GFX940-NEXT:    v_mov_b32_e32 v1, v2
1530; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
1531; GFX940-NEXT:    s_waitcnt vmcnt(0)
1532; GFX940-NEXT:    s_setpc_b64 s[30:31]
1533  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1534  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 2>
1535  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1536  ret void
1537}
1538
1539define void @v_shuffle_v2i32_v4i32__2_2(ptr addrspace(1) inreg %ptr) {
1540; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_2:
1541; GFX900:       ; %bb.0:
1542; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1543; GFX900-NEXT:    ;;#ASMSTART
1544; GFX900-NEXT:    ; def v[0:3]
1545; GFX900-NEXT:    ;;#ASMEND
1546; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1547; GFX900-NEXT:    v_mov_b32_e32 v3, v2
1548; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1549; GFX900-NEXT:    s_waitcnt vmcnt(0)
1550; GFX900-NEXT:    s_setpc_b64 s[30:31]
1551;
1552; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_2:
1553; GFX90A:       ; %bb.0:
1554; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1555; GFX90A-NEXT:    ;;#ASMSTART
1556; GFX90A-NEXT:    ; def v[0:3]
1557; GFX90A-NEXT:    ;;#ASMEND
1558; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1559; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
1560; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1561; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1562; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1563;
1564; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_2:
1565; GFX940:       ; %bb.0:
1566; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1567; GFX940-NEXT:    ;;#ASMSTART
1568; GFX940-NEXT:    ; def v[0:3]
1569; GFX940-NEXT:    ;;#ASMEND
1570; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1571; GFX940-NEXT:    v_mov_b32_e32 v3, v2
1572; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
1573; GFX940-NEXT:    s_waitcnt vmcnt(0)
1574; GFX940-NEXT:    s_setpc_b64 s[30:31]
1575  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1576  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 2>
1577  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1578  ret void
1579}
1580
1581define void @v_shuffle_v2i32_v4i32__3_2(ptr addrspace(1) inreg %ptr) {
1582; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_2:
1583; GFX900:       ; %bb.0:
1584; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1585; GFX900-NEXT:    ;;#ASMSTART
1586; GFX900-NEXT:    ; def v[0:3]
1587; GFX900-NEXT:    ;;#ASMEND
1588; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1589; GFX900-NEXT:    v_mov_b32_e32 v1, v3
1590; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
1591; GFX900-NEXT:    s_waitcnt vmcnt(0)
1592; GFX900-NEXT:    s_setpc_b64 s[30:31]
1593;
1594; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_2:
1595; GFX90A:       ; %bb.0:
1596; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1597; GFX90A-NEXT:    ;;#ASMSTART
1598; GFX90A-NEXT:    ; def v[0:3]
1599; GFX90A-NEXT:    ;;#ASMEND
1600; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1601; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]
1602; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1603; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1604; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1605;
1606; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_2:
1607; GFX940:       ; %bb.0:
1608; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1609; GFX940-NEXT:    ;;#ASMSTART
1610; GFX940-NEXT:    ; def v[0:3]
1611; GFX940-NEXT:    ;;#ASMEND
1612; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1613; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]
1614; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
1615; GFX940-NEXT:    s_waitcnt vmcnt(0)
1616; GFX940-NEXT:    s_setpc_b64 s[30:31]
1617  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1618  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 2>
1619  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1620  ret void
1621}
1622
1623define void @v_shuffle_v2i32_v4i32__4_2(ptr addrspace(1) inreg %ptr) {
1624; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_2:
1625; GFX900:       ; %bb.0:
1626; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1627; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1628; GFX900-NEXT:    ;;#ASMSTART
1629; GFX900-NEXT:    ; def v[0:3]
1630; GFX900-NEXT:    ;;#ASMEND
1631; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
1632; GFX900-NEXT:    s_waitcnt vmcnt(0)
1633; GFX900-NEXT:    s_setpc_b64 s[30:31]
1634;
1635; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_2:
1636; GFX90A:       ; %bb.0:
1637; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1638; GFX90A-NEXT:    ;;#ASMSTART
1639; GFX90A-NEXT:    ; def v[0:3]
1640; GFX90A-NEXT:    ;;#ASMEND
1641; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1642; GFX90A-NEXT:    v_mov_b32_e32 v1, v2
1643; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1644; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1645; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1646;
1647; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_2:
1648; GFX940:       ; %bb.0:
1649; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1650; GFX940-NEXT:    ;;#ASMSTART
1651; GFX940-NEXT:    ; def v[0:3]
1652; GFX940-NEXT:    ;;#ASMEND
1653; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1654; GFX940-NEXT:    v_mov_b32_e32 v1, v2
1655; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
1656; GFX940-NEXT:    s_waitcnt vmcnt(0)
1657; GFX940-NEXT:    s_setpc_b64 s[30:31]
1658  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1659  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 2>
1660  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1661  ret void
1662}
1663
1664define void @v_shuffle_v2i32_v4i32__5_2(ptr addrspace(1) inreg %ptr) {
1665; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_2:
1666; GFX900:       ; %bb.0:
1667; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1668; GFX900-NEXT:    ;;#ASMSTART
1669; GFX900-NEXT:    ; def v[0:3]
1670; GFX900-NEXT:    ;;#ASMEND
1671; GFX900-NEXT:    ;;#ASMSTART
1672; GFX900-NEXT:    ; def v[3:6]
1673; GFX900-NEXT:    ;;#ASMEND
1674; GFX900-NEXT:    v_mov_b32_e32 v7, 0
1675; GFX900-NEXT:    v_mov_b32_e32 v5, v2
1676; GFX900-NEXT:    global_store_dwordx2 v7, v[4:5], s[16:17]
1677; GFX900-NEXT:    s_waitcnt vmcnt(0)
1678; GFX900-NEXT:    s_setpc_b64 s[30:31]
1679;
1680; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_2:
1681; GFX90A:       ; %bb.0:
1682; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1683; GFX90A-NEXT:    ;;#ASMSTART
1684; GFX90A-NEXT:    ; def v[0:3]
1685; GFX90A-NEXT:    ;;#ASMEND
1686; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
1687; GFX90A-NEXT:    ;;#ASMSTART
1688; GFX90A-NEXT:    ; def v[4:7]
1689; GFX90A-NEXT:    ;;#ASMEND
1690; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[4:5], v[2:3] op_sel:[1,0]
1691; GFX90A-NEXT:    global_store_dwordx2 v8, v[0:1], s[16:17]
1692; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1693; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1694;
1695; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_2:
1696; GFX940:       ; %bb.0:
1697; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1698; GFX940-NEXT:    ;;#ASMSTART
1699; GFX940-NEXT:    ; def v[0:3]
1700; GFX940-NEXT:    ;;#ASMEND
1701; GFX940-NEXT:    v_mov_b32_e32 v8, 0
1702; GFX940-NEXT:    ;;#ASMSTART
1703; GFX940-NEXT:    ; def v[4:7]
1704; GFX940-NEXT:    ;;#ASMEND
1705; GFX940-NEXT:    s_nop 0
1706; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[4:5], v[2:3] op_sel:[1,0]
1707; GFX940-NEXT:    global_store_dwordx2 v8, v[0:1], s[0:1] sc0 sc1
1708; GFX940-NEXT:    s_waitcnt vmcnt(0)
1709; GFX940-NEXT:    s_setpc_b64 s[30:31]
1710  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1711  %vec1 = call <4 x i32> asm "; def $0", "=v"()
1712  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 2>
1713  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1714  ret void
1715}
1716
1717define void @v_shuffle_v2i32_v4i32__6_2(ptr addrspace(1) inreg %ptr) {
1718; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_2:
1719; GFX900:       ; %bb.0:
1720; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1721; GFX900-NEXT:    ;;#ASMSTART
1722; GFX900-NEXT:    ; def v[0:3]
1723; GFX900-NEXT:    ;;#ASMEND
1724; GFX900-NEXT:    ;;#ASMSTART
1725; GFX900-NEXT:    ; def v[3:6]
1726; GFX900-NEXT:    ;;#ASMEND
1727; GFX900-NEXT:    v_mov_b32_e32 v7, 0
1728; GFX900-NEXT:    v_mov_b32_e32 v6, v2
1729; GFX900-NEXT:    global_store_dwordx2 v7, v[5:6], s[16:17]
1730; GFX900-NEXT:    s_waitcnt vmcnt(0)
1731; GFX900-NEXT:    s_setpc_b64 s[30:31]
1732;
1733; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_2:
1734; GFX90A:       ; %bb.0:
1735; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1736; GFX90A-NEXT:    ;;#ASMSTART
1737; GFX90A-NEXT:    ; def v[4:7]
1738; GFX90A-NEXT:    ;;#ASMEND
1739; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
1740; GFX90A-NEXT:    ;;#ASMSTART
1741; GFX90A-NEXT:    ; def v[0:3]
1742; GFX90A-NEXT:    ;;#ASMEND
1743; GFX90A-NEXT:    v_mov_b32_e32 v7, v2
1744; GFX90A-NEXT:    global_store_dwordx2 v8, v[6:7], s[16:17]
1745; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1746; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1747;
1748; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_2:
1749; GFX940:       ; %bb.0:
1750; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1751; GFX940-NEXT:    ;;#ASMSTART
1752; GFX940-NEXT:    ; def v[4:7]
1753; GFX940-NEXT:    ;;#ASMEND
1754; GFX940-NEXT:    v_mov_b32_e32 v8, 0
1755; GFX940-NEXT:    ;;#ASMSTART
1756; GFX940-NEXT:    ; def v[0:3]
1757; GFX940-NEXT:    ;;#ASMEND
1758; GFX940-NEXT:    s_nop 0
1759; GFX940-NEXT:    v_mov_b32_e32 v7, v2
1760; GFX940-NEXT:    global_store_dwordx2 v8, v[6:7], s[0:1] sc0 sc1
1761; GFX940-NEXT:    s_waitcnt vmcnt(0)
1762; GFX940-NEXT:    s_setpc_b64 s[30:31]
1763  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1764  %vec1 = call <4 x i32> asm "; def $0", "=v"()
1765  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 2>
1766  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1767  ret void
1768}
1769
1770define void @v_shuffle_v2i32_v4i32__u_3(ptr addrspace(1) inreg %ptr) {
1771; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_3:
1772; GFX900:       ; %bb.0:
1773; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1774; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1775; GFX900-NEXT:    ;;#ASMSTART
1776; GFX900-NEXT:    ; def v[0:3]
1777; GFX900-NEXT:    ;;#ASMEND
1778; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1779; GFX900-NEXT:    s_waitcnt vmcnt(0)
1780; GFX900-NEXT:    s_setpc_b64 s[30:31]
1781;
1782; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_3:
1783; GFX90A:       ; %bb.0:
1784; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1785; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1786; GFX90A-NEXT:    ;;#ASMSTART
1787; GFX90A-NEXT:    ; def v[0:3]
1788; GFX90A-NEXT:    ;;#ASMEND
1789; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1790; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1791; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1792;
1793; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_3:
1794; GFX940:       ; %bb.0:
1795; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1796; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1797; GFX940-NEXT:    ;;#ASMSTART
1798; GFX940-NEXT:    ; def v[0:3]
1799; GFX940-NEXT:    ;;#ASMEND
1800; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
1801; GFX940-NEXT:    s_waitcnt vmcnt(0)
1802; GFX940-NEXT:    s_setpc_b64 s[30:31]
1803  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1804  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 3>
1805  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1806  ret void
1807}
1808
1809define void @v_shuffle_v2i32_v4i32__0_3(ptr addrspace(1) inreg %ptr) {
1810; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_3:
1811; GFX900:       ; %bb.0:
1812; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1813; GFX900-NEXT:    ;;#ASMSTART
1814; GFX900-NEXT:    ; def v[0:3]
1815; GFX900-NEXT:    ;;#ASMEND
1816; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1817; GFX900-NEXT:    v_mov_b32_e32 v1, v3
1818; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1819; GFX900-NEXT:    s_waitcnt vmcnt(0)
1820; GFX900-NEXT:    s_setpc_b64 s[30:31]
1821;
1822; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_3:
1823; GFX90A:       ; %bb.0:
1824; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1825; GFX90A-NEXT:    ;;#ASMSTART
1826; GFX90A-NEXT:    ; def v[0:3]
1827; GFX90A-NEXT:    ;;#ASMEND
1828; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1829; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
1830; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
1831; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1832; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1833;
1834; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_3:
1835; GFX940:       ; %bb.0:
1836; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1837; GFX940-NEXT:    ;;#ASMSTART
1838; GFX940-NEXT:    ; def v[0:3]
1839; GFX940-NEXT:    ;;#ASMEND
1840; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1841; GFX940-NEXT:    v_mov_b32_e32 v1, v3
1842; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
1843; GFX940-NEXT:    s_waitcnt vmcnt(0)
1844; GFX940-NEXT:    s_setpc_b64 s[30:31]
1845  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1846  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 3>
1847  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1848  ret void
1849}
1850
1851define void @v_shuffle_v2i32_v4i32__1_3(ptr addrspace(1) inreg %ptr) {
1852; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_3:
1853; GFX900:       ; %bb.0:
1854; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1855; GFX900-NEXT:    ;;#ASMSTART
1856; GFX900-NEXT:    ; def v[0:3]
1857; GFX900-NEXT:    ;;#ASMEND
1858; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1859; GFX900-NEXT:    v_mov_b32_e32 v2, v3
1860; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
1861; GFX900-NEXT:    s_waitcnt vmcnt(0)
1862; GFX900-NEXT:    s_setpc_b64 s[30:31]
1863;
1864; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_3:
1865; GFX90A:       ; %bb.0:
1866; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1867; GFX90A-NEXT:    ;;#ASMSTART
1868; GFX90A-NEXT:    ; def v[0:3]
1869; GFX90A-NEXT:    ;;#ASMEND
1870; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1871; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
1872; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1873; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1874; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1875;
1876; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_3:
1877; GFX940:       ; %bb.0:
1878; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1879; GFX940-NEXT:    ;;#ASMSTART
1880; GFX940-NEXT:    ; def v[0:3]
1881; GFX940-NEXT:    ;;#ASMEND
1882; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1883; GFX940-NEXT:    v_mov_b32_e32 v2, v1
1884; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
1885; GFX940-NEXT:    s_waitcnt vmcnt(0)
1886; GFX940-NEXT:    s_setpc_b64 s[30:31]
1887  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1888  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 3>
1889  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1890  ret void
1891}
1892
1893define void @v_shuffle_v2i32_v4i32__2_3(ptr addrspace(1) inreg %ptr) {
1894; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_3:
1895; GFX900:       ; %bb.0:
1896; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1897; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1898; GFX900-NEXT:    ;;#ASMSTART
1899; GFX900-NEXT:    ; def v[0:3]
1900; GFX900-NEXT:    ;;#ASMEND
1901; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1902; GFX900-NEXT:    s_waitcnt vmcnt(0)
1903; GFX900-NEXT:    s_setpc_b64 s[30:31]
1904;
1905; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_3:
1906; GFX90A:       ; %bb.0:
1907; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1908; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1909; GFX90A-NEXT:    ;;#ASMSTART
1910; GFX90A-NEXT:    ; def v[0:3]
1911; GFX90A-NEXT:    ;;#ASMEND
1912; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1913; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1914; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1915;
1916; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_3:
1917; GFX940:       ; %bb.0:
1918; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1919; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1920; GFX940-NEXT:    ;;#ASMSTART
1921; GFX940-NEXT:    ; def v[0:3]
1922; GFX940-NEXT:    ;;#ASMEND
1923; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
1924; GFX940-NEXT:    s_waitcnt vmcnt(0)
1925; GFX940-NEXT:    s_setpc_b64 s[30:31]
1926  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1927  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 3>
1928  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1929  ret void
1930}
1931
1932define void @v_shuffle_v2i32_v4i32__3_3(ptr addrspace(1) inreg %ptr) {
1933; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_3:
1934; GFX900:       ; %bb.0:
1935; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1936; GFX900-NEXT:    ;;#ASMSTART
1937; GFX900-NEXT:    ; def v[0:3]
1938; GFX900-NEXT:    ;;#ASMEND
1939; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1940; GFX900-NEXT:    v_mov_b32_e32 v2, v3
1941; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1942; GFX900-NEXT:    s_waitcnt vmcnt(0)
1943; GFX900-NEXT:    s_setpc_b64 s[30:31]
1944;
1945; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_3:
1946; GFX90A:       ; %bb.0:
1947; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1948; GFX90A-NEXT:    ;;#ASMSTART
1949; GFX90A-NEXT:    ; def v[0:3]
1950; GFX90A-NEXT:    ;;#ASMEND
1951; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1952; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
1953; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1954; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1955; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1956;
1957; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_3:
1958; GFX940:       ; %bb.0:
1959; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1960; GFX940-NEXT:    ;;#ASMSTART
1961; GFX940-NEXT:    ; def v[0:3]
1962; GFX940-NEXT:    ;;#ASMEND
1963; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1964; GFX940-NEXT:    v_mov_b32_e32 v2, v3
1965; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
1966; GFX940-NEXT:    s_waitcnt vmcnt(0)
1967; GFX940-NEXT:    s_setpc_b64 s[30:31]
1968  %vec0 = call <4 x i32> asm "; def $0", "=v"()
1969  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 3>
1970  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
1971  ret void
1972}
1973
1974define void @v_shuffle_v2i32_v4i32__4_3(ptr addrspace(1) inreg %ptr) {
1975; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_3:
1976; GFX900:       ; %bb.0:
1977; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1978; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1979; GFX900-NEXT:    ;;#ASMSTART
1980; GFX900-NEXT:    ; def v[0:3]
1981; GFX900-NEXT:    ;;#ASMEND
1982; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1983; GFX900-NEXT:    s_waitcnt vmcnt(0)
1984; GFX900-NEXT:    s_setpc_b64 s[30:31]
1985;
1986; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_3:
1987; GFX90A:       ; %bb.0:
1988; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1989; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1990; GFX90A-NEXT:    ;;#ASMSTART
1991; GFX90A-NEXT:    ; def v[0:3]
1992; GFX90A-NEXT:    ;;#ASMEND
1993; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
1994; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1995; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1996;
1997; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_3:
1998; GFX940:       ; %bb.0:
1999; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2000; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2001; GFX940-NEXT:    ;;#ASMSTART
2002; GFX940-NEXT:    ; def v[0:3]
2003; GFX940-NEXT:    ;;#ASMEND
2004; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
2005; GFX940-NEXT:    s_waitcnt vmcnt(0)
2006; GFX940-NEXT:    s_setpc_b64 s[30:31]
2007  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2008  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 3>
2009  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2010  ret void
2011}
2012
2013define void @v_shuffle_v2i32_v4i32__5_3(ptr addrspace(1) inreg %ptr) {
2014; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_3:
2015; GFX900:       ; %bb.0:
2016; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2017; GFX900-NEXT:    ;;#ASMSTART
2018; GFX900-NEXT:    ; def v[4:7]
2019; GFX900-NEXT:    ;;#ASMEND
2020; GFX900-NEXT:    v_mov_b32_e32 v8, 0
2021; GFX900-NEXT:    ;;#ASMSTART
2022; GFX900-NEXT:    ; def v[0:3]
2023; GFX900-NEXT:    ;;#ASMEND
2024; GFX900-NEXT:    v_mov_b32_e32 v6, v3
2025; GFX900-NEXT:    global_store_dwordx2 v8, v[5:6], s[16:17]
2026; GFX900-NEXT:    s_waitcnt vmcnt(0)
2027; GFX900-NEXT:    s_setpc_b64 s[30:31]
2028;
2029; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_3:
2030; GFX90A:       ; %bb.0:
2031; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2032; GFX90A-NEXT:    ;;#ASMSTART
2033; GFX90A-NEXT:    ; def v[0:3]
2034; GFX90A-NEXT:    ;;#ASMEND
2035; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
2036; GFX90A-NEXT:    ;;#ASMSTART
2037; GFX90A-NEXT:    ; def v[4:7]
2038; GFX90A-NEXT:    ;;#ASMEND
2039; GFX90A-NEXT:    v_mov_b32_e32 v2, v5
2040; GFX90A-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17]
2041; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2042; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2043;
2044; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_3:
2045; GFX940:       ; %bb.0:
2046; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2047; GFX940-NEXT:    ;;#ASMSTART
2048; GFX940-NEXT:    ; def v[0:3]
2049; GFX940-NEXT:    ;;#ASMEND
2050; GFX940-NEXT:    v_mov_b32_e32 v8, 0
2051; GFX940-NEXT:    ;;#ASMSTART
2052; GFX940-NEXT:    ; def v[4:7]
2053; GFX940-NEXT:    ;;#ASMEND
2054; GFX940-NEXT:    s_nop 0
2055; GFX940-NEXT:    v_mov_b32_e32 v2, v5
2056; GFX940-NEXT:    global_store_dwordx2 v8, v[2:3], s[0:1] sc0 sc1
2057; GFX940-NEXT:    s_waitcnt vmcnt(0)
2058; GFX940-NEXT:    s_setpc_b64 s[30:31]
2059  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2060  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2061  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 3>
2062  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2063  ret void
2064}
2065
2066define void @v_shuffle_v2i32_v4i32__6_3(ptr addrspace(1) inreg %ptr) {
2067; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_3:
2068; GFX900:       ; %bb.0:
2069; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2070; GFX900-NEXT:    ;;#ASMSTART
2071; GFX900-NEXT:    ; def v[4:7]
2072; GFX900-NEXT:    ;;#ASMEND
2073; GFX900-NEXT:    v_mov_b32_e32 v8, 0
2074; GFX900-NEXT:    ;;#ASMSTART
2075; GFX900-NEXT:    ; def v[0:3]
2076; GFX900-NEXT:    ;;#ASMEND
2077; GFX900-NEXT:    v_mov_b32_e32 v7, v3
2078; GFX900-NEXT:    global_store_dwordx2 v8, v[6:7], s[16:17]
2079; GFX900-NEXT:    s_waitcnt vmcnt(0)
2080; GFX900-NEXT:    s_setpc_b64 s[30:31]
2081;
2082; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_3:
2083; GFX90A:       ; %bb.0:
2084; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2085; GFX90A-NEXT:    ;;#ASMSTART
2086; GFX90A-NEXT:    ; def v[4:7]
2087; GFX90A-NEXT:    ;;#ASMEND
2088; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
2089; GFX90A-NEXT:    ;;#ASMSTART
2090; GFX90A-NEXT:    ; def v[0:3]
2091; GFX90A-NEXT:    ;;#ASMEND
2092; GFX90A-NEXT:    v_mov_b32_e32 v7, v3
2093; GFX90A-NEXT:    global_store_dwordx2 v8, v[6:7], s[16:17]
2094; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2095; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2096;
2097; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_3:
2098; GFX940:       ; %bb.0:
2099; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2100; GFX940-NEXT:    ;;#ASMSTART
2101; GFX940-NEXT:    ; def v[4:7]
2102; GFX940-NEXT:    ;;#ASMEND
2103; GFX940-NEXT:    v_mov_b32_e32 v8, 0
2104; GFX940-NEXT:    ;;#ASMSTART
2105; GFX940-NEXT:    ; def v[0:3]
2106; GFX940-NEXT:    ;;#ASMEND
2107; GFX940-NEXT:    s_nop 0
2108; GFX940-NEXT:    v_mov_b32_e32 v7, v3
2109; GFX940-NEXT:    global_store_dwordx2 v8, v[6:7], s[0:1] sc0 sc1
2110; GFX940-NEXT:    s_waitcnt vmcnt(0)
2111; GFX940-NEXT:    s_setpc_b64 s[30:31]
2112  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2113  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2114  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 3>
2115  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2116  ret void
2117}
2118
2119define void @v_shuffle_v2i32_v4i32__u_4(ptr addrspace(1) inreg %ptr) {
2120; GFX9-LABEL: v_shuffle_v2i32_v4i32__u_4:
2121; GFX9:       ; %bb.0:
2122; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2123; GFX9-NEXT:    s_setpc_b64 s[30:31]
2124  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2125  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 4>
2126  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2127  ret void
2128}
2129
2130define void @v_shuffle_v2i32_v4i32__0_4(ptr addrspace(1) inreg %ptr) {
2131; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_4:
2132; GFX900:       ; %bb.0:
2133; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2134; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2135; GFX900-NEXT:    ;;#ASMSTART
2136; GFX900-NEXT:    ; def v[0:3]
2137; GFX900-NEXT:    ;;#ASMEND
2138; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2139; GFX900-NEXT:    s_waitcnt vmcnt(0)
2140; GFX900-NEXT:    s_setpc_b64 s[30:31]
2141;
2142; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_4:
2143; GFX90A:       ; %bb.0:
2144; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2145; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2146; GFX90A-NEXT:    ;;#ASMSTART
2147; GFX90A-NEXT:    ; def v[0:3]
2148; GFX90A-NEXT:    ;;#ASMEND
2149; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2150; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2151; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2152;
2153; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_4:
2154; GFX940:       ; %bb.0:
2155; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2156; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2157; GFX940-NEXT:    ;;#ASMSTART
2158; GFX940-NEXT:    ; def v[0:3]
2159; GFX940-NEXT:    ;;#ASMEND
2160; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
2161; GFX940-NEXT:    s_waitcnt vmcnt(0)
2162; GFX940-NEXT:    s_setpc_b64 s[30:31]
2163  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2164  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 4>
2165  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2166  ret void
2167}
2168
2169define void @v_shuffle_v2i32_v4i32__1_4(ptr addrspace(1) inreg %ptr) {
2170; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_4:
2171; GFX900:       ; %bb.0:
2172; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2173; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2174; GFX900-NEXT:    ;;#ASMSTART
2175; GFX900-NEXT:    ; def v[0:3]
2176; GFX900-NEXT:    ;;#ASMEND
2177; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
2178; GFX900-NEXT:    s_waitcnt vmcnt(0)
2179; GFX900-NEXT:    s_setpc_b64 s[30:31]
2180;
2181; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_4:
2182; GFX90A:       ; %bb.0:
2183; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2184; GFX90A-NEXT:    ;;#ASMSTART
2185; GFX90A-NEXT:    ; def v[0:3]
2186; GFX90A-NEXT:    ;;#ASMEND
2187; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2188; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
2189; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2190; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2191; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2192;
2193; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_4:
2194; GFX940:       ; %bb.0:
2195; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2196; GFX940-NEXT:    ;;#ASMSTART
2197; GFX940-NEXT:    ; def v[0:3]
2198; GFX940-NEXT:    ;;#ASMEND
2199; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2200; GFX940-NEXT:    v_mov_b32_e32 v0, v1
2201; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
2202; GFX940-NEXT:    s_waitcnt vmcnt(0)
2203; GFX940-NEXT:    s_setpc_b64 s[30:31]
2204  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2205  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 4>
2206  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2207  ret void
2208}
2209
2210define void @v_shuffle_v2i32_v4i32__2_4(ptr addrspace(1) inreg %ptr) {
2211; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_4:
2212; GFX900:       ; %bb.0:
2213; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2214; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2215; GFX900-NEXT:    ;;#ASMSTART
2216; GFX900-NEXT:    ; def v[0:3]
2217; GFX900-NEXT:    ;;#ASMEND
2218; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
2219; GFX900-NEXT:    s_waitcnt vmcnt(0)
2220; GFX900-NEXT:    s_setpc_b64 s[30:31]
2221;
2222; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_4:
2223; GFX90A:       ; %bb.0:
2224; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2225; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2226; GFX90A-NEXT:    ;;#ASMSTART
2227; GFX90A-NEXT:    ; def v[0:3]
2228; GFX90A-NEXT:    ;;#ASMEND
2229; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
2230; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2231; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2232;
2233; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_4:
2234; GFX940:       ; %bb.0:
2235; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2236; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2237; GFX940-NEXT:    ;;#ASMSTART
2238; GFX940-NEXT:    ; def v[0:3]
2239; GFX940-NEXT:    ;;#ASMEND
2240; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
2241; GFX940-NEXT:    s_waitcnt vmcnt(0)
2242; GFX940-NEXT:    s_setpc_b64 s[30:31]
2243  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2244  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 4>
2245  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2246  ret void
2247}
2248
2249define void @v_shuffle_v2i32_v4i32__3_4(ptr addrspace(1) inreg %ptr) {
2250; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_4:
2251; GFX900:       ; %bb.0:
2252; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2253; GFX900-NEXT:    ;;#ASMSTART
2254; GFX900-NEXT:    ; def v[0:3]
2255; GFX900-NEXT:    ;;#ASMEND
2256; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2257; GFX900-NEXT:    v_mov_b32_e32 v0, v3
2258; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2259; GFX900-NEXT:    s_waitcnt vmcnt(0)
2260; GFX900-NEXT:    s_setpc_b64 s[30:31]
2261;
2262; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_4:
2263; GFX90A:       ; %bb.0:
2264; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2265; GFX90A-NEXT:    ;;#ASMSTART
2266; GFX90A-NEXT:    ; def v[0:3]
2267; GFX90A-NEXT:    ;;#ASMEND
2268; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2269; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
2270; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2271; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2272; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2273;
2274; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_4:
2275; GFX940:       ; %bb.0:
2276; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2277; GFX940-NEXT:    ;;#ASMSTART
2278; GFX940-NEXT:    ; def v[0:3]
2279; GFX940-NEXT:    ;;#ASMEND
2280; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2281; GFX940-NEXT:    v_mov_b32_e32 v0, v3
2282; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
2283; GFX940-NEXT:    s_waitcnt vmcnt(0)
2284; GFX940-NEXT:    s_setpc_b64 s[30:31]
2285  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2286  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 4>
2287  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2288  ret void
2289}
2290
2291define void @v_shuffle_v2i32_v4i32__4_4(ptr addrspace(1) inreg %ptr) {
2292; GFX9-LABEL: v_shuffle_v2i32_v4i32__4_4:
2293; GFX9:       ; %bb.0:
2294; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2295; GFX9-NEXT:    s_setpc_b64 s[30:31]
2296  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2297  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 4>
2298  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2299  ret void
2300}
2301
2302define void @v_shuffle_v2i32_v4i32__5_4(ptr addrspace(1) inreg %ptr) {
2303; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_4:
2304; GFX900:       ; %bb.0:
2305; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2306; GFX900-NEXT:    ;;#ASMSTART
2307; GFX900-NEXT:    ; def v[0:3]
2308; GFX900-NEXT:    ;;#ASMEND
2309; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2310; GFX900-NEXT:    v_mov_b32_e32 v2, v0
2311; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
2312; GFX900-NEXT:    s_waitcnt vmcnt(0)
2313; GFX900-NEXT:    s_setpc_b64 s[30:31]
2314;
2315; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_4:
2316; GFX90A:       ; %bb.0:
2317; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2318; GFX90A-NEXT:    ;;#ASMSTART
2319; GFX90A-NEXT:    ; def v[0:3]
2320; GFX90A-NEXT:    ;;#ASMEND
2321; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2322; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]
2323; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2324; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2325; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2326;
2327; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_4:
2328; GFX940:       ; %bb.0:
2329; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2330; GFX940-NEXT:    ;;#ASMSTART
2331; GFX940-NEXT:    ; def v[0:3]
2332; GFX940-NEXT:    ;;#ASMEND
2333; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2334; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]
2335; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
2336; GFX940-NEXT:    s_waitcnt vmcnt(0)
2337; GFX940-NEXT:    s_setpc_b64 s[30:31]
2338  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2339  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2340  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 4>
2341  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2342  ret void
2343}
2344
2345define void @v_shuffle_v2i32_v4i32__6_4(ptr addrspace(1) inreg %ptr) {
2346; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_4:
2347; GFX900:       ; %bb.0:
2348; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2349; GFX900-NEXT:    ;;#ASMSTART
2350; GFX900-NEXT:    ; def v[0:3]
2351; GFX900-NEXT:    ;;#ASMEND
2352; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2353; GFX900-NEXT:    v_mov_b32_e32 v3, v0
2354; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
2355; GFX900-NEXT:    s_waitcnt vmcnt(0)
2356; GFX900-NEXT:    s_setpc_b64 s[30:31]
2357;
2358; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_4:
2359; GFX90A:       ; %bb.0:
2360; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2361; GFX90A-NEXT:    ;;#ASMSTART
2362; GFX90A-NEXT:    ; def v[0:3]
2363; GFX90A-NEXT:    ;;#ASMEND
2364; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2365; GFX90A-NEXT:    v_mov_b32_e32 v3, v0
2366; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
2367; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2368; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2369;
2370; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_4:
2371; GFX940:       ; %bb.0:
2372; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2373; GFX940-NEXT:    ;;#ASMSTART
2374; GFX940-NEXT:    ; def v[0:3]
2375; GFX940-NEXT:    ;;#ASMEND
2376; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2377; GFX940-NEXT:    v_mov_b32_e32 v3, v0
2378; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
2379; GFX940-NEXT:    s_waitcnt vmcnt(0)
2380; GFX940-NEXT:    s_setpc_b64 s[30:31]
2381  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2382  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2383  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 4>
2384  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2385  ret void
2386}
2387
2388define void @v_shuffle_v2i32_v4i32__u_5(ptr addrspace(1) inreg %ptr) {
2389; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_5:
2390; GFX900:       ; %bb.0:
2391; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2392; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2393; GFX900-NEXT:    ;;#ASMSTART
2394; GFX900-NEXT:    ; def v[0:3]
2395; GFX900-NEXT:    ;;#ASMEND
2396; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2397; GFX900-NEXT:    s_waitcnt vmcnt(0)
2398; GFX900-NEXT:    s_setpc_b64 s[30:31]
2399;
2400; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_5:
2401; GFX90A:       ; %bb.0:
2402; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2403; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2404; GFX90A-NEXT:    ;;#ASMSTART
2405; GFX90A-NEXT:    ; def v[0:3]
2406; GFX90A-NEXT:    ;;#ASMEND
2407; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2408; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2409; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2410;
2411; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_5:
2412; GFX940:       ; %bb.0:
2413; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2414; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2415; GFX940-NEXT:    ;;#ASMSTART
2416; GFX940-NEXT:    ; def v[0:3]
2417; GFX940-NEXT:    ;;#ASMEND
2418; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
2419; GFX940-NEXT:    s_waitcnt vmcnt(0)
2420; GFX940-NEXT:    s_setpc_b64 s[30:31]
2421  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2422  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2423  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 5>
2424  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2425  ret void
2426}
2427
2428define void @v_shuffle_v2i32_v4i32__0_5(ptr addrspace(1) inreg %ptr) {
2429; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_5:
2430; GFX900:       ; %bb.0:
2431; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2432; GFX900-NEXT:    ;;#ASMSTART
2433; GFX900-NEXT:    ; def v[0:3]
2434; GFX900-NEXT:    ;;#ASMEND
2435; GFX900-NEXT:    ;;#ASMSTART
2436; GFX900-NEXT:    ; def v[1:4]
2437; GFX900-NEXT:    ;;#ASMEND
2438; GFX900-NEXT:    v_mov_b32_e32 v5, 0
2439; GFX900-NEXT:    v_mov_b32_e32 v1, v2
2440; GFX900-NEXT:    global_store_dwordx2 v5, v[0:1], s[16:17]
2441; GFX900-NEXT:    s_waitcnt vmcnt(0)
2442; GFX900-NEXT:    s_setpc_b64 s[30:31]
2443;
2444; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_5:
2445; GFX90A:       ; %bb.0:
2446; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2447; GFX90A-NEXT:    ;;#ASMSTART
2448; GFX90A-NEXT:    ; def v[0:3]
2449; GFX90A-NEXT:    ;;#ASMEND
2450; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
2451; GFX90A-NEXT:    ;;#ASMSTART
2452; GFX90A-NEXT:    ; def v[2:5]
2453; GFX90A-NEXT:    ;;#ASMEND
2454; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
2455; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17]
2456; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2457; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2458;
2459; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_5:
2460; GFX940:       ; %bb.0:
2461; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2462; GFX940-NEXT:    ;;#ASMSTART
2463; GFX940-NEXT:    ; def v[0:3]
2464; GFX940-NEXT:    ;;#ASMEND
2465; GFX940-NEXT:    v_mov_b32_e32 v6, 0
2466; GFX940-NEXT:    ;;#ASMSTART
2467; GFX940-NEXT:    ; def v[2:5]
2468; GFX940-NEXT:    ;;#ASMEND
2469; GFX940-NEXT:    s_nop 0
2470; GFX940-NEXT:    v_mov_b32_e32 v1, v3
2471; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1
2472; GFX940-NEXT:    s_waitcnt vmcnt(0)
2473; GFX940-NEXT:    s_setpc_b64 s[30:31]
2474  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2475  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2476  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 5>
2477  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2478  ret void
2479}
2480
2481define void @v_shuffle_v2i32_v4i32__1_5(ptr addrspace(1) inreg %ptr) {
2482; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_5:
2483; GFX900:       ; %bb.0:
2484; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2485; GFX900-NEXT:    ;;#ASMSTART
2486; GFX900-NEXT:    ; def v[0:3]
2487; GFX900-NEXT:    ;;#ASMEND
2488; GFX900-NEXT:    ;;#ASMSTART
2489; GFX900-NEXT:    ; def v[2:5]
2490; GFX900-NEXT:    ;;#ASMEND
2491; GFX900-NEXT:    v_mov_b32_e32 v6, 0
2492; GFX900-NEXT:    v_mov_b32_e32 v2, v3
2493; GFX900-NEXT:    global_store_dwordx2 v6, v[1:2], s[16:17]
2494; GFX900-NEXT:    s_waitcnt vmcnt(0)
2495; GFX900-NEXT:    s_setpc_b64 s[30:31]
2496;
2497; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_5:
2498; GFX90A:       ; %bb.0:
2499; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2500; GFX90A-NEXT:    ;;#ASMSTART
2501; GFX90A-NEXT:    ; def v[0:3]
2502; GFX90A-NEXT:    ;;#ASMEND
2503; GFX90A-NEXT:    ;;#ASMSTART
2504; GFX90A-NEXT:    ; def v[2:5]
2505; GFX90A-NEXT:    ;;#ASMEND
2506; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
2507; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
2508; GFX90A-NEXT:    global_store_dwordx2 v6, v[2:3], s[16:17]
2509; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2510; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2511;
2512; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_5:
2513; GFX940:       ; %bb.0:
2514; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2515; GFX940-NEXT:    ;;#ASMSTART
2516; GFX940-NEXT:    ; def v[0:3]
2517; GFX940-NEXT:    ;;#ASMEND
2518; GFX940-NEXT:    v_mov_b32_e32 v6, 0
2519; GFX940-NEXT:    ;;#ASMSTART
2520; GFX940-NEXT:    ; def v[2:5]
2521; GFX940-NEXT:    ;;#ASMEND
2522; GFX940-NEXT:    s_nop 0
2523; GFX940-NEXT:    v_mov_b32_e32 v2, v1
2524; GFX940-NEXT:    global_store_dwordx2 v6, v[2:3], s[0:1] sc0 sc1
2525; GFX940-NEXT:    s_waitcnt vmcnt(0)
2526; GFX940-NEXT:    s_setpc_b64 s[30:31]
2527  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2528  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2529  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 5>
2530  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2531  ret void
2532}
2533
2534define void @v_shuffle_v2i32_v4i32__2_5(ptr addrspace(1) inreg %ptr) {
2535; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_5:
2536; GFX900:       ; %bb.0:
2537; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2538; GFX900-NEXT:    ;;#ASMSTART
2539; GFX900-NEXT:    ; def v[0:3]
2540; GFX900-NEXT:    ;;#ASMEND
2541; GFX900-NEXT:    ;;#ASMSTART
2542; GFX900-NEXT:    ; def v[3:6]
2543; GFX900-NEXT:    ;;#ASMEND
2544; GFX900-NEXT:    v_mov_b32_e32 v7, 0
2545; GFX900-NEXT:    v_mov_b32_e32 v3, v4
2546; GFX900-NEXT:    global_store_dwordx2 v7, v[2:3], s[16:17]
2547; GFX900-NEXT:    s_waitcnt vmcnt(0)
2548; GFX900-NEXT:    s_setpc_b64 s[30:31]
2549;
2550; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_5:
2551; GFX90A:       ; %bb.0:
2552; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2553; GFX90A-NEXT:    ;;#ASMSTART
2554; GFX90A-NEXT:    ; def v[0:3]
2555; GFX90A-NEXT:    ;;#ASMEND
2556; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
2557; GFX90A-NEXT:    ;;#ASMSTART
2558; GFX90A-NEXT:    ; def v[4:7]
2559; GFX90A-NEXT:    ;;#ASMEND
2560; GFX90A-NEXT:    v_mov_b32_e32 v3, v5
2561; GFX90A-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17]
2562; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2563; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2564;
2565; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_5:
2566; GFX940:       ; %bb.0:
2567; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2568; GFX940-NEXT:    ;;#ASMSTART
2569; GFX940-NEXT:    ; def v[0:3]
2570; GFX940-NEXT:    ;;#ASMEND
2571; GFX940-NEXT:    v_mov_b32_e32 v8, 0
2572; GFX940-NEXT:    ;;#ASMSTART
2573; GFX940-NEXT:    ; def v[4:7]
2574; GFX940-NEXT:    ;;#ASMEND
2575; GFX940-NEXT:    s_nop 0
2576; GFX940-NEXT:    v_mov_b32_e32 v3, v5
2577; GFX940-NEXT:    global_store_dwordx2 v8, v[2:3], s[0:1] sc0 sc1
2578; GFX940-NEXT:    s_waitcnt vmcnt(0)
2579; GFX940-NEXT:    s_setpc_b64 s[30:31]
2580  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2581  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2582  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 5>
2583  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2584  ret void
2585}
2586
2587define void @v_shuffle_v2i32_v4i32__3_5(ptr addrspace(1) inreg %ptr) {
2588; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_5:
2589; GFX900:       ; %bb.0:
2590; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2591; GFX900-NEXT:    ;;#ASMSTART
2592; GFX900-NEXT:    ; def v[4:7]
2593; GFX900-NEXT:    ;;#ASMEND
2594; GFX900-NEXT:    v_mov_b32_e32 v8, 0
2595; GFX900-NEXT:    ;;#ASMSTART
2596; GFX900-NEXT:    ; def v[0:3]
2597; GFX900-NEXT:    ;;#ASMEND
2598; GFX900-NEXT:    v_mov_b32_e32 v4, v3
2599; GFX900-NEXT:    global_store_dwordx2 v8, v[4:5], s[16:17]
2600; GFX900-NEXT:    s_waitcnt vmcnt(0)
2601; GFX900-NEXT:    s_setpc_b64 s[30:31]
2602;
2603; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_5:
2604; GFX90A:       ; %bb.0:
2605; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2606; GFX90A-NEXT:    ;;#ASMSTART
2607; GFX90A-NEXT:    ; def v[4:7]
2608; GFX90A-NEXT:    ;;#ASMEND
2609; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
2610; GFX90A-NEXT:    ;;#ASMSTART
2611; GFX90A-NEXT:    ; def v[0:3]
2612; GFX90A-NEXT:    ;;#ASMEND
2613; GFX90A-NEXT:    v_mov_b32_e32 v4, v3
2614; GFX90A-NEXT:    global_store_dwordx2 v8, v[4:5], s[16:17]
2615; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2616; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2617;
2618; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_5:
2619; GFX940:       ; %bb.0:
2620; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2621; GFX940-NEXT:    ;;#ASMSTART
2622; GFX940-NEXT:    ; def v[4:7]
2623; GFX940-NEXT:    ;;#ASMEND
2624; GFX940-NEXT:    v_mov_b32_e32 v8, 0
2625; GFX940-NEXT:    ;;#ASMSTART
2626; GFX940-NEXT:    ; def v[0:3]
2627; GFX940-NEXT:    ;;#ASMEND
2628; GFX940-NEXT:    s_nop 0
2629; GFX940-NEXT:    v_mov_b32_e32 v4, v3
2630; GFX940-NEXT:    global_store_dwordx2 v8, v[4:5], s[0:1] sc0 sc1
2631; GFX940-NEXT:    s_waitcnt vmcnt(0)
2632; GFX940-NEXT:    s_setpc_b64 s[30:31]
2633  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2634  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2635  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 5>
2636  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2637  ret void
2638}
2639
2640define void @v_shuffle_v2i32_v4i32__4_5(ptr addrspace(1) inreg %ptr) {
2641; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_5:
2642; GFX900:       ; %bb.0:
2643; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2644; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2645; GFX900-NEXT:    ;;#ASMSTART
2646; GFX900-NEXT:    ; def v[0:3]
2647; GFX900-NEXT:    ;;#ASMEND
2648; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2649; GFX900-NEXT:    s_waitcnt vmcnt(0)
2650; GFX900-NEXT:    s_setpc_b64 s[30:31]
2651;
2652; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_5:
2653; GFX90A:       ; %bb.0:
2654; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2655; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2656; GFX90A-NEXT:    ;;#ASMSTART
2657; GFX90A-NEXT:    ; def v[0:3]
2658; GFX90A-NEXT:    ;;#ASMEND
2659; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2660; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2661; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2662;
2663; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_5:
2664; GFX940:       ; %bb.0:
2665; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2666; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2667; GFX940-NEXT:    ;;#ASMSTART
2668; GFX940-NEXT:    ; def v[0:3]
2669; GFX940-NEXT:    ;;#ASMEND
2670; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
2671; GFX940-NEXT:    s_waitcnt vmcnt(0)
2672; GFX940-NEXT:    s_setpc_b64 s[30:31]
2673  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2674  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2675  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 5>
2676  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2677  ret void
2678}
2679
2680define void @v_shuffle_v2i32_v4i32__5_5(ptr addrspace(1) inreg %ptr) {
2681; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_5:
2682; GFX900:       ; %bb.0:
2683; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2684; GFX900-NEXT:    ;;#ASMSTART
2685; GFX900-NEXT:    ; def v[0:3]
2686; GFX900-NEXT:    ;;#ASMEND
2687; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2688; GFX900-NEXT:    v_mov_b32_e32 v2, v1
2689; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
2690; GFX900-NEXT:    s_waitcnt vmcnt(0)
2691; GFX900-NEXT:    s_setpc_b64 s[30:31]
2692;
2693; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_5:
2694; GFX90A:       ; %bb.0:
2695; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2696; GFX90A-NEXT:    ;;#ASMSTART
2697; GFX90A-NEXT:    ; def v[0:3]
2698; GFX90A-NEXT:    ;;#ASMEND
2699; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2700; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
2701; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2702; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2703; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2704;
2705; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_5:
2706; GFX940:       ; %bb.0:
2707; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2708; GFX940-NEXT:    ;;#ASMSTART
2709; GFX940-NEXT:    ; def v[0:3]
2710; GFX940-NEXT:    ;;#ASMEND
2711; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2712; GFX940-NEXT:    v_mov_b32_e32 v0, v1
2713; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
2714; GFX940-NEXT:    s_waitcnt vmcnt(0)
2715; GFX940-NEXT:    s_setpc_b64 s[30:31]
2716  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2717  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2718  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 5>
2719  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2720  ret void
2721}
2722
2723define void @v_shuffle_v2i32_v4i32__6_5(ptr addrspace(1) inreg %ptr) {
2724; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_5:
2725; GFX900:       ; %bb.0:
2726; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2727; GFX900-NEXT:    ;;#ASMSTART
2728; GFX900-NEXT:    ; def v[0:3]
2729; GFX900-NEXT:    ;;#ASMEND
2730; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2731; GFX900-NEXT:    v_mov_b32_e32 v3, v1
2732; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
2733; GFX900-NEXT:    s_waitcnt vmcnt(0)
2734; GFX900-NEXT:    s_setpc_b64 s[30:31]
2735;
2736; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_5:
2737; GFX90A:       ; %bb.0:
2738; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2739; GFX90A-NEXT:    ;;#ASMSTART
2740; GFX90A-NEXT:    ; def v[0:3]
2741; GFX90A-NEXT:    ;;#ASMEND
2742; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2743; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
2744; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
2745; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2746; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2747;
2748; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_5:
2749; GFX940:       ; %bb.0:
2750; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2751; GFX940-NEXT:    ;;#ASMSTART
2752; GFX940-NEXT:    ; def v[0:3]
2753; GFX940-NEXT:    ;;#ASMEND
2754; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2755; GFX940-NEXT:    v_mov_b32_e32 v3, v1
2756; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
2757; GFX940-NEXT:    s_waitcnt vmcnt(0)
2758; GFX940-NEXT:    s_setpc_b64 s[30:31]
2759  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2760  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2761  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 5>
2762  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2763  ret void
2764}
2765
2766define void @v_shuffle_v2i32_v4i32__u_6(ptr addrspace(1) inreg %ptr) {
2767; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_6:
2768; GFX900:       ; %bb.0:
2769; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2770; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2771; GFX900-NEXT:    ;;#ASMSTART
2772; GFX900-NEXT:    ; def v[0:3]
2773; GFX900-NEXT:    ;;#ASMEND
2774; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
2775; GFX900-NEXT:    s_waitcnt vmcnt(0)
2776; GFX900-NEXT:    s_setpc_b64 s[30:31]
2777;
2778; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_6:
2779; GFX90A:       ; %bb.0:
2780; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2781; GFX90A-NEXT:    ;;#ASMSTART
2782; GFX90A-NEXT:    ; def v[0:3]
2783; GFX90A-NEXT:    ;;#ASMEND
2784; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2785; GFX90A-NEXT:    v_mov_b32_e32 v1, v2
2786; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
2787; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2788; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2789;
2790; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_6:
2791; GFX940:       ; %bb.0:
2792; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2793; GFX940-NEXT:    ;;#ASMSTART
2794; GFX940-NEXT:    ; def v[0:3]
2795; GFX940-NEXT:    ;;#ASMEND
2796; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2797; GFX940-NEXT:    v_mov_b32_e32 v1, v2
2798; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
2799; GFX940-NEXT:    s_waitcnt vmcnt(0)
2800; GFX940-NEXT:    s_setpc_b64 s[30:31]
2801  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2802  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2803  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 6>
2804  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2805  ret void
2806}
2807
2808define void @v_shuffle_v2i32_v4i32__0_6(ptr addrspace(1) inreg %ptr) {
2809; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_6:
2810; GFX900:       ; %bb.0:
2811; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2812; GFX900-NEXT:    ;;#ASMSTART
2813; GFX900-NEXT:    ; def v[0:3]
2814; GFX900-NEXT:    ;;#ASMEND
2815; GFX900-NEXT:    ;;#ASMSTART
2816; GFX900-NEXT:    ; def v[1:4]
2817; GFX900-NEXT:    ;;#ASMEND
2818; GFX900-NEXT:    v_mov_b32_e32 v5, 0
2819; GFX900-NEXT:    v_mov_b32_e32 v1, v3
2820; GFX900-NEXT:    global_store_dwordx2 v5, v[0:1], s[16:17]
2821; GFX900-NEXT:    s_waitcnt vmcnt(0)
2822; GFX900-NEXT:    s_setpc_b64 s[30:31]
2823;
2824; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_6:
2825; GFX90A:       ; %bb.0:
2826; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2827; GFX90A-NEXT:    ;;#ASMSTART
2828; GFX90A-NEXT:    ; def v[0:3]
2829; GFX90A-NEXT:    ;;#ASMEND
2830; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
2831; GFX90A-NEXT:    ;;#ASMSTART
2832; GFX90A-NEXT:    ; def v[2:5]
2833; GFX90A-NEXT:    ;;#ASMEND
2834; GFX90A-NEXT:    v_mov_b32_e32 v1, v4
2835; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17]
2836; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2837; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2838;
2839; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_6:
2840; GFX940:       ; %bb.0:
2841; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2842; GFX940-NEXT:    ;;#ASMSTART
2843; GFX940-NEXT:    ; def v[0:3]
2844; GFX940-NEXT:    ;;#ASMEND
2845; GFX940-NEXT:    v_mov_b32_e32 v6, 0
2846; GFX940-NEXT:    ;;#ASMSTART
2847; GFX940-NEXT:    ; def v[2:5]
2848; GFX940-NEXT:    ;;#ASMEND
2849; GFX940-NEXT:    s_nop 0
2850; GFX940-NEXT:    v_mov_b32_e32 v1, v4
2851; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1
2852; GFX940-NEXT:    s_waitcnt vmcnt(0)
2853; GFX940-NEXT:    s_setpc_b64 s[30:31]
2854  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2855  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2856  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 6>
2857  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2858  ret void
2859}
2860
2861define void @v_shuffle_v2i32_v4i32__1_6(ptr addrspace(1) inreg %ptr) {
2862; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_6:
2863; GFX900:       ; %bb.0:
2864; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2865; GFX900-NEXT:    ;;#ASMSTART
2866; GFX900-NEXT:    ; def v[0:3]
2867; GFX900-NEXT:    ;;#ASMEND
2868; GFX900-NEXT:    ;;#ASMSTART
2869; GFX900-NEXT:    ; def v[2:5]
2870; GFX900-NEXT:    ;;#ASMEND
2871; GFX900-NEXT:    v_mov_b32_e32 v6, 0
2872; GFX900-NEXT:    v_mov_b32_e32 v2, v4
2873; GFX900-NEXT:    global_store_dwordx2 v6, v[1:2], s[16:17]
2874; GFX900-NEXT:    s_waitcnt vmcnt(0)
2875; GFX900-NEXT:    s_setpc_b64 s[30:31]
2876;
2877; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_6:
2878; GFX90A:       ; %bb.0:
2879; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2880; GFX90A-NEXT:    ;;#ASMSTART
2881; GFX90A-NEXT:    ; def v[0:3]
2882; GFX90A-NEXT:    ;;#ASMEND
2883; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
2884; GFX90A-NEXT:    ;;#ASMSTART
2885; GFX90A-NEXT:    ; def v[2:5]
2886; GFX90A-NEXT:    ;;#ASMEND
2887; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[4:5] op_sel:[1,0]
2888; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17]
2889; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2890; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2891;
2892; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_6:
2893; GFX940:       ; %bb.0:
2894; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2895; GFX940-NEXT:    ;;#ASMSTART
2896; GFX940-NEXT:    ; def v[0:3]
2897; GFX940-NEXT:    ;;#ASMEND
2898; GFX940-NEXT:    v_mov_b32_e32 v6, 0
2899; GFX940-NEXT:    ;;#ASMSTART
2900; GFX940-NEXT:    ; def v[2:5]
2901; GFX940-NEXT:    ;;#ASMEND
2902; GFX940-NEXT:    s_nop 0
2903; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[4:5] op_sel:[1,0]
2904; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1
2905; GFX940-NEXT:    s_waitcnt vmcnt(0)
2906; GFX940-NEXT:    s_setpc_b64 s[30:31]
2907  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2908  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2909  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 6>
2910  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2911  ret void
2912}
2913
2914define void @v_shuffle_v2i32_v4i32__2_6(ptr addrspace(1) inreg %ptr) {
2915; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_6:
2916; GFX900:       ; %bb.0:
2917; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2918; GFX900-NEXT:    ;;#ASMSTART
2919; GFX900-NEXT:    ; def v[0:3]
2920; GFX900-NEXT:    ;;#ASMEND
2921; GFX900-NEXT:    ;;#ASMSTART
2922; GFX900-NEXT:    ; def v[3:6]
2923; GFX900-NEXT:    ;;#ASMEND
2924; GFX900-NEXT:    v_mov_b32_e32 v7, 0
2925; GFX900-NEXT:    v_mov_b32_e32 v3, v5
2926; GFX900-NEXT:    global_store_dwordx2 v7, v[2:3], s[16:17]
2927; GFX900-NEXT:    s_waitcnt vmcnt(0)
2928; GFX900-NEXT:    s_setpc_b64 s[30:31]
2929;
2930; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_6:
2931; GFX90A:       ; %bb.0:
2932; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2933; GFX90A-NEXT:    ;;#ASMSTART
2934; GFX90A-NEXT:    ; def v[0:3]
2935; GFX90A-NEXT:    ;;#ASMEND
2936; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
2937; GFX90A-NEXT:    ;;#ASMSTART
2938; GFX90A-NEXT:    ; def v[4:7]
2939; GFX90A-NEXT:    ;;#ASMEND
2940; GFX90A-NEXT:    v_mov_b32_e32 v3, v6
2941; GFX90A-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17]
2942; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2943; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2944;
2945; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_6:
2946; GFX940:       ; %bb.0:
2947; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2948; GFX940-NEXT:    ;;#ASMSTART
2949; GFX940-NEXT:    ; def v[0:3]
2950; GFX940-NEXT:    ;;#ASMEND
2951; GFX940-NEXT:    v_mov_b32_e32 v8, 0
2952; GFX940-NEXT:    ;;#ASMSTART
2953; GFX940-NEXT:    ; def v[4:7]
2954; GFX940-NEXT:    ;;#ASMEND
2955; GFX940-NEXT:    s_nop 0
2956; GFX940-NEXT:    v_mov_b32_e32 v3, v6
2957; GFX940-NEXT:    global_store_dwordx2 v8, v[2:3], s[0:1] sc0 sc1
2958; GFX940-NEXT:    s_waitcnt vmcnt(0)
2959; GFX940-NEXT:    s_setpc_b64 s[30:31]
2960  %vec0 = call <4 x i32> asm "; def $0", "=v"()
2961  %vec1 = call <4 x i32> asm "; def $0", "=v"()
2962  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 6>
2963  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
2964  ret void
2965}
2966
2967define void @v_shuffle_v2i32_v4i32__3_6(ptr addrspace(1) inreg %ptr) {
2968; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_6:
2969; GFX900:       ; %bb.0:
2970; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2971; GFX900-NEXT:    ;;#ASMSTART
2972; GFX900-NEXT:    ; def v[4:7]
2973; GFX900-NEXT:    ;;#ASMEND
2974; GFX900-NEXT:    v_mov_b32_e32 v8, 0
2975; GFX900-NEXT:    ;;#ASMSTART
2976; GFX900-NEXT:    ; def v[0:3]
2977; GFX900-NEXT:    ;;#ASMEND
2978; GFX900-NEXT:    v_mov_b32_e32 v5, v3
2979; GFX900-NEXT:    global_store_dwordx2 v8, v[5:6], s[16:17]
2980; GFX900-NEXT:    s_waitcnt vmcnt(0)
2981; GFX900-NEXT:    s_setpc_b64 s[30:31]
2982;
2983; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_6:
2984; GFX90A:       ; %bb.0:
2985; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2986; GFX90A-NEXT:    ;;#ASMSTART
2987; GFX90A-NEXT:    ; def v[0:3]
2988; GFX90A-NEXT:    ;;#ASMEND
2989; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
2990; GFX90A-NEXT:    ;;#ASMSTART
2991; GFX90A-NEXT:    ; def v[4:7]
2992; GFX90A-NEXT:    ;;#ASMEND
2993; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[6:7] op_sel:[1,0]
2994; GFX90A-NEXT:    global_store_dwordx2 v8, v[0:1], s[16:17]
2995; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2996; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2997;
2998; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_6:
2999; GFX940:       ; %bb.0:
3000; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3001; GFX940-NEXT:    ;;#ASMSTART
3002; GFX940-NEXT:    ; def v[0:3]
3003; GFX940-NEXT:    ;;#ASMEND
3004; GFX940-NEXT:    v_mov_b32_e32 v8, 0
3005; GFX940-NEXT:    ;;#ASMSTART
3006; GFX940-NEXT:    ; def v[4:7]
3007; GFX940-NEXT:    ;;#ASMEND
3008; GFX940-NEXT:    s_nop 0
3009; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[6:7] op_sel:[1,0]
3010; GFX940-NEXT:    global_store_dwordx2 v8, v[0:1], s[0:1] sc0 sc1
3011; GFX940-NEXT:    s_waitcnt vmcnt(0)
3012; GFX940-NEXT:    s_setpc_b64 s[30:31]
3013  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3014  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3015  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 6>
3016  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3017  ret void
3018}
3019
3020define void @v_shuffle_v2i32_v4i32__4_6(ptr addrspace(1) inreg %ptr) {
3021; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_6:
3022; GFX900:       ; %bb.0:
3023; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3024; GFX900-NEXT:    ;;#ASMSTART
3025; GFX900-NEXT:    ; def v[0:3]
3026; GFX900-NEXT:    ;;#ASMEND
3027; GFX900-NEXT:    v_mov_b32_e32 v4, 0
3028; GFX900-NEXT:    v_mov_b32_e32 v1, v2
3029; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
3030; GFX900-NEXT:    s_waitcnt vmcnt(0)
3031; GFX900-NEXT:    s_setpc_b64 s[30:31]
3032;
3033; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_6:
3034; GFX90A:       ; %bb.0:
3035; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3036; GFX90A-NEXT:    ;;#ASMSTART
3037; GFX90A-NEXT:    ; def v[0:3]
3038; GFX90A-NEXT:    ;;#ASMEND
3039; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
3040; GFX90A-NEXT:    v_mov_b32_e32 v1, v2
3041; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
3042; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3043; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3044;
3045; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_6:
3046; GFX940:       ; %bb.0:
3047; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3048; GFX940-NEXT:    ;;#ASMSTART
3049; GFX940-NEXT:    ; def v[0:3]
3050; GFX940-NEXT:    ;;#ASMEND
3051; GFX940-NEXT:    v_mov_b32_e32 v4, 0
3052; GFX940-NEXT:    v_mov_b32_e32 v1, v2
3053; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
3054; GFX940-NEXT:    s_waitcnt vmcnt(0)
3055; GFX940-NEXT:    s_setpc_b64 s[30:31]
3056  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3057  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3058  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 6>
3059  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3060  ret void
3061}
3062
3063define void @v_shuffle_v2i32_v4i32__5_6(ptr addrspace(1) inreg %ptr) {
3064; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_6:
3065; GFX900:       ; %bb.0:
3066; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3067; GFX900-NEXT:    v_mov_b32_e32 v4, 0
3068; GFX900-NEXT:    ;;#ASMSTART
3069; GFX900-NEXT:    ; def v[0:3]
3070; GFX900-NEXT:    ;;#ASMEND
3071; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
3072; GFX900-NEXT:    s_waitcnt vmcnt(0)
3073; GFX900-NEXT:    s_setpc_b64 s[30:31]
3074;
3075; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_6:
3076; GFX90A:       ; %bb.0:
3077; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3078; GFX90A-NEXT:    ;;#ASMSTART
3079; GFX90A-NEXT:    ; def v[0:3]
3080; GFX90A-NEXT:    ;;#ASMEND
3081; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
3082; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
3083; GFX90A-NEXT:    v_mov_b32_e32 v1, v2
3084; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
3085; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3086; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3087;
3088; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_6:
3089; GFX940:       ; %bb.0:
3090; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3091; GFX940-NEXT:    ;;#ASMSTART
3092; GFX940-NEXT:    ; def v[0:3]
3093; GFX940-NEXT:    ;;#ASMEND
3094; GFX940-NEXT:    v_mov_b32_e32 v4, 0
3095; GFX940-NEXT:    v_mov_b32_e32 v0, v1
3096; GFX940-NEXT:    v_mov_b32_e32 v1, v2
3097; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
3098; GFX940-NEXT:    s_waitcnt vmcnt(0)
3099; GFX940-NEXT:    s_setpc_b64 s[30:31]
3100  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3101  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3102  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 6>
3103  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3104  ret void
3105}
3106
3107define void @v_shuffle_v2i32_v4i32__6_6(ptr addrspace(1) inreg %ptr) {
3108; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_6:
3109; GFX900:       ; %bb.0:
3110; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3111; GFX900-NEXT:    ;;#ASMSTART
3112; GFX900-NEXT:    ; def v[0:3]
3113; GFX900-NEXT:    ;;#ASMEND
3114; GFX900-NEXT:    v_mov_b32_e32 v4, 0
3115; GFX900-NEXT:    v_mov_b32_e32 v3, v2
3116; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
3117; GFX900-NEXT:    s_waitcnt vmcnt(0)
3118; GFX900-NEXT:    s_setpc_b64 s[30:31]
3119;
3120; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_6:
3121; GFX90A:       ; %bb.0:
3122; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3123; GFX90A-NEXT:    ;;#ASMSTART
3124; GFX90A-NEXT:    ; def v[0:3]
3125; GFX90A-NEXT:    ;;#ASMEND
3126; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
3127; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
3128; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
3129; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3130; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3131;
3132; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_6:
3133; GFX940:       ; %bb.0:
3134; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3135; GFX940-NEXT:    ;;#ASMSTART
3136; GFX940-NEXT:    ; def v[0:3]
3137; GFX940-NEXT:    ;;#ASMEND
3138; GFX940-NEXT:    v_mov_b32_e32 v4, 0
3139; GFX940-NEXT:    v_mov_b32_e32 v3, v2
3140; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
3141; GFX940-NEXT:    s_waitcnt vmcnt(0)
3142; GFX940-NEXT:    s_setpc_b64 s[30:31]
3143  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3144  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3145  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 6>
3146  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3147  ret void
3148}
3149
3150define void @v_shuffle_v2i32_v4i32__u_7(ptr addrspace(1) inreg %ptr) {
3151; GFX900-LABEL: v_shuffle_v2i32_v4i32__u_7:
3152; GFX900:       ; %bb.0:
3153; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3154; GFX900-NEXT:    v_mov_b32_e32 v4, 0
3155; GFX900-NEXT:    ;;#ASMSTART
3156; GFX900-NEXT:    ; def v[0:3]
3157; GFX900-NEXT:    ;;#ASMEND
3158; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
3159; GFX900-NEXT:    s_waitcnt vmcnt(0)
3160; GFX900-NEXT:    s_setpc_b64 s[30:31]
3161;
3162; GFX90A-LABEL: v_shuffle_v2i32_v4i32__u_7:
3163; GFX90A:       ; %bb.0:
3164; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3165; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
3166; GFX90A-NEXT:    ;;#ASMSTART
3167; GFX90A-NEXT:    ; def v[0:3]
3168; GFX90A-NEXT:    ;;#ASMEND
3169; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
3170; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3171; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3172;
3173; GFX940-LABEL: v_shuffle_v2i32_v4i32__u_7:
3174; GFX940:       ; %bb.0:
3175; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3176; GFX940-NEXT:    v_mov_b32_e32 v4, 0
3177; GFX940-NEXT:    ;;#ASMSTART
3178; GFX940-NEXT:    ; def v[0:3]
3179; GFX940-NEXT:    ;;#ASMEND
3180; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
3181; GFX940-NEXT:    s_waitcnt vmcnt(0)
3182; GFX940-NEXT:    s_setpc_b64 s[30:31]
3183  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3184  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3185  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 7>
3186  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3187  ret void
3188}
3189
3190define void @v_shuffle_v2i32_v4i32__0_7(ptr addrspace(1) inreg %ptr) {
3191; GFX900-LABEL: v_shuffle_v2i32_v4i32__0_7:
3192; GFX900:       ; %bb.0:
3193; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3194; GFX900-NEXT:    ;;#ASMSTART
3195; GFX900-NEXT:    ; def v[0:3]
3196; GFX900-NEXT:    ;;#ASMEND
3197; GFX900-NEXT:    ;;#ASMSTART
3198; GFX900-NEXT:    ; def v[1:4]
3199; GFX900-NEXT:    ;;#ASMEND
3200; GFX900-NEXT:    v_mov_b32_e32 v5, 0
3201; GFX900-NEXT:    v_mov_b32_e32 v1, v4
3202; GFX900-NEXT:    global_store_dwordx2 v5, v[0:1], s[16:17]
3203; GFX900-NEXT:    s_waitcnt vmcnt(0)
3204; GFX900-NEXT:    s_setpc_b64 s[30:31]
3205;
3206; GFX90A-LABEL: v_shuffle_v2i32_v4i32__0_7:
3207; GFX90A:       ; %bb.0:
3208; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3209; GFX90A-NEXT:    ;;#ASMSTART
3210; GFX90A-NEXT:    ; def v[0:3]
3211; GFX90A-NEXT:    ;;#ASMEND
3212; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
3213; GFX90A-NEXT:    ;;#ASMSTART
3214; GFX90A-NEXT:    ; def v[2:5]
3215; GFX90A-NEXT:    ;;#ASMEND
3216; GFX90A-NEXT:    v_mov_b32_e32 v1, v5
3217; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17]
3218; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3219; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3220;
3221; GFX940-LABEL: v_shuffle_v2i32_v4i32__0_7:
3222; GFX940:       ; %bb.0:
3223; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3224; GFX940-NEXT:    ;;#ASMSTART
3225; GFX940-NEXT:    ; def v[0:3]
3226; GFX940-NEXT:    ;;#ASMEND
3227; GFX940-NEXT:    v_mov_b32_e32 v6, 0
3228; GFX940-NEXT:    ;;#ASMSTART
3229; GFX940-NEXT:    ; def v[2:5]
3230; GFX940-NEXT:    ;;#ASMEND
3231; GFX940-NEXT:    s_nop 0
3232; GFX940-NEXT:    v_mov_b32_e32 v1, v5
3233; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] sc0 sc1
3234; GFX940-NEXT:    s_waitcnt vmcnt(0)
3235; GFX940-NEXT:    s_setpc_b64 s[30:31]
3236  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3237  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3238  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 7>
3239  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3240  ret void
3241}
3242
3243define void @v_shuffle_v2i32_v4i32__1_7(ptr addrspace(1) inreg %ptr) {
3244; GFX900-LABEL: v_shuffle_v2i32_v4i32__1_7:
3245; GFX900:       ; %bb.0:
3246; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3247; GFX900-NEXT:    ;;#ASMSTART
3248; GFX900-NEXT:    ; def v[0:3]
3249; GFX900-NEXT:    ;;#ASMEND
3250; GFX900-NEXT:    ;;#ASMSTART
3251; GFX900-NEXT:    ; def v[2:5]
3252; GFX900-NEXT:    ;;#ASMEND
3253; GFX900-NEXT:    v_mov_b32_e32 v6, 0
3254; GFX900-NEXT:    v_mov_b32_e32 v2, v5
3255; GFX900-NEXT:    global_store_dwordx2 v6, v[1:2], s[16:17]
3256; GFX900-NEXT:    s_waitcnt vmcnt(0)
3257; GFX900-NEXT:    s_setpc_b64 s[30:31]
3258;
3259; GFX90A-LABEL: v_shuffle_v2i32_v4i32__1_7:
3260; GFX90A:       ; %bb.0:
3261; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3262; GFX90A-NEXT:    ;;#ASMSTART
3263; GFX90A-NEXT:    ; def v[0:3]
3264; GFX90A-NEXT:    ;;#ASMEND
3265; GFX90A-NEXT:    ;;#ASMSTART
3266; GFX90A-NEXT:    ; def v[2:5]
3267; GFX90A-NEXT:    ;;#ASMEND
3268; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
3269; GFX90A-NEXT:    v_mov_b32_e32 v4, v1
3270; GFX90A-NEXT:    global_store_dwordx2 v6, v[4:5], s[16:17]
3271; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3272; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3273;
3274; GFX940-LABEL: v_shuffle_v2i32_v4i32__1_7:
3275; GFX940:       ; %bb.0:
3276; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3277; GFX940-NEXT:    ;;#ASMSTART
3278; GFX940-NEXT:    ; def v[0:3]
3279; GFX940-NEXT:    ;;#ASMEND
3280; GFX940-NEXT:    v_mov_b32_e32 v6, 0
3281; GFX940-NEXT:    ;;#ASMSTART
3282; GFX940-NEXT:    ; def v[2:5]
3283; GFX940-NEXT:    ;;#ASMEND
3284; GFX940-NEXT:    s_nop 0
3285; GFX940-NEXT:    v_mov_b32_e32 v4, v1
3286; GFX940-NEXT:    global_store_dwordx2 v6, v[4:5], s[0:1] sc0 sc1
3287; GFX940-NEXT:    s_waitcnt vmcnt(0)
3288; GFX940-NEXT:    s_setpc_b64 s[30:31]
3289  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3290  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3291  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 7>
3292  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3293  ret void
3294}
3295
3296define void @v_shuffle_v2i32_v4i32__2_7(ptr addrspace(1) inreg %ptr) {
3297; GFX900-LABEL: v_shuffle_v2i32_v4i32__2_7:
3298; GFX900:       ; %bb.0:
3299; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3300; GFX900-NEXT:    ;;#ASMSTART
3301; GFX900-NEXT:    ; def v[0:3]
3302; GFX900-NEXT:    ;;#ASMEND
3303; GFX900-NEXT:    ;;#ASMSTART
3304; GFX900-NEXT:    ; def v[3:6]
3305; GFX900-NEXT:    ;;#ASMEND
3306; GFX900-NEXT:    v_mov_b32_e32 v7, 0
3307; GFX900-NEXT:    v_mov_b32_e32 v3, v6
3308; GFX900-NEXT:    global_store_dwordx2 v7, v[2:3], s[16:17]
3309; GFX900-NEXT:    s_waitcnt vmcnt(0)
3310; GFX900-NEXT:    s_setpc_b64 s[30:31]
3311;
3312; GFX90A-LABEL: v_shuffle_v2i32_v4i32__2_7:
3313; GFX90A:       ; %bb.0:
3314; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3315; GFX90A-NEXT:    ;;#ASMSTART
3316; GFX90A-NEXT:    ; def v[0:3]
3317; GFX90A-NEXT:    ;;#ASMEND
3318; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
3319; GFX90A-NEXT:    ;;#ASMSTART
3320; GFX90A-NEXT:    ; def v[4:7]
3321; GFX90A-NEXT:    ;;#ASMEND
3322; GFX90A-NEXT:    v_mov_b32_e32 v3, v7
3323; GFX90A-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17]
3324; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3325; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3326;
3327; GFX940-LABEL: v_shuffle_v2i32_v4i32__2_7:
3328; GFX940:       ; %bb.0:
3329; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3330; GFX940-NEXT:    ;;#ASMSTART
3331; GFX940-NEXT:    ; def v[0:3]
3332; GFX940-NEXT:    ;;#ASMEND
3333; GFX940-NEXT:    v_mov_b32_e32 v8, 0
3334; GFX940-NEXT:    ;;#ASMSTART
3335; GFX940-NEXT:    ; def v[4:7]
3336; GFX940-NEXT:    ;;#ASMEND
3337; GFX940-NEXT:    s_nop 0
3338; GFX940-NEXT:    v_mov_b32_e32 v3, v7
3339; GFX940-NEXT:    global_store_dwordx2 v8, v[2:3], s[0:1] sc0 sc1
3340; GFX940-NEXT:    s_waitcnt vmcnt(0)
3341; GFX940-NEXT:    s_setpc_b64 s[30:31]
3342  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3343  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3344  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 7>
3345  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3346  ret void
3347}
3348
3349define void @v_shuffle_v2i32_v4i32__3_7(ptr addrspace(1) inreg %ptr) {
3350; GFX900-LABEL: v_shuffle_v2i32_v4i32__3_7:
3351; GFX900:       ; %bb.0:
3352; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3353; GFX900-NEXT:    ;;#ASMSTART
3354; GFX900-NEXT:    ; def v[4:7]
3355; GFX900-NEXT:    ;;#ASMEND
3356; GFX900-NEXT:    v_mov_b32_e32 v8, 0
3357; GFX900-NEXT:    ;;#ASMSTART
3358; GFX900-NEXT:    ; def v[0:3]
3359; GFX900-NEXT:    ;;#ASMEND
3360; GFX900-NEXT:    v_mov_b32_e32 v6, v3
3361; GFX900-NEXT:    global_store_dwordx2 v8, v[6:7], s[16:17]
3362; GFX900-NEXT:    s_waitcnt vmcnt(0)
3363; GFX900-NEXT:    s_setpc_b64 s[30:31]
3364;
3365; GFX90A-LABEL: v_shuffle_v2i32_v4i32__3_7:
3366; GFX90A:       ; %bb.0:
3367; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3368; GFX90A-NEXT:    ;;#ASMSTART
3369; GFX90A-NEXT:    ; def v[4:7]
3370; GFX90A-NEXT:    ;;#ASMEND
3371; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
3372; GFX90A-NEXT:    ;;#ASMSTART
3373; GFX90A-NEXT:    ; def v[0:3]
3374; GFX90A-NEXT:    ;;#ASMEND
3375; GFX90A-NEXT:    v_mov_b32_e32 v6, v3
3376; GFX90A-NEXT:    global_store_dwordx2 v8, v[6:7], s[16:17]
3377; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3378; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3379;
3380; GFX940-LABEL: v_shuffle_v2i32_v4i32__3_7:
3381; GFX940:       ; %bb.0:
3382; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3383; GFX940-NEXT:    ;;#ASMSTART
3384; GFX940-NEXT:    ; def v[4:7]
3385; GFX940-NEXT:    ;;#ASMEND
3386; GFX940-NEXT:    v_mov_b32_e32 v8, 0
3387; GFX940-NEXT:    ;;#ASMSTART
3388; GFX940-NEXT:    ; def v[0:3]
3389; GFX940-NEXT:    ;;#ASMEND
3390; GFX940-NEXT:    s_nop 0
3391; GFX940-NEXT:    v_mov_b32_e32 v6, v3
3392; GFX940-NEXT:    global_store_dwordx2 v8, v[6:7], s[0:1] sc0 sc1
3393; GFX940-NEXT:    s_waitcnt vmcnt(0)
3394; GFX940-NEXT:    s_setpc_b64 s[30:31]
3395  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3396  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3397  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 7>
3398  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3399  ret void
3400}
3401
3402define void @v_shuffle_v2i32_v4i32__4_7(ptr addrspace(1) inreg %ptr) {
3403; GFX900-LABEL: v_shuffle_v2i32_v4i32__4_7:
3404; GFX900:       ; %bb.0:
3405; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3406; GFX900-NEXT:    ;;#ASMSTART
3407; GFX900-NEXT:    ; def v[0:3]
3408; GFX900-NEXT:    ;;#ASMEND
3409; GFX900-NEXT:    v_mov_b32_e32 v4, 0
3410; GFX900-NEXT:    v_mov_b32_e32 v1, v3
3411; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
3412; GFX900-NEXT:    s_waitcnt vmcnt(0)
3413; GFX900-NEXT:    s_setpc_b64 s[30:31]
3414;
3415; GFX90A-LABEL: v_shuffle_v2i32_v4i32__4_7:
3416; GFX90A:       ; %bb.0:
3417; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3418; GFX90A-NEXT:    ;;#ASMSTART
3419; GFX90A-NEXT:    ; def v[0:3]
3420; GFX90A-NEXT:    ;;#ASMEND
3421; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
3422; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
3423; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17]
3424; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3425; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3426;
3427; GFX940-LABEL: v_shuffle_v2i32_v4i32__4_7:
3428; GFX940:       ; %bb.0:
3429; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3430; GFX940-NEXT:    ;;#ASMSTART
3431; GFX940-NEXT:    ; def v[0:3]
3432; GFX940-NEXT:    ;;#ASMEND
3433; GFX940-NEXT:    v_mov_b32_e32 v4, 0
3434; GFX940-NEXT:    v_mov_b32_e32 v1, v3
3435; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] sc0 sc1
3436; GFX940-NEXT:    s_waitcnt vmcnt(0)
3437; GFX940-NEXT:    s_setpc_b64 s[30:31]
3438  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3439  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3440  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 7>
3441  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3442  ret void
3443}
3444
3445define void @v_shuffle_v2i32_v4i32__5_7(ptr addrspace(1) inreg %ptr) {
3446; GFX900-LABEL: v_shuffle_v2i32_v4i32__5_7:
3447; GFX900:       ; %bb.0:
3448; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3449; GFX900-NEXT:    ;;#ASMSTART
3450; GFX900-NEXT:    ; def v[0:3]
3451; GFX900-NEXT:    ;;#ASMEND
3452; GFX900-NEXT:    v_mov_b32_e32 v4, 0
3453; GFX900-NEXT:    v_mov_b32_e32 v2, v3
3454; GFX900-NEXT:    global_store_dwordx2 v4, v[1:2], s[16:17]
3455; GFX900-NEXT:    s_waitcnt vmcnt(0)
3456; GFX900-NEXT:    s_setpc_b64 s[30:31]
3457;
3458; GFX90A-LABEL: v_shuffle_v2i32_v4i32__5_7:
3459; GFX90A:       ; %bb.0:
3460; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3461; GFX90A-NEXT:    ;;#ASMSTART
3462; GFX90A-NEXT:    ; def v[0:3]
3463; GFX90A-NEXT:    ;;#ASMEND
3464; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
3465; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
3466; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
3467; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3468; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3469;
3470; GFX940-LABEL: v_shuffle_v2i32_v4i32__5_7:
3471; GFX940:       ; %bb.0:
3472; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3473; GFX940-NEXT:    ;;#ASMSTART
3474; GFX940-NEXT:    ; def v[0:3]
3475; GFX940-NEXT:    ;;#ASMEND
3476; GFX940-NEXT:    v_mov_b32_e32 v4, 0
3477; GFX940-NEXT:    v_mov_b32_e32 v2, v1
3478; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
3479; GFX940-NEXT:    s_waitcnt vmcnt(0)
3480; GFX940-NEXT:    s_setpc_b64 s[30:31]
3481  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3482  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3483  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 7>
3484  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3485  ret void
3486}
3487
3488define void @v_shuffle_v2i32_v4i32__6_7(ptr addrspace(1) inreg %ptr) {
3489; GFX900-LABEL: v_shuffle_v2i32_v4i32__6_7:
3490; GFX900:       ; %bb.0:
3491; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3492; GFX900-NEXT:    v_mov_b32_e32 v4, 0
3493; GFX900-NEXT:    ;;#ASMSTART
3494; GFX900-NEXT:    ; def v[0:3]
3495; GFX900-NEXT:    ;;#ASMEND
3496; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
3497; GFX900-NEXT:    s_waitcnt vmcnt(0)
3498; GFX900-NEXT:    s_setpc_b64 s[30:31]
3499;
3500; GFX90A-LABEL: v_shuffle_v2i32_v4i32__6_7:
3501; GFX90A:       ; %bb.0:
3502; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3503; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
3504; GFX90A-NEXT:    ;;#ASMSTART
3505; GFX90A-NEXT:    ; def v[0:3]
3506; GFX90A-NEXT:    ;;#ASMEND
3507; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17]
3508; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3509; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3510;
3511; GFX940-LABEL: v_shuffle_v2i32_v4i32__6_7:
3512; GFX940:       ; %bb.0:
3513; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3514; GFX940-NEXT:    v_mov_b32_e32 v4, 0
3515; GFX940-NEXT:    ;;#ASMSTART
3516; GFX940-NEXT:    ; def v[0:3]
3517; GFX940-NEXT:    ;;#ASMEND
3518; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] sc0 sc1
3519; GFX940-NEXT:    s_waitcnt vmcnt(0)
3520; GFX940-NEXT:    s_setpc_b64 s[30:31]
3521  %vec0 = call <4 x i32> asm "; def $0", "=v"()
3522  %vec1 = call <4 x i32> asm "; def $0", "=v"()
3523  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 7>
3524  store <2 x i32> %shuf, ptr addrspace(1) %ptr, align 8
3525  ret void
3526}
3527
3528define void @s_shuffle_v2i32_v4i32__u_u() {
3529; GFX9-LABEL: s_shuffle_v2i32_v4i32__u_u:
3530; GFX9:       ; %bb.0:
3531; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3532; GFX9-NEXT:    ;;#ASMSTART
3533; GFX9-NEXT:    ; use s[8:9]
3534; GFX9-NEXT:    ;;#ASMEND
3535; GFX9-NEXT:    s_setpc_b64 s[30:31]
3536  %vec0 = call <4 x i32> asm "; def $0", "=s"()
3537  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> poison
3538  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
3539  ret void
3540}
3541
3542define void @s_shuffle_v2i32_v4i32__0_u() {
3543; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_u:
3544; GFX900:       ; %bb.0:
3545; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3546; GFX900-NEXT:    ;;#ASMSTART
3547; GFX900-NEXT:    ; def s[8:11]
3548; GFX900-NEXT:    ;;#ASMEND
3549; GFX900-NEXT:    ;;#ASMSTART
3550; GFX900-NEXT:    ; use s[8:9]
3551; GFX900-NEXT:    ;;#ASMEND
3552; GFX900-NEXT:    s_setpc_b64 s[30:31]
3553;
3554; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_u:
3555; GFX90A:       ; %bb.0:
3556; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3557; GFX90A-NEXT:    ;;#ASMSTART
3558; GFX90A-NEXT:    ; def s[8:11]
3559; GFX90A-NEXT:    ;;#ASMEND
3560; GFX90A-NEXT:    ;;#ASMSTART
3561; GFX90A-NEXT:    ; use s[8:9]
3562; GFX90A-NEXT:    ;;#ASMEND
3563; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3564;
3565; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_u:
3566; GFX940:       ; %bb.0:
3567; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3568; GFX940-NEXT:    ;;#ASMSTART
3569; GFX940-NEXT:    ; def s[8:11]
3570; GFX940-NEXT:    ;;#ASMEND
3571; GFX940-NEXT:    s_nop 0
3572; GFX940-NEXT:    ;;#ASMSTART
3573; GFX940-NEXT:    ; use s[8:9]
3574; GFX940-NEXT:    ;;#ASMEND
3575; GFX940-NEXT:    s_setpc_b64 s[30:31]
3576  %vec0 = call <4 x i32> asm "; def $0", "=s"()
3577  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 poison>
3578  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
3579  ret void
3580}
3581
3582define void @s_shuffle_v2i32_v4i32__1_u() {
3583; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_u:
3584; GFX900:       ; %bb.0:
3585; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3586; GFX900-NEXT:    ;;#ASMSTART
3587; GFX900-NEXT:    ; def s[4:7]
3588; GFX900-NEXT:    ;;#ASMEND
3589; GFX900-NEXT:    s_mov_b32 s8, s5
3590; GFX900-NEXT:    ;;#ASMSTART
3591; GFX900-NEXT:    ; use s[8:9]
3592; GFX900-NEXT:    ;;#ASMEND
3593; GFX900-NEXT:    s_setpc_b64 s[30:31]
3594;
3595; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_u:
3596; GFX90A:       ; %bb.0:
3597; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3598; GFX90A-NEXT:    ;;#ASMSTART
3599; GFX90A-NEXT:    ; def s[4:7]
3600; GFX90A-NEXT:    ;;#ASMEND
3601; GFX90A-NEXT:    s_mov_b32 s8, s5
3602; GFX90A-NEXT:    ;;#ASMSTART
3603; GFX90A-NEXT:    ; use s[8:9]
3604; GFX90A-NEXT:    ;;#ASMEND
3605; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3606;
3607; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_u:
3608; GFX940:       ; %bb.0:
3609; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3610; GFX940-NEXT:    ;;#ASMSTART
3611; GFX940-NEXT:    ; def s[0:3]
3612; GFX940-NEXT:    ;;#ASMEND
3613; GFX940-NEXT:    s_mov_b32 s8, s1
3614; GFX940-NEXT:    ;;#ASMSTART
3615; GFX940-NEXT:    ; use s[8:9]
3616; GFX940-NEXT:    ;;#ASMEND
3617; GFX940-NEXT:    s_setpc_b64 s[30:31]
3618  %vec0 = call <4 x i32> asm "; def $0", "=s"()
3619  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 poison>
3620  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
3621  ret void
3622}
3623
3624define void @s_shuffle_v2i32_v4i32__2_u() {
3625; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_u:
3626; GFX900:       ; %bb.0:
3627; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3628; GFX900-NEXT:    ;;#ASMSTART
3629; GFX900-NEXT:    ; def s[4:7]
3630; GFX900-NEXT:    ;;#ASMEND
3631; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
3632; GFX900-NEXT:    ;;#ASMSTART
3633; GFX900-NEXT:    ; use s[8:9]
3634; GFX900-NEXT:    ;;#ASMEND
3635; GFX900-NEXT:    s_setpc_b64 s[30:31]
3636;
3637; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_u:
3638; GFX90A:       ; %bb.0:
3639; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3640; GFX90A-NEXT:    ;;#ASMSTART
3641; GFX90A-NEXT:    ; def s[4:7]
3642; GFX90A-NEXT:    ;;#ASMEND
3643; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
3644; GFX90A-NEXT:    ;;#ASMSTART
3645; GFX90A-NEXT:    ; use s[8:9]
3646; GFX90A-NEXT:    ;;#ASMEND
3647; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3648;
3649; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_u:
3650; GFX940:       ; %bb.0:
3651; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3652; GFX940-NEXT:    ;;#ASMSTART
3653; GFX940-NEXT:    ; def s[0:3]
3654; GFX940-NEXT:    ;;#ASMEND
3655; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
3656; GFX940-NEXT:    ;;#ASMSTART
3657; GFX940-NEXT:    ; use s[8:9]
3658; GFX940-NEXT:    ;;#ASMEND
3659; GFX940-NEXT:    s_setpc_b64 s[30:31]
3660  %vec0 = call <4 x i32> asm "; def $0", "=s"()
3661  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 poison>
3662  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
3663  ret void
3664}
3665
3666define void @s_shuffle_v2i32_v4i32__3_u() {
3667; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_u:
3668; GFX900:       ; %bb.0:
3669; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3670; GFX900-NEXT:    ;;#ASMSTART
3671; GFX900-NEXT:    ; def s[4:7]
3672; GFX900-NEXT:    ;;#ASMEND
3673; GFX900-NEXT:    s_mov_b32 s8, s7
3674; GFX900-NEXT:    ;;#ASMSTART
3675; GFX900-NEXT:    ; use s[8:9]
3676; GFX900-NEXT:    ;;#ASMEND
3677; GFX900-NEXT:    s_setpc_b64 s[30:31]
3678;
3679; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_u:
3680; GFX90A:       ; %bb.0:
3681; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3682; GFX90A-NEXT:    ;;#ASMSTART
3683; GFX90A-NEXT:    ; def s[4:7]
3684; GFX90A-NEXT:    ;;#ASMEND
3685; GFX90A-NEXT:    s_mov_b32 s8, s7
3686; GFX90A-NEXT:    ;;#ASMSTART
3687; GFX90A-NEXT:    ; use s[8:9]
3688; GFX90A-NEXT:    ;;#ASMEND
3689; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3690;
3691; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_u:
3692; GFX940:       ; %bb.0:
3693; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3694; GFX940-NEXT:    ;;#ASMSTART
3695; GFX940-NEXT:    ; def s[0:3]
3696; GFX940-NEXT:    ;;#ASMEND
3697; GFX940-NEXT:    s_mov_b32 s8, s3
3698; GFX940-NEXT:    ;;#ASMSTART
3699; GFX940-NEXT:    ; use s[8:9]
3700; GFX940-NEXT:    ;;#ASMEND
3701; GFX940-NEXT:    s_setpc_b64 s[30:31]
3702  %vec0 = call <4 x i32> asm "; def $0", "=s"()
3703  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 poison>
3704  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
3705  ret void
3706}
3707
3708define void @s_shuffle_v2i32_v4i32__4_u() {
3709; GFX9-LABEL: s_shuffle_v2i32_v4i32__4_u:
3710; GFX9:       ; %bb.0:
3711; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3712; GFX9-NEXT:    ;;#ASMSTART
3713; GFX9-NEXT:    ; use s[8:9]
3714; GFX9-NEXT:    ;;#ASMEND
3715; GFX9-NEXT:    s_setpc_b64 s[30:31]
3716  %vec0 = call <4 x i32> asm "; def $0", "=s"()
3717  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 poison>
3718  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
3719  ret void
3720}
3721
3722define void @s_shuffle_v2i32_v4i32__5_u() {
3723; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_u:
3724; GFX900:       ; %bb.0:
3725; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3726; GFX900-NEXT:    ;;#ASMSTART
3727; GFX900-NEXT:    ; def s[4:7]
3728; GFX900-NEXT:    ;;#ASMEND
3729; GFX900-NEXT:    s_mov_b32 s8, s5
3730; GFX900-NEXT:    ;;#ASMSTART
3731; GFX900-NEXT:    ; use s[8:9]
3732; GFX900-NEXT:    ;;#ASMEND
3733; GFX900-NEXT:    s_setpc_b64 s[30:31]
3734;
3735; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_u:
3736; GFX90A:       ; %bb.0:
3737; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3738; GFX90A-NEXT:    ;;#ASMSTART
3739; GFX90A-NEXT:    ; def s[4:7]
3740; GFX90A-NEXT:    ;;#ASMEND
3741; GFX90A-NEXT:    s_mov_b32 s8, s5
3742; GFX90A-NEXT:    ;;#ASMSTART
3743; GFX90A-NEXT:    ; use s[8:9]
3744; GFX90A-NEXT:    ;;#ASMEND
3745; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3746;
3747; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_u:
3748; GFX940:       ; %bb.0:
3749; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3750; GFX940-NEXT:    ;;#ASMSTART
3751; GFX940-NEXT:    ; def s[0:3]
3752; GFX940-NEXT:    ;;#ASMEND
3753; GFX940-NEXT:    s_mov_b32 s8, s1
3754; GFX940-NEXT:    ;;#ASMSTART
3755; GFX940-NEXT:    ; use s[8:9]
3756; GFX940-NEXT:    ;;#ASMEND
3757; GFX940-NEXT:    s_setpc_b64 s[30:31]
3758  %vec0 = call <4 x i32> asm "; def $0", "=s"()
3759  %vec1 = call <4 x i32> asm "; def $0", "=s"()
3760  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 poison>
3761  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
3762  ret void
3763}
3764
3765define void @s_shuffle_v2i32_v4i32__6_u() {
3766; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_u:
3767; GFX900:       ; %bb.0:
3768; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3769; GFX900-NEXT:    ;;#ASMSTART
3770; GFX900-NEXT:    ; def s[4:7]
3771; GFX900-NEXT:    ;;#ASMEND
3772; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
3773; GFX900-NEXT:    ;;#ASMSTART
3774; GFX900-NEXT:    ; use s[8:9]
3775; GFX900-NEXT:    ;;#ASMEND
3776; GFX900-NEXT:    s_setpc_b64 s[30:31]
3777;
3778; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_u:
3779; GFX90A:       ; %bb.0:
3780; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3781; GFX90A-NEXT:    ;;#ASMSTART
3782; GFX90A-NEXT:    ; def s[4:7]
3783; GFX90A-NEXT:    ;;#ASMEND
3784; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
3785; GFX90A-NEXT:    ;;#ASMSTART
3786; GFX90A-NEXT:    ; use s[8:9]
3787; GFX90A-NEXT:    ;;#ASMEND
3788; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3789;
3790; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_u:
3791; GFX940:       ; %bb.0:
3792; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3793; GFX940-NEXT:    ;;#ASMSTART
3794; GFX940-NEXT:    ; def s[0:3]
3795; GFX940-NEXT:    ;;#ASMEND
3796; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
3797; GFX940-NEXT:    ;;#ASMSTART
3798; GFX940-NEXT:    ; use s[8:9]
3799; GFX940-NEXT:    ;;#ASMEND
3800; GFX940-NEXT:    s_setpc_b64 s[30:31]
3801  %vec0 = call <4 x i32> asm "; def $0", "=s"()
3802  %vec1 = call <4 x i32> asm "; def $0", "=s"()
3803  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 poison>
3804  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
3805  ret void
3806}
3807
3808define void @s_shuffle_v2i32_v4i32__7_u() {
3809; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_u:
3810; GFX900:       ; %bb.0:
3811; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3812; GFX900-NEXT:    ;;#ASMSTART
3813; GFX900-NEXT:    ; def s[4:7]
3814; GFX900-NEXT:    ;;#ASMEND
3815; GFX900-NEXT:    s_mov_b32 s8, s7
3816; GFX900-NEXT:    ;;#ASMSTART
3817; GFX900-NEXT:    ; use s[8:9]
3818; GFX900-NEXT:    ;;#ASMEND
3819; GFX900-NEXT:    s_setpc_b64 s[30:31]
3820;
3821; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_u:
3822; GFX90A:       ; %bb.0:
3823; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3824; GFX90A-NEXT:    ;;#ASMSTART
3825; GFX90A-NEXT:    ; def s[4:7]
3826; GFX90A-NEXT:    ;;#ASMEND
3827; GFX90A-NEXT:    s_mov_b32 s8, s7
3828; GFX90A-NEXT:    ;;#ASMSTART
3829; GFX90A-NEXT:    ; use s[8:9]
3830; GFX90A-NEXT:    ;;#ASMEND
3831; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3832;
3833; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_u:
3834; GFX940:       ; %bb.0:
3835; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3836; GFX940-NEXT:    ;;#ASMSTART
3837; GFX940-NEXT:    ; def s[0:3]
3838; GFX940-NEXT:    ;;#ASMEND
3839; GFX940-NEXT:    s_mov_b32 s8, s3
3840; GFX940-NEXT:    ;;#ASMSTART
3841; GFX940-NEXT:    ; use s[8:9]
3842; GFX940-NEXT:    ;;#ASMEND
3843; GFX940-NEXT:    s_setpc_b64 s[30:31]
3844  %vec0 = call <4 x i32> asm "; def $0", "=s"()
3845  %vec1 = call <4 x i32> asm "; def $0", "=s"()
3846  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 poison>
3847  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
3848  ret void
3849}
3850
3851define void @s_shuffle_v2i32_v4i32__7_0() {
3852; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_0:
3853; GFX900:       ; %bb.0:
3854; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3855; GFX900-NEXT:    ;;#ASMSTART
3856; GFX900-NEXT:    ; def s[8:11]
3857; GFX900-NEXT:    ;;#ASMEND
3858; GFX900-NEXT:    ;;#ASMSTART
3859; GFX900-NEXT:    ; def s[4:7]
3860; GFX900-NEXT:    ;;#ASMEND
3861; GFX900-NEXT:    s_mov_b32 s8, s11
3862; GFX900-NEXT:    s_mov_b32 s9, s4
3863; GFX900-NEXT:    ;;#ASMSTART
3864; GFX900-NEXT:    ; use s[8:9]
3865; GFX900-NEXT:    ;;#ASMEND
3866; GFX900-NEXT:    s_setpc_b64 s[30:31]
3867;
3868; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_0:
3869; GFX90A:       ; %bb.0:
3870; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3871; GFX90A-NEXT:    ;;#ASMSTART
3872; GFX90A-NEXT:    ; def s[8:11]
3873; GFX90A-NEXT:    ;;#ASMEND
3874; GFX90A-NEXT:    ;;#ASMSTART
3875; GFX90A-NEXT:    ; def s[4:7]
3876; GFX90A-NEXT:    ;;#ASMEND
3877; GFX90A-NEXT:    s_mov_b32 s8, s11
3878; GFX90A-NEXT:    s_mov_b32 s9, s4
3879; GFX90A-NEXT:    ;;#ASMSTART
3880; GFX90A-NEXT:    ; use s[8:9]
3881; GFX90A-NEXT:    ;;#ASMEND
3882; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3883;
3884; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_0:
3885; GFX940:       ; %bb.0:
3886; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3887; GFX940-NEXT:    ;;#ASMSTART
3888; GFX940-NEXT:    ; def s[0:3]
3889; GFX940-NEXT:    ;;#ASMEND
3890; GFX940-NEXT:    ;;#ASMSTART
3891; GFX940-NEXT:    ; def s[4:7]
3892; GFX940-NEXT:    ;;#ASMEND
3893; GFX940-NEXT:    s_mov_b32 s8, s7
3894; GFX940-NEXT:    s_mov_b32 s9, s0
3895; GFX940-NEXT:    ;;#ASMSTART
3896; GFX940-NEXT:    ; use s[8:9]
3897; GFX940-NEXT:    ;;#ASMEND
3898; GFX940-NEXT:    s_setpc_b64 s[30:31]
3899  %vec0 = call <4 x i32> asm "; def $0", "=s"()
3900  %vec1 = call <4 x i32> asm "; def $0", "=s"()
3901  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 0>
3902  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
3903  ret void
3904}
3905
3906define void @s_shuffle_v2i32_v4i32__7_1() {
3907; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_1:
3908; GFX900:       ; %bb.0:
3909; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3910; GFX900-NEXT:    ;;#ASMSTART
3911; GFX900-NEXT:    ; def s[8:11]
3912; GFX900-NEXT:    ;;#ASMEND
3913; GFX900-NEXT:    ;;#ASMSTART
3914; GFX900-NEXT:    ; def s[4:7]
3915; GFX900-NEXT:    ;;#ASMEND
3916; GFX900-NEXT:    s_mov_b32 s8, s7
3917; GFX900-NEXT:    ;;#ASMSTART
3918; GFX900-NEXT:    ; use s[8:9]
3919; GFX900-NEXT:    ;;#ASMEND
3920; GFX900-NEXT:    s_setpc_b64 s[30:31]
3921;
3922; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_1:
3923; GFX90A:       ; %bb.0:
3924; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3925; GFX90A-NEXT:    ;;#ASMSTART
3926; GFX90A-NEXT:    ; def s[8:11]
3927; GFX90A-NEXT:    ;;#ASMEND
3928; GFX90A-NEXT:    ;;#ASMSTART
3929; GFX90A-NEXT:    ; def s[4:7]
3930; GFX90A-NEXT:    ;;#ASMEND
3931; GFX90A-NEXT:    s_mov_b32 s8, s7
3932; GFX90A-NEXT:    ;;#ASMSTART
3933; GFX90A-NEXT:    ; use s[8:9]
3934; GFX90A-NEXT:    ;;#ASMEND
3935; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3936;
3937; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_1:
3938; GFX940:       ; %bb.0:
3939; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3940; GFX940-NEXT:    ;;#ASMSTART
3941; GFX940-NEXT:    ; def s[8:11]
3942; GFX940-NEXT:    ;;#ASMEND
3943; GFX940-NEXT:    ;;#ASMSTART
3944; GFX940-NEXT:    ; def s[0:3]
3945; GFX940-NEXT:    ;;#ASMEND
3946; GFX940-NEXT:    s_mov_b32 s8, s3
3947; GFX940-NEXT:    ;;#ASMSTART
3948; GFX940-NEXT:    ; use s[8:9]
3949; GFX940-NEXT:    ;;#ASMEND
3950; GFX940-NEXT:    s_setpc_b64 s[30:31]
3951  %vec0 = call <4 x i32> asm "; def $0", "=s"()
3952  %vec1 = call <4 x i32> asm "; def $0", "=s"()
3953  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 1>
3954  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
3955  ret void
3956}
3957
3958define void @s_shuffle_v2i32_v4i32__7_2() {
3959; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_2:
3960; GFX900:       ; %bb.0:
3961; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3962; GFX900-NEXT:    ;;#ASMSTART
3963; GFX900-NEXT:    ; def s[8:11]
3964; GFX900-NEXT:    ;;#ASMEND
3965; GFX900-NEXT:    ;;#ASMSTART
3966; GFX900-NEXT:    ; def s[4:7]
3967; GFX900-NEXT:    ;;#ASMEND
3968; GFX900-NEXT:    s_mov_b32 s8, s11
3969; GFX900-NEXT:    s_mov_b32 s9, s6
3970; GFX900-NEXT:    ;;#ASMSTART
3971; GFX900-NEXT:    ; use s[8:9]
3972; GFX900-NEXT:    ;;#ASMEND
3973; GFX900-NEXT:    s_setpc_b64 s[30:31]
3974;
3975; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_2:
3976; GFX90A:       ; %bb.0:
3977; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3978; GFX90A-NEXT:    ;;#ASMSTART
3979; GFX90A-NEXT:    ; def s[8:11]
3980; GFX90A-NEXT:    ;;#ASMEND
3981; GFX90A-NEXT:    ;;#ASMSTART
3982; GFX90A-NEXT:    ; def s[4:7]
3983; GFX90A-NEXT:    ;;#ASMEND
3984; GFX90A-NEXT:    s_mov_b32 s8, s11
3985; GFX90A-NEXT:    s_mov_b32 s9, s6
3986; GFX90A-NEXT:    ;;#ASMSTART
3987; GFX90A-NEXT:    ; use s[8:9]
3988; GFX90A-NEXT:    ;;#ASMEND
3989; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3990;
3991; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_2:
3992; GFX940:       ; %bb.0:
3993; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3994; GFX940-NEXT:    ;;#ASMSTART
3995; GFX940-NEXT:    ; def s[0:3]
3996; GFX940-NEXT:    ;;#ASMEND
3997; GFX940-NEXT:    ;;#ASMSTART
3998; GFX940-NEXT:    ; def s[4:7]
3999; GFX940-NEXT:    ;;#ASMEND
4000; GFX940-NEXT:    s_mov_b32 s8, s7
4001; GFX940-NEXT:    s_mov_b32 s9, s2
4002; GFX940-NEXT:    ;;#ASMSTART
4003; GFX940-NEXT:    ; use s[8:9]
4004; GFX940-NEXT:    ;;#ASMEND
4005; GFX940-NEXT:    s_setpc_b64 s[30:31]
4006  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4007  %vec1 = call <4 x i32> asm "; def $0", "=s"()
4008  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 2>
4009  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4010  ret void
4011}
4012
4013define void @s_shuffle_v2i32_v4i32__7_3() {
4014; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_3:
4015; GFX900:       ; %bb.0:
4016; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4017; GFX900-NEXT:    ;;#ASMSTART
4018; GFX900-NEXT:    ; def s[4:7]
4019; GFX900-NEXT:    ;;#ASMEND
4020; GFX900-NEXT:    ;;#ASMSTART
4021; GFX900-NEXT:    ; def s[8:11]
4022; GFX900-NEXT:    ;;#ASMEND
4023; GFX900-NEXT:    s_mov_b32 s6, s11
4024; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
4025; GFX900-NEXT:    ;;#ASMSTART
4026; GFX900-NEXT:    ; use s[8:9]
4027; GFX900-NEXT:    ;;#ASMEND
4028; GFX900-NEXT:    s_setpc_b64 s[30:31]
4029;
4030; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_3:
4031; GFX90A:       ; %bb.0:
4032; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4033; GFX90A-NEXT:    ;;#ASMSTART
4034; GFX90A-NEXT:    ; def s[4:7]
4035; GFX90A-NEXT:    ;;#ASMEND
4036; GFX90A-NEXT:    ;;#ASMSTART
4037; GFX90A-NEXT:    ; def s[8:11]
4038; GFX90A-NEXT:    ;;#ASMEND
4039; GFX90A-NEXT:    s_mov_b32 s6, s11
4040; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
4041; GFX90A-NEXT:    ;;#ASMSTART
4042; GFX90A-NEXT:    ; use s[8:9]
4043; GFX90A-NEXT:    ;;#ASMEND
4044; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4045;
4046; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_3:
4047; GFX940:       ; %bb.0:
4048; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4049; GFX940-NEXT:    ;;#ASMSTART
4050; GFX940-NEXT:    ; def s[0:3]
4051; GFX940-NEXT:    ;;#ASMEND
4052; GFX940-NEXT:    ;;#ASMSTART
4053; GFX940-NEXT:    ; def s[4:7]
4054; GFX940-NEXT:    ;;#ASMEND
4055; GFX940-NEXT:    s_mov_b32 s2, s7
4056; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
4057; GFX940-NEXT:    ;;#ASMSTART
4058; GFX940-NEXT:    ; use s[8:9]
4059; GFX940-NEXT:    ;;#ASMEND
4060; GFX940-NEXT:    s_setpc_b64 s[30:31]
4061  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4062  %vec1 = call <4 x i32> asm "; def $0", "=s"()
4063  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 3>
4064  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4065  ret void
4066}
4067
4068define void @s_shuffle_v2i32_v4i32__7_4() {
4069; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_4:
4070; GFX900:       ; %bb.0:
4071; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4072; GFX900-NEXT:    ;;#ASMSTART
4073; GFX900-NEXT:    ; def s[4:7]
4074; GFX900-NEXT:    ;;#ASMEND
4075; GFX900-NEXT:    s_mov_b32 s8, s7
4076; GFX900-NEXT:    s_mov_b32 s9, s4
4077; GFX900-NEXT:    ;;#ASMSTART
4078; GFX900-NEXT:    ; use s[8:9]
4079; GFX900-NEXT:    ;;#ASMEND
4080; GFX900-NEXT:    s_setpc_b64 s[30:31]
4081;
4082; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_4:
4083; GFX90A:       ; %bb.0:
4084; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4085; GFX90A-NEXT:    ;;#ASMSTART
4086; GFX90A-NEXT:    ; def s[4:7]
4087; GFX90A-NEXT:    ;;#ASMEND
4088; GFX90A-NEXT:    s_mov_b32 s8, s7
4089; GFX90A-NEXT:    s_mov_b32 s9, s4
4090; GFX90A-NEXT:    ;;#ASMSTART
4091; GFX90A-NEXT:    ; use s[8:9]
4092; GFX90A-NEXT:    ;;#ASMEND
4093; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4094;
4095; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_4:
4096; GFX940:       ; %bb.0:
4097; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4098; GFX940-NEXT:    ;;#ASMSTART
4099; GFX940-NEXT:    ; def s[0:3]
4100; GFX940-NEXT:    ;;#ASMEND
4101; GFX940-NEXT:    s_mov_b32 s8, s3
4102; GFX940-NEXT:    s_mov_b32 s9, s0
4103; GFX940-NEXT:    ;;#ASMSTART
4104; GFX940-NEXT:    ; use s[8:9]
4105; GFX940-NEXT:    ;;#ASMEND
4106; GFX940-NEXT:    s_setpc_b64 s[30:31]
4107  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4108  %vec1 = call <4 x i32> asm "; def $0", "=s"()
4109  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 4>
4110  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4111  ret void
4112}
4113
4114define void @s_shuffle_v2i32_v4i32__7_5() {
4115; GFX9-LABEL: s_shuffle_v2i32_v4i32__7_5:
4116; GFX9:       ; %bb.0:
4117; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4118; GFX9-NEXT:    ;;#ASMSTART
4119; GFX9-NEXT:    ; def s[8:11]
4120; GFX9-NEXT:    ;;#ASMEND
4121; GFX9-NEXT:    s_mov_b32 s8, s11
4122; GFX9-NEXT:    ;;#ASMSTART
4123; GFX9-NEXT:    ; use s[8:9]
4124; GFX9-NEXT:    ;;#ASMEND
4125; GFX9-NEXT:    s_setpc_b64 s[30:31]
4126  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4127  %vec1 = call <4 x i32> asm "; def $0", "=s"()
4128  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 5>
4129  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4130  ret void
4131}
4132
4133define void @s_shuffle_v2i32_v4i32__7_6() {
4134; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_6:
4135; GFX900:       ; %bb.0:
4136; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4137; GFX900-NEXT:    ;;#ASMSTART
4138; GFX900-NEXT:    ; def s[4:7]
4139; GFX900-NEXT:    ;;#ASMEND
4140; GFX900-NEXT:    s_mov_b32 s8, s7
4141; GFX900-NEXT:    s_mov_b32 s9, s6
4142; GFX900-NEXT:    ;;#ASMSTART
4143; GFX900-NEXT:    ; use s[8:9]
4144; GFX900-NEXT:    ;;#ASMEND
4145; GFX900-NEXT:    s_setpc_b64 s[30:31]
4146;
4147; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_6:
4148; GFX90A:       ; %bb.0:
4149; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4150; GFX90A-NEXT:    ;;#ASMSTART
4151; GFX90A-NEXT:    ; def s[4:7]
4152; GFX90A-NEXT:    ;;#ASMEND
4153; GFX90A-NEXT:    s_mov_b32 s8, s7
4154; GFX90A-NEXT:    s_mov_b32 s9, s6
4155; GFX90A-NEXT:    ;;#ASMSTART
4156; GFX90A-NEXT:    ; use s[8:9]
4157; GFX90A-NEXT:    ;;#ASMEND
4158; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4159;
4160; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_6:
4161; GFX940:       ; %bb.0:
4162; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4163; GFX940-NEXT:    ;;#ASMSTART
4164; GFX940-NEXT:    ; def s[0:3]
4165; GFX940-NEXT:    ;;#ASMEND
4166; GFX940-NEXT:    s_mov_b32 s8, s3
4167; GFX940-NEXT:    s_mov_b32 s9, s2
4168; GFX940-NEXT:    ;;#ASMSTART
4169; GFX940-NEXT:    ; use s[8:9]
4170; GFX940-NEXT:    ;;#ASMEND
4171; GFX940-NEXT:    s_setpc_b64 s[30:31]
4172  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4173  %vec1 = call <4 x i32> asm "; def $0", "=s"()
4174  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 6>
4175  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4176  ret void
4177}
4178
4179define void @s_shuffle_v2i32_v4i32__7_7() {
4180; GFX900-LABEL: s_shuffle_v2i32_v4i32__7_7:
4181; GFX900:       ; %bb.0:
4182; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4183; GFX900-NEXT:    ;;#ASMSTART
4184; GFX900-NEXT:    ; def s[4:7]
4185; GFX900-NEXT:    ;;#ASMEND
4186; GFX900-NEXT:    s_mov_b32 s6, s7
4187; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
4188; GFX900-NEXT:    ;;#ASMSTART
4189; GFX900-NEXT:    ; use s[8:9]
4190; GFX900-NEXT:    ;;#ASMEND
4191; GFX900-NEXT:    s_setpc_b64 s[30:31]
4192;
4193; GFX90A-LABEL: s_shuffle_v2i32_v4i32__7_7:
4194; GFX90A:       ; %bb.0:
4195; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4196; GFX90A-NEXT:    ;;#ASMSTART
4197; GFX90A-NEXT:    ; def s[4:7]
4198; GFX90A-NEXT:    ;;#ASMEND
4199; GFX90A-NEXT:    s_mov_b32 s6, s7
4200; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
4201; GFX90A-NEXT:    ;;#ASMSTART
4202; GFX90A-NEXT:    ; use s[8:9]
4203; GFX90A-NEXT:    ;;#ASMEND
4204; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4205;
4206; GFX940-LABEL: s_shuffle_v2i32_v4i32__7_7:
4207; GFX940:       ; %bb.0:
4208; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4209; GFX940-NEXT:    ;;#ASMSTART
4210; GFX940-NEXT:    ; def s[0:3]
4211; GFX940-NEXT:    ;;#ASMEND
4212; GFX940-NEXT:    s_mov_b32 s2, s3
4213; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
4214; GFX940-NEXT:    ;;#ASMSTART
4215; GFX940-NEXT:    ; use s[8:9]
4216; GFX940-NEXT:    ;;#ASMEND
4217; GFX940-NEXT:    s_setpc_b64 s[30:31]
4218  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4219  %vec1 = call <4 x i32> asm "; def $0", "=s"()
4220  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 7, i32 7>
4221  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4222  ret void
4223}
4224
4225define void @s_shuffle_v2i32_v4i32__u_0() {
4226; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_0:
4227; GFX900:       ; %bb.0:
4228; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4229; GFX900-NEXT:    ;;#ASMSTART
4230; GFX900-NEXT:    ; def s[4:7]
4231; GFX900-NEXT:    ;;#ASMEND
4232; GFX900-NEXT:    s_mov_b32 s9, s4
4233; GFX900-NEXT:    ;;#ASMSTART
4234; GFX900-NEXT:    ; use s[8:9]
4235; GFX900-NEXT:    ;;#ASMEND
4236; GFX900-NEXT:    s_setpc_b64 s[30:31]
4237;
4238; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_0:
4239; GFX90A:       ; %bb.0:
4240; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4241; GFX90A-NEXT:    ;;#ASMSTART
4242; GFX90A-NEXT:    ; def s[4:7]
4243; GFX90A-NEXT:    ;;#ASMEND
4244; GFX90A-NEXT:    s_mov_b32 s9, s4
4245; GFX90A-NEXT:    ;;#ASMSTART
4246; GFX90A-NEXT:    ; use s[8:9]
4247; GFX90A-NEXT:    ;;#ASMEND
4248; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4249;
4250; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_0:
4251; GFX940:       ; %bb.0:
4252; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4253; GFX940-NEXT:    ;;#ASMSTART
4254; GFX940-NEXT:    ; def s[0:3]
4255; GFX940-NEXT:    ;;#ASMEND
4256; GFX940-NEXT:    s_mov_b32 s9, s0
4257; GFX940-NEXT:    ;;#ASMSTART
4258; GFX940-NEXT:    ; use s[8:9]
4259; GFX940-NEXT:    ;;#ASMEND
4260; GFX940-NEXT:    s_setpc_b64 s[30:31]
4261  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4262  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 0>
4263  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4264  ret void
4265}
4266
4267define void @s_shuffle_v2i32_v4i32__0_0() {
4268; GFX9-LABEL: s_shuffle_v2i32_v4i32__0_0:
4269; GFX9:       ; %bb.0:
4270; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4271; GFX9-NEXT:    ;;#ASMSTART
4272; GFX9-NEXT:    ; def s[8:11]
4273; GFX9-NEXT:    ;;#ASMEND
4274; GFX9-NEXT:    s_mov_b32 s9, s8
4275; GFX9-NEXT:    ;;#ASMSTART
4276; GFX9-NEXT:    ; use s[8:9]
4277; GFX9-NEXT:    ;;#ASMEND
4278; GFX9-NEXT:    s_setpc_b64 s[30:31]
4279  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4280  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> zeroinitializer
4281  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4282  ret void
4283}
4284
4285define void @s_shuffle_v2i32_v4i32__1_0() {
4286; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_0:
4287; GFX900:       ; %bb.0:
4288; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4289; GFX900-NEXT:    ;;#ASMSTART
4290; GFX900-NEXT:    ; def s[4:7]
4291; GFX900-NEXT:    ;;#ASMEND
4292; GFX900-NEXT:    s_mov_b32 s8, s5
4293; GFX900-NEXT:    s_mov_b32 s9, s4
4294; GFX900-NEXT:    ;;#ASMSTART
4295; GFX900-NEXT:    ; use s[8:9]
4296; GFX900-NEXT:    ;;#ASMEND
4297; GFX900-NEXT:    s_setpc_b64 s[30:31]
4298;
4299; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_0:
4300; GFX90A:       ; %bb.0:
4301; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4302; GFX90A-NEXT:    ;;#ASMSTART
4303; GFX90A-NEXT:    ; def s[4:7]
4304; GFX90A-NEXT:    ;;#ASMEND
4305; GFX90A-NEXT:    s_mov_b32 s8, s5
4306; GFX90A-NEXT:    s_mov_b32 s9, s4
4307; GFX90A-NEXT:    ;;#ASMSTART
4308; GFX90A-NEXT:    ; use s[8:9]
4309; GFX90A-NEXT:    ;;#ASMEND
4310; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4311;
4312; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_0:
4313; GFX940:       ; %bb.0:
4314; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4315; GFX940-NEXT:    ;;#ASMSTART
4316; GFX940-NEXT:    ; def s[0:3]
4317; GFX940-NEXT:    ;;#ASMEND
4318; GFX940-NEXT:    s_mov_b32 s8, s1
4319; GFX940-NEXT:    s_mov_b32 s9, s0
4320; GFX940-NEXT:    ;;#ASMSTART
4321; GFX940-NEXT:    ; use s[8:9]
4322; GFX940-NEXT:    ;;#ASMEND
4323; GFX940-NEXT:    s_setpc_b64 s[30:31]
4324  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4325  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 0>
4326  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4327  ret void
4328}
4329
4330define void @s_shuffle_v2i32_v4i32__2_0() {
4331; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_0:
4332; GFX900:       ; %bb.0:
4333; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4334; GFX900-NEXT:    ;;#ASMSTART
4335; GFX900-NEXT:    ; def s[4:7]
4336; GFX900-NEXT:    ;;#ASMEND
4337; GFX900-NEXT:    s_mov_b32 s7, s4
4338; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
4339; GFX900-NEXT:    ;;#ASMSTART
4340; GFX900-NEXT:    ; use s[8:9]
4341; GFX900-NEXT:    ;;#ASMEND
4342; GFX900-NEXT:    s_setpc_b64 s[30:31]
4343;
4344; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_0:
4345; GFX90A:       ; %bb.0:
4346; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4347; GFX90A-NEXT:    ;;#ASMSTART
4348; GFX90A-NEXT:    ; def s[4:7]
4349; GFX90A-NEXT:    ;;#ASMEND
4350; GFX90A-NEXT:    s_mov_b32 s7, s4
4351; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
4352; GFX90A-NEXT:    ;;#ASMSTART
4353; GFX90A-NEXT:    ; use s[8:9]
4354; GFX90A-NEXT:    ;;#ASMEND
4355; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4356;
4357; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_0:
4358; GFX940:       ; %bb.0:
4359; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4360; GFX940-NEXT:    ;;#ASMSTART
4361; GFX940-NEXT:    ; def s[0:3]
4362; GFX940-NEXT:    ;;#ASMEND
4363; GFX940-NEXT:    s_mov_b32 s3, s0
4364; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
4365; GFX940-NEXT:    ;;#ASMSTART
4366; GFX940-NEXT:    ; use s[8:9]
4367; GFX940-NEXT:    ;;#ASMEND
4368; GFX940-NEXT:    s_setpc_b64 s[30:31]
4369  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4370  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 0>
4371  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4372  ret void
4373}
4374
4375define void @s_shuffle_v2i32_v4i32__3_0() {
4376; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_0:
4377; GFX900:       ; %bb.0:
4378; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4379; GFX900-NEXT:    ;;#ASMSTART
4380; GFX900-NEXT:    ; def s[4:7]
4381; GFX900-NEXT:    ;;#ASMEND
4382; GFX900-NEXT:    s_mov_b32 s8, s7
4383; GFX900-NEXT:    s_mov_b32 s9, s4
4384; GFX900-NEXT:    ;;#ASMSTART
4385; GFX900-NEXT:    ; use s[8:9]
4386; GFX900-NEXT:    ;;#ASMEND
4387; GFX900-NEXT:    s_setpc_b64 s[30:31]
4388;
4389; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_0:
4390; GFX90A:       ; %bb.0:
4391; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4392; GFX90A-NEXT:    ;;#ASMSTART
4393; GFX90A-NEXT:    ; def s[4:7]
4394; GFX90A-NEXT:    ;;#ASMEND
4395; GFX90A-NEXT:    s_mov_b32 s8, s7
4396; GFX90A-NEXT:    s_mov_b32 s9, s4
4397; GFX90A-NEXT:    ;;#ASMSTART
4398; GFX90A-NEXT:    ; use s[8:9]
4399; GFX90A-NEXT:    ;;#ASMEND
4400; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4401;
4402; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_0:
4403; GFX940:       ; %bb.0:
4404; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4405; GFX940-NEXT:    ;;#ASMSTART
4406; GFX940-NEXT:    ; def s[0:3]
4407; GFX940-NEXT:    ;;#ASMEND
4408; GFX940-NEXT:    s_mov_b32 s8, s3
4409; GFX940-NEXT:    s_mov_b32 s9, s0
4410; GFX940-NEXT:    ;;#ASMSTART
4411; GFX940-NEXT:    ; use s[8:9]
4412; GFX940-NEXT:    ;;#ASMEND
4413; GFX940-NEXT:    s_setpc_b64 s[30:31]
4414  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4415  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 0>
4416  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4417  ret void
4418}
4419
4420define void @s_shuffle_v2i32_v4i32__4_0() {
4421; GFX900-LABEL: s_shuffle_v2i32_v4i32__4_0:
4422; GFX900:       ; %bb.0:
4423; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4424; GFX900-NEXT:    ;;#ASMSTART
4425; GFX900-NEXT:    ; def s[4:7]
4426; GFX900-NEXT:    ;;#ASMEND
4427; GFX900-NEXT:    s_mov_b32 s9, s4
4428; GFX900-NEXT:    ;;#ASMSTART
4429; GFX900-NEXT:    ; use s[8:9]
4430; GFX900-NEXT:    ;;#ASMEND
4431; GFX900-NEXT:    s_setpc_b64 s[30:31]
4432;
4433; GFX90A-LABEL: s_shuffle_v2i32_v4i32__4_0:
4434; GFX90A:       ; %bb.0:
4435; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4436; GFX90A-NEXT:    ;;#ASMSTART
4437; GFX90A-NEXT:    ; def s[4:7]
4438; GFX90A-NEXT:    ;;#ASMEND
4439; GFX90A-NEXT:    s_mov_b32 s9, s4
4440; GFX90A-NEXT:    ;;#ASMSTART
4441; GFX90A-NEXT:    ; use s[8:9]
4442; GFX90A-NEXT:    ;;#ASMEND
4443; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4444;
4445; GFX940-LABEL: s_shuffle_v2i32_v4i32__4_0:
4446; GFX940:       ; %bb.0:
4447; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4448; GFX940-NEXT:    ;;#ASMSTART
4449; GFX940-NEXT:    ; def s[0:3]
4450; GFX940-NEXT:    ;;#ASMEND
4451; GFX940-NEXT:    s_mov_b32 s9, s0
4452; GFX940-NEXT:    ;;#ASMSTART
4453; GFX940-NEXT:    ; use s[8:9]
4454; GFX940-NEXT:    ;;#ASMEND
4455; GFX940-NEXT:    s_setpc_b64 s[30:31]
4456  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4457  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 0>
4458  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4459  ret void
4460}
4461
4462define void @s_shuffle_v2i32_v4i32__5_0() {
4463; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_0:
4464; GFX900:       ; %bb.0:
4465; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4466; GFX900-NEXT:    ;;#ASMSTART
4467; GFX900-NEXT:    ; def s[8:11]
4468; GFX900-NEXT:    ;;#ASMEND
4469; GFX900-NEXT:    ;;#ASMSTART
4470; GFX900-NEXT:    ; def s[4:7]
4471; GFX900-NEXT:    ;;#ASMEND
4472; GFX900-NEXT:    s_mov_b32 s8, s9
4473; GFX900-NEXT:    s_mov_b32 s9, s4
4474; GFX900-NEXT:    ;;#ASMSTART
4475; GFX900-NEXT:    ; use s[8:9]
4476; GFX900-NEXT:    ;;#ASMEND
4477; GFX900-NEXT:    s_setpc_b64 s[30:31]
4478;
4479; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_0:
4480; GFX90A:       ; %bb.0:
4481; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4482; GFX90A-NEXT:    ;;#ASMSTART
4483; GFX90A-NEXT:    ; def s[8:11]
4484; GFX90A-NEXT:    ;;#ASMEND
4485; GFX90A-NEXT:    ;;#ASMSTART
4486; GFX90A-NEXT:    ; def s[4:7]
4487; GFX90A-NEXT:    ;;#ASMEND
4488; GFX90A-NEXT:    s_mov_b32 s8, s9
4489; GFX90A-NEXT:    s_mov_b32 s9, s4
4490; GFX90A-NEXT:    ;;#ASMSTART
4491; GFX90A-NEXT:    ; use s[8:9]
4492; GFX90A-NEXT:    ;;#ASMEND
4493; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4494;
4495; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_0:
4496; GFX940:       ; %bb.0:
4497; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4498; GFX940-NEXT:    ;;#ASMSTART
4499; GFX940-NEXT:    ; def s[0:3]
4500; GFX940-NEXT:    ;;#ASMEND
4501; GFX940-NEXT:    ;;#ASMSTART
4502; GFX940-NEXT:    ; def s[4:7]
4503; GFX940-NEXT:    ;;#ASMEND
4504; GFX940-NEXT:    s_mov_b32 s8, s5
4505; GFX940-NEXT:    s_mov_b32 s9, s0
4506; GFX940-NEXT:    ;;#ASMSTART
4507; GFX940-NEXT:    ; use s[8:9]
4508; GFX940-NEXT:    ;;#ASMEND
4509; GFX940-NEXT:    s_setpc_b64 s[30:31]
4510  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4511  %vec1 = call <4 x i32> asm "; def $0", "=s"()
4512  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 0>
4513  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4514  ret void
4515}
4516
4517define void @s_shuffle_v2i32_v4i32__6_0() {
4518; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_0:
4519; GFX900:       ; %bb.0:
4520; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4521; GFX900-NEXT:    ;;#ASMSTART
4522; GFX900-NEXT:    ; def s[8:11]
4523; GFX900-NEXT:    ;;#ASMEND
4524; GFX900-NEXT:    ;;#ASMSTART
4525; GFX900-NEXT:    ; def s[4:7]
4526; GFX900-NEXT:    ;;#ASMEND
4527; GFX900-NEXT:    s_mov_b32 s11, s4
4528; GFX900-NEXT:    s_mov_b64 s[8:9], s[10:11]
4529; GFX900-NEXT:    ;;#ASMSTART
4530; GFX900-NEXT:    ; use s[8:9]
4531; GFX900-NEXT:    ;;#ASMEND
4532; GFX900-NEXT:    s_setpc_b64 s[30:31]
4533;
4534; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_0:
4535; GFX90A:       ; %bb.0:
4536; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4537; GFX90A-NEXT:    ;;#ASMSTART
4538; GFX90A-NEXT:    ; def s[8:11]
4539; GFX90A-NEXT:    ;;#ASMEND
4540; GFX90A-NEXT:    ;;#ASMSTART
4541; GFX90A-NEXT:    ; def s[4:7]
4542; GFX90A-NEXT:    ;;#ASMEND
4543; GFX90A-NEXT:    s_mov_b32 s11, s4
4544; GFX90A-NEXT:    s_mov_b64 s[8:9], s[10:11]
4545; GFX90A-NEXT:    ;;#ASMSTART
4546; GFX90A-NEXT:    ; use s[8:9]
4547; GFX90A-NEXT:    ;;#ASMEND
4548; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4549;
4550; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_0:
4551; GFX940:       ; %bb.0:
4552; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4553; GFX940-NEXT:    ;;#ASMSTART
4554; GFX940-NEXT:    ; def s[4:7]
4555; GFX940-NEXT:    ;;#ASMEND
4556; GFX940-NEXT:    ;;#ASMSTART
4557; GFX940-NEXT:    ; def s[0:3]
4558; GFX940-NEXT:    ;;#ASMEND
4559; GFX940-NEXT:    s_mov_b32 s7, s0
4560; GFX940-NEXT:    s_mov_b64 s[8:9], s[6:7]
4561; GFX940-NEXT:    ;;#ASMSTART
4562; GFX940-NEXT:    ; use s[8:9]
4563; GFX940-NEXT:    ;;#ASMEND
4564; GFX940-NEXT:    s_setpc_b64 s[30:31]
4565  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4566  %vec1 = call <4 x i32> asm "; def $0", "=s"()
4567  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 0>
4568  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4569  ret void
4570}
4571
4572define void @s_shuffle_v2i32_v4i32__u_1() {
4573; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_1:
4574; GFX900:       ; %bb.0:
4575; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4576; GFX900-NEXT:    ;;#ASMSTART
4577; GFX900-NEXT:    ; def s[8:11]
4578; GFX900-NEXT:    ;;#ASMEND
4579; GFX900-NEXT:    ;;#ASMSTART
4580; GFX900-NEXT:    ; use s[8:9]
4581; GFX900-NEXT:    ;;#ASMEND
4582; GFX900-NEXT:    s_setpc_b64 s[30:31]
4583;
4584; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_1:
4585; GFX90A:       ; %bb.0:
4586; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4587; GFX90A-NEXT:    ;;#ASMSTART
4588; GFX90A-NEXT:    ; def s[8:11]
4589; GFX90A-NEXT:    ;;#ASMEND
4590; GFX90A-NEXT:    ;;#ASMSTART
4591; GFX90A-NEXT:    ; use s[8:9]
4592; GFX90A-NEXT:    ;;#ASMEND
4593; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4594;
4595; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_1:
4596; GFX940:       ; %bb.0:
4597; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4598; GFX940-NEXT:    ;;#ASMSTART
4599; GFX940-NEXT:    ; def s[8:11]
4600; GFX940-NEXT:    ;;#ASMEND
4601; GFX940-NEXT:    s_nop 0
4602; GFX940-NEXT:    ;;#ASMSTART
4603; GFX940-NEXT:    ; use s[8:9]
4604; GFX940-NEXT:    ;;#ASMEND
4605; GFX940-NEXT:    s_setpc_b64 s[30:31]
4606  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4607  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 1>
4608  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4609  ret void
4610}
4611
4612define void @s_shuffle_v2i32_v4i32__0_1() {
4613; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_1:
4614; GFX900:       ; %bb.0:
4615; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4616; GFX900-NEXT:    ;;#ASMSTART
4617; GFX900-NEXT:    ; def s[8:11]
4618; GFX900-NEXT:    ;;#ASMEND
4619; GFX900-NEXT:    ;;#ASMSTART
4620; GFX900-NEXT:    ; use s[8:9]
4621; GFX900-NEXT:    ;;#ASMEND
4622; GFX900-NEXT:    s_setpc_b64 s[30:31]
4623;
4624; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_1:
4625; GFX90A:       ; %bb.0:
4626; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4627; GFX90A-NEXT:    ;;#ASMSTART
4628; GFX90A-NEXT:    ; def s[8:11]
4629; GFX90A-NEXT:    ;;#ASMEND
4630; GFX90A-NEXT:    ;;#ASMSTART
4631; GFX90A-NEXT:    ; use s[8:9]
4632; GFX90A-NEXT:    ;;#ASMEND
4633; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4634;
4635; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_1:
4636; GFX940:       ; %bb.0:
4637; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4638; GFX940-NEXT:    ;;#ASMSTART
4639; GFX940-NEXT:    ; def s[8:11]
4640; GFX940-NEXT:    ;;#ASMEND
4641; GFX940-NEXT:    s_nop 0
4642; GFX940-NEXT:    ;;#ASMSTART
4643; GFX940-NEXT:    ; use s[8:9]
4644; GFX940-NEXT:    ;;#ASMEND
4645; GFX940-NEXT:    s_setpc_b64 s[30:31]
4646  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4647  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 1>
4648  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4649  ret void
4650}
4651
4652define void @s_shuffle_v2i32_v4i32__1_1() {
4653; GFX9-LABEL: s_shuffle_v2i32_v4i32__1_1:
4654; GFX9:       ; %bb.0:
4655; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4656; GFX9-NEXT:    ;;#ASMSTART
4657; GFX9-NEXT:    ; def s[8:11]
4658; GFX9-NEXT:    ;;#ASMEND
4659; GFX9-NEXT:    s_mov_b32 s8, s9
4660; GFX9-NEXT:    ;;#ASMSTART
4661; GFX9-NEXT:    ; use s[8:9]
4662; GFX9-NEXT:    ;;#ASMEND
4663; GFX9-NEXT:    s_setpc_b64 s[30:31]
4664  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4665  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 1>
4666  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4667  ret void
4668}
4669
4670define void @s_shuffle_v2i32_v4i32__2_1() {
4671; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_1:
4672; GFX900:       ; %bb.0:
4673; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4674; GFX900-NEXT:    ;;#ASMSTART
4675; GFX900-NEXT:    ; def s[4:7]
4676; GFX900-NEXT:    ;;#ASMEND
4677; GFX900-NEXT:    s_mov_b32 s7, s5
4678; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
4679; GFX900-NEXT:    ;;#ASMSTART
4680; GFX900-NEXT:    ; use s[8:9]
4681; GFX900-NEXT:    ;;#ASMEND
4682; GFX900-NEXT:    s_setpc_b64 s[30:31]
4683;
4684; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_1:
4685; GFX90A:       ; %bb.0:
4686; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4687; GFX90A-NEXT:    ;;#ASMSTART
4688; GFX90A-NEXT:    ; def s[4:7]
4689; GFX90A-NEXT:    ;;#ASMEND
4690; GFX90A-NEXT:    s_mov_b32 s7, s5
4691; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
4692; GFX90A-NEXT:    ;;#ASMSTART
4693; GFX90A-NEXT:    ; use s[8:9]
4694; GFX90A-NEXT:    ;;#ASMEND
4695; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4696;
4697; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_1:
4698; GFX940:       ; %bb.0:
4699; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4700; GFX940-NEXT:    ;;#ASMSTART
4701; GFX940-NEXT:    ; def s[0:3]
4702; GFX940-NEXT:    ;;#ASMEND
4703; GFX940-NEXT:    s_mov_b32 s3, s1
4704; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
4705; GFX940-NEXT:    ;;#ASMSTART
4706; GFX940-NEXT:    ; use s[8:9]
4707; GFX940-NEXT:    ;;#ASMEND
4708; GFX940-NEXT:    s_setpc_b64 s[30:31]
4709  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4710  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 1>
4711  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4712  ret void
4713}
4714
4715define void @s_shuffle_v2i32_v4i32__3_1() {
4716; GFX9-LABEL: s_shuffle_v2i32_v4i32__3_1:
4717; GFX9:       ; %bb.0:
4718; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4719; GFX9-NEXT:    ;;#ASMSTART
4720; GFX9-NEXT:    ; def s[8:11]
4721; GFX9-NEXT:    ;;#ASMEND
4722; GFX9-NEXT:    s_mov_b32 s8, s11
4723; GFX9-NEXT:    ;;#ASMSTART
4724; GFX9-NEXT:    ; use s[8:9]
4725; GFX9-NEXT:    ;;#ASMEND
4726; GFX9-NEXT:    s_setpc_b64 s[30:31]
4727  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4728  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 1>
4729  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4730  ret void
4731}
4732
4733define void @s_shuffle_v2i32_v4i32__4_1() {
4734; GFX900-LABEL: s_shuffle_v2i32_v4i32__4_1:
4735; GFX900:       ; %bb.0:
4736; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4737; GFX900-NEXT:    ;;#ASMSTART
4738; GFX900-NEXT:    ; def s[8:11]
4739; GFX900-NEXT:    ;;#ASMEND
4740; GFX900-NEXT:    ;;#ASMSTART
4741; GFX900-NEXT:    ; use s[8:9]
4742; GFX900-NEXT:    ;;#ASMEND
4743; GFX900-NEXT:    s_setpc_b64 s[30:31]
4744;
4745; GFX90A-LABEL: s_shuffle_v2i32_v4i32__4_1:
4746; GFX90A:       ; %bb.0:
4747; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4748; GFX90A-NEXT:    ;;#ASMSTART
4749; GFX90A-NEXT:    ; def s[8:11]
4750; GFX90A-NEXT:    ;;#ASMEND
4751; GFX90A-NEXT:    ;;#ASMSTART
4752; GFX90A-NEXT:    ; use s[8:9]
4753; GFX90A-NEXT:    ;;#ASMEND
4754; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4755;
4756; GFX940-LABEL: s_shuffle_v2i32_v4i32__4_1:
4757; GFX940:       ; %bb.0:
4758; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4759; GFX940-NEXT:    ;;#ASMSTART
4760; GFX940-NEXT:    ; def s[8:11]
4761; GFX940-NEXT:    ;;#ASMEND
4762; GFX940-NEXT:    s_nop 0
4763; GFX940-NEXT:    ;;#ASMSTART
4764; GFX940-NEXT:    ; use s[8:9]
4765; GFX940-NEXT:    ;;#ASMEND
4766; GFX940-NEXT:    s_setpc_b64 s[30:31]
4767  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4768  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 1>
4769  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4770  ret void
4771}
4772
4773define void @s_shuffle_v2i32_v4i32__5_1() {
4774; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_1:
4775; GFX900:       ; %bb.0:
4776; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4777; GFX900-NEXT:    ;;#ASMSTART
4778; GFX900-NEXT:    ; def s[8:11]
4779; GFX900-NEXT:    ;;#ASMEND
4780; GFX900-NEXT:    ;;#ASMSTART
4781; GFX900-NEXT:    ; def s[4:7]
4782; GFX900-NEXT:    ;;#ASMEND
4783; GFX900-NEXT:    s_mov_b32 s8, s5
4784; GFX900-NEXT:    ;;#ASMSTART
4785; GFX900-NEXT:    ; use s[8:9]
4786; GFX900-NEXT:    ;;#ASMEND
4787; GFX900-NEXT:    s_setpc_b64 s[30:31]
4788;
4789; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_1:
4790; GFX90A:       ; %bb.0:
4791; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4792; GFX90A-NEXT:    ;;#ASMSTART
4793; GFX90A-NEXT:    ; def s[8:11]
4794; GFX90A-NEXT:    ;;#ASMEND
4795; GFX90A-NEXT:    ;;#ASMSTART
4796; GFX90A-NEXT:    ; def s[4:7]
4797; GFX90A-NEXT:    ;;#ASMEND
4798; GFX90A-NEXT:    s_mov_b32 s8, s5
4799; GFX90A-NEXT:    ;;#ASMSTART
4800; GFX90A-NEXT:    ; use s[8:9]
4801; GFX90A-NEXT:    ;;#ASMEND
4802; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4803;
4804; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_1:
4805; GFX940:       ; %bb.0:
4806; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4807; GFX940-NEXT:    ;;#ASMSTART
4808; GFX940-NEXT:    ; def s[8:11]
4809; GFX940-NEXT:    ;;#ASMEND
4810; GFX940-NEXT:    ;;#ASMSTART
4811; GFX940-NEXT:    ; def s[0:3]
4812; GFX940-NEXT:    ;;#ASMEND
4813; GFX940-NEXT:    s_mov_b32 s8, s1
4814; GFX940-NEXT:    ;;#ASMSTART
4815; GFX940-NEXT:    ; use s[8:9]
4816; GFX940-NEXT:    ;;#ASMEND
4817; GFX940-NEXT:    s_setpc_b64 s[30:31]
4818  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4819  %vec1 = call <4 x i32> asm "; def $0", "=s"()
4820  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 1>
4821  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4822  ret void
4823}
4824
4825define void @s_shuffle_v2i32_v4i32__6_1() {
4826; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_1:
4827; GFX900:       ; %bb.0:
4828; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4829; GFX900-NEXT:    ;;#ASMSTART
4830; GFX900-NEXT:    ; def s[8:11]
4831; GFX900-NEXT:    ;;#ASMEND
4832; GFX900-NEXT:    ;;#ASMSTART
4833; GFX900-NEXT:    ; def s[4:7]
4834; GFX900-NEXT:    ;;#ASMEND
4835; GFX900-NEXT:    s_mov_b32 s11, s5
4836; GFX900-NEXT:    s_mov_b64 s[8:9], s[10:11]
4837; GFX900-NEXT:    ;;#ASMSTART
4838; GFX900-NEXT:    ; use s[8:9]
4839; GFX900-NEXT:    ;;#ASMEND
4840; GFX900-NEXT:    s_setpc_b64 s[30:31]
4841;
4842; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_1:
4843; GFX90A:       ; %bb.0:
4844; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4845; GFX90A-NEXT:    ;;#ASMSTART
4846; GFX90A-NEXT:    ; def s[8:11]
4847; GFX90A-NEXT:    ;;#ASMEND
4848; GFX90A-NEXT:    ;;#ASMSTART
4849; GFX90A-NEXT:    ; def s[4:7]
4850; GFX90A-NEXT:    ;;#ASMEND
4851; GFX90A-NEXT:    s_mov_b32 s11, s5
4852; GFX90A-NEXT:    s_mov_b64 s[8:9], s[10:11]
4853; GFX90A-NEXT:    ;;#ASMSTART
4854; GFX90A-NEXT:    ; use s[8:9]
4855; GFX90A-NEXT:    ;;#ASMEND
4856; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4857;
4858; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_1:
4859; GFX940:       ; %bb.0:
4860; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4861; GFX940-NEXT:    ;;#ASMSTART
4862; GFX940-NEXT:    ; def s[4:7]
4863; GFX940-NEXT:    ;;#ASMEND
4864; GFX940-NEXT:    ;;#ASMSTART
4865; GFX940-NEXT:    ; def s[0:3]
4866; GFX940-NEXT:    ;;#ASMEND
4867; GFX940-NEXT:    s_mov_b32 s7, s1
4868; GFX940-NEXT:    s_mov_b64 s[8:9], s[6:7]
4869; GFX940-NEXT:    ;;#ASMSTART
4870; GFX940-NEXT:    ; use s[8:9]
4871; GFX940-NEXT:    ;;#ASMEND
4872; GFX940-NEXT:    s_setpc_b64 s[30:31]
4873  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4874  %vec1 = call <4 x i32> asm "; def $0", "=s"()
4875  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 1>
4876  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4877  ret void
4878}
4879
4880define void @s_shuffle_v2i32_v4i32__u_2() {
4881; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_2:
4882; GFX900:       ; %bb.0:
4883; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4884; GFX900-NEXT:    ;;#ASMSTART
4885; GFX900-NEXT:    ; def s[4:7]
4886; GFX900-NEXT:    ;;#ASMEND
4887; GFX900-NEXT:    s_mov_b32 s9, s6
4888; GFX900-NEXT:    ;;#ASMSTART
4889; GFX900-NEXT:    ; use s[8:9]
4890; GFX900-NEXT:    ;;#ASMEND
4891; GFX900-NEXT:    s_setpc_b64 s[30:31]
4892;
4893; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_2:
4894; GFX90A:       ; %bb.0:
4895; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4896; GFX90A-NEXT:    ;;#ASMSTART
4897; GFX90A-NEXT:    ; def s[4:7]
4898; GFX90A-NEXT:    ;;#ASMEND
4899; GFX90A-NEXT:    s_mov_b32 s9, s6
4900; GFX90A-NEXT:    ;;#ASMSTART
4901; GFX90A-NEXT:    ; use s[8:9]
4902; GFX90A-NEXT:    ;;#ASMEND
4903; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4904;
4905; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_2:
4906; GFX940:       ; %bb.0:
4907; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4908; GFX940-NEXT:    ;;#ASMSTART
4909; GFX940-NEXT:    ; def s[0:3]
4910; GFX940-NEXT:    ;;#ASMEND
4911; GFX940-NEXT:    s_mov_b32 s9, s2
4912; GFX940-NEXT:    ;;#ASMSTART
4913; GFX940-NEXT:    ; use s[8:9]
4914; GFX940-NEXT:    ;;#ASMEND
4915; GFX940-NEXT:    s_setpc_b64 s[30:31]
4916  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4917  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 2>
4918  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4919  ret void
4920}
4921
4922define void @s_shuffle_v2i32_v4i32__0_2() {
4923; GFX9-LABEL: s_shuffle_v2i32_v4i32__0_2:
4924; GFX9:       ; %bb.0:
4925; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4926; GFX9-NEXT:    ;;#ASMSTART
4927; GFX9-NEXT:    ; def s[8:11]
4928; GFX9-NEXT:    ;;#ASMEND
4929; GFX9-NEXT:    s_mov_b32 s9, s10
4930; GFX9-NEXT:    ;;#ASMSTART
4931; GFX9-NEXT:    ; use s[8:9]
4932; GFX9-NEXT:    ;;#ASMEND
4933; GFX9-NEXT:    s_setpc_b64 s[30:31]
4934  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4935  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 2>
4936  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4937  ret void
4938}
4939
4940define void @s_shuffle_v2i32_v4i32__1_2() {
4941; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_2:
4942; GFX900:       ; %bb.0:
4943; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4944; GFX900-NEXT:    ;;#ASMSTART
4945; GFX900-NEXT:    ; def s[4:7]
4946; GFX900-NEXT:    ;;#ASMEND
4947; GFX900-NEXT:    s_mov_b32 s8, s5
4948; GFX900-NEXT:    s_mov_b32 s9, s6
4949; GFX900-NEXT:    ;;#ASMSTART
4950; GFX900-NEXT:    ; use s[8:9]
4951; GFX900-NEXT:    ;;#ASMEND
4952; GFX900-NEXT:    s_setpc_b64 s[30:31]
4953;
4954; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_2:
4955; GFX90A:       ; %bb.0:
4956; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4957; GFX90A-NEXT:    ;;#ASMSTART
4958; GFX90A-NEXT:    ; def s[4:7]
4959; GFX90A-NEXT:    ;;#ASMEND
4960; GFX90A-NEXT:    s_mov_b32 s8, s5
4961; GFX90A-NEXT:    s_mov_b32 s9, s6
4962; GFX90A-NEXT:    ;;#ASMSTART
4963; GFX90A-NEXT:    ; use s[8:9]
4964; GFX90A-NEXT:    ;;#ASMEND
4965; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4966;
4967; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_2:
4968; GFX940:       ; %bb.0:
4969; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4970; GFX940-NEXT:    ;;#ASMSTART
4971; GFX940-NEXT:    ; def s[0:3]
4972; GFX940-NEXT:    ;;#ASMEND
4973; GFX940-NEXT:    s_mov_b32 s8, s1
4974; GFX940-NEXT:    s_mov_b32 s9, s2
4975; GFX940-NEXT:    ;;#ASMSTART
4976; GFX940-NEXT:    ; use s[8:9]
4977; GFX940-NEXT:    ;;#ASMEND
4978; GFX940-NEXT:    s_setpc_b64 s[30:31]
4979  %vec0 = call <4 x i32> asm "; def $0", "=s"()
4980  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 2>
4981  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
4982  ret void
4983}
4984
4985define void @s_shuffle_v2i32_v4i32__2_2() {
4986; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_2:
4987; GFX900:       ; %bb.0:
4988; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4989; GFX900-NEXT:    ;;#ASMSTART
4990; GFX900-NEXT:    ; def s[4:7]
4991; GFX900-NEXT:    ;;#ASMEND
4992; GFX900-NEXT:    s_mov_b32 s7, s6
4993; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
4994; GFX900-NEXT:    ;;#ASMSTART
4995; GFX900-NEXT:    ; use s[8:9]
4996; GFX900-NEXT:    ;;#ASMEND
4997; GFX900-NEXT:    s_setpc_b64 s[30:31]
4998;
4999; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_2:
5000; GFX90A:       ; %bb.0:
5001; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5002; GFX90A-NEXT:    ;;#ASMSTART
5003; GFX90A-NEXT:    ; def s[4:7]
5004; GFX90A-NEXT:    ;;#ASMEND
5005; GFX90A-NEXT:    s_mov_b32 s7, s6
5006; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
5007; GFX90A-NEXT:    ;;#ASMSTART
5008; GFX90A-NEXT:    ; use s[8:9]
5009; GFX90A-NEXT:    ;;#ASMEND
5010; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5011;
5012; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_2:
5013; GFX940:       ; %bb.0:
5014; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5015; GFX940-NEXT:    ;;#ASMSTART
5016; GFX940-NEXT:    ; def s[0:3]
5017; GFX940-NEXT:    ;;#ASMEND
5018; GFX940-NEXT:    s_mov_b32 s3, s2
5019; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
5020; GFX940-NEXT:    ;;#ASMSTART
5021; GFX940-NEXT:    ; use s[8:9]
5022; GFX940-NEXT:    ;;#ASMEND
5023; GFX940-NEXT:    s_setpc_b64 s[30:31]
5024  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5025  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 2>
5026  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5027  ret void
5028}
5029
5030define void @s_shuffle_v2i32_v4i32__3_2() {
5031; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_2:
5032; GFX900:       ; %bb.0:
5033; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5034; GFX900-NEXT:    ;;#ASMSTART
5035; GFX900-NEXT:    ; def s[4:7]
5036; GFX900-NEXT:    ;;#ASMEND
5037; GFX900-NEXT:    s_mov_b32 s8, s7
5038; GFX900-NEXT:    s_mov_b32 s9, s6
5039; GFX900-NEXT:    ;;#ASMSTART
5040; GFX900-NEXT:    ; use s[8:9]
5041; GFX900-NEXT:    ;;#ASMEND
5042; GFX900-NEXT:    s_setpc_b64 s[30:31]
5043;
5044; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_2:
5045; GFX90A:       ; %bb.0:
5046; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5047; GFX90A-NEXT:    ;;#ASMSTART
5048; GFX90A-NEXT:    ; def s[4:7]
5049; GFX90A-NEXT:    ;;#ASMEND
5050; GFX90A-NEXT:    s_mov_b32 s8, s7
5051; GFX90A-NEXT:    s_mov_b32 s9, s6
5052; GFX90A-NEXT:    ;;#ASMSTART
5053; GFX90A-NEXT:    ; use s[8:9]
5054; GFX90A-NEXT:    ;;#ASMEND
5055; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5056;
5057; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_2:
5058; GFX940:       ; %bb.0:
5059; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5060; GFX940-NEXT:    ;;#ASMSTART
5061; GFX940-NEXT:    ; def s[0:3]
5062; GFX940-NEXT:    ;;#ASMEND
5063; GFX940-NEXT:    s_mov_b32 s8, s3
5064; GFX940-NEXT:    s_mov_b32 s9, s2
5065; GFX940-NEXT:    ;;#ASMSTART
5066; GFX940-NEXT:    ; use s[8:9]
5067; GFX940-NEXT:    ;;#ASMEND
5068; GFX940-NEXT:    s_setpc_b64 s[30:31]
5069  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5070  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 2>
5071  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5072  ret void
5073}
5074
5075define void @s_shuffle_v2i32_v4i32__4_2() {
5076; GFX900-LABEL: s_shuffle_v2i32_v4i32__4_2:
5077; GFX900:       ; %bb.0:
5078; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5079; GFX900-NEXT:    ;;#ASMSTART
5080; GFX900-NEXT:    ; def s[4:7]
5081; GFX900-NEXT:    ;;#ASMEND
5082; GFX900-NEXT:    s_mov_b32 s9, s6
5083; GFX900-NEXT:    ;;#ASMSTART
5084; GFX900-NEXT:    ; use s[8:9]
5085; GFX900-NEXT:    ;;#ASMEND
5086; GFX900-NEXT:    s_setpc_b64 s[30:31]
5087;
5088; GFX90A-LABEL: s_shuffle_v2i32_v4i32__4_2:
5089; GFX90A:       ; %bb.0:
5090; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5091; GFX90A-NEXT:    ;;#ASMSTART
5092; GFX90A-NEXT:    ; def s[4:7]
5093; GFX90A-NEXT:    ;;#ASMEND
5094; GFX90A-NEXT:    s_mov_b32 s9, s6
5095; GFX90A-NEXT:    ;;#ASMSTART
5096; GFX90A-NEXT:    ; use s[8:9]
5097; GFX90A-NEXT:    ;;#ASMEND
5098; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5099;
5100; GFX940-LABEL: s_shuffle_v2i32_v4i32__4_2:
5101; GFX940:       ; %bb.0:
5102; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5103; GFX940-NEXT:    ;;#ASMSTART
5104; GFX940-NEXT:    ; def s[0:3]
5105; GFX940-NEXT:    ;;#ASMEND
5106; GFX940-NEXT:    s_mov_b32 s9, s2
5107; GFX940-NEXT:    ;;#ASMSTART
5108; GFX940-NEXT:    ; use s[8:9]
5109; GFX940-NEXT:    ;;#ASMEND
5110; GFX940-NEXT:    s_setpc_b64 s[30:31]
5111  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5112  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 2>
5113  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5114  ret void
5115}
5116
5117define void @s_shuffle_v2i32_v4i32__5_2() {
5118; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_2:
5119; GFX900:       ; %bb.0:
5120; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5121; GFX900-NEXT:    ;;#ASMSTART
5122; GFX900-NEXT:    ; def s[8:11]
5123; GFX900-NEXT:    ;;#ASMEND
5124; GFX900-NEXT:    ;;#ASMSTART
5125; GFX900-NEXT:    ; def s[4:7]
5126; GFX900-NEXT:    ;;#ASMEND
5127; GFX900-NEXT:    s_mov_b32 s8, s9
5128; GFX900-NEXT:    s_mov_b32 s9, s6
5129; GFX900-NEXT:    ;;#ASMSTART
5130; GFX900-NEXT:    ; use s[8:9]
5131; GFX900-NEXT:    ;;#ASMEND
5132; GFX900-NEXT:    s_setpc_b64 s[30:31]
5133;
5134; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_2:
5135; GFX90A:       ; %bb.0:
5136; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5137; GFX90A-NEXT:    ;;#ASMSTART
5138; GFX90A-NEXT:    ; def s[8:11]
5139; GFX90A-NEXT:    ;;#ASMEND
5140; GFX90A-NEXT:    ;;#ASMSTART
5141; GFX90A-NEXT:    ; def s[4:7]
5142; GFX90A-NEXT:    ;;#ASMEND
5143; GFX90A-NEXT:    s_mov_b32 s8, s9
5144; GFX90A-NEXT:    s_mov_b32 s9, s6
5145; GFX90A-NEXT:    ;;#ASMSTART
5146; GFX90A-NEXT:    ; use s[8:9]
5147; GFX90A-NEXT:    ;;#ASMEND
5148; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5149;
5150; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_2:
5151; GFX940:       ; %bb.0:
5152; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5153; GFX940-NEXT:    ;;#ASMSTART
5154; GFX940-NEXT:    ; def s[0:3]
5155; GFX940-NEXT:    ;;#ASMEND
5156; GFX940-NEXT:    ;;#ASMSTART
5157; GFX940-NEXT:    ; def s[4:7]
5158; GFX940-NEXT:    ;;#ASMEND
5159; GFX940-NEXT:    s_mov_b32 s8, s5
5160; GFX940-NEXT:    s_mov_b32 s9, s2
5161; GFX940-NEXT:    ;;#ASMSTART
5162; GFX940-NEXT:    ; use s[8:9]
5163; GFX940-NEXT:    ;;#ASMEND
5164; GFX940-NEXT:    s_setpc_b64 s[30:31]
5165  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5166  %vec1 = call <4 x i32> asm "; def $0", "=s"()
5167  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 2>
5168  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5169  ret void
5170}
5171
5172define void @s_shuffle_v2i32_v4i32__6_2() {
5173; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_2:
5174; GFX900:       ; %bb.0:
5175; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5176; GFX900-NEXT:    ;;#ASMSTART
5177; GFX900-NEXT:    ; def s[8:11]
5178; GFX900-NEXT:    ;;#ASMEND
5179; GFX900-NEXT:    ;;#ASMSTART
5180; GFX900-NEXT:    ; def s[4:7]
5181; GFX900-NEXT:    ;;#ASMEND
5182; GFX900-NEXT:    s_mov_b32 s11, s6
5183; GFX900-NEXT:    s_mov_b64 s[8:9], s[10:11]
5184; GFX900-NEXT:    ;;#ASMSTART
5185; GFX900-NEXT:    ; use s[8:9]
5186; GFX900-NEXT:    ;;#ASMEND
5187; GFX900-NEXT:    s_setpc_b64 s[30:31]
5188;
5189; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_2:
5190; GFX90A:       ; %bb.0:
5191; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5192; GFX90A-NEXT:    ;;#ASMSTART
5193; GFX90A-NEXT:    ; def s[8:11]
5194; GFX90A-NEXT:    ;;#ASMEND
5195; GFX90A-NEXT:    ;;#ASMSTART
5196; GFX90A-NEXT:    ; def s[4:7]
5197; GFX90A-NEXT:    ;;#ASMEND
5198; GFX90A-NEXT:    s_mov_b32 s11, s6
5199; GFX90A-NEXT:    s_mov_b64 s[8:9], s[10:11]
5200; GFX90A-NEXT:    ;;#ASMSTART
5201; GFX90A-NEXT:    ; use s[8:9]
5202; GFX90A-NEXT:    ;;#ASMEND
5203; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5204;
5205; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_2:
5206; GFX940:       ; %bb.0:
5207; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5208; GFX940-NEXT:    ;;#ASMSTART
5209; GFX940-NEXT:    ; def s[4:7]
5210; GFX940-NEXT:    ;;#ASMEND
5211; GFX940-NEXT:    ;;#ASMSTART
5212; GFX940-NEXT:    ; def s[0:3]
5213; GFX940-NEXT:    ;;#ASMEND
5214; GFX940-NEXT:    s_mov_b32 s7, s2
5215; GFX940-NEXT:    s_mov_b64 s[8:9], s[6:7]
5216; GFX940-NEXT:    ;;#ASMSTART
5217; GFX940-NEXT:    ; use s[8:9]
5218; GFX940-NEXT:    ;;#ASMEND
5219; GFX940-NEXT:    s_setpc_b64 s[30:31]
5220  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5221  %vec1 = call <4 x i32> asm "; def $0", "=s"()
5222  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 2>
5223  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5224  ret void
5225}
5226
5227define void @s_shuffle_v2i32_v4i32__u_3() {
5228; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_3:
5229; GFX900:       ; %bb.0:
5230; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5231; GFX900-NEXT:    ;;#ASMSTART
5232; GFX900-NEXT:    ; def s[4:7]
5233; GFX900-NEXT:    ;;#ASMEND
5234; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
5235; GFX900-NEXT:    ;;#ASMSTART
5236; GFX900-NEXT:    ; use s[8:9]
5237; GFX900-NEXT:    ;;#ASMEND
5238; GFX900-NEXT:    s_setpc_b64 s[30:31]
5239;
5240; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_3:
5241; GFX90A:       ; %bb.0:
5242; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5243; GFX90A-NEXT:    ;;#ASMSTART
5244; GFX90A-NEXT:    ; def s[4:7]
5245; GFX90A-NEXT:    ;;#ASMEND
5246; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
5247; GFX90A-NEXT:    ;;#ASMSTART
5248; GFX90A-NEXT:    ; use s[8:9]
5249; GFX90A-NEXT:    ;;#ASMEND
5250; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5251;
5252; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_3:
5253; GFX940:       ; %bb.0:
5254; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5255; GFX940-NEXT:    ;;#ASMSTART
5256; GFX940-NEXT:    ; def s[0:3]
5257; GFX940-NEXT:    ;;#ASMEND
5258; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
5259; GFX940-NEXT:    ;;#ASMSTART
5260; GFX940-NEXT:    ; use s[8:9]
5261; GFX940-NEXT:    ;;#ASMEND
5262; GFX940-NEXT:    s_setpc_b64 s[30:31]
5263  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5264  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 3>
5265  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5266  ret void
5267}
5268
5269define void @s_shuffle_v2i32_v4i32__0_3() {
5270; GFX9-LABEL: s_shuffle_v2i32_v4i32__0_3:
5271; GFX9:       ; %bb.0:
5272; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5273; GFX9-NEXT:    ;;#ASMSTART
5274; GFX9-NEXT:    ; def s[8:11]
5275; GFX9-NEXT:    ;;#ASMEND
5276; GFX9-NEXT:    s_mov_b32 s9, s11
5277; GFX9-NEXT:    ;;#ASMSTART
5278; GFX9-NEXT:    ; use s[8:9]
5279; GFX9-NEXT:    ;;#ASMEND
5280; GFX9-NEXT:    s_setpc_b64 s[30:31]
5281  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5282  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 3>
5283  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5284  ret void
5285}
5286
5287define void @s_shuffle_v2i32_v4i32__1_3() {
5288; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_3:
5289; GFX900:       ; %bb.0:
5290; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5291; GFX900-NEXT:    ;;#ASMSTART
5292; GFX900-NEXT:    ; def s[4:7]
5293; GFX900-NEXT:    ;;#ASMEND
5294; GFX900-NEXT:    s_mov_b32 s6, s5
5295; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
5296; GFX900-NEXT:    ;;#ASMSTART
5297; GFX900-NEXT:    ; use s[8:9]
5298; GFX900-NEXT:    ;;#ASMEND
5299; GFX900-NEXT:    s_setpc_b64 s[30:31]
5300;
5301; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_3:
5302; GFX90A:       ; %bb.0:
5303; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5304; GFX90A-NEXT:    ;;#ASMSTART
5305; GFX90A-NEXT:    ; def s[4:7]
5306; GFX90A-NEXT:    ;;#ASMEND
5307; GFX90A-NEXT:    s_mov_b32 s6, s5
5308; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
5309; GFX90A-NEXT:    ;;#ASMSTART
5310; GFX90A-NEXT:    ; use s[8:9]
5311; GFX90A-NEXT:    ;;#ASMEND
5312; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5313;
5314; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_3:
5315; GFX940:       ; %bb.0:
5316; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5317; GFX940-NEXT:    ;;#ASMSTART
5318; GFX940-NEXT:    ; def s[0:3]
5319; GFX940-NEXT:    ;;#ASMEND
5320; GFX940-NEXT:    s_mov_b32 s2, s1
5321; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
5322; GFX940-NEXT:    ;;#ASMSTART
5323; GFX940-NEXT:    ; use s[8:9]
5324; GFX940-NEXT:    ;;#ASMEND
5325; GFX940-NEXT:    s_setpc_b64 s[30:31]
5326  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5327  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 3>
5328  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5329  ret void
5330}
5331
5332define void @s_shuffle_v2i32_v4i32__2_3() {
5333; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_3:
5334; GFX900:       ; %bb.0:
5335; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5336; GFX900-NEXT:    ;;#ASMSTART
5337; GFX900-NEXT:    ; def s[4:7]
5338; GFX900-NEXT:    ;;#ASMEND
5339; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
5340; GFX900-NEXT:    ;;#ASMSTART
5341; GFX900-NEXT:    ; use s[8:9]
5342; GFX900-NEXT:    ;;#ASMEND
5343; GFX900-NEXT:    s_setpc_b64 s[30:31]
5344;
5345; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_3:
5346; GFX90A:       ; %bb.0:
5347; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5348; GFX90A-NEXT:    ;;#ASMSTART
5349; GFX90A-NEXT:    ; def s[4:7]
5350; GFX90A-NEXT:    ;;#ASMEND
5351; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
5352; GFX90A-NEXT:    ;;#ASMSTART
5353; GFX90A-NEXT:    ; use s[8:9]
5354; GFX90A-NEXT:    ;;#ASMEND
5355; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5356;
5357; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_3:
5358; GFX940:       ; %bb.0:
5359; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5360; GFX940-NEXT:    ;;#ASMSTART
5361; GFX940-NEXT:    ; def s[0:3]
5362; GFX940-NEXT:    ;;#ASMEND
5363; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
5364; GFX940-NEXT:    ;;#ASMSTART
5365; GFX940-NEXT:    ; use s[8:9]
5366; GFX940-NEXT:    ;;#ASMEND
5367; GFX940-NEXT:    s_setpc_b64 s[30:31]
5368  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5369  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 3>
5370  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5371  ret void
5372}
5373
5374define void @s_shuffle_v2i32_v4i32__3_3() {
5375; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_3:
5376; GFX900:       ; %bb.0:
5377; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5378; GFX900-NEXT:    ;;#ASMSTART
5379; GFX900-NEXT:    ; def s[4:7]
5380; GFX900-NEXT:    ;;#ASMEND
5381; GFX900-NEXT:    s_mov_b32 s6, s7
5382; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
5383; GFX900-NEXT:    ;;#ASMSTART
5384; GFX900-NEXT:    ; use s[8:9]
5385; GFX900-NEXT:    ;;#ASMEND
5386; GFX900-NEXT:    s_setpc_b64 s[30:31]
5387;
5388; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_3:
5389; GFX90A:       ; %bb.0:
5390; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5391; GFX90A-NEXT:    ;;#ASMSTART
5392; GFX90A-NEXT:    ; def s[4:7]
5393; GFX90A-NEXT:    ;;#ASMEND
5394; GFX90A-NEXT:    s_mov_b32 s6, s7
5395; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
5396; GFX90A-NEXT:    ;;#ASMSTART
5397; GFX90A-NEXT:    ; use s[8:9]
5398; GFX90A-NEXT:    ;;#ASMEND
5399; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5400;
5401; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_3:
5402; GFX940:       ; %bb.0:
5403; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5404; GFX940-NEXT:    ;;#ASMSTART
5405; GFX940-NEXT:    ; def s[0:3]
5406; GFX940-NEXT:    ;;#ASMEND
5407; GFX940-NEXT:    s_mov_b32 s2, s3
5408; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
5409; GFX940-NEXT:    ;;#ASMSTART
5410; GFX940-NEXT:    ; use s[8:9]
5411; GFX940-NEXT:    ;;#ASMEND
5412; GFX940-NEXT:    s_setpc_b64 s[30:31]
5413  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5414  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 3>
5415  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5416  ret void
5417}
5418
5419define void @s_shuffle_v2i32_v4i32__4_3() {
5420; GFX900-LABEL: s_shuffle_v2i32_v4i32__4_3:
5421; GFX900:       ; %bb.0:
5422; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5423; GFX900-NEXT:    ;;#ASMSTART
5424; GFX900-NEXT:    ; def s[4:7]
5425; GFX900-NEXT:    ;;#ASMEND
5426; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
5427; GFX900-NEXT:    ;;#ASMSTART
5428; GFX900-NEXT:    ; use s[8:9]
5429; GFX900-NEXT:    ;;#ASMEND
5430; GFX900-NEXT:    s_setpc_b64 s[30:31]
5431;
5432; GFX90A-LABEL: s_shuffle_v2i32_v4i32__4_3:
5433; GFX90A:       ; %bb.0:
5434; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5435; GFX90A-NEXT:    ;;#ASMSTART
5436; GFX90A-NEXT:    ; def s[4:7]
5437; GFX90A-NEXT:    ;;#ASMEND
5438; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
5439; GFX90A-NEXT:    ;;#ASMSTART
5440; GFX90A-NEXT:    ; use s[8:9]
5441; GFX90A-NEXT:    ;;#ASMEND
5442; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5443;
5444; GFX940-LABEL: s_shuffle_v2i32_v4i32__4_3:
5445; GFX940:       ; %bb.0:
5446; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5447; GFX940-NEXT:    ;;#ASMSTART
5448; GFX940-NEXT:    ; def s[0:3]
5449; GFX940-NEXT:    ;;#ASMEND
5450; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
5451; GFX940-NEXT:    ;;#ASMSTART
5452; GFX940-NEXT:    ; use s[8:9]
5453; GFX940-NEXT:    ;;#ASMEND
5454; GFX940-NEXT:    s_setpc_b64 s[30:31]
5455  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5456  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 3>
5457  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5458  ret void
5459}
5460
5461define void @s_shuffle_v2i32_v4i32__5_3() {
5462; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_3:
5463; GFX900:       ; %bb.0:
5464; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5465; GFX900-NEXT:    ;;#ASMSTART
5466; GFX900-NEXT:    ; def s[4:7]
5467; GFX900-NEXT:    ;;#ASMEND
5468; GFX900-NEXT:    ;;#ASMSTART
5469; GFX900-NEXT:    ; def s[8:11]
5470; GFX900-NEXT:    ;;#ASMEND
5471; GFX900-NEXT:    s_mov_b32 s6, s9
5472; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
5473; GFX900-NEXT:    ;;#ASMSTART
5474; GFX900-NEXT:    ; use s[8:9]
5475; GFX900-NEXT:    ;;#ASMEND
5476; GFX900-NEXT:    s_setpc_b64 s[30:31]
5477;
5478; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_3:
5479; GFX90A:       ; %bb.0:
5480; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5481; GFX90A-NEXT:    ;;#ASMSTART
5482; GFX90A-NEXT:    ; def s[4:7]
5483; GFX90A-NEXT:    ;;#ASMEND
5484; GFX90A-NEXT:    ;;#ASMSTART
5485; GFX90A-NEXT:    ; def s[8:11]
5486; GFX90A-NEXT:    ;;#ASMEND
5487; GFX90A-NEXT:    s_mov_b32 s6, s9
5488; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
5489; GFX90A-NEXT:    ;;#ASMSTART
5490; GFX90A-NEXT:    ; use s[8:9]
5491; GFX90A-NEXT:    ;;#ASMEND
5492; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5493;
5494; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_3:
5495; GFX940:       ; %bb.0:
5496; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5497; GFX940-NEXT:    ;;#ASMSTART
5498; GFX940-NEXT:    ; def s[0:3]
5499; GFX940-NEXT:    ;;#ASMEND
5500; GFX940-NEXT:    ;;#ASMSTART
5501; GFX940-NEXT:    ; def s[4:7]
5502; GFX940-NEXT:    ;;#ASMEND
5503; GFX940-NEXT:    s_mov_b32 s2, s5
5504; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
5505; GFX940-NEXT:    ;;#ASMSTART
5506; GFX940-NEXT:    ; use s[8:9]
5507; GFX940-NEXT:    ;;#ASMEND
5508; GFX940-NEXT:    s_setpc_b64 s[30:31]
5509  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5510  %vec1 = call <4 x i32> asm "; def $0", "=s"()
5511  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 3>
5512  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5513  ret void
5514}
5515
5516define void @s_shuffle_v2i32_v4i32__6_3() {
5517; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_3:
5518; GFX900:       ; %bb.0:
5519; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5520; GFX900-NEXT:    ;;#ASMSTART
5521; GFX900-NEXT:    ; def s[8:11]
5522; GFX900-NEXT:    ;;#ASMEND
5523; GFX900-NEXT:    ;;#ASMSTART
5524; GFX900-NEXT:    ; def s[4:7]
5525; GFX900-NEXT:    ;;#ASMEND
5526; GFX900-NEXT:    s_mov_b32 s11, s7
5527; GFX900-NEXT:    s_mov_b64 s[8:9], s[10:11]
5528; GFX900-NEXT:    ;;#ASMSTART
5529; GFX900-NEXT:    ; use s[8:9]
5530; GFX900-NEXT:    ;;#ASMEND
5531; GFX900-NEXT:    s_setpc_b64 s[30:31]
5532;
5533; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_3:
5534; GFX90A:       ; %bb.0:
5535; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5536; GFX90A-NEXT:    ;;#ASMSTART
5537; GFX90A-NEXT:    ; def s[8:11]
5538; GFX90A-NEXT:    ;;#ASMEND
5539; GFX90A-NEXT:    ;;#ASMSTART
5540; GFX90A-NEXT:    ; def s[4:7]
5541; GFX90A-NEXT:    ;;#ASMEND
5542; GFX90A-NEXT:    s_mov_b32 s11, s7
5543; GFX90A-NEXT:    s_mov_b64 s[8:9], s[10:11]
5544; GFX90A-NEXT:    ;;#ASMSTART
5545; GFX90A-NEXT:    ; use s[8:9]
5546; GFX90A-NEXT:    ;;#ASMEND
5547; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5548;
5549; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_3:
5550; GFX940:       ; %bb.0:
5551; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5552; GFX940-NEXT:    ;;#ASMSTART
5553; GFX940-NEXT:    ; def s[4:7]
5554; GFX940-NEXT:    ;;#ASMEND
5555; GFX940-NEXT:    ;;#ASMSTART
5556; GFX940-NEXT:    ; def s[0:3]
5557; GFX940-NEXT:    ;;#ASMEND
5558; GFX940-NEXT:    s_mov_b32 s7, s3
5559; GFX940-NEXT:    s_mov_b64 s[8:9], s[6:7]
5560; GFX940-NEXT:    ;;#ASMSTART
5561; GFX940-NEXT:    ; use s[8:9]
5562; GFX940-NEXT:    ;;#ASMEND
5563; GFX940-NEXT:    s_setpc_b64 s[30:31]
5564  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5565  %vec1 = call <4 x i32> asm "; def $0", "=s"()
5566  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 3>
5567  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5568  ret void
5569}
5570
5571define void @s_shuffle_v2i32_v4i32__u_4() {
5572; GFX9-LABEL: s_shuffle_v2i32_v4i32__u_4:
5573; GFX9:       ; %bb.0:
5574; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5575; GFX9-NEXT:    ;;#ASMSTART
5576; GFX9-NEXT:    ; use s[8:9]
5577; GFX9-NEXT:    ;;#ASMEND
5578; GFX9-NEXT:    s_setpc_b64 s[30:31]
5579  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5580  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 poison, i32 4>
5581  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5582  ret void
5583}
5584
5585define void @s_shuffle_v2i32_v4i32__0_4() {
5586; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_4:
5587; GFX900:       ; %bb.0:
5588; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5589; GFX900-NEXT:    ;;#ASMSTART
5590; GFX900-NEXT:    ; def s[8:11]
5591; GFX900-NEXT:    ;;#ASMEND
5592; GFX900-NEXT:    ;;#ASMSTART
5593; GFX900-NEXT:    ; use s[8:9]
5594; GFX900-NEXT:    ;;#ASMEND
5595; GFX900-NEXT:    s_setpc_b64 s[30:31]
5596;
5597; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_4:
5598; GFX90A:       ; %bb.0:
5599; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5600; GFX90A-NEXT:    ;;#ASMSTART
5601; GFX90A-NEXT:    ; def s[8:11]
5602; GFX90A-NEXT:    ;;#ASMEND
5603; GFX90A-NEXT:    ;;#ASMSTART
5604; GFX90A-NEXT:    ; use s[8:9]
5605; GFX90A-NEXT:    ;;#ASMEND
5606; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5607;
5608; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_4:
5609; GFX940:       ; %bb.0:
5610; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5611; GFX940-NEXT:    ;;#ASMSTART
5612; GFX940-NEXT:    ; def s[8:11]
5613; GFX940-NEXT:    ;;#ASMEND
5614; GFX940-NEXT:    s_nop 0
5615; GFX940-NEXT:    ;;#ASMSTART
5616; GFX940-NEXT:    ; use s[8:9]
5617; GFX940-NEXT:    ;;#ASMEND
5618; GFX940-NEXT:    s_setpc_b64 s[30:31]
5619  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5620  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 0, i32 4>
5621  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5622  ret void
5623}
5624
5625define void @s_shuffle_v2i32_v4i32__1_4() {
5626; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_4:
5627; GFX900:       ; %bb.0:
5628; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5629; GFX900-NEXT:    ;;#ASMSTART
5630; GFX900-NEXT:    ; def s[4:7]
5631; GFX900-NEXT:    ;;#ASMEND
5632; GFX900-NEXT:    s_mov_b32 s8, s5
5633; GFX900-NEXT:    ;;#ASMSTART
5634; GFX900-NEXT:    ; use s[8:9]
5635; GFX900-NEXT:    ;;#ASMEND
5636; GFX900-NEXT:    s_setpc_b64 s[30:31]
5637;
5638; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_4:
5639; GFX90A:       ; %bb.0:
5640; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5641; GFX90A-NEXT:    ;;#ASMSTART
5642; GFX90A-NEXT:    ; def s[4:7]
5643; GFX90A-NEXT:    ;;#ASMEND
5644; GFX90A-NEXT:    s_mov_b32 s8, s5
5645; GFX90A-NEXT:    ;;#ASMSTART
5646; GFX90A-NEXT:    ; use s[8:9]
5647; GFX90A-NEXT:    ;;#ASMEND
5648; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5649;
5650; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_4:
5651; GFX940:       ; %bb.0:
5652; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5653; GFX940-NEXT:    ;;#ASMSTART
5654; GFX940-NEXT:    ; def s[0:3]
5655; GFX940-NEXT:    ;;#ASMEND
5656; GFX940-NEXT:    s_mov_b32 s8, s1
5657; GFX940-NEXT:    ;;#ASMSTART
5658; GFX940-NEXT:    ; use s[8:9]
5659; GFX940-NEXT:    ;;#ASMEND
5660; GFX940-NEXT:    s_setpc_b64 s[30:31]
5661  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5662  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 1, i32 4>
5663  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5664  ret void
5665}
5666
5667define void @s_shuffle_v2i32_v4i32__2_4() {
5668; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_4:
5669; GFX900:       ; %bb.0:
5670; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5671; GFX900-NEXT:    ;;#ASMSTART
5672; GFX900-NEXT:    ; def s[4:7]
5673; GFX900-NEXT:    ;;#ASMEND
5674; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
5675; GFX900-NEXT:    ;;#ASMSTART
5676; GFX900-NEXT:    ; use s[8:9]
5677; GFX900-NEXT:    ;;#ASMEND
5678; GFX900-NEXT:    s_setpc_b64 s[30:31]
5679;
5680; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_4:
5681; GFX90A:       ; %bb.0:
5682; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5683; GFX90A-NEXT:    ;;#ASMSTART
5684; GFX90A-NEXT:    ; def s[4:7]
5685; GFX90A-NEXT:    ;;#ASMEND
5686; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
5687; GFX90A-NEXT:    ;;#ASMSTART
5688; GFX90A-NEXT:    ; use s[8:9]
5689; GFX90A-NEXT:    ;;#ASMEND
5690; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5691;
5692; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_4:
5693; GFX940:       ; %bb.0:
5694; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5695; GFX940-NEXT:    ;;#ASMSTART
5696; GFX940-NEXT:    ; def s[0:3]
5697; GFX940-NEXT:    ;;#ASMEND
5698; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
5699; GFX940-NEXT:    ;;#ASMSTART
5700; GFX940-NEXT:    ; use s[8:9]
5701; GFX940-NEXT:    ;;#ASMEND
5702; GFX940-NEXT:    s_setpc_b64 s[30:31]
5703  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5704  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 2, i32 4>
5705  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5706  ret void
5707}
5708
5709define void @s_shuffle_v2i32_v4i32__3_4() {
5710; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_4:
5711; GFX900:       ; %bb.0:
5712; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5713; GFX900-NEXT:    ;;#ASMSTART
5714; GFX900-NEXT:    ; def s[4:7]
5715; GFX900-NEXT:    ;;#ASMEND
5716; GFX900-NEXT:    s_mov_b32 s8, s7
5717; GFX900-NEXT:    ;;#ASMSTART
5718; GFX900-NEXT:    ; use s[8:9]
5719; GFX900-NEXT:    ;;#ASMEND
5720; GFX900-NEXT:    s_setpc_b64 s[30:31]
5721;
5722; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_4:
5723; GFX90A:       ; %bb.0:
5724; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5725; GFX90A-NEXT:    ;;#ASMSTART
5726; GFX90A-NEXT:    ; def s[4:7]
5727; GFX90A-NEXT:    ;;#ASMEND
5728; GFX90A-NEXT:    s_mov_b32 s8, s7
5729; GFX90A-NEXT:    ;;#ASMSTART
5730; GFX90A-NEXT:    ; use s[8:9]
5731; GFX90A-NEXT:    ;;#ASMEND
5732; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5733;
5734; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_4:
5735; GFX940:       ; %bb.0:
5736; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5737; GFX940-NEXT:    ;;#ASMSTART
5738; GFX940-NEXT:    ; def s[0:3]
5739; GFX940-NEXT:    ;;#ASMEND
5740; GFX940-NEXT:    s_mov_b32 s8, s3
5741; GFX940-NEXT:    ;;#ASMSTART
5742; GFX940-NEXT:    ; use s[8:9]
5743; GFX940-NEXT:    ;;#ASMEND
5744; GFX940-NEXT:    s_setpc_b64 s[30:31]
5745  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5746  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 3, i32 4>
5747  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5748  ret void
5749}
5750
5751define void @s_shuffle_v2i32_v4i32__4_4() {
5752; GFX9-LABEL: s_shuffle_v2i32_v4i32__4_4:
5753; GFX9:       ; %bb.0:
5754; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5755; GFX9-NEXT:    ;;#ASMSTART
5756; GFX9-NEXT:    ; use s[8:9]
5757; GFX9-NEXT:    ;;#ASMEND
5758; GFX9-NEXT:    s_setpc_b64 s[30:31]
5759  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5760  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> poison, <2 x i32> <i32 4, i32 4>
5761  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5762  ret void
5763}
5764
5765define void @s_shuffle_v2i32_v4i32__5_4() {
5766; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_4:
5767; GFX900:       ; %bb.0:
5768; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5769; GFX900-NEXT:    ;;#ASMSTART
5770; GFX900-NEXT:    ; def s[4:7]
5771; GFX900-NEXT:    ;;#ASMEND
5772; GFX900-NEXT:    s_mov_b32 s8, s5
5773; GFX900-NEXT:    s_mov_b32 s9, s4
5774; GFX900-NEXT:    ;;#ASMSTART
5775; GFX900-NEXT:    ; use s[8:9]
5776; GFX900-NEXT:    ;;#ASMEND
5777; GFX900-NEXT:    s_setpc_b64 s[30:31]
5778;
5779; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_4:
5780; GFX90A:       ; %bb.0:
5781; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5782; GFX90A-NEXT:    ;;#ASMSTART
5783; GFX90A-NEXT:    ; def s[4:7]
5784; GFX90A-NEXT:    ;;#ASMEND
5785; GFX90A-NEXT:    s_mov_b32 s8, s5
5786; GFX90A-NEXT:    s_mov_b32 s9, s4
5787; GFX90A-NEXT:    ;;#ASMSTART
5788; GFX90A-NEXT:    ; use s[8:9]
5789; GFX90A-NEXT:    ;;#ASMEND
5790; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5791;
5792; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_4:
5793; GFX940:       ; %bb.0:
5794; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5795; GFX940-NEXT:    ;;#ASMSTART
5796; GFX940-NEXT:    ; def s[0:3]
5797; GFX940-NEXT:    ;;#ASMEND
5798; GFX940-NEXT:    s_mov_b32 s8, s1
5799; GFX940-NEXT:    s_mov_b32 s9, s0
5800; GFX940-NEXT:    ;;#ASMSTART
5801; GFX940-NEXT:    ; use s[8:9]
5802; GFX940-NEXT:    ;;#ASMEND
5803; GFX940-NEXT:    s_setpc_b64 s[30:31]
5804  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5805  %vec1 = call <4 x i32> asm "; def $0", "=s"()
5806  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 4>
5807  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5808  ret void
5809}
5810
5811define void @s_shuffle_v2i32_v4i32__6_4() {
5812; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_4:
5813; GFX900:       ; %bb.0:
5814; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5815; GFX900-NEXT:    ;;#ASMSTART
5816; GFX900-NEXT:    ; def s[4:7]
5817; GFX900-NEXT:    ;;#ASMEND
5818; GFX900-NEXT:    s_mov_b32 s7, s4
5819; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
5820; GFX900-NEXT:    ;;#ASMSTART
5821; GFX900-NEXT:    ; use s[8:9]
5822; GFX900-NEXT:    ;;#ASMEND
5823; GFX900-NEXT:    s_setpc_b64 s[30:31]
5824;
5825; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_4:
5826; GFX90A:       ; %bb.0:
5827; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5828; GFX90A-NEXT:    ;;#ASMSTART
5829; GFX90A-NEXT:    ; def s[4:7]
5830; GFX90A-NEXT:    ;;#ASMEND
5831; GFX90A-NEXT:    s_mov_b32 s7, s4
5832; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
5833; GFX90A-NEXT:    ;;#ASMSTART
5834; GFX90A-NEXT:    ; use s[8:9]
5835; GFX90A-NEXT:    ;;#ASMEND
5836; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5837;
5838; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_4:
5839; GFX940:       ; %bb.0:
5840; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5841; GFX940-NEXT:    ;;#ASMSTART
5842; GFX940-NEXT:    ; def s[0:3]
5843; GFX940-NEXT:    ;;#ASMEND
5844; GFX940-NEXT:    s_mov_b32 s3, s0
5845; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
5846; GFX940-NEXT:    ;;#ASMSTART
5847; GFX940-NEXT:    ; use s[8:9]
5848; GFX940-NEXT:    ;;#ASMEND
5849; GFX940-NEXT:    s_setpc_b64 s[30:31]
5850  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5851  %vec1 = call <4 x i32> asm "; def $0", "=s"()
5852  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 4>
5853  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5854  ret void
5855}
5856
5857define void @s_shuffle_v2i32_v4i32__u_5() {
5858; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_5:
5859; GFX900:       ; %bb.0:
5860; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5861; GFX900-NEXT:    ;;#ASMSTART
5862; GFX900-NEXT:    ; def s[8:11]
5863; GFX900-NEXT:    ;;#ASMEND
5864; GFX900-NEXT:    ;;#ASMSTART
5865; GFX900-NEXT:    ; use s[8:9]
5866; GFX900-NEXT:    ;;#ASMEND
5867; GFX900-NEXT:    s_setpc_b64 s[30:31]
5868;
5869; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_5:
5870; GFX90A:       ; %bb.0:
5871; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5872; GFX90A-NEXT:    ;;#ASMSTART
5873; GFX90A-NEXT:    ; def s[8:11]
5874; GFX90A-NEXT:    ;;#ASMEND
5875; GFX90A-NEXT:    ;;#ASMSTART
5876; GFX90A-NEXT:    ; use s[8:9]
5877; GFX90A-NEXT:    ;;#ASMEND
5878; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5879;
5880; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_5:
5881; GFX940:       ; %bb.0:
5882; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5883; GFX940-NEXT:    ;;#ASMSTART
5884; GFX940-NEXT:    ; def s[8:11]
5885; GFX940-NEXT:    ;;#ASMEND
5886; GFX940-NEXT:    s_nop 0
5887; GFX940-NEXT:    ;;#ASMSTART
5888; GFX940-NEXT:    ; use s[8:9]
5889; GFX940-NEXT:    ;;#ASMEND
5890; GFX940-NEXT:    s_setpc_b64 s[30:31]
5891  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5892  %vec1 = call <4 x i32> asm "; def $0", "=s"()
5893  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 5>
5894  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5895  ret void
5896}
5897
5898define void @s_shuffle_v2i32_v4i32__0_5() {
5899; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_5:
5900; GFX900:       ; %bb.0:
5901; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5902; GFX900-NEXT:    ;;#ASMSTART
5903; GFX900-NEXT:    ; def s[8:11]
5904; GFX900-NEXT:    ;;#ASMEND
5905; GFX900-NEXT:    ;;#ASMSTART
5906; GFX900-NEXT:    ; def s[4:7]
5907; GFX900-NEXT:    ;;#ASMEND
5908; GFX900-NEXT:    s_mov_b32 s9, s5
5909; GFX900-NEXT:    ;;#ASMSTART
5910; GFX900-NEXT:    ; use s[8:9]
5911; GFX900-NEXT:    ;;#ASMEND
5912; GFX900-NEXT:    s_setpc_b64 s[30:31]
5913;
5914; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_5:
5915; GFX90A:       ; %bb.0:
5916; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5917; GFX90A-NEXT:    ;;#ASMSTART
5918; GFX90A-NEXT:    ; def s[8:11]
5919; GFX90A-NEXT:    ;;#ASMEND
5920; GFX90A-NEXT:    ;;#ASMSTART
5921; GFX90A-NEXT:    ; def s[4:7]
5922; GFX90A-NEXT:    ;;#ASMEND
5923; GFX90A-NEXT:    s_mov_b32 s9, s5
5924; GFX90A-NEXT:    ;;#ASMSTART
5925; GFX90A-NEXT:    ; use s[8:9]
5926; GFX90A-NEXT:    ;;#ASMEND
5927; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5928;
5929; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_5:
5930; GFX940:       ; %bb.0:
5931; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5932; GFX940-NEXT:    ;;#ASMSTART
5933; GFX940-NEXT:    ; def s[8:11]
5934; GFX940-NEXT:    ;;#ASMEND
5935; GFX940-NEXT:    ;;#ASMSTART
5936; GFX940-NEXT:    ; def s[0:3]
5937; GFX940-NEXT:    ;;#ASMEND
5938; GFX940-NEXT:    s_mov_b32 s9, s1
5939; GFX940-NEXT:    ;;#ASMSTART
5940; GFX940-NEXT:    ; use s[8:9]
5941; GFX940-NEXT:    ;;#ASMEND
5942; GFX940-NEXT:    s_setpc_b64 s[30:31]
5943  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5944  %vec1 = call <4 x i32> asm "; def $0", "=s"()
5945  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 5>
5946  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5947  ret void
5948}
5949
5950define void @s_shuffle_v2i32_v4i32__1_5() {
5951; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_5:
5952; GFX900:       ; %bb.0:
5953; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5954; GFX900-NEXT:    ;;#ASMSTART
5955; GFX900-NEXT:    ; def s[8:11]
5956; GFX900-NEXT:    ;;#ASMEND
5957; GFX900-NEXT:    ;;#ASMSTART
5958; GFX900-NEXT:    ; def s[4:7]
5959; GFX900-NEXT:    ;;#ASMEND
5960; GFX900-NEXT:    s_mov_b32 s8, s5
5961; GFX900-NEXT:    ;;#ASMSTART
5962; GFX900-NEXT:    ; use s[8:9]
5963; GFX900-NEXT:    ;;#ASMEND
5964; GFX900-NEXT:    s_setpc_b64 s[30:31]
5965;
5966; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_5:
5967; GFX90A:       ; %bb.0:
5968; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5969; GFX90A-NEXT:    ;;#ASMSTART
5970; GFX90A-NEXT:    ; def s[8:11]
5971; GFX90A-NEXT:    ;;#ASMEND
5972; GFX90A-NEXT:    ;;#ASMSTART
5973; GFX90A-NEXT:    ; def s[4:7]
5974; GFX90A-NEXT:    ;;#ASMEND
5975; GFX90A-NEXT:    s_mov_b32 s8, s5
5976; GFX90A-NEXT:    ;;#ASMSTART
5977; GFX90A-NEXT:    ; use s[8:9]
5978; GFX90A-NEXT:    ;;#ASMEND
5979; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5980;
5981; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_5:
5982; GFX940:       ; %bb.0:
5983; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5984; GFX940-NEXT:    ;;#ASMSTART
5985; GFX940-NEXT:    ; def s[8:11]
5986; GFX940-NEXT:    ;;#ASMEND
5987; GFX940-NEXT:    ;;#ASMSTART
5988; GFX940-NEXT:    ; def s[0:3]
5989; GFX940-NEXT:    ;;#ASMEND
5990; GFX940-NEXT:    s_mov_b32 s8, s1
5991; GFX940-NEXT:    ;;#ASMSTART
5992; GFX940-NEXT:    ; use s[8:9]
5993; GFX940-NEXT:    ;;#ASMEND
5994; GFX940-NEXT:    s_setpc_b64 s[30:31]
5995  %vec0 = call <4 x i32> asm "; def $0", "=s"()
5996  %vec1 = call <4 x i32> asm "; def $0", "=s"()
5997  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 5>
5998  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
5999  ret void
6000}
6001
6002define void @s_shuffle_v2i32_v4i32__2_5() {
6003; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_5:
6004; GFX900:       ; %bb.0:
6005; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6006; GFX900-NEXT:    ;;#ASMSTART
6007; GFX900-NEXT:    ; def s[4:7]
6008; GFX900-NEXT:    ;;#ASMEND
6009; GFX900-NEXT:    ;;#ASMSTART
6010; GFX900-NEXT:    ; def s[8:11]
6011; GFX900-NEXT:    ;;#ASMEND
6012; GFX900-NEXT:    s_mov_b32 s7, s9
6013; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
6014; GFX900-NEXT:    ;;#ASMSTART
6015; GFX900-NEXT:    ; use s[8:9]
6016; GFX900-NEXT:    ;;#ASMEND
6017; GFX900-NEXT:    s_setpc_b64 s[30:31]
6018;
6019; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_5:
6020; GFX90A:       ; %bb.0:
6021; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6022; GFX90A-NEXT:    ;;#ASMSTART
6023; GFX90A-NEXT:    ; def s[4:7]
6024; GFX90A-NEXT:    ;;#ASMEND
6025; GFX90A-NEXT:    ;;#ASMSTART
6026; GFX90A-NEXT:    ; def s[8:11]
6027; GFX90A-NEXT:    ;;#ASMEND
6028; GFX90A-NEXT:    s_mov_b32 s7, s9
6029; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
6030; GFX90A-NEXT:    ;;#ASMSTART
6031; GFX90A-NEXT:    ; use s[8:9]
6032; GFX90A-NEXT:    ;;#ASMEND
6033; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6034;
6035; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_5:
6036; GFX940:       ; %bb.0:
6037; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6038; GFX940-NEXT:    ;;#ASMSTART
6039; GFX940-NEXT:    ; def s[0:3]
6040; GFX940-NEXT:    ;;#ASMEND
6041; GFX940-NEXT:    ;;#ASMSTART
6042; GFX940-NEXT:    ; def s[4:7]
6043; GFX940-NEXT:    ;;#ASMEND
6044; GFX940-NEXT:    s_mov_b32 s3, s5
6045; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
6046; GFX940-NEXT:    ;;#ASMSTART
6047; GFX940-NEXT:    ; use s[8:9]
6048; GFX940-NEXT:    ;;#ASMEND
6049; GFX940-NEXT:    s_setpc_b64 s[30:31]
6050  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6051  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6052  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 5>
6053  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6054  ret void
6055}
6056
6057define void @s_shuffle_v2i32_v4i32__3_5() {
6058; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_5:
6059; GFX900:       ; %bb.0:
6060; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6061; GFX900-NEXT:    ;;#ASMSTART
6062; GFX900-NEXT:    ; def s[8:11]
6063; GFX900-NEXT:    ;;#ASMEND
6064; GFX900-NEXT:    ;;#ASMSTART
6065; GFX900-NEXT:    ; def s[4:7]
6066; GFX900-NEXT:    ;;#ASMEND
6067; GFX900-NEXT:    s_mov_b32 s8, s7
6068; GFX900-NEXT:    ;;#ASMSTART
6069; GFX900-NEXT:    ; use s[8:9]
6070; GFX900-NEXT:    ;;#ASMEND
6071; GFX900-NEXT:    s_setpc_b64 s[30:31]
6072;
6073; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_5:
6074; GFX90A:       ; %bb.0:
6075; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6076; GFX90A-NEXT:    ;;#ASMSTART
6077; GFX90A-NEXT:    ; def s[8:11]
6078; GFX90A-NEXT:    ;;#ASMEND
6079; GFX90A-NEXT:    ;;#ASMSTART
6080; GFX90A-NEXT:    ; def s[4:7]
6081; GFX90A-NEXT:    ;;#ASMEND
6082; GFX90A-NEXT:    s_mov_b32 s8, s7
6083; GFX90A-NEXT:    ;;#ASMSTART
6084; GFX90A-NEXT:    ; use s[8:9]
6085; GFX90A-NEXT:    ;;#ASMEND
6086; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6087;
6088; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_5:
6089; GFX940:       ; %bb.0:
6090; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6091; GFX940-NEXT:    ;;#ASMSTART
6092; GFX940-NEXT:    ; def s[8:11]
6093; GFX940-NEXT:    ;;#ASMEND
6094; GFX940-NEXT:    ;;#ASMSTART
6095; GFX940-NEXT:    ; def s[0:3]
6096; GFX940-NEXT:    ;;#ASMEND
6097; GFX940-NEXT:    s_mov_b32 s8, s3
6098; GFX940-NEXT:    ;;#ASMSTART
6099; GFX940-NEXT:    ; use s[8:9]
6100; GFX940-NEXT:    ;;#ASMEND
6101; GFX940-NEXT:    s_setpc_b64 s[30:31]
6102  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6103  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6104  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 5>
6105  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6106  ret void
6107}
6108
6109define void @s_shuffle_v2i32_v4i32__4_5() {
6110; GFX900-LABEL: s_shuffle_v2i32_v4i32__4_5:
6111; GFX900:       ; %bb.0:
6112; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6113; GFX900-NEXT:    ;;#ASMSTART
6114; GFX900-NEXT:    ; def s[8:11]
6115; GFX900-NEXT:    ;;#ASMEND
6116; GFX900-NEXT:    ;;#ASMSTART
6117; GFX900-NEXT:    ; use s[8:9]
6118; GFX900-NEXT:    ;;#ASMEND
6119; GFX900-NEXT:    s_setpc_b64 s[30:31]
6120;
6121; GFX90A-LABEL: s_shuffle_v2i32_v4i32__4_5:
6122; GFX90A:       ; %bb.0:
6123; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6124; GFX90A-NEXT:    ;;#ASMSTART
6125; GFX90A-NEXT:    ; def s[8:11]
6126; GFX90A-NEXT:    ;;#ASMEND
6127; GFX90A-NEXT:    ;;#ASMSTART
6128; GFX90A-NEXT:    ; use s[8:9]
6129; GFX90A-NEXT:    ;;#ASMEND
6130; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6131;
6132; GFX940-LABEL: s_shuffle_v2i32_v4i32__4_5:
6133; GFX940:       ; %bb.0:
6134; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6135; GFX940-NEXT:    ;;#ASMSTART
6136; GFX940-NEXT:    ; def s[8:11]
6137; GFX940-NEXT:    ;;#ASMEND
6138; GFX940-NEXT:    s_nop 0
6139; GFX940-NEXT:    ;;#ASMSTART
6140; GFX940-NEXT:    ; use s[8:9]
6141; GFX940-NEXT:    ;;#ASMEND
6142; GFX940-NEXT:    s_setpc_b64 s[30:31]
6143  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6144  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6145  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 5>
6146  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6147  ret void
6148}
6149
6150define void @s_shuffle_v2i32_v4i32__5_5() {
6151; GFX9-LABEL: s_shuffle_v2i32_v4i32__5_5:
6152; GFX9:       ; %bb.0:
6153; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6154; GFX9-NEXT:    ;;#ASMSTART
6155; GFX9-NEXT:    ; def s[8:11]
6156; GFX9-NEXT:    ;;#ASMEND
6157; GFX9-NEXT:    s_mov_b32 s8, s9
6158; GFX9-NEXT:    ;;#ASMSTART
6159; GFX9-NEXT:    ; use s[8:9]
6160; GFX9-NEXT:    ;;#ASMEND
6161; GFX9-NEXT:    s_setpc_b64 s[30:31]
6162  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6163  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6164  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 5>
6165  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6166  ret void
6167}
6168
6169define void @s_shuffle_v2i32_v4i32__6_5() {
6170; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_5:
6171; GFX900:       ; %bb.0:
6172; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6173; GFX900-NEXT:    ;;#ASMSTART
6174; GFX900-NEXT:    ; def s[4:7]
6175; GFX900-NEXT:    ;;#ASMEND
6176; GFX900-NEXT:    s_mov_b32 s7, s5
6177; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
6178; GFX900-NEXT:    ;;#ASMSTART
6179; GFX900-NEXT:    ; use s[8:9]
6180; GFX900-NEXT:    ;;#ASMEND
6181; GFX900-NEXT:    s_setpc_b64 s[30:31]
6182;
6183; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_5:
6184; GFX90A:       ; %bb.0:
6185; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6186; GFX90A-NEXT:    ;;#ASMSTART
6187; GFX90A-NEXT:    ; def s[4:7]
6188; GFX90A-NEXT:    ;;#ASMEND
6189; GFX90A-NEXT:    s_mov_b32 s7, s5
6190; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
6191; GFX90A-NEXT:    ;;#ASMSTART
6192; GFX90A-NEXT:    ; use s[8:9]
6193; GFX90A-NEXT:    ;;#ASMEND
6194; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6195;
6196; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_5:
6197; GFX940:       ; %bb.0:
6198; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6199; GFX940-NEXT:    ;;#ASMSTART
6200; GFX940-NEXT:    ; def s[0:3]
6201; GFX940-NEXT:    ;;#ASMEND
6202; GFX940-NEXT:    s_mov_b32 s3, s1
6203; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
6204; GFX940-NEXT:    ;;#ASMSTART
6205; GFX940-NEXT:    ; use s[8:9]
6206; GFX940-NEXT:    ;;#ASMEND
6207; GFX940-NEXT:    s_setpc_b64 s[30:31]
6208  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6209  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6210  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 5>
6211  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6212  ret void
6213}
6214
6215define void @s_shuffle_v2i32_v4i32__u_6() {
6216; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_6:
6217; GFX900:       ; %bb.0:
6218; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6219; GFX900-NEXT:    ;;#ASMSTART
6220; GFX900-NEXT:    ; def s[4:7]
6221; GFX900-NEXT:    ;;#ASMEND
6222; GFX900-NEXT:    s_mov_b32 s9, s6
6223; GFX900-NEXT:    ;;#ASMSTART
6224; GFX900-NEXT:    ; use s[8:9]
6225; GFX900-NEXT:    ;;#ASMEND
6226; GFX900-NEXT:    s_setpc_b64 s[30:31]
6227;
6228; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_6:
6229; GFX90A:       ; %bb.0:
6230; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6231; GFX90A-NEXT:    ;;#ASMSTART
6232; GFX90A-NEXT:    ; def s[4:7]
6233; GFX90A-NEXT:    ;;#ASMEND
6234; GFX90A-NEXT:    s_mov_b32 s9, s6
6235; GFX90A-NEXT:    ;;#ASMSTART
6236; GFX90A-NEXT:    ; use s[8:9]
6237; GFX90A-NEXT:    ;;#ASMEND
6238; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6239;
6240; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_6:
6241; GFX940:       ; %bb.0:
6242; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6243; GFX940-NEXT:    ;;#ASMSTART
6244; GFX940-NEXT:    ; def s[0:3]
6245; GFX940-NEXT:    ;;#ASMEND
6246; GFX940-NEXT:    s_mov_b32 s9, s2
6247; GFX940-NEXT:    ;;#ASMSTART
6248; GFX940-NEXT:    ; use s[8:9]
6249; GFX940-NEXT:    ;;#ASMEND
6250; GFX940-NEXT:    s_setpc_b64 s[30:31]
6251  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6252  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6253  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 6>
6254  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6255  ret void
6256}
6257
6258define void @s_shuffle_v2i32_v4i32__0_6() {
6259; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_6:
6260; GFX900:       ; %bb.0:
6261; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6262; GFX900-NEXT:    ;;#ASMSTART
6263; GFX900-NEXT:    ; def s[8:11]
6264; GFX900-NEXT:    ;;#ASMEND
6265; GFX900-NEXT:    ;;#ASMSTART
6266; GFX900-NEXT:    ; def s[4:7]
6267; GFX900-NEXT:    ;;#ASMEND
6268; GFX900-NEXT:    s_mov_b32 s9, s6
6269; GFX900-NEXT:    ;;#ASMSTART
6270; GFX900-NEXT:    ; use s[8:9]
6271; GFX900-NEXT:    ;;#ASMEND
6272; GFX900-NEXT:    s_setpc_b64 s[30:31]
6273;
6274; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_6:
6275; GFX90A:       ; %bb.0:
6276; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6277; GFX90A-NEXT:    ;;#ASMSTART
6278; GFX90A-NEXT:    ; def s[8:11]
6279; GFX90A-NEXT:    ;;#ASMEND
6280; GFX90A-NEXT:    ;;#ASMSTART
6281; GFX90A-NEXT:    ; def s[4:7]
6282; GFX90A-NEXT:    ;;#ASMEND
6283; GFX90A-NEXT:    s_mov_b32 s9, s6
6284; GFX90A-NEXT:    ;;#ASMSTART
6285; GFX90A-NEXT:    ; use s[8:9]
6286; GFX90A-NEXT:    ;;#ASMEND
6287; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6288;
6289; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_6:
6290; GFX940:       ; %bb.0:
6291; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6292; GFX940-NEXT:    ;;#ASMSTART
6293; GFX940-NEXT:    ; def s[8:11]
6294; GFX940-NEXT:    ;;#ASMEND
6295; GFX940-NEXT:    ;;#ASMSTART
6296; GFX940-NEXT:    ; def s[0:3]
6297; GFX940-NEXT:    ;;#ASMEND
6298; GFX940-NEXT:    s_mov_b32 s9, s2
6299; GFX940-NEXT:    ;;#ASMSTART
6300; GFX940-NEXT:    ; use s[8:9]
6301; GFX940-NEXT:    ;;#ASMEND
6302; GFX940-NEXT:    s_setpc_b64 s[30:31]
6303  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6304  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6305  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 6>
6306  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6307  ret void
6308}
6309
6310define void @s_shuffle_v2i32_v4i32__1_6() {
6311; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_6:
6312; GFX900:       ; %bb.0:
6313; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6314; GFX900-NEXT:    ;;#ASMSTART
6315; GFX900-NEXT:    ; def s[8:11]
6316; GFX900-NEXT:    ;;#ASMEND
6317; GFX900-NEXT:    ;;#ASMSTART
6318; GFX900-NEXT:    ; def s[4:7]
6319; GFX900-NEXT:    ;;#ASMEND
6320; GFX900-NEXT:    s_mov_b32 s8, s5
6321; GFX900-NEXT:    s_mov_b32 s9, s10
6322; GFX900-NEXT:    ;;#ASMSTART
6323; GFX900-NEXT:    ; use s[8:9]
6324; GFX900-NEXT:    ;;#ASMEND
6325; GFX900-NEXT:    s_setpc_b64 s[30:31]
6326;
6327; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_6:
6328; GFX90A:       ; %bb.0:
6329; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6330; GFX90A-NEXT:    ;;#ASMSTART
6331; GFX90A-NEXT:    ; def s[8:11]
6332; GFX90A-NEXT:    ;;#ASMEND
6333; GFX90A-NEXT:    ;;#ASMSTART
6334; GFX90A-NEXT:    ; def s[4:7]
6335; GFX90A-NEXT:    ;;#ASMEND
6336; GFX90A-NEXT:    s_mov_b32 s8, s5
6337; GFX90A-NEXT:    s_mov_b32 s9, s10
6338; GFX90A-NEXT:    ;;#ASMSTART
6339; GFX90A-NEXT:    ; use s[8:9]
6340; GFX90A-NEXT:    ;;#ASMEND
6341; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6342;
6343; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_6:
6344; GFX940:       ; %bb.0:
6345; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6346; GFX940-NEXT:    ;;#ASMSTART
6347; GFX940-NEXT:    ; def s[0:3]
6348; GFX940-NEXT:    ;;#ASMEND
6349; GFX940-NEXT:    ;;#ASMSTART
6350; GFX940-NEXT:    ; def s[4:7]
6351; GFX940-NEXT:    ;;#ASMEND
6352; GFX940-NEXT:    s_mov_b32 s8, s1
6353; GFX940-NEXT:    s_mov_b32 s9, s6
6354; GFX940-NEXT:    ;;#ASMSTART
6355; GFX940-NEXT:    ; use s[8:9]
6356; GFX940-NEXT:    ;;#ASMEND
6357; GFX940-NEXT:    s_setpc_b64 s[30:31]
6358  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6359  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6360  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 6>
6361  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6362  ret void
6363}
6364
6365define void @s_shuffle_v2i32_v4i32__2_6() {
6366; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_6:
6367; GFX900:       ; %bb.0:
6368; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6369; GFX900-NEXT:    ;;#ASMSTART
6370; GFX900-NEXT:    ; def s[4:7]
6371; GFX900-NEXT:    ;;#ASMEND
6372; GFX900-NEXT:    ;;#ASMSTART
6373; GFX900-NEXT:    ; def s[8:11]
6374; GFX900-NEXT:    ;;#ASMEND
6375; GFX900-NEXT:    s_mov_b32 s7, s10
6376; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
6377; GFX900-NEXT:    ;;#ASMSTART
6378; GFX900-NEXT:    ; use s[8:9]
6379; GFX900-NEXT:    ;;#ASMEND
6380; GFX900-NEXT:    s_setpc_b64 s[30:31]
6381;
6382; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_6:
6383; GFX90A:       ; %bb.0:
6384; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6385; GFX90A-NEXT:    ;;#ASMSTART
6386; GFX90A-NEXT:    ; def s[4:7]
6387; GFX90A-NEXT:    ;;#ASMEND
6388; GFX90A-NEXT:    ;;#ASMSTART
6389; GFX90A-NEXT:    ; def s[8:11]
6390; GFX90A-NEXT:    ;;#ASMEND
6391; GFX90A-NEXT:    s_mov_b32 s7, s10
6392; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
6393; GFX90A-NEXT:    ;;#ASMSTART
6394; GFX90A-NEXT:    ; use s[8:9]
6395; GFX90A-NEXT:    ;;#ASMEND
6396; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6397;
6398; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_6:
6399; GFX940:       ; %bb.0:
6400; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6401; GFX940-NEXT:    ;;#ASMSTART
6402; GFX940-NEXT:    ; def s[0:3]
6403; GFX940-NEXT:    ;;#ASMEND
6404; GFX940-NEXT:    ;;#ASMSTART
6405; GFX940-NEXT:    ; def s[4:7]
6406; GFX940-NEXT:    ;;#ASMEND
6407; GFX940-NEXT:    s_mov_b32 s3, s6
6408; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
6409; GFX940-NEXT:    ;;#ASMSTART
6410; GFX940-NEXT:    ; use s[8:9]
6411; GFX940-NEXT:    ;;#ASMEND
6412; GFX940-NEXT:    s_setpc_b64 s[30:31]
6413  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6414  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6415  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 6>
6416  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6417  ret void
6418}
6419
6420define void @s_shuffle_v2i32_v4i32__3_6() {
6421; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_6:
6422; GFX900:       ; %bb.0:
6423; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6424; GFX900-NEXT:    ;;#ASMSTART
6425; GFX900-NEXT:    ; def s[8:11]
6426; GFX900-NEXT:    ;;#ASMEND
6427; GFX900-NEXT:    ;;#ASMSTART
6428; GFX900-NEXT:    ; def s[4:7]
6429; GFX900-NEXT:    ;;#ASMEND
6430; GFX900-NEXT:    s_mov_b32 s8, s7
6431; GFX900-NEXT:    s_mov_b32 s9, s10
6432; GFX900-NEXT:    ;;#ASMSTART
6433; GFX900-NEXT:    ; use s[8:9]
6434; GFX900-NEXT:    ;;#ASMEND
6435; GFX900-NEXT:    s_setpc_b64 s[30:31]
6436;
6437; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_6:
6438; GFX90A:       ; %bb.0:
6439; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6440; GFX90A-NEXT:    ;;#ASMSTART
6441; GFX90A-NEXT:    ; def s[8:11]
6442; GFX90A-NEXT:    ;;#ASMEND
6443; GFX90A-NEXT:    ;;#ASMSTART
6444; GFX90A-NEXT:    ; def s[4:7]
6445; GFX90A-NEXT:    ;;#ASMEND
6446; GFX90A-NEXT:    s_mov_b32 s8, s7
6447; GFX90A-NEXT:    s_mov_b32 s9, s10
6448; GFX90A-NEXT:    ;;#ASMSTART
6449; GFX90A-NEXT:    ; use s[8:9]
6450; GFX90A-NEXT:    ;;#ASMEND
6451; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6452;
6453; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_6:
6454; GFX940:       ; %bb.0:
6455; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6456; GFX940-NEXT:    ;;#ASMSTART
6457; GFX940-NEXT:    ; def s[0:3]
6458; GFX940-NEXT:    ;;#ASMEND
6459; GFX940-NEXT:    ;;#ASMSTART
6460; GFX940-NEXT:    ; def s[4:7]
6461; GFX940-NEXT:    ;;#ASMEND
6462; GFX940-NEXT:    s_mov_b32 s8, s3
6463; GFX940-NEXT:    s_mov_b32 s9, s6
6464; GFX940-NEXT:    ;;#ASMSTART
6465; GFX940-NEXT:    ; use s[8:9]
6466; GFX940-NEXT:    ;;#ASMEND
6467; GFX940-NEXT:    s_setpc_b64 s[30:31]
6468  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6469  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6470  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 6>
6471  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6472  ret void
6473}
6474
6475define void @s_shuffle_v2i32_v4i32__4_6() {
6476; GFX9-LABEL: s_shuffle_v2i32_v4i32__4_6:
6477; GFX9:       ; %bb.0:
6478; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6479; GFX9-NEXT:    ;;#ASMSTART
6480; GFX9-NEXT:    ; def s[8:11]
6481; GFX9-NEXT:    ;;#ASMEND
6482; GFX9-NEXT:    s_mov_b32 s9, s10
6483; GFX9-NEXT:    ;;#ASMSTART
6484; GFX9-NEXT:    ; use s[8:9]
6485; GFX9-NEXT:    ;;#ASMEND
6486; GFX9-NEXT:    s_setpc_b64 s[30:31]
6487  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6488  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6489  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 6>
6490  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6491  ret void
6492}
6493
6494define void @s_shuffle_v2i32_v4i32__5_6() {
6495; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_6:
6496; GFX900:       ; %bb.0:
6497; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6498; GFX900-NEXT:    ;;#ASMSTART
6499; GFX900-NEXT:    ; def s[4:7]
6500; GFX900-NEXT:    ;;#ASMEND
6501; GFX900-NEXT:    s_mov_b32 s8, s5
6502; GFX900-NEXT:    s_mov_b32 s9, s6
6503; GFX900-NEXT:    ;;#ASMSTART
6504; GFX900-NEXT:    ; use s[8:9]
6505; GFX900-NEXT:    ;;#ASMEND
6506; GFX900-NEXT:    s_setpc_b64 s[30:31]
6507;
6508; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_6:
6509; GFX90A:       ; %bb.0:
6510; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6511; GFX90A-NEXT:    ;;#ASMSTART
6512; GFX90A-NEXT:    ; def s[4:7]
6513; GFX90A-NEXT:    ;;#ASMEND
6514; GFX90A-NEXT:    s_mov_b32 s8, s5
6515; GFX90A-NEXT:    s_mov_b32 s9, s6
6516; GFX90A-NEXT:    ;;#ASMSTART
6517; GFX90A-NEXT:    ; use s[8:9]
6518; GFX90A-NEXT:    ;;#ASMEND
6519; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6520;
6521; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_6:
6522; GFX940:       ; %bb.0:
6523; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6524; GFX940-NEXT:    ;;#ASMSTART
6525; GFX940-NEXT:    ; def s[0:3]
6526; GFX940-NEXT:    ;;#ASMEND
6527; GFX940-NEXT:    s_mov_b32 s8, s1
6528; GFX940-NEXT:    s_mov_b32 s9, s2
6529; GFX940-NEXT:    ;;#ASMSTART
6530; GFX940-NEXT:    ; use s[8:9]
6531; GFX940-NEXT:    ;;#ASMEND
6532; GFX940-NEXT:    s_setpc_b64 s[30:31]
6533  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6534  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6535  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 6>
6536  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6537  ret void
6538}
6539
6540define void @s_shuffle_v2i32_v4i32__6_6() {
6541; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_6:
6542; GFX900:       ; %bb.0:
6543; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6544; GFX900-NEXT:    ;;#ASMSTART
6545; GFX900-NEXT:    ; def s[4:7]
6546; GFX900-NEXT:    ;;#ASMEND
6547; GFX900-NEXT:    s_mov_b32 s7, s6
6548; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
6549; GFX900-NEXT:    ;;#ASMSTART
6550; GFX900-NEXT:    ; use s[8:9]
6551; GFX900-NEXT:    ;;#ASMEND
6552; GFX900-NEXT:    s_setpc_b64 s[30:31]
6553;
6554; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_6:
6555; GFX90A:       ; %bb.0:
6556; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6557; GFX90A-NEXT:    ;;#ASMSTART
6558; GFX90A-NEXT:    ; def s[4:7]
6559; GFX90A-NEXT:    ;;#ASMEND
6560; GFX90A-NEXT:    s_mov_b32 s7, s6
6561; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
6562; GFX90A-NEXT:    ;;#ASMSTART
6563; GFX90A-NEXT:    ; use s[8:9]
6564; GFX90A-NEXT:    ;;#ASMEND
6565; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6566;
6567; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_6:
6568; GFX940:       ; %bb.0:
6569; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6570; GFX940-NEXT:    ;;#ASMSTART
6571; GFX940-NEXT:    ; def s[0:3]
6572; GFX940-NEXT:    ;;#ASMEND
6573; GFX940-NEXT:    s_mov_b32 s3, s2
6574; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
6575; GFX940-NEXT:    ;;#ASMSTART
6576; GFX940-NEXT:    ; use s[8:9]
6577; GFX940-NEXT:    ;;#ASMEND
6578; GFX940-NEXT:    s_setpc_b64 s[30:31]
6579  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6580  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6581  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 6>
6582  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6583  ret void
6584}
6585
6586define void @s_shuffle_v2i32_v4i32__u_7() {
6587; GFX900-LABEL: s_shuffle_v2i32_v4i32__u_7:
6588; GFX900:       ; %bb.0:
6589; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6590; GFX900-NEXT:    ;;#ASMSTART
6591; GFX900-NEXT:    ; def s[4:7]
6592; GFX900-NEXT:    ;;#ASMEND
6593; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
6594; GFX900-NEXT:    ;;#ASMSTART
6595; GFX900-NEXT:    ; use s[8:9]
6596; GFX900-NEXT:    ;;#ASMEND
6597; GFX900-NEXT:    s_setpc_b64 s[30:31]
6598;
6599; GFX90A-LABEL: s_shuffle_v2i32_v4i32__u_7:
6600; GFX90A:       ; %bb.0:
6601; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6602; GFX90A-NEXT:    ;;#ASMSTART
6603; GFX90A-NEXT:    ; def s[4:7]
6604; GFX90A-NEXT:    ;;#ASMEND
6605; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
6606; GFX90A-NEXT:    ;;#ASMSTART
6607; GFX90A-NEXT:    ; use s[8:9]
6608; GFX90A-NEXT:    ;;#ASMEND
6609; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6610;
6611; GFX940-LABEL: s_shuffle_v2i32_v4i32__u_7:
6612; GFX940:       ; %bb.0:
6613; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6614; GFX940-NEXT:    ;;#ASMSTART
6615; GFX940-NEXT:    ; def s[0:3]
6616; GFX940-NEXT:    ;;#ASMEND
6617; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
6618; GFX940-NEXT:    ;;#ASMSTART
6619; GFX940-NEXT:    ; use s[8:9]
6620; GFX940-NEXT:    ;;#ASMEND
6621; GFX940-NEXT:    s_setpc_b64 s[30:31]
6622  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6623  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6624  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 poison, i32 7>
6625  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6626  ret void
6627}
6628
6629define void @s_shuffle_v2i32_v4i32__0_7() {
6630; GFX900-LABEL: s_shuffle_v2i32_v4i32__0_7:
6631; GFX900:       ; %bb.0:
6632; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6633; GFX900-NEXT:    ;;#ASMSTART
6634; GFX900-NEXT:    ; def s[8:11]
6635; GFX900-NEXT:    ;;#ASMEND
6636; GFX900-NEXT:    ;;#ASMSTART
6637; GFX900-NEXT:    ; def s[4:7]
6638; GFX900-NEXT:    ;;#ASMEND
6639; GFX900-NEXT:    s_mov_b32 s9, s7
6640; GFX900-NEXT:    ;;#ASMSTART
6641; GFX900-NEXT:    ; use s[8:9]
6642; GFX900-NEXT:    ;;#ASMEND
6643; GFX900-NEXT:    s_setpc_b64 s[30:31]
6644;
6645; GFX90A-LABEL: s_shuffle_v2i32_v4i32__0_7:
6646; GFX90A:       ; %bb.0:
6647; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6648; GFX90A-NEXT:    ;;#ASMSTART
6649; GFX90A-NEXT:    ; def s[8:11]
6650; GFX90A-NEXT:    ;;#ASMEND
6651; GFX90A-NEXT:    ;;#ASMSTART
6652; GFX90A-NEXT:    ; def s[4:7]
6653; GFX90A-NEXT:    ;;#ASMEND
6654; GFX90A-NEXT:    s_mov_b32 s9, s7
6655; GFX90A-NEXT:    ;;#ASMSTART
6656; GFX90A-NEXT:    ; use s[8:9]
6657; GFX90A-NEXT:    ;;#ASMEND
6658; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6659;
6660; GFX940-LABEL: s_shuffle_v2i32_v4i32__0_7:
6661; GFX940:       ; %bb.0:
6662; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6663; GFX940-NEXT:    ;;#ASMSTART
6664; GFX940-NEXT:    ; def s[8:11]
6665; GFX940-NEXT:    ;;#ASMEND
6666; GFX940-NEXT:    ;;#ASMSTART
6667; GFX940-NEXT:    ; def s[0:3]
6668; GFX940-NEXT:    ;;#ASMEND
6669; GFX940-NEXT:    s_mov_b32 s9, s3
6670; GFX940-NEXT:    ;;#ASMSTART
6671; GFX940-NEXT:    ; use s[8:9]
6672; GFX940-NEXT:    ;;#ASMEND
6673; GFX940-NEXT:    s_setpc_b64 s[30:31]
6674  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6675  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6676  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 0, i32 7>
6677  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6678  ret void
6679}
6680
6681define void @s_shuffle_v2i32_v4i32__1_7() {
6682; GFX900-LABEL: s_shuffle_v2i32_v4i32__1_7:
6683; GFX900:       ; %bb.0:
6684; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6685; GFX900-NEXT:    ;;#ASMSTART
6686; GFX900-NEXT:    ; def s[8:11]
6687; GFX900-NEXT:    ;;#ASMEND
6688; GFX900-NEXT:    ;;#ASMSTART
6689; GFX900-NEXT:    ; def s[4:7]
6690; GFX900-NEXT:    ;;#ASMEND
6691; GFX900-NEXT:    s_mov_b32 s10, s5
6692; GFX900-NEXT:    s_mov_b64 s[8:9], s[10:11]
6693; GFX900-NEXT:    ;;#ASMSTART
6694; GFX900-NEXT:    ; use s[8:9]
6695; GFX900-NEXT:    ;;#ASMEND
6696; GFX900-NEXT:    s_setpc_b64 s[30:31]
6697;
6698; GFX90A-LABEL: s_shuffle_v2i32_v4i32__1_7:
6699; GFX90A:       ; %bb.0:
6700; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6701; GFX90A-NEXT:    ;;#ASMSTART
6702; GFX90A-NEXT:    ; def s[8:11]
6703; GFX90A-NEXT:    ;;#ASMEND
6704; GFX90A-NEXT:    ;;#ASMSTART
6705; GFX90A-NEXT:    ; def s[4:7]
6706; GFX90A-NEXT:    ;;#ASMEND
6707; GFX90A-NEXT:    s_mov_b32 s10, s5
6708; GFX90A-NEXT:    s_mov_b64 s[8:9], s[10:11]
6709; GFX90A-NEXT:    ;;#ASMSTART
6710; GFX90A-NEXT:    ; use s[8:9]
6711; GFX90A-NEXT:    ;;#ASMEND
6712; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6713;
6714; GFX940-LABEL: s_shuffle_v2i32_v4i32__1_7:
6715; GFX940:       ; %bb.0:
6716; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6717; GFX940-NEXT:    ;;#ASMSTART
6718; GFX940-NEXT:    ; def s[4:7]
6719; GFX940-NEXT:    ;;#ASMEND
6720; GFX940-NEXT:    ;;#ASMSTART
6721; GFX940-NEXT:    ; def s[0:3]
6722; GFX940-NEXT:    ;;#ASMEND
6723; GFX940-NEXT:    s_mov_b32 s6, s1
6724; GFX940-NEXT:    s_mov_b64 s[8:9], s[6:7]
6725; GFX940-NEXT:    ;;#ASMSTART
6726; GFX940-NEXT:    ; use s[8:9]
6727; GFX940-NEXT:    ;;#ASMEND
6728; GFX940-NEXT:    s_setpc_b64 s[30:31]
6729  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6730  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6731  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 1, i32 7>
6732  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6733  ret void
6734}
6735
6736define void @s_shuffle_v2i32_v4i32__2_7() {
6737; GFX900-LABEL: s_shuffle_v2i32_v4i32__2_7:
6738; GFX900:       ; %bb.0:
6739; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6740; GFX900-NEXT:    ;;#ASMSTART
6741; GFX900-NEXT:    ; def s[4:7]
6742; GFX900-NEXT:    ;;#ASMEND
6743; GFX900-NEXT:    ;;#ASMSTART
6744; GFX900-NEXT:    ; def s[8:11]
6745; GFX900-NEXT:    ;;#ASMEND
6746; GFX900-NEXT:    s_mov_b32 s7, s11
6747; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
6748; GFX900-NEXT:    ;;#ASMSTART
6749; GFX900-NEXT:    ; use s[8:9]
6750; GFX900-NEXT:    ;;#ASMEND
6751; GFX900-NEXT:    s_setpc_b64 s[30:31]
6752;
6753; GFX90A-LABEL: s_shuffle_v2i32_v4i32__2_7:
6754; GFX90A:       ; %bb.0:
6755; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6756; GFX90A-NEXT:    ;;#ASMSTART
6757; GFX90A-NEXT:    ; def s[4:7]
6758; GFX90A-NEXT:    ;;#ASMEND
6759; GFX90A-NEXT:    ;;#ASMSTART
6760; GFX90A-NEXT:    ; def s[8:11]
6761; GFX90A-NEXT:    ;;#ASMEND
6762; GFX90A-NEXT:    s_mov_b32 s7, s11
6763; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
6764; GFX90A-NEXT:    ;;#ASMSTART
6765; GFX90A-NEXT:    ; use s[8:9]
6766; GFX90A-NEXT:    ;;#ASMEND
6767; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6768;
6769; GFX940-LABEL: s_shuffle_v2i32_v4i32__2_7:
6770; GFX940:       ; %bb.0:
6771; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6772; GFX940-NEXT:    ;;#ASMSTART
6773; GFX940-NEXT:    ; def s[0:3]
6774; GFX940-NEXT:    ;;#ASMEND
6775; GFX940-NEXT:    ;;#ASMSTART
6776; GFX940-NEXT:    ; def s[4:7]
6777; GFX940-NEXT:    ;;#ASMEND
6778; GFX940-NEXT:    s_mov_b32 s3, s7
6779; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
6780; GFX940-NEXT:    ;;#ASMSTART
6781; GFX940-NEXT:    ; use s[8:9]
6782; GFX940-NEXT:    ;;#ASMEND
6783; GFX940-NEXT:    s_setpc_b64 s[30:31]
6784  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6785  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6786  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 2, i32 7>
6787  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6788  ret void
6789}
6790
6791define void @s_shuffle_v2i32_v4i32__3_7() {
6792; GFX900-LABEL: s_shuffle_v2i32_v4i32__3_7:
6793; GFX900:       ; %bb.0:
6794; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6795; GFX900-NEXT:    ;;#ASMSTART
6796; GFX900-NEXT:    ; def s[8:11]
6797; GFX900-NEXT:    ;;#ASMEND
6798; GFX900-NEXT:    ;;#ASMSTART
6799; GFX900-NEXT:    ; def s[4:7]
6800; GFX900-NEXT:    ;;#ASMEND
6801; GFX900-NEXT:    s_mov_b32 s10, s7
6802; GFX900-NEXT:    s_mov_b64 s[8:9], s[10:11]
6803; GFX900-NEXT:    ;;#ASMSTART
6804; GFX900-NEXT:    ; use s[8:9]
6805; GFX900-NEXT:    ;;#ASMEND
6806; GFX900-NEXT:    s_setpc_b64 s[30:31]
6807;
6808; GFX90A-LABEL: s_shuffle_v2i32_v4i32__3_7:
6809; GFX90A:       ; %bb.0:
6810; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6811; GFX90A-NEXT:    ;;#ASMSTART
6812; GFX90A-NEXT:    ; def s[8:11]
6813; GFX90A-NEXT:    ;;#ASMEND
6814; GFX90A-NEXT:    ;;#ASMSTART
6815; GFX90A-NEXT:    ; def s[4:7]
6816; GFX90A-NEXT:    ;;#ASMEND
6817; GFX90A-NEXT:    s_mov_b32 s10, s7
6818; GFX90A-NEXT:    s_mov_b64 s[8:9], s[10:11]
6819; GFX90A-NEXT:    ;;#ASMSTART
6820; GFX90A-NEXT:    ; use s[8:9]
6821; GFX90A-NEXT:    ;;#ASMEND
6822; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6823;
6824; GFX940-LABEL: s_shuffle_v2i32_v4i32__3_7:
6825; GFX940:       ; %bb.0:
6826; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6827; GFX940-NEXT:    ;;#ASMSTART
6828; GFX940-NEXT:    ; def s[4:7]
6829; GFX940-NEXT:    ;;#ASMEND
6830; GFX940-NEXT:    ;;#ASMSTART
6831; GFX940-NEXT:    ; def s[0:3]
6832; GFX940-NEXT:    ;;#ASMEND
6833; GFX940-NEXT:    s_mov_b32 s6, s3
6834; GFX940-NEXT:    s_mov_b64 s[8:9], s[6:7]
6835; GFX940-NEXT:    ;;#ASMSTART
6836; GFX940-NEXT:    ; use s[8:9]
6837; GFX940-NEXT:    ;;#ASMEND
6838; GFX940-NEXT:    s_setpc_b64 s[30:31]
6839  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6840  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6841  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 3, i32 7>
6842  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6843  ret void
6844}
6845
6846define void @s_shuffle_v2i32_v4i32__4_7() {
6847; GFX9-LABEL: s_shuffle_v2i32_v4i32__4_7:
6848; GFX9:       ; %bb.0:
6849; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6850; GFX9-NEXT:    ;;#ASMSTART
6851; GFX9-NEXT:    ; def s[8:11]
6852; GFX9-NEXT:    ;;#ASMEND
6853; GFX9-NEXT:    s_mov_b32 s9, s11
6854; GFX9-NEXT:    ;;#ASMSTART
6855; GFX9-NEXT:    ; use s[8:9]
6856; GFX9-NEXT:    ;;#ASMEND
6857; GFX9-NEXT:    s_setpc_b64 s[30:31]
6858  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6859  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6860  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 4, i32 7>
6861  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6862  ret void
6863}
6864
6865define void @s_shuffle_v2i32_v4i32__5_7() {
6866; GFX900-LABEL: s_shuffle_v2i32_v4i32__5_7:
6867; GFX900:       ; %bb.0:
6868; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6869; GFX900-NEXT:    ;;#ASMSTART
6870; GFX900-NEXT:    ; def s[4:7]
6871; GFX900-NEXT:    ;;#ASMEND
6872; GFX900-NEXT:    s_mov_b32 s6, s5
6873; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
6874; GFX900-NEXT:    ;;#ASMSTART
6875; GFX900-NEXT:    ; use s[8:9]
6876; GFX900-NEXT:    ;;#ASMEND
6877; GFX900-NEXT:    s_setpc_b64 s[30:31]
6878;
6879; GFX90A-LABEL: s_shuffle_v2i32_v4i32__5_7:
6880; GFX90A:       ; %bb.0:
6881; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6882; GFX90A-NEXT:    ;;#ASMSTART
6883; GFX90A-NEXT:    ; def s[4:7]
6884; GFX90A-NEXT:    ;;#ASMEND
6885; GFX90A-NEXT:    s_mov_b32 s6, s5
6886; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
6887; GFX90A-NEXT:    ;;#ASMSTART
6888; GFX90A-NEXT:    ; use s[8:9]
6889; GFX90A-NEXT:    ;;#ASMEND
6890; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6891;
6892; GFX940-LABEL: s_shuffle_v2i32_v4i32__5_7:
6893; GFX940:       ; %bb.0:
6894; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6895; GFX940-NEXT:    ;;#ASMSTART
6896; GFX940-NEXT:    ; def s[0:3]
6897; GFX940-NEXT:    ;;#ASMEND
6898; GFX940-NEXT:    s_mov_b32 s2, s1
6899; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
6900; GFX940-NEXT:    ;;#ASMSTART
6901; GFX940-NEXT:    ; use s[8:9]
6902; GFX940-NEXT:    ;;#ASMEND
6903; GFX940-NEXT:    s_setpc_b64 s[30:31]
6904  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6905  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6906  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 5, i32 7>
6907  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6908  ret void
6909}
6910
6911define void @s_shuffle_v2i32_v4i32__6_7() {
6912; GFX900-LABEL: s_shuffle_v2i32_v4i32__6_7:
6913; GFX900:       ; %bb.0:
6914; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6915; GFX900-NEXT:    ;;#ASMSTART
6916; GFX900-NEXT:    ; def s[4:7]
6917; GFX900-NEXT:    ;;#ASMEND
6918; GFX900-NEXT:    s_mov_b64 s[8:9], s[6:7]
6919; GFX900-NEXT:    ;;#ASMSTART
6920; GFX900-NEXT:    ; use s[8:9]
6921; GFX900-NEXT:    ;;#ASMEND
6922; GFX900-NEXT:    s_setpc_b64 s[30:31]
6923;
6924; GFX90A-LABEL: s_shuffle_v2i32_v4i32__6_7:
6925; GFX90A:       ; %bb.0:
6926; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6927; GFX90A-NEXT:    ;;#ASMSTART
6928; GFX90A-NEXT:    ; def s[4:7]
6929; GFX90A-NEXT:    ;;#ASMEND
6930; GFX90A-NEXT:    s_mov_b64 s[8:9], s[6:7]
6931; GFX90A-NEXT:    ;;#ASMSTART
6932; GFX90A-NEXT:    ; use s[8:9]
6933; GFX90A-NEXT:    ;;#ASMEND
6934; GFX90A-NEXT:    s_setpc_b64 s[30:31]
6935;
6936; GFX940-LABEL: s_shuffle_v2i32_v4i32__6_7:
6937; GFX940:       ; %bb.0:
6938; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
6939; GFX940-NEXT:    ;;#ASMSTART
6940; GFX940-NEXT:    ; def s[0:3]
6941; GFX940-NEXT:    ;;#ASMEND
6942; GFX940-NEXT:    s_mov_b64 s[8:9], s[2:3]
6943; GFX940-NEXT:    ;;#ASMSTART
6944; GFX940-NEXT:    ; use s[8:9]
6945; GFX940-NEXT:    ;;#ASMEND
6946; GFX940-NEXT:    s_setpc_b64 s[30:31]
6947  %vec0 = call <4 x i32> asm "; def $0", "=s"()
6948  %vec1 = call <4 x i32> asm "; def $0", "=s"()
6949  %shuf = shufflevector <4 x i32> %vec0, <4 x i32> %vec1, <2 x i32> <i32 6, i32 7>
6950  call void asm sideeffect "; use $0", "{s[8:9]}"(<2 x i32> %shuf)
6951  ret void
6952}
6953;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
6954; GFX90APLUS: {{.*}}
6955