xref: /llvm-project/llvm/test/CodeGen/AMDGPU/shufflevector.v2i64.v2i64.ll (revision 585858aeb6247b3892218edb9d353c63f1c33186)
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_v2i64_v2i64__u_u(ptr addrspace(1) inreg %ptr) {
8; GFX9-LABEL: v_shuffle_v2i64_v2i64__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 <2 x i64> asm "; def $0", "=v"()
13  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> poison
14  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
15  ret void
16}
17
18define void @v_shuffle_v2i64_v2i64__0_u(ptr addrspace(1) inreg %ptr) {
19; GFX900-LABEL: v_shuffle_v2i64_v2i64__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_dwordx4 v4, v[0:3], 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_v2i64_v2i64__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_dwordx4 v4, v[0:3], 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_v2i64_v2i64__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_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
49; GFX940-NEXT:    s_waitcnt vmcnt(0)
50; GFX940-NEXT:    s_setpc_b64 s[30:31]
51  %vec0 = call <2 x i64> asm "; def $0", "=v"()
52  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 poison>
53  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
54  ret void
55}
56
57define void @v_shuffle_v2i64_v2i64__1_u(ptr addrspace(1) inreg %ptr) {
58; GFX900-LABEL: v_shuffle_v2i64_v2i64__1_u:
59; GFX900:       ; %bb.0:
60; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
61; GFX900-NEXT:    ;;#ASMSTART
62; GFX900-NEXT:    ; def v[0:3]
63; GFX900-NEXT:    ;;#ASMEND
64; GFX900-NEXT:    v_mov_b32_e32 v4, 0
65; GFX900-NEXT:    v_mov_b32_e32 v0, v2
66; GFX900-NEXT:    v_mov_b32_e32 v1, v3
67; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
68; GFX900-NEXT:    s_waitcnt vmcnt(0)
69; GFX900-NEXT:    s_setpc_b64 s[30:31]
70;
71; GFX90A-LABEL: v_shuffle_v2i64_v2i64__1_u:
72; GFX90A:       ; %bb.0:
73; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
74; GFX90A-NEXT:    ;;#ASMSTART
75; GFX90A-NEXT:    ; def v[0:3]
76; GFX90A-NEXT:    ;;#ASMEND
77; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
78; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
79; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
80; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
81; GFX90A-NEXT:    s_waitcnt vmcnt(0)
82; GFX90A-NEXT:    s_setpc_b64 s[30:31]
83;
84; GFX940-LABEL: v_shuffle_v2i64_v2i64__1_u:
85; GFX940:       ; %bb.0:
86; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
87; GFX940-NEXT:    ;;#ASMSTART
88; GFX940-NEXT:    ; def v[0:3]
89; GFX940-NEXT:    ;;#ASMEND
90; GFX940-NEXT:    v_mov_b32_e32 v4, 0
91; GFX940-NEXT:    v_mov_b32_e32 v0, v2
92; GFX940-NEXT:    v_mov_b32_e32 v1, v3
93; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
94; GFX940-NEXT:    s_waitcnt vmcnt(0)
95; GFX940-NEXT:    s_setpc_b64 s[30:31]
96  %vec0 = call <2 x i64> asm "; def $0", "=v"()
97  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 poison>
98  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
99  ret void
100}
101
102define void @v_shuffle_v2i64_v2i64__2_u(ptr addrspace(1) inreg %ptr) {
103; GFX9-LABEL: v_shuffle_v2i64_v2i64__2_u:
104; GFX9:       ; %bb.0:
105; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
106; GFX9-NEXT:    s_setpc_b64 s[30:31]
107  %vec0 = call <2 x i64> asm "; def $0", "=v"()
108  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 poison>
109  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
110  ret void
111}
112
113define void @v_shuffle_v2i64_v2i64__3_u(ptr addrspace(1) inreg %ptr) {
114; GFX900-LABEL: v_shuffle_v2i64_v2i64__3_u:
115; GFX900:       ; %bb.0:
116; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
117; GFX900-NEXT:    ;;#ASMSTART
118; GFX900-NEXT:    ; def v[0:3]
119; GFX900-NEXT:    ;;#ASMEND
120; GFX900-NEXT:    v_mov_b32_e32 v4, 0
121; GFX900-NEXT:    v_mov_b32_e32 v0, v2
122; GFX900-NEXT:    v_mov_b32_e32 v1, v3
123; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
124; GFX900-NEXT:    s_waitcnt vmcnt(0)
125; GFX900-NEXT:    s_setpc_b64 s[30:31]
126;
127; GFX90A-LABEL: v_shuffle_v2i64_v2i64__3_u:
128; GFX90A:       ; %bb.0:
129; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
130; GFX90A-NEXT:    ;;#ASMSTART
131; GFX90A-NEXT:    ; def v[0:3]
132; GFX90A-NEXT:    ;;#ASMEND
133; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
134; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
135; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
136; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
137; GFX90A-NEXT:    s_waitcnt vmcnt(0)
138; GFX90A-NEXT:    s_setpc_b64 s[30:31]
139;
140; GFX940-LABEL: v_shuffle_v2i64_v2i64__3_u:
141; GFX940:       ; %bb.0:
142; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
143; GFX940-NEXT:    ;;#ASMSTART
144; GFX940-NEXT:    ; def v[0:3]
145; GFX940-NEXT:    ;;#ASMEND
146; GFX940-NEXT:    v_mov_b32_e32 v4, 0
147; GFX940-NEXT:    v_mov_b32_e32 v0, v2
148; GFX940-NEXT:    v_mov_b32_e32 v1, v3
149; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
150; GFX940-NEXT:    s_waitcnt vmcnt(0)
151; GFX940-NEXT:    s_setpc_b64 s[30:31]
152  %vec0 = call <2 x i64> asm "; def $0", "=v"()
153  %vec1 = call <2 x i64> asm "; def $0", "=v"()
154  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 poison>
155  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
156  ret void
157}
158
159define void @v_shuffle_v2i64_v2i64__3_0(ptr addrspace(1) inreg %ptr) {
160; GFX900-LABEL: v_shuffle_v2i64_v2i64__3_0:
161; GFX900:       ; %bb.0:
162; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
163; GFX900-NEXT:    ;;#ASMSTART
164; GFX900-NEXT:    ; def v[0:3]
165; GFX900-NEXT:    ;;#ASMEND
166; GFX900-NEXT:    ;;#ASMSTART
167; GFX900-NEXT:    ; def v[2:5]
168; GFX900-NEXT:    ;;#ASMEND
169; GFX900-NEXT:    v_mov_b32_e32 v6, 0
170; GFX900-NEXT:    v_mov_b32_e32 v2, v4
171; GFX900-NEXT:    v_mov_b32_e32 v3, v5
172; GFX900-NEXT:    v_mov_b32_e32 v4, v0
173; GFX900-NEXT:    v_mov_b32_e32 v5, v1
174; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
175; GFX900-NEXT:    s_waitcnt vmcnt(0)
176; GFX900-NEXT:    s_setpc_b64 s[30:31]
177;
178; GFX90A-LABEL: v_shuffle_v2i64_v2i64__3_0:
179; GFX90A:       ; %bb.0:
180; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
181; GFX90A-NEXT:    ;;#ASMSTART
182; GFX90A-NEXT:    ; def v[0:3]
183; GFX90A-NEXT:    ;;#ASMEND
184; GFX90A-NEXT:    ;;#ASMSTART
185; GFX90A-NEXT:    ; def v[2:5]
186; GFX90A-NEXT:    ;;#ASMEND
187; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
188; GFX90A-NEXT:    v_mov_b32_e32 v2, v4
189; GFX90A-NEXT:    v_mov_b32_e32 v3, v5
190; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
191; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
192; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
193; GFX90A-NEXT:    s_waitcnt vmcnt(0)
194; GFX90A-NEXT:    s_setpc_b64 s[30:31]
195;
196; GFX940-LABEL: v_shuffle_v2i64_v2i64__3_0:
197; GFX940:       ; %bb.0:
198; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
199; GFX940-NEXT:    ;;#ASMSTART
200; GFX940-NEXT:    ; def v[0:3]
201; GFX940-NEXT:    ;;#ASMEND
202; GFX940-NEXT:    v_mov_b32_e32 v6, 0
203; GFX940-NEXT:    ;;#ASMSTART
204; GFX940-NEXT:    ; def v[2:5]
205; GFX940-NEXT:    ;;#ASMEND
206; GFX940-NEXT:    s_nop 0
207; GFX940-NEXT:    v_mov_b32_e32 v2, v4
208; GFX940-NEXT:    v_mov_b32_e32 v3, v5
209; GFX940-NEXT:    v_mov_b32_e32 v4, v0
210; GFX940-NEXT:    v_mov_b32_e32 v5, v1
211; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
212; GFX940-NEXT:    s_waitcnt vmcnt(0)
213; GFX940-NEXT:    s_setpc_b64 s[30:31]
214  %vec0 = call <2 x i64> asm "; def $0", "=v"()
215  %vec1 = call <2 x i64> asm "; def $0", "=v"()
216  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 0>
217  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
218  ret void
219}
220
221define void @v_shuffle_v2i64_v2i64__3_1(ptr addrspace(1) inreg %ptr) {
222; GFX900-LABEL: v_shuffle_v2i64_v2i64__3_1:
223; GFX900:       ; %bb.0:
224; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
225; GFX900-NEXT:    ;;#ASMSTART
226; GFX900-NEXT:    ; def v[0:3]
227; GFX900-NEXT:    ;;#ASMEND
228; GFX900-NEXT:    v_mov_b32_e32 v8, 0
229; GFX900-NEXT:    ;;#ASMSTART
230; GFX900-NEXT:    ; def v[4:7]
231; GFX900-NEXT:    ;;#ASMEND
232; GFX900-NEXT:    v_mov_b32_e32 v0, v6
233; GFX900-NEXT:    v_mov_b32_e32 v1, v7
234; GFX900-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
235; GFX900-NEXT:    s_waitcnt vmcnt(0)
236; GFX900-NEXT:    s_setpc_b64 s[30:31]
237;
238; GFX90A-LABEL: v_shuffle_v2i64_v2i64__3_1:
239; GFX90A:       ; %bb.0:
240; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
241; GFX90A-NEXT:    ;;#ASMSTART
242; GFX90A-NEXT:    ; def v[0:3]
243; GFX90A-NEXT:    ;;#ASMEND
244; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
245; GFX90A-NEXT:    ;;#ASMSTART
246; GFX90A-NEXT:    ; def v[4:7]
247; GFX90A-NEXT:    ;;#ASMEND
248; GFX90A-NEXT:    v_mov_b32_e32 v0, v6
249; GFX90A-NEXT:    v_mov_b32_e32 v1, v7
250; GFX90A-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
251; GFX90A-NEXT:    s_waitcnt vmcnt(0)
252; GFX90A-NEXT:    s_setpc_b64 s[30:31]
253;
254; GFX940-LABEL: v_shuffle_v2i64_v2i64__3_1:
255; GFX940:       ; %bb.0:
256; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
257; GFX940-NEXT:    ;;#ASMSTART
258; GFX940-NEXT:    ; def v[0:3]
259; GFX940-NEXT:    ;;#ASMEND
260; GFX940-NEXT:    v_mov_b32_e32 v8, 0
261; GFX940-NEXT:    ;;#ASMSTART
262; GFX940-NEXT:    ; def v[4:7]
263; GFX940-NEXT:    ;;#ASMEND
264; GFX940-NEXT:    s_nop 0
265; GFX940-NEXT:    v_mov_b32_e32 v0, v6
266; GFX940-NEXT:    v_mov_b32_e32 v1, v7
267; GFX940-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1] sc0 sc1
268; GFX940-NEXT:    s_waitcnt vmcnt(0)
269; GFX940-NEXT:    s_setpc_b64 s[30:31]
270  %vec0 = call <2 x i64> asm "; def $0", "=v"()
271  %vec1 = call <2 x i64> asm "; def $0", "=v"()
272  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 1>
273  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
274  ret void
275}
276
277define void @v_shuffle_v2i64_v2i64__3_2(ptr addrspace(1) inreg %ptr) {
278; GFX900-LABEL: v_shuffle_v2i64_v2i64__3_2:
279; GFX900:       ; %bb.0:
280; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
281; GFX900-NEXT:    v_mov_b32_e32 v6, 0
282; GFX900-NEXT:    ;;#ASMSTART
283; GFX900-NEXT:    ; def v[0:3]
284; GFX900-NEXT:    ;;#ASMEND
285; GFX900-NEXT:    v_mov_b32_e32 v4, v0
286; GFX900-NEXT:    v_mov_b32_e32 v5, v1
287; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
288; GFX900-NEXT:    s_waitcnt vmcnt(0)
289; GFX900-NEXT:    s_setpc_b64 s[30:31]
290;
291; GFX90A-LABEL: v_shuffle_v2i64_v2i64__3_2:
292; GFX90A:       ; %bb.0:
293; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
294; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
295; GFX90A-NEXT:    ;;#ASMSTART
296; GFX90A-NEXT:    ; def v[0:3]
297; GFX90A-NEXT:    ;;#ASMEND
298; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
299; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
300; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
301; GFX90A-NEXT:    s_waitcnt vmcnt(0)
302; GFX90A-NEXT:    s_setpc_b64 s[30:31]
303;
304; GFX940-LABEL: v_shuffle_v2i64_v2i64__3_2:
305; GFX940:       ; %bb.0:
306; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
307; GFX940-NEXT:    v_mov_b32_e32 v6, 0
308; GFX940-NEXT:    ;;#ASMSTART
309; GFX940-NEXT:    ; def v[0:3]
310; GFX940-NEXT:    ;;#ASMEND
311; GFX940-NEXT:    s_nop 0
312; GFX940-NEXT:    v_mov_b32_e32 v4, v0
313; GFX940-NEXT:    v_mov_b32_e32 v5, v1
314; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
315; GFX940-NEXT:    s_waitcnt vmcnt(0)
316; GFX940-NEXT:    s_setpc_b64 s[30:31]
317  %vec0 = call <2 x i64> asm "; def $0", "=v"()
318  %vec1 = call <2 x i64> asm "; def $0", "=v"()
319  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 2>
320  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
321  ret void
322}
323
324define void @v_shuffle_v2i64_v2i64__3_3(ptr addrspace(1) inreg %ptr) {
325; GFX900-LABEL: v_shuffle_v2i64_v2i64__3_3:
326; GFX900:       ; %bb.0:
327; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
328; GFX900-NEXT:    ;;#ASMSTART
329; GFX900-NEXT:    ; def v[0:3]
330; GFX900-NEXT:    ;;#ASMEND
331; GFX900-NEXT:    v_mov_b32_e32 v4, 0
332; GFX900-NEXT:    v_mov_b32_e32 v0, v2
333; GFX900-NEXT:    v_mov_b32_e32 v1, v3
334; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
335; GFX900-NEXT:    s_waitcnt vmcnt(0)
336; GFX900-NEXT:    s_setpc_b64 s[30:31]
337;
338; GFX90A-LABEL: v_shuffle_v2i64_v2i64__3_3:
339; GFX90A:       ; %bb.0:
340; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
341; GFX90A-NEXT:    ;;#ASMSTART
342; GFX90A-NEXT:    ; def v[0:3]
343; GFX90A-NEXT:    ;;#ASMEND
344; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
345; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
346; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
347; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
348; GFX90A-NEXT:    s_waitcnt vmcnt(0)
349; GFX90A-NEXT:    s_setpc_b64 s[30:31]
350;
351; GFX940-LABEL: v_shuffle_v2i64_v2i64__3_3:
352; GFX940:       ; %bb.0:
353; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
354; GFX940-NEXT:    ;;#ASMSTART
355; GFX940-NEXT:    ; def v[0:3]
356; GFX940-NEXT:    ;;#ASMEND
357; GFX940-NEXT:    v_mov_b32_e32 v4, 0
358; GFX940-NEXT:    v_mov_b32_e32 v0, v2
359; GFX940-NEXT:    v_mov_b32_e32 v1, v3
360; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
361; GFX940-NEXT:    s_waitcnt vmcnt(0)
362; GFX940-NEXT:    s_setpc_b64 s[30:31]
363  %vec0 = call <2 x i64> asm "; def $0", "=v"()
364  %vec1 = call <2 x i64> asm "; def $0", "=v"()
365  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 3>
366  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
367  ret void
368}
369
370define void @v_shuffle_v2i64_v2i64__u_0(ptr addrspace(1) inreg %ptr) {
371; GFX900-LABEL: v_shuffle_v2i64_v2i64__u_0:
372; GFX900:       ; %bb.0:
373; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
374; GFX900-NEXT:    ;;#ASMSTART
375; GFX900-NEXT:    ; def v[0:3]
376; GFX900-NEXT:    ;;#ASMEND
377; GFX900-NEXT:    v_mov_b32_e32 v4, 0
378; GFX900-NEXT:    v_mov_b32_e32 v2, v0
379; GFX900-NEXT:    v_mov_b32_e32 v3, v1
380; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
381; GFX900-NEXT:    s_waitcnt vmcnt(0)
382; GFX900-NEXT:    s_setpc_b64 s[30:31]
383;
384; GFX90A-LABEL: v_shuffle_v2i64_v2i64__u_0:
385; GFX90A:       ; %bb.0:
386; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
387; GFX90A-NEXT:    ;;#ASMSTART
388; GFX90A-NEXT:    ; def v[0:3]
389; GFX90A-NEXT:    ;;#ASMEND
390; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
391; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
392; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
393; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
394; GFX90A-NEXT:    s_waitcnt vmcnt(0)
395; GFX90A-NEXT:    s_setpc_b64 s[30:31]
396;
397; GFX940-LABEL: v_shuffle_v2i64_v2i64__u_0:
398; GFX940:       ; %bb.0:
399; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
400; GFX940-NEXT:    ;;#ASMSTART
401; GFX940-NEXT:    ; def v[0:3]
402; GFX940-NEXT:    ;;#ASMEND
403; GFX940-NEXT:    v_mov_b32_e32 v4, 0
404; GFX940-NEXT:    v_mov_b32_e32 v2, v0
405; GFX940-NEXT:    v_mov_b32_e32 v3, v1
406; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
407; GFX940-NEXT:    s_waitcnt vmcnt(0)
408; GFX940-NEXT:    s_setpc_b64 s[30:31]
409  %vec0 = call <2 x i64> asm "; def $0", "=v"()
410  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 0>
411  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
412  ret void
413}
414
415define void @v_shuffle_v2i64_v2i64__0_0(ptr addrspace(1) inreg %ptr) {
416; GFX900-LABEL: v_shuffle_v2i64_v2i64__0_0:
417; GFX900:       ; %bb.0:
418; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
419; GFX900-NEXT:    ;;#ASMSTART
420; GFX900-NEXT:    ; def v[0:3]
421; GFX900-NEXT:    ;;#ASMEND
422; GFX900-NEXT:    v_mov_b32_e32 v4, 0
423; GFX900-NEXT:    v_mov_b32_e32 v2, v0
424; GFX900-NEXT:    v_mov_b32_e32 v3, v1
425; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
426; GFX900-NEXT:    s_waitcnt vmcnt(0)
427; GFX900-NEXT:    s_setpc_b64 s[30:31]
428;
429; GFX90A-LABEL: v_shuffle_v2i64_v2i64__0_0:
430; GFX90A:       ; %bb.0:
431; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
432; GFX90A-NEXT:    ;;#ASMSTART
433; GFX90A-NEXT:    ; def v[0:3]
434; GFX90A-NEXT:    ;;#ASMEND
435; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
436; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
437; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
438; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
439; GFX90A-NEXT:    s_waitcnt vmcnt(0)
440; GFX90A-NEXT:    s_setpc_b64 s[30:31]
441;
442; GFX940-LABEL: v_shuffle_v2i64_v2i64__0_0:
443; GFX940:       ; %bb.0:
444; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
445; GFX940-NEXT:    ;;#ASMSTART
446; GFX940-NEXT:    ; def v[0:3]
447; GFX940-NEXT:    ;;#ASMEND
448; GFX940-NEXT:    v_mov_b32_e32 v4, 0
449; GFX940-NEXT:    v_mov_b32_e32 v2, v0
450; GFX940-NEXT:    v_mov_b32_e32 v3, v1
451; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
452; GFX940-NEXT:    s_waitcnt vmcnt(0)
453; GFX940-NEXT:    s_setpc_b64 s[30:31]
454  %vec0 = call <2 x i64> asm "; def $0", "=v"()
455  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> zeroinitializer
456  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
457  ret void
458}
459
460define void @v_shuffle_v2i64_v2i64__1_0(ptr addrspace(1) inreg %ptr) {
461; GFX900-LABEL: v_shuffle_v2i64_v2i64__1_0:
462; GFX900:       ; %bb.0:
463; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
464; GFX900-NEXT:    v_mov_b32_e32 v6, 0
465; GFX900-NEXT:    ;;#ASMSTART
466; GFX900-NEXT:    ; def v[0:3]
467; GFX900-NEXT:    ;;#ASMEND
468; GFX900-NEXT:    v_mov_b32_e32 v4, v0
469; GFX900-NEXT:    v_mov_b32_e32 v5, v1
470; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
471; GFX900-NEXT:    s_waitcnt vmcnt(0)
472; GFX900-NEXT:    s_setpc_b64 s[30:31]
473;
474; GFX90A-LABEL: v_shuffle_v2i64_v2i64__1_0:
475; GFX90A:       ; %bb.0:
476; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
477; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
478; GFX90A-NEXT:    ;;#ASMSTART
479; GFX90A-NEXT:    ; def v[0:3]
480; GFX90A-NEXT:    ;;#ASMEND
481; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
482; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
483; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
484; GFX90A-NEXT:    s_waitcnt vmcnt(0)
485; GFX90A-NEXT:    s_setpc_b64 s[30:31]
486;
487; GFX940-LABEL: v_shuffle_v2i64_v2i64__1_0:
488; GFX940:       ; %bb.0:
489; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
490; GFX940-NEXT:    v_mov_b32_e32 v6, 0
491; GFX940-NEXT:    ;;#ASMSTART
492; GFX940-NEXT:    ; def v[0:3]
493; GFX940-NEXT:    ;;#ASMEND
494; GFX940-NEXT:    s_nop 0
495; GFX940-NEXT:    v_mov_b32_e32 v4, v0
496; GFX940-NEXT:    v_mov_b32_e32 v5, v1
497; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
498; GFX940-NEXT:    s_waitcnt vmcnt(0)
499; GFX940-NEXT:    s_setpc_b64 s[30:31]
500  %vec0 = call <2 x i64> asm "; def $0", "=v"()
501  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
502  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
503  ret void
504}
505
506define void @v_shuffle_v2i64_v2i64__2_0(ptr addrspace(1) inreg %ptr) {
507; GFX900-LABEL: v_shuffle_v2i64_v2i64__2_0:
508; GFX900:       ; %bb.0:
509; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
510; GFX900-NEXT:    ;;#ASMSTART
511; GFX900-NEXT:    ; def v[0:3]
512; GFX900-NEXT:    ;;#ASMEND
513; GFX900-NEXT:    v_mov_b32_e32 v4, 0
514; GFX900-NEXT:    v_mov_b32_e32 v2, v0
515; GFX900-NEXT:    v_mov_b32_e32 v3, v1
516; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
517; GFX900-NEXT:    s_waitcnt vmcnt(0)
518; GFX900-NEXT:    s_setpc_b64 s[30:31]
519;
520; GFX90A-LABEL: v_shuffle_v2i64_v2i64__2_0:
521; GFX90A:       ; %bb.0:
522; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
523; GFX90A-NEXT:    ;;#ASMSTART
524; GFX90A-NEXT:    ; def v[0:3]
525; GFX90A-NEXT:    ;;#ASMEND
526; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
527; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
528; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
529; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
530; GFX90A-NEXT:    s_waitcnt vmcnt(0)
531; GFX90A-NEXT:    s_setpc_b64 s[30:31]
532;
533; GFX940-LABEL: v_shuffle_v2i64_v2i64__2_0:
534; GFX940:       ; %bb.0:
535; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
536; GFX940-NEXT:    ;;#ASMSTART
537; GFX940-NEXT:    ; def v[0:3]
538; GFX940-NEXT:    ;;#ASMEND
539; GFX940-NEXT:    v_mov_b32_e32 v4, 0
540; GFX940-NEXT:    v_mov_b32_e32 v2, v0
541; GFX940-NEXT:    v_mov_b32_e32 v3, v1
542; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
543; GFX940-NEXT:    s_waitcnt vmcnt(0)
544; GFX940-NEXT:    s_setpc_b64 s[30:31]
545  %vec0 = call <2 x i64> asm "; def $0", "=v"()
546  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 0>
547  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
548  ret void
549}
550
551define void @v_shuffle_v2i64_v2i64__u_1(ptr addrspace(1) inreg %ptr) {
552; GFX900-LABEL: v_shuffle_v2i64_v2i64__u_1:
553; GFX900:       ; %bb.0:
554; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
555; GFX900-NEXT:    v_mov_b32_e32 v4, 0
556; GFX900-NEXT:    ;;#ASMSTART
557; GFX900-NEXT:    ; def v[0:3]
558; GFX900-NEXT:    ;;#ASMEND
559; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
560; GFX900-NEXT:    s_waitcnt vmcnt(0)
561; GFX900-NEXT:    s_setpc_b64 s[30:31]
562;
563; GFX90A-LABEL: v_shuffle_v2i64_v2i64__u_1:
564; GFX90A:       ; %bb.0:
565; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
566; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
567; GFX90A-NEXT:    ;;#ASMSTART
568; GFX90A-NEXT:    ; def v[0:3]
569; GFX90A-NEXT:    ;;#ASMEND
570; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
571; GFX90A-NEXT:    s_waitcnt vmcnt(0)
572; GFX90A-NEXT:    s_setpc_b64 s[30:31]
573;
574; GFX940-LABEL: v_shuffle_v2i64_v2i64__u_1:
575; GFX940:       ; %bb.0:
576; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
577; GFX940-NEXT:    v_mov_b32_e32 v4, 0
578; GFX940-NEXT:    ;;#ASMSTART
579; GFX940-NEXT:    ; def v[0:3]
580; GFX940-NEXT:    ;;#ASMEND
581; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
582; GFX940-NEXT:    s_waitcnt vmcnt(0)
583; GFX940-NEXT:    s_setpc_b64 s[30:31]
584  %vec0 = call <2 x i64> asm "; def $0", "=v"()
585  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 1>
586  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
587  ret void
588}
589
590define void @v_shuffle_v2i64_v2i64__0_1(ptr addrspace(1) inreg %ptr) {
591; GFX900-LABEL: v_shuffle_v2i64_v2i64__0_1:
592; GFX900:       ; %bb.0:
593; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
594; GFX900-NEXT:    v_mov_b32_e32 v4, 0
595; GFX900-NEXT:    ;;#ASMSTART
596; GFX900-NEXT:    ; def v[0:3]
597; GFX900-NEXT:    ;;#ASMEND
598; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
599; GFX900-NEXT:    s_waitcnt vmcnt(0)
600; GFX900-NEXT:    s_setpc_b64 s[30:31]
601;
602; GFX90A-LABEL: v_shuffle_v2i64_v2i64__0_1:
603; GFX90A:       ; %bb.0:
604; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
605; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
606; GFX90A-NEXT:    ;;#ASMSTART
607; GFX90A-NEXT:    ; def v[0:3]
608; GFX90A-NEXT:    ;;#ASMEND
609; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
610; GFX90A-NEXT:    s_waitcnt vmcnt(0)
611; GFX90A-NEXT:    s_setpc_b64 s[30:31]
612;
613; GFX940-LABEL: v_shuffle_v2i64_v2i64__0_1:
614; GFX940:       ; %bb.0:
615; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
616; GFX940-NEXT:    v_mov_b32_e32 v4, 0
617; GFX940-NEXT:    ;;#ASMSTART
618; GFX940-NEXT:    ; def v[0:3]
619; GFX940-NEXT:    ;;#ASMEND
620; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
621; GFX940-NEXT:    s_waitcnt vmcnt(0)
622; GFX940-NEXT:    s_setpc_b64 s[30:31]
623  %vec0 = call <2 x i64> asm "; def $0", "=v"()
624  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 1>
625  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
626  ret void
627}
628
629define void @v_shuffle_v2i64_v2i64__1_1(ptr addrspace(1) inreg %ptr) {
630; GFX900-LABEL: v_shuffle_v2i64_v2i64__1_1:
631; GFX900:       ; %bb.0:
632; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
633; GFX900-NEXT:    ;;#ASMSTART
634; GFX900-NEXT:    ; def v[0:3]
635; GFX900-NEXT:    ;;#ASMEND
636; GFX900-NEXT:    v_mov_b32_e32 v4, 0
637; GFX900-NEXT:    v_mov_b32_e32 v0, v2
638; GFX900-NEXT:    v_mov_b32_e32 v1, v3
639; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
640; GFX900-NEXT:    s_waitcnt vmcnt(0)
641; GFX900-NEXT:    s_setpc_b64 s[30:31]
642;
643; GFX90A-LABEL: v_shuffle_v2i64_v2i64__1_1:
644; GFX90A:       ; %bb.0:
645; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
646; GFX90A-NEXT:    ;;#ASMSTART
647; GFX90A-NEXT:    ; def v[0:3]
648; GFX90A-NEXT:    ;;#ASMEND
649; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
650; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
651; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
652; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
653; GFX90A-NEXT:    s_waitcnt vmcnt(0)
654; GFX90A-NEXT:    s_setpc_b64 s[30:31]
655;
656; GFX940-LABEL: v_shuffle_v2i64_v2i64__1_1:
657; GFX940:       ; %bb.0:
658; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
659; GFX940-NEXT:    ;;#ASMSTART
660; GFX940-NEXT:    ; def v[0:3]
661; GFX940-NEXT:    ;;#ASMEND
662; GFX940-NEXT:    v_mov_b32_e32 v4, 0
663; GFX940-NEXT:    v_mov_b32_e32 v0, v2
664; GFX940-NEXT:    v_mov_b32_e32 v1, v3
665; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
666; GFX940-NEXT:    s_waitcnt vmcnt(0)
667; GFX940-NEXT:    s_setpc_b64 s[30:31]
668  %vec0 = call <2 x i64> asm "; def $0", "=v"()
669  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 1>
670  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
671  ret void
672}
673
674define void @v_shuffle_v2i64_v2i64__2_1(ptr addrspace(1) inreg %ptr) {
675; GFX900-LABEL: v_shuffle_v2i64_v2i64__2_1:
676; GFX900:       ; %bb.0:
677; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
678; GFX900-NEXT:    v_mov_b32_e32 v4, 0
679; GFX900-NEXT:    ;;#ASMSTART
680; GFX900-NEXT:    ; def v[0:3]
681; GFX900-NEXT:    ;;#ASMEND
682; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
683; GFX900-NEXT:    s_waitcnt vmcnt(0)
684; GFX900-NEXT:    s_setpc_b64 s[30:31]
685;
686; GFX90A-LABEL: v_shuffle_v2i64_v2i64__2_1:
687; GFX90A:       ; %bb.0:
688; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
689; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
690; GFX90A-NEXT:    ;;#ASMSTART
691; GFX90A-NEXT:    ; def v[0:3]
692; GFX90A-NEXT:    ;;#ASMEND
693; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
694; GFX90A-NEXT:    s_waitcnt vmcnt(0)
695; GFX90A-NEXT:    s_setpc_b64 s[30:31]
696;
697; GFX940-LABEL: v_shuffle_v2i64_v2i64__2_1:
698; GFX940:       ; %bb.0:
699; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
700; GFX940-NEXT:    v_mov_b32_e32 v4, 0
701; GFX940-NEXT:    ;;#ASMSTART
702; GFX940-NEXT:    ; def v[0:3]
703; GFX940-NEXT:    ;;#ASMEND
704; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
705; GFX940-NEXT:    s_waitcnt vmcnt(0)
706; GFX940-NEXT:    s_setpc_b64 s[30:31]
707  %vec0 = call <2 x i64> asm "; def $0", "=v"()
708  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 1>
709  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
710  ret void
711}
712
713define void @v_shuffle_v2i64_v2i64__u_2(ptr addrspace(1) inreg %ptr) {
714; GFX9-LABEL: v_shuffle_v2i64_v2i64__u_2:
715; GFX9:       ; %bb.0:
716; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
717; GFX9-NEXT:    s_setpc_b64 s[30:31]
718  %vec0 = call <2 x i64> asm "; def $0", "=v"()
719  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 2>
720  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
721  ret void
722}
723
724define void @v_shuffle_v2i64_v2i64__0_2(ptr addrspace(1) inreg %ptr) {
725; GFX900-LABEL: v_shuffle_v2i64_v2i64__0_2:
726; GFX900:       ; %bb.0:
727; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
728; GFX900-NEXT:    v_mov_b32_e32 v4, 0
729; GFX900-NEXT:    ;;#ASMSTART
730; GFX900-NEXT:    ; def v[0:3]
731; GFX900-NEXT:    ;;#ASMEND
732; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
733; GFX900-NEXT:    s_waitcnt vmcnt(0)
734; GFX900-NEXT:    s_setpc_b64 s[30:31]
735;
736; GFX90A-LABEL: v_shuffle_v2i64_v2i64__0_2:
737; GFX90A:       ; %bb.0:
738; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
739; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
740; GFX90A-NEXT:    ;;#ASMSTART
741; GFX90A-NEXT:    ; def v[0:3]
742; GFX90A-NEXT:    ;;#ASMEND
743; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
744; GFX90A-NEXT:    s_waitcnt vmcnt(0)
745; GFX90A-NEXT:    s_setpc_b64 s[30:31]
746;
747; GFX940-LABEL: v_shuffle_v2i64_v2i64__0_2:
748; GFX940:       ; %bb.0:
749; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
750; GFX940-NEXT:    v_mov_b32_e32 v4, 0
751; GFX940-NEXT:    ;;#ASMSTART
752; GFX940-NEXT:    ; def v[0:3]
753; GFX940-NEXT:    ;;#ASMEND
754; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
755; GFX940-NEXT:    s_waitcnt vmcnt(0)
756; GFX940-NEXT:    s_setpc_b64 s[30:31]
757  %vec0 = call <2 x i64> asm "; def $0", "=v"()
758  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 2>
759  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
760  ret void
761}
762
763define void @v_shuffle_v2i64_v2i64__1_2(ptr addrspace(1) inreg %ptr) {
764; GFX900-LABEL: v_shuffle_v2i64_v2i64__1_2:
765; GFX900:       ; %bb.0:
766; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
767; GFX900-NEXT:    ;;#ASMSTART
768; GFX900-NEXT:    ; def v[0:3]
769; GFX900-NEXT:    ;;#ASMEND
770; GFX900-NEXT:    v_mov_b32_e32 v4, 0
771; GFX900-NEXT:    v_mov_b32_e32 v0, v2
772; GFX900-NEXT:    v_mov_b32_e32 v1, v3
773; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
774; GFX900-NEXT:    s_waitcnt vmcnt(0)
775; GFX900-NEXT:    s_setpc_b64 s[30:31]
776;
777; GFX90A-LABEL: v_shuffle_v2i64_v2i64__1_2:
778; GFX90A:       ; %bb.0:
779; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
780; GFX90A-NEXT:    ;;#ASMSTART
781; GFX90A-NEXT:    ; def v[0:3]
782; GFX90A-NEXT:    ;;#ASMEND
783; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
784; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
785; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
786; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
787; GFX90A-NEXT:    s_waitcnt vmcnt(0)
788; GFX90A-NEXT:    s_setpc_b64 s[30:31]
789;
790; GFX940-LABEL: v_shuffle_v2i64_v2i64__1_2:
791; GFX940:       ; %bb.0:
792; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
793; GFX940-NEXT:    ;;#ASMSTART
794; GFX940-NEXT:    ; def v[0:3]
795; GFX940-NEXT:    ;;#ASMEND
796; GFX940-NEXT:    v_mov_b32_e32 v4, 0
797; GFX940-NEXT:    v_mov_b32_e32 v0, v2
798; GFX940-NEXT:    v_mov_b32_e32 v1, v3
799; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
800; GFX940-NEXT:    s_waitcnt vmcnt(0)
801; GFX940-NEXT:    s_setpc_b64 s[30:31]
802  %vec0 = call <2 x i64> asm "; def $0", "=v"()
803  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 2>
804  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
805  ret void
806}
807
808define void @v_shuffle_v2i64_v2i64__2_2(ptr addrspace(1) inreg %ptr) {
809; GFX9-LABEL: v_shuffle_v2i64_v2i64__2_2:
810; GFX9:       ; %bb.0:
811; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
812; GFX9-NEXT:    s_setpc_b64 s[30:31]
813  %vec0 = call <2 x i64> asm "; def $0", "=v"()
814  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 2>
815  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
816  ret void
817}
818
819define void @v_shuffle_v2i64_v2i64__u_3(ptr addrspace(1) inreg %ptr) {
820; GFX900-LABEL: v_shuffle_v2i64_v2i64__u_3:
821; GFX900:       ; %bb.0:
822; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
823; GFX900-NEXT:    v_mov_b32_e32 v4, 0
824; GFX900-NEXT:    ;;#ASMSTART
825; GFX900-NEXT:    ; def v[0:3]
826; GFX900-NEXT:    ;;#ASMEND
827; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
828; GFX900-NEXT:    s_waitcnt vmcnt(0)
829; GFX900-NEXT:    s_setpc_b64 s[30:31]
830;
831; GFX90A-LABEL: v_shuffle_v2i64_v2i64__u_3:
832; GFX90A:       ; %bb.0:
833; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
834; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
835; GFX90A-NEXT:    ;;#ASMSTART
836; GFX90A-NEXT:    ; def v[0:3]
837; GFX90A-NEXT:    ;;#ASMEND
838; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
839; GFX90A-NEXT:    s_waitcnt vmcnt(0)
840; GFX90A-NEXT:    s_setpc_b64 s[30:31]
841;
842; GFX940-LABEL: v_shuffle_v2i64_v2i64__u_3:
843; GFX940:       ; %bb.0:
844; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
845; GFX940-NEXT:    v_mov_b32_e32 v4, 0
846; GFX940-NEXT:    ;;#ASMSTART
847; GFX940-NEXT:    ; def v[0:3]
848; GFX940-NEXT:    ;;#ASMEND
849; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
850; GFX940-NEXT:    s_waitcnt vmcnt(0)
851; GFX940-NEXT:    s_setpc_b64 s[30:31]
852  %vec0 = call <2 x i64> asm "; def $0", "=v"()
853  %vec1 = call <2 x i64> asm "; def $0", "=v"()
854  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 poison, i32 3>
855  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
856  ret void
857}
858
859define void @v_shuffle_v2i64_v2i64__0_3(ptr addrspace(1) inreg %ptr) {
860; GFX900-LABEL: v_shuffle_v2i64_v2i64__0_3:
861; GFX900:       ; %bb.0:
862; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
863; GFX900-NEXT:    ;;#ASMSTART
864; GFX900-NEXT:    ; def v[0:3]
865; GFX900-NEXT:    ;;#ASMEND
866; GFX900-NEXT:    ;;#ASMSTART
867; GFX900-NEXT:    ; def v[2:5]
868; GFX900-NEXT:    ;;#ASMEND
869; GFX900-NEXT:    v_mov_b32_e32 v6, 0
870; GFX900-NEXT:    v_mov_b32_e32 v2, v4
871; GFX900-NEXT:    v_mov_b32_e32 v3, v5
872; GFX900-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
873; GFX900-NEXT:    s_waitcnt vmcnt(0)
874; GFX900-NEXT:    s_setpc_b64 s[30:31]
875;
876; GFX90A-LABEL: v_shuffle_v2i64_v2i64__0_3:
877; GFX90A:       ; %bb.0:
878; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
879; GFX90A-NEXT:    ;;#ASMSTART
880; GFX90A-NEXT:    ; def v[0:3]
881; GFX90A-NEXT:    ;;#ASMEND
882; GFX90A-NEXT:    ;;#ASMSTART
883; GFX90A-NEXT:    ; def v[2:5]
884; GFX90A-NEXT:    ;;#ASMEND
885; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
886; GFX90A-NEXT:    v_mov_b32_e32 v2, v4
887; GFX90A-NEXT:    v_mov_b32_e32 v3, v5
888; GFX90A-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
889; GFX90A-NEXT:    s_waitcnt vmcnt(0)
890; GFX90A-NEXT:    s_setpc_b64 s[30:31]
891;
892; GFX940-LABEL: v_shuffle_v2i64_v2i64__0_3:
893; GFX940:       ; %bb.0:
894; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
895; GFX940-NEXT:    ;;#ASMSTART
896; GFX940-NEXT:    ; def v[0:3]
897; GFX940-NEXT:    ;;#ASMEND
898; GFX940-NEXT:    v_mov_b32_e32 v6, 0
899; GFX940-NEXT:    ;;#ASMSTART
900; GFX940-NEXT:    ; def v[2:5]
901; GFX940-NEXT:    ;;#ASMEND
902; GFX940-NEXT:    s_nop 0
903; GFX940-NEXT:    v_mov_b32_e32 v2, v4
904; GFX940-NEXT:    v_mov_b32_e32 v3, v5
905; GFX940-NEXT:    global_store_dwordx4 v6, v[0:3], s[0:1] sc0 sc1
906; GFX940-NEXT:    s_waitcnt vmcnt(0)
907; GFX940-NEXT:    s_setpc_b64 s[30:31]
908  %vec0 = call <2 x i64> asm "; def $0", "=v"()
909  %vec1 = call <2 x i64> asm "; def $0", "=v"()
910  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 0, i32 3>
911  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
912  ret void
913}
914
915define void @v_shuffle_v2i64_v2i64__1_3(ptr addrspace(1) inreg %ptr) {
916; GFX900-LABEL: v_shuffle_v2i64_v2i64__1_3:
917; GFX900:       ; %bb.0:
918; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
919; GFX900-NEXT:    ;;#ASMSTART
920; GFX900-NEXT:    ; def v[4:7]
921; GFX900-NEXT:    ;;#ASMEND
922; GFX900-NEXT:    v_mov_b32_e32 v8, 0
923; GFX900-NEXT:    ;;#ASMSTART
924; GFX900-NEXT:    ; def v[0:3]
925; GFX900-NEXT:    ;;#ASMEND
926; GFX900-NEXT:    v_mov_b32_e32 v4, v2
927; GFX900-NEXT:    v_mov_b32_e32 v5, v3
928; GFX900-NEXT:    global_store_dwordx4 v8, v[4:7], s[16:17]
929; GFX900-NEXT:    s_waitcnt vmcnt(0)
930; GFX900-NEXT:    s_setpc_b64 s[30:31]
931;
932; GFX90A-LABEL: v_shuffle_v2i64_v2i64__1_3:
933; GFX90A:       ; %bb.0:
934; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
935; GFX90A-NEXT:    ;;#ASMSTART
936; GFX90A-NEXT:    ; def v[4:7]
937; GFX90A-NEXT:    ;;#ASMEND
938; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
939; GFX90A-NEXT:    ;;#ASMSTART
940; GFX90A-NEXT:    ; def v[0:3]
941; GFX90A-NEXT:    ;;#ASMEND
942; GFX90A-NEXT:    v_mov_b32_e32 v4, v2
943; GFX90A-NEXT:    v_mov_b32_e32 v5, v3
944; GFX90A-NEXT:    global_store_dwordx4 v8, v[4:7], s[16:17]
945; GFX90A-NEXT:    s_waitcnt vmcnt(0)
946; GFX90A-NEXT:    s_setpc_b64 s[30:31]
947;
948; GFX940-LABEL: v_shuffle_v2i64_v2i64__1_3:
949; GFX940:       ; %bb.0:
950; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
951; GFX940-NEXT:    ;;#ASMSTART
952; GFX940-NEXT:    ; def v[4:7]
953; GFX940-NEXT:    ;;#ASMEND
954; GFX940-NEXT:    v_mov_b32_e32 v8, 0
955; GFX940-NEXT:    ;;#ASMSTART
956; GFX940-NEXT:    ; def v[0:3]
957; GFX940-NEXT:    ;;#ASMEND
958; GFX940-NEXT:    s_nop 0
959; GFX940-NEXT:    v_mov_b32_e32 v4, v2
960; GFX940-NEXT:    v_mov_b32_e32 v5, v3
961; GFX940-NEXT:    global_store_dwordx4 v8, v[4:7], s[0:1] sc0 sc1
962; GFX940-NEXT:    s_waitcnt vmcnt(0)
963; GFX940-NEXT:    s_setpc_b64 s[30:31]
964  %vec0 = call <2 x i64> asm "; def $0", "=v"()
965  %vec1 = call <2 x i64> asm "; def $0", "=v"()
966  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 1, i32 3>
967  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
968  ret void
969}
970
971define void @v_shuffle_v2i64_v2i64__2_3(ptr addrspace(1) inreg %ptr) {
972; GFX900-LABEL: v_shuffle_v2i64_v2i64__2_3:
973; GFX900:       ; %bb.0:
974; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
975; GFX900-NEXT:    v_mov_b32_e32 v4, 0
976; GFX900-NEXT:    ;;#ASMSTART
977; GFX900-NEXT:    ; def v[0:3]
978; GFX900-NEXT:    ;;#ASMEND
979; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
980; GFX900-NEXT:    s_waitcnt vmcnt(0)
981; GFX900-NEXT:    s_setpc_b64 s[30:31]
982;
983; GFX90A-LABEL: v_shuffle_v2i64_v2i64__2_3:
984; GFX90A:       ; %bb.0:
985; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
986; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
987; GFX90A-NEXT:    ;;#ASMSTART
988; GFX90A-NEXT:    ; def v[0:3]
989; GFX90A-NEXT:    ;;#ASMEND
990; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
991; GFX90A-NEXT:    s_waitcnt vmcnt(0)
992; GFX90A-NEXT:    s_setpc_b64 s[30:31]
993;
994; GFX940-LABEL: v_shuffle_v2i64_v2i64__2_3:
995; GFX940:       ; %bb.0:
996; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
997; GFX940-NEXT:    v_mov_b32_e32 v4, 0
998; GFX940-NEXT:    ;;#ASMSTART
999; GFX940-NEXT:    ; def v[0:3]
1000; GFX940-NEXT:    ;;#ASMEND
1001; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1002; GFX940-NEXT:    s_waitcnt vmcnt(0)
1003; GFX940-NEXT:    s_setpc_b64 s[30:31]
1004  %vec0 = call <2 x i64> asm "; def $0", "=v"()
1005  %vec1 = call <2 x i64> asm "; def $0", "=v"()
1006  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 2, i32 3>
1007  store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1008  ret void
1009}
1010
1011define void @s_shuffle_v2i64_v2i64__u_u() {
1012; GFX9-LABEL: s_shuffle_v2i64_v2i64__u_u:
1013; GFX9:       ; %bb.0:
1014; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1015; GFX9-NEXT:    ;;#ASMSTART
1016; GFX9-NEXT:    ; use s[8:11]
1017; GFX9-NEXT:    ;;#ASMEND
1018; GFX9-NEXT:    s_setpc_b64 s[30:31]
1019  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1020  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> poison
1021  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1022  ret void
1023}
1024
1025define void @s_shuffle_v2i64_v2i64__0_u() {
1026; GFX900-LABEL: s_shuffle_v2i64_v2i64__0_u:
1027; GFX900:       ; %bb.0:
1028; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1029; GFX900-NEXT:    ;;#ASMSTART
1030; GFX900-NEXT:    ; def s[8:11]
1031; GFX900-NEXT:    ;;#ASMEND
1032; GFX900-NEXT:    ;;#ASMSTART
1033; GFX900-NEXT:    ; use s[8:11]
1034; GFX900-NEXT:    ;;#ASMEND
1035; GFX900-NEXT:    s_setpc_b64 s[30:31]
1036;
1037; GFX90A-LABEL: s_shuffle_v2i64_v2i64__0_u:
1038; GFX90A:       ; %bb.0:
1039; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1040; GFX90A-NEXT:    ;;#ASMSTART
1041; GFX90A-NEXT:    ; def s[8:11]
1042; GFX90A-NEXT:    ;;#ASMEND
1043; GFX90A-NEXT:    ;;#ASMSTART
1044; GFX90A-NEXT:    ; use s[8:11]
1045; GFX90A-NEXT:    ;;#ASMEND
1046; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1047;
1048; GFX940-LABEL: s_shuffle_v2i64_v2i64__0_u:
1049; GFX940:       ; %bb.0:
1050; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1051; GFX940-NEXT:    ;;#ASMSTART
1052; GFX940-NEXT:    ; def s[8:11]
1053; GFX940-NEXT:    ;;#ASMEND
1054; GFX940-NEXT:    s_nop 0
1055; GFX940-NEXT:    ;;#ASMSTART
1056; GFX940-NEXT:    ; use s[8:11]
1057; GFX940-NEXT:    ;;#ASMEND
1058; GFX940-NEXT:    s_setpc_b64 s[30:31]
1059  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1060  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 poison>
1061  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1062  ret void
1063}
1064
1065define void @s_shuffle_v2i64_v2i64__1_u() {
1066; GFX900-LABEL: s_shuffle_v2i64_v2i64__1_u:
1067; GFX900:       ; %bb.0:
1068; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1069; GFX900-NEXT:    ;;#ASMSTART
1070; GFX900-NEXT:    ; def s[4:7]
1071; GFX900-NEXT:    ;;#ASMEND
1072; GFX900-NEXT:    s_mov_b32 s8, s6
1073; GFX900-NEXT:    s_mov_b32 s9, s7
1074; GFX900-NEXT:    ;;#ASMSTART
1075; GFX900-NEXT:    ; use s[8:11]
1076; GFX900-NEXT:    ;;#ASMEND
1077; GFX900-NEXT:    s_setpc_b64 s[30:31]
1078;
1079; GFX90A-LABEL: s_shuffle_v2i64_v2i64__1_u:
1080; GFX90A:       ; %bb.0:
1081; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1082; GFX90A-NEXT:    ;;#ASMSTART
1083; GFX90A-NEXT:    ; def s[4:7]
1084; GFX90A-NEXT:    ;;#ASMEND
1085; GFX90A-NEXT:    s_mov_b32 s8, s6
1086; GFX90A-NEXT:    s_mov_b32 s9, s7
1087; GFX90A-NEXT:    ;;#ASMSTART
1088; GFX90A-NEXT:    ; use s[8:11]
1089; GFX90A-NEXT:    ;;#ASMEND
1090; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1091;
1092; GFX940-LABEL: s_shuffle_v2i64_v2i64__1_u:
1093; GFX940:       ; %bb.0:
1094; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1095; GFX940-NEXT:    ;;#ASMSTART
1096; GFX940-NEXT:    ; def s[0:3]
1097; GFX940-NEXT:    ;;#ASMEND
1098; GFX940-NEXT:    s_mov_b32 s8, s2
1099; GFX940-NEXT:    s_mov_b32 s9, s3
1100; GFX940-NEXT:    ;;#ASMSTART
1101; GFX940-NEXT:    ; use s[8:11]
1102; GFX940-NEXT:    ;;#ASMEND
1103; GFX940-NEXT:    s_setpc_b64 s[30:31]
1104  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1105  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 poison>
1106  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1107  ret void
1108}
1109
1110define void @s_shuffle_v2i64_v2i64__2_u() {
1111; GFX9-LABEL: s_shuffle_v2i64_v2i64__2_u:
1112; GFX9:       ; %bb.0:
1113; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1114; GFX9-NEXT:    ;;#ASMSTART
1115; GFX9-NEXT:    ; use s[8:11]
1116; GFX9-NEXT:    ;;#ASMEND
1117; GFX9-NEXT:    s_setpc_b64 s[30:31]
1118  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1119  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 poison>
1120  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1121  ret void
1122}
1123
1124define void @s_shuffle_v2i64_v2i64__3_u() {
1125; GFX900-LABEL: s_shuffle_v2i64_v2i64__3_u:
1126; GFX900:       ; %bb.0:
1127; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1128; GFX900-NEXT:    ;;#ASMSTART
1129; GFX900-NEXT:    ; def s[4:7]
1130; GFX900-NEXT:    ;;#ASMEND
1131; GFX900-NEXT:    s_mov_b32 s8, s6
1132; GFX900-NEXT:    s_mov_b32 s9, s7
1133; GFX900-NEXT:    ;;#ASMSTART
1134; GFX900-NEXT:    ; use s[8:11]
1135; GFX900-NEXT:    ;;#ASMEND
1136; GFX900-NEXT:    s_setpc_b64 s[30:31]
1137;
1138; GFX90A-LABEL: s_shuffle_v2i64_v2i64__3_u:
1139; GFX90A:       ; %bb.0:
1140; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1141; GFX90A-NEXT:    ;;#ASMSTART
1142; GFX90A-NEXT:    ; def s[4:7]
1143; GFX90A-NEXT:    ;;#ASMEND
1144; GFX90A-NEXT:    s_mov_b32 s8, s6
1145; GFX90A-NEXT:    s_mov_b32 s9, s7
1146; GFX90A-NEXT:    ;;#ASMSTART
1147; GFX90A-NEXT:    ; use s[8:11]
1148; GFX90A-NEXT:    ;;#ASMEND
1149; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1150;
1151; GFX940-LABEL: s_shuffle_v2i64_v2i64__3_u:
1152; GFX940:       ; %bb.0:
1153; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1154; GFX940-NEXT:    ;;#ASMSTART
1155; GFX940-NEXT:    ; def s[0:3]
1156; GFX940-NEXT:    ;;#ASMEND
1157; GFX940-NEXT:    s_mov_b32 s8, s2
1158; GFX940-NEXT:    s_mov_b32 s9, s3
1159; GFX940-NEXT:    ;;#ASMSTART
1160; GFX940-NEXT:    ; use s[8:11]
1161; GFX940-NEXT:    ;;#ASMEND
1162; GFX940-NEXT:    s_setpc_b64 s[30:31]
1163  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1164  %vec1 = call <2 x i64> asm "; def $0", "=s"()
1165  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 poison>
1166  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1167  ret void
1168}
1169
1170define void @s_shuffle_v2i64_v2i64__3_0() {
1171; GFX900-LABEL: s_shuffle_v2i64_v2i64__3_0:
1172; GFX900:       ; %bb.0:
1173; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1174; GFX900-NEXT:    ;;#ASMSTART
1175; GFX900-NEXT:    ; def s[8:11]
1176; GFX900-NEXT:    ;;#ASMEND
1177; GFX900-NEXT:    ;;#ASMSTART
1178; GFX900-NEXT:    ; def s[4:7]
1179; GFX900-NEXT:    ;;#ASMEND
1180; GFX900-NEXT:    s_mov_b32 s8, s10
1181; GFX900-NEXT:    s_mov_b32 s9, s11
1182; GFX900-NEXT:    s_mov_b32 s10, s4
1183; GFX900-NEXT:    s_mov_b32 s11, s5
1184; GFX900-NEXT:    ;;#ASMSTART
1185; GFX900-NEXT:    ; use s[8:11]
1186; GFX900-NEXT:    ;;#ASMEND
1187; GFX900-NEXT:    s_setpc_b64 s[30:31]
1188;
1189; GFX90A-LABEL: s_shuffle_v2i64_v2i64__3_0:
1190; GFX90A:       ; %bb.0:
1191; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1192; GFX90A-NEXT:    ;;#ASMSTART
1193; GFX90A-NEXT:    ; def s[8:11]
1194; GFX90A-NEXT:    ;;#ASMEND
1195; GFX90A-NEXT:    ;;#ASMSTART
1196; GFX90A-NEXT:    ; def s[4:7]
1197; GFX90A-NEXT:    ;;#ASMEND
1198; GFX90A-NEXT:    s_mov_b32 s8, s10
1199; GFX90A-NEXT:    s_mov_b32 s9, s11
1200; GFX90A-NEXT:    s_mov_b32 s10, s4
1201; GFX90A-NEXT:    s_mov_b32 s11, s5
1202; GFX90A-NEXT:    ;;#ASMSTART
1203; GFX90A-NEXT:    ; use s[8:11]
1204; GFX90A-NEXT:    ;;#ASMEND
1205; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1206;
1207; GFX940-LABEL: s_shuffle_v2i64_v2i64__3_0:
1208; GFX940:       ; %bb.0:
1209; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1210; GFX940-NEXT:    ;;#ASMSTART
1211; GFX940-NEXT:    ; def s[0:3]
1212; GFX940-NEXT:    ;;#ASMEND
1213; GFX940-NEXT:    ;;#ASMSTART
1214; GFX940-NEXT:    ; def s[4:7]
1215; GFX940-NEXT:    ;;#ASMEND
1216; GFX940-NEXT:    s_mov_b32 s8, s6
1217; GFX940-NEXT:    s_mov_b32 s9, s7
1218; GFX940-NEXT:    s_mov_b32 s10, s0
1219; GFX940-NEXT:    s_mov_b32 s11, s1
1220; GFX940-NEXT:    ;;#ASMSTART
1221; GFX940-NEXT:    ; use s[8:11]
1222; GFX940-NEXT:    ;;#ASMEND
1223; GFX940-NEXT:    s_setpc_b64 s[30:31]
1224  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1225  %vec1 = call <2 x i64> asm "; def $0", "=s"()
1226  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 0>
1227  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1228  ret void
1229}
1230
1231define void @s_shuffle_v2i64_v2i64__3_1() {
1232; GFX900-LABEL: s_shuffle_v2i64_v2i64__3_1:
1233; GFX900:       ; %bb.0:
1234; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1235; GFX900-NEXT:    ;;#ASMSTART
1236; GFX900-NEXT:    ; def s[8:11]
1237; GFX900-NEXT:    ;;#ASMEND
1238; GFX900-NEXT:    ;;#ASMSTART
1239; GFX900-NEXT:    ; def s[4:7]
1240; GFX900-NEXT:    ;;#ASMEND
1241; GFX900-NEXT:    s_mov_b32 s8, s6
1242; GFX900-NEXT:    s_mov_b32 s9, s7
1243; GFX900-NEXT:    ;;#ASMSTART
1244; GFX900-NEXT:    ; use s[8:11]
1245; GFX900-NEXT:    ;;#ASMEND
1246; GFX900-NEXT:    s_setpc_b64 s[30:31]
1247;
1248; GFX90A-LABEL: s_shuffle_v2i64_v2i64__3_1:
1249; GFX90A:       ; %bb.0:
1250; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1251; GFX90A-NEXT:    ;;#ASMSTART
1252; GFX90A-NEXT:    ; def s[8:11]
1253; GFX90A-NEXT:    ;;#ASMEND
1254; GFX90A-NEXT:    ;;#ASMSTART
1255; GFX90A-NEXT:    ; def s[4:7]
1256; GFX90A-NEXT:    ;;#ASMEND
1257; GFX90A-NEXT:    s_mov_b32 s8, s6
1258; GFX90A-NEXT:    s_mov_b32 s9, s7
1259; GFX90A-NEXT:    ;;#ASMSTART
1260; GFX90A-NEXT:    ; use s[8:11]
1261; GFX90A-NEXT:    ;;#ASMEND
1262; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1263;
1264; GFX940-LABEL: s_shuffle_v2i64_v2i64__3_1:
1265; GFX940:       ; %bb.0:
1266; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1267; GFX940-NEXT:    ;;#ASMSTART
1268; GFX940-NEXT:    ; def s[8:11]
1269; GFX940-NEXT:    ;;#ASMEND
1270; GFX940-NEXT:    ;;#ASMSTART
1271; GFX940-NEXT:    ; def s[0:3]
1272; GFX940-NEXT:    ;;#ASMEND
1273; GFX940-NEXT:    s_mov_b32 s8, s2
1274; GFX940-NEXT:    s_mov_b32 s9, s3
1275; GFX940-NEXT:    ;;#ASMSTART
1276; GFX940-NEXT:    ; use s[8:11]
1277; GFX940-NEXT:    ;;#ASMEND
1278; GFX940-NEXT:    s_setpc_b64 s[30:31]
1279  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1280  %vec1 = call <2 x i64> asm "; def $0", "=s"()
1281  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 1>
1282  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1283  ret void
1284}
1285
1286define void @s_shuffle_v2i64_v2i64__3_2() {
1287; GFX900-LABEL: s_shuffle_v2i64_v2i64__3_2:
1288; GFX900:       ; %bb.0:
1289; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1290; GFX900-NEXT:    ;;#ASMSTART
1291; GFX900-NEXT:    ; def s[4:7]
1292; GFX900-NEXT:    ;;#ASMEND
1293; GFX900-NEXT:    s_mov_b32 s8, s6
1294; GFX900-NEXT:    s_mov_b32 s9, s7
1295; GFX900-NEXT:    s_mov_b32 s10, s4
1296; GFX900-NEXT:    s_mov_b32 s11, s5
1297; GFX900-NEXT:    ;;#ASMSTART
1298; GFX900-NEXT:    ; use s[8:11]
1299; GFX900-NEXT:    ;;#ASMEND
1300; GFX900-NEXT:    s_setpc_b64 s[30:31]
1301;
1302; GFX90A-LABEL: s_shuffle_v2i64_v2i64__3_2:
1303; GFX90A:       ; %bb.0:
1304; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1305; GFX90A-NEXT:    ;;#ASMSTART
1306; GFX90A-NEXT:    ; def s[4:7]
1307; GFX90A-NEXT:    ;;#ASMEND
1308; GFX90A-NEXT:    s_mov_b32 s8, s6
1309; GFX90A-NEXT:    s_mov_b32 s9, s7
1310; GFX90A-NEXT:    s_mov_b32 s10, s4
1311; GFX90A-NEXT:    s_mov_b32 s11, s5
1312; GFX90A-NEXT:    ;;#ASMSTART
1313; GFX90A-NEXT:    ; use s[8:11]
1314; GFX90A-NEXT:    ;;#ASMEND
1315; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1316;
1317; GFX940-LABEL: s_shuffle_v2i64_v2i64__3_2:
1318; GFX940:       ; %bb.0:
1319; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1320; GFX940-NEXT:    ;;#ASMSTART
1321; GFX940-NEXT:    ; def s[0:3]
1322; GFX940-NEXT:    ;;#ASMEND
1323; GFX940-NEXT:    s_mov_b32 s8, s2
1324; GFX940-NEXT:    s_mov_b32 s9, s3
1325; GFX940-NEXT:    s_mov_b32 s10, s0
1326; GFX940-NEXT:    s_mov_b32 s11, s1
1327; GFX940-NEXT:    ;;#ASMSTART
1328; GFX940-NEXT:    ; use s[8:11]
1329; GFX940-NEXT:    ;;#ASMEND
1330; GFX940-NEXT:    s_setpc_b64 s[30:31]
1331  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1332  %vec1 = call <2 x i64> asm "; def $0", "=s"()
1333  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 2>
1334  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1335  ret void
1336}
1337
1338define void @s_shuffle_v2i64_v2i64__3_3() {
1339; GFX9-LABEL: s_shuffle_v2i64_v2i64__3_3:
1340; GFX9:       ; %bb.0:
1341; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1342; GFX9-NEXT:    ;;#ASMSTART
1343; GFX9-NEXT:    ; def s[8:11]
1344; GFX9-NEXT:    ;;#ASMEND
1345; GFX9-NEXT:    s_mov_b32 s8, s10
1346; GFX9-NEXT:    s_mov_b32 s9, s11
1347; GFX9-NEXT:    ;;#ASMSTART
1348; GFX9-NEXT:    ; use s[8:11]
1349; GFX9-NEXT:    ;;#ASMEND
1350; GFX9-NEXT:    s_setpc_b64 s[30:31]
1351  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1352  %vec1 = call <2 x i64> asm "; def $0", "=s"()
1353  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 3, i32 3>
1354  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1355  ret void
1356}
1357
1358define void @s_shuffle_v2i64_v2i64__u_0() {
1359; GFX900-LABEL: s_shuffle_v2i64_v2i64__u_0:
1360; GFX900:       ; %bb.0:
1361; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1362; GFX900-NEXT:    ;;#ASMSTART
1363; GFX900-NEXT:    ; def s[4:7]
1364; GFX900-NEXT:    ;;#ASMEND
1365; GFX900-NEXT:    s_mov_b32 s10, s4
1366; GFX900-NEXT:    s_mov_b32 s11, s5
1367; GFX900-NEXT:    ;;#ASMSTART
1368; GFX900-NEXT:    ; use s[8:11]
1369; GFX900-NEXT:    ;;#ASMEND
1370; GFX900-NEXT:    s_setpc_b64 s[30:31]
1371;
1372; GFX90A-LABEL: s_shuffle_v2i64_v2i64__u_0:
1373; GFX90A:       ; %bb.0:
1374; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1375; GFX90A-NEXT:    ;;#ASMSTART
1376; GFX90A-NEXT:    ; def s[4:7]
1377; GFX90A-NEXT:    ;;#ASMEND
1378; GFX90A-NEXT:    s_mov_b32 s10, s4
1379; GFX90A-NEXT:    s_mov_b32 s11, s5
1380; GFX90A-NEXT:    ;;#ASMSTART
1381; GFX90A-NEXT:    ; use s[8:11]
1382; GFX90A-NEXT:    ;;#ASMEND
1383; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1384;
1385; GFX940-LABEL: s_shuffle_v2i64_v2i64__u_0:
1386; GFX940:       ; %bb.0:
1387; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1388; GFX940-NEXT:    ;;#ASMSTART
1389; GFX940-NEXT:    ; def s[0:3]
1390; GFX940-NEXT:    ;;#ASMEND
1391; GFX940-NEXT:    s_mov_b32 s10, s0
1392; GFX940-NEXT:    s_mov_b32 s11, s1
1393; GFX940-NEXT:    ;;#ASMSTART
1394; GFX940-NEXT:    ; use s[8:11]
1395; GFX940-NEXT:    ;;#ASMEND
1396; GFX940-NEXT:    s_setpc_b64 s[30:31]
1397  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1398  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 0>
1399  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1400  ret void
1401}
1402
1403define void @s_shuffle_v2i64_v2i64__0_0() {
1404; GFX9-LABEL: s_shuffle_v2i64_v2i64__0_0:
1405; GFX9:       ; %bb.0:
1406; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1407; GFX9-NEXT:    ;;#ASMSTART
1408; GFX9-NEXT:    ; def s[8:11]
1409; GFX9-NEXT:    ;;#ASMEND
1410; GFX9-NEXT:    s_mov_b32 s10, s8
1411; GFX9-NEXT:    s_mov_b32 s11, s9
1412; GFX9-NEXT:    ;;#ASMSTART
1413; GFX9-NEXT:    ; use s[8:11]
1414; GFX9-NEXT:    ;;#ASMEND
1415; GFX9-NEXT:    s_setpc_b64 s[30:31]
1416  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1417  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> zeroinitializer
1418  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1419  ret void
1420}
1421
1422define void @s_shuffle_v2i64_v2i64__1_0() {
1423; GFX900-LABEL: s_shuffle_v2i64_v2i64__1_0:
1424; GFX900:       ; %bb.0:
1425; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1426; GFX900-NEXT:    ;;#ASMSTART
1427; GFX900-NEXT:    ; def s[4:7]
1428; GFX900-NEXT:    ;;#ASMEND
1429; GFX900-NEXT:    s_mov_b32 s8, s6
1430; GFX900-NEXT:    s_mov_b32 s9, s7
1431; GFX900-NEXT:    s_mov_b32 s10, s4
1432; GFX900-NEXT:    s_mov_b32 s11, s5
1433; GFX900-NEXT:    ;;#ASMSTART
1434; GFX900-NEXT:    ; use s[8:11]
1435; GFX900-NEXT:    ;;#ASMEND
1436; GFX900-NEXT:    s_setpc_b64 s[30:31]
1437;
1438; GFX90A-LABEL: s_shuffle_v2i64_v2i64__1_0:
1439; GFX90A:       ; %bb.0:
1440; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1441; GFX90A-NEXT:    ;;#ASMSTART
1442; GFX90A-NEXT:    ; def s[4:7]
1443; GFX90A-NEXT:    ;;#ASMEND
1444; GFX90A-NEXT:    s_mov_b32 s8, s6
1445; GFX90A-NEXT:    s_mov_b32 s9, s7
1446; GFX90A-NEXT:    s_mov_b32 s10, s4
1447; GFX90A-NEXT:    s_mov_b32 s11, s5
1448; GFX90A-NEXT:    ;;#ASMSTART
1449; GFX90A-NEXT:    ; use s[8:11]
1450; GFX90A-NEXT:    ;;#ASMEND
1451; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1452;
1453; GFX940-LABEL: s_shuffle_v2i64_v2i64__1_0:
1454; GFX940:       ; %bb.0:
1455; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1456; GFX940-NEXT:    ;;#ASMSTART
1457; GFX940-NEXT:    ; def s[0:3]
1458; GFX940-NEXT:    ;;#ASMEND
1459; GFX940-NEXT:    s_mov_b32 s8, s2
1460; GFX940-NEXT:    s_mov_b32 s9, s3
1461; GFX940-NEXT:    s_mov_b32 s10, s0
1462; GFX940-NEXT:    s_mov_b32 s11, s1
1463; GFX940-NEXT:    ;;#ASMSTART
1464; GFX940-NEXT:    ; use s[8:11]
1465; GFX940-NEXT:    ;;#ASMEND
1466; GFX940-NEXT:    s_setpc_b64 s[30:31]
1467  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1468  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 0>
1469  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1470  ret void
1471}
1472
1473define void @s_shuffle_v2i64_v2i64__2_0() {
1474; GFX900-LABEL: s_shuffle_v2i64_v2i64__2_0:
1475; GFX900:       ; %bb.0:
1476; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1477; GFX900-NEXT:    ;;#ASMSTART
1478; GFX900-NEXT:    ; def s[4:7]
1479; GFX900-NEXT:    ;;#ASMEND
1480; GFX900-NEXT:    s_mov_b32 s10, s4
1481; GFX900-NEXT:    s_mov_b32 s11, s5
1482; GFX900-NEXT:    ;;#ASMSTART
1483; GFX900-NEXT:    ; use s[8:11]
1484; GFX900-NEXT:    ;;#ASMEND
1485; GFX900-NEXT:    s_setpc_b64 s[30:31]
1486;
1487; GFX90A-LABEL: s_shuffle_v2i64_v2i64__2_0:
1488; GFX90A:       ; %bb.0:
1489; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1490; GFX90A-NEXT:    ;;#ASMSTART
1491; GFX90A-NEXT:    ; def s[4:7]
1492; GFX90A-NEXT:    ;;#ASMEND
1493; GFX90A-NEXT:    s_mov_b32 s10, s4
1494; GFX90A-NEXT:    s_mov_b32 s11, s5
1495; GFX90A-NEXT:    ;;#ASMSTART
1496; GFX90A-NEXT:    ; use s[8:11]
1497; GFX90A-NEXT:    ;;#ASMEND
1498; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1499;
1500; GFX940-LABEL: s_shuffle_v2i64_v2i64__2_0:
1501; GFX940:       ; %bb.0:
1502; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1503; GFX940-NEXT:    ;;#ASMSTART
1504; GFX940-NEXT:    ; def s[0:3]
1505; GFX940-NEXT:    ;;#ASMEND
1506; GFX940-NEXT:    s_mov_b32 s10, s0
1507; GFX940-NEXT:    s_mov_b32 s11, s1
1508; GFX940-NEXT:    ;;#ASMSTART
1509; GFX940-NEXT:    ; use s[8:11]
1510; GFX940-NEXT:    ;;#ASMEND
1511; GFX940-NEXT:    s_setpc_b64 s[30:31]
1512  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1513  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 0>
1514  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1515  ret void
1516}
1517
1518define void @s_shuffle_v2i64_v2i64__u_1() {
1519; GFX900-LABEL: s_shuffle_v2i64_v2i64__u_1:
1520; GFX900:       ; %bb.0:
1521; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1522; GFX900-NEXT:    ;;#ASMSTART
1523; GFX900-NEXT:    ; def s[8:11]
1524; GFX900-NEXT:    ;;#ASMEND
1525; GFX900-NEXT:    ;;#ASMSTART
1526; GFX900-NEXT:    ; use s[8:11]
1527; GFX900-NEXT:    ;;#ASMEND
1528; GFX900-NEXT:    s_setpc_b64 s[30:31]
1529;
1530; GFX90A-LABEL: s_shuffle_v2i64_v2i64__u_1:
1531; GFX90A:       ; %bb.0:
1532; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1533; GFX90A-NEXT:    ;;#ASMSTART
1534; GFX90A-NEXT:    ; def s[8:11]
1535; GFX90A-NEXT:    ;;#ASMEND
1536; GFX90A-NEXT:    ;;#ASMSTART
1537; GFX90A-NEXT:    ; use s[8:11]
1538; GFX90A-NEXT:    ;;#ASMEND
1539; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1540;
1541; GFX940-LABEL: s_shuffle_v2i64_v2i64__u_1:
1542; GFX940:       ; %bb.0:
1543; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1544; GFX940-NEXT:    ;;#ASMSTART
1545; GFX940-NEXT:    ; def s[8:11]
1546; GFX940-NEXT:    ;;#ASMEND
1547; GFX940-NEXT:    s_nop 0
1548; GFX940-NEXT:    ;;#ASMSTART
1549; GFX940-NEXT:    ; use s[8:11]
1550; GFX940-NEXT:    ;;#ASMEND
1551; GFX940-NEXT:    s_setpc_b64 s[30:31]
1552  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1553  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 1>
1554  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1555  ret void
1556}
1557
1558define void @s_shuffle_v2i64_v2i64__0_1() {
1559; GFX900-LABEL: s_shuffle_v2i64_v2i64__0_1:
1560; GFX900:       ; %bb.0:
1561; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1562; GFX900-NEXT:    ;;#ASMSTART
1563; GFX900-NEXT:    ; def s[8:11]
1564; GFX900-NEXT:    ;;#ASMEND
1565; GFX900-NEXT:    ;;#ASMSTART
1566; GFX900-NEXT:    ; use s[8:11]
1567; GFX900-NEXT:    ;;#ASMEND
1568; GFX900-NEXT:    s_setpc_b64 s[30:31]
1569;
1570; GFX90A-LABEL: s_shuffle_v2i64_v2i64__0_1:
1571; GFX90A:       ; %bb.0:
1572; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1573; GFX90A-NEXT:    ;;#ASMSTART
1574; GFX90A-NEXT:    ; def s[8:11]
1575; GFX90A-NEXT:    ;;#ASMEND
1576; GFX90A-NEXT:    ;;#ASMSTART
1577; GFX90A-NEXT:    ; use s[8:11]
1578; GFX90A-NEXT:    ;;#ASMEND
1579; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1580;
1581; GFX940-LABEL: s_shuffle_v2i64_v2i64__0_1:
1582; GFX940:       ; %bb.0:
1583; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1584; GFX940-NEXT:    ;;#ASMSTART
1585; GFX940-NEXT:    ; def s[8:11]
1586; GFX940-NEXT:    ;;#ASMEND
1587; GFX940-NEXT:    s_nop 0
1588; GFX940-NEXT:    ;;#ASMSTART
1589; GFX940-NEXT:    ; use s[8:11]
1590; GFX940-NEXT:    ;;#ASMEND
1591; GFX940-NEXT:    s_setpc_b64 s[30:31]
1592  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1593  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 1>
1594  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1595  ret void
1596}
1597
1598define void @s_shuffle_v2i64_v2i64__1_1() {
1599; GFX9-LABEL: s_shuffle_v2i64_v2i64__1_1:
1600; GFX9:       ; %bb.0:
1601; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1602; GFX9-NEXT:    ;;#ASMSTART
1603; GFX9-NEXT:    ; def s[8:11]
1604; GFX9-NEXT:    ;;#ASMEND
1605; GFX9-NEXT:    s_mov_b32 s8, s10
1606; GFX9-NEXT:    s_mov_b32 s9, s11
1607; GFX9-NEXT:    ;;#ASMSTART
1608; GFX9-NEXT:    ; use s[8:11]
1609; GFX9-NEXT:    ;;#ASMEND
1610; GFX9-NEXT:    s_setpc_b64 s[30:31]
1611  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1612  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 1>
1613  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1614  ret void
1615}
1616
1617define void @s_shuffle_v2i64_v2i64__2_1() {
1618; GFX900-LABEL: s_shuffle_v2i64_v2i64__2_1:
1619; GFX900:       ; %bb.0:
1620; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1621; GFX900-NEXT:    ;;#ASMSTART
1622; GFX900-NEXT:    ; def s[8:11]
1623; GFX900-NEXT:    ;;#ASMEND
1624; GFX900-NEXT:    ;;#ASMSTART
1625; GFX900-NEXT:    ; use s[8:11]
1626; GFX900-NEXT:    ;;#ASMEND
1627; GFX900-NEXT:    s_setpc_b64 s[30:31]
1628;
1629; GFX90A-LABEL: s_shuffle_v2i64_v2i64__2_1:
1630; GFX90A:       ; %bb.0:
1631; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1632; GFX90A-NEXT:    ;;#ASMSTART
1633; GFX90A-NEXT:    ; def s[8:11]
1634; GFX90A-NEXT:    ;;#ASMEND
1635; GFX90A-NEXT:    ;;#ASMSTART
1636; GFX90A-NEXT:    ; use s[8:11]
1637; GFX90A-NEXT:    ;;#ASMEND
1638; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1639;
1640; GFX940-LABEL: s_shuffle_v2i64_v2i64__2_1:
1641; GFX940:       ; %bb.0:
1642; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1643; GFX940-NEXT:    ;;#ASMSTART
1644; GFX940-NEXT:    ; def s[8:11]
1645; GFX940-NEXT:    ;;#ASMEND
1646; GFX940-NEXT:    s_nop 0
1647; GFX940-NEXT:    ;;#ASMSTART
1648; GFX940-NEXT:    ; use s[8:11]
1649; GFX940-NEXT:    ;;#ASMEND
1650; GFX940-NEXT:    s_setpc_b64 s[30:31]
1651  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1652  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 1>
1653  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1654  ret void
1655}
1656
1657define void @s_shuffle_v2i64_v2i64__u_2() {
1658; GFX9-LABEL: s_shuffle_v2i64_v2i64__u_2:
1659; GFX9:       ; %bb.0:
1660; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1661; GFX9-NEXT:    ;;#ASMSTART
1662; GFX9-NEXT:    ; use s[8:11]
1663; GFX9-NEXT:    ;;#ASMEND
1664; GFX9-NEXT:    s_setpc_b64 s[30:31]
1665  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1666  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 poison, i32 2>
1667  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1668  ret void
1669}
1670
1671define void @s_shuffle_v2i64_v2i64__0_2() {
1672; GFX900-LABEL: s_shuffle_v2i64_v2i64__0_2:
1673; GFX900:       ; %bb.0:
1674; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1675; GFX900-NEXT:    ;;#ASMSTART
1676; GFX900-NEXT:    ; def s[8:11]
1677; GFX900-NEXT:    ;;#ASMEND
1678; GFX900-NEXT:    ;;#ASMSTART
1679; GFX900-NEXT:    ; use s[8:11]
1680; GFX900-NEXT:    ;;#ASMEND
1681; GFX900-NEXT:    s_setpc_b64 s[30:31]
1682;
1683; GFX90A-LABEL: s_shuffle_v2i64_v2i64__0_2:
1684; GFX90A:       ; %bb.0:
1685; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1686; GFX90A-NEXT:    ;;#ASMSTART
1687; GFX90A-NEXT:    ; def s[8:11]
1688; GFX90A-NEXT:    ;;#ASMEND
1689; GFX90A-NEXT:    ;;#ASMSTART
1690; GFX90A-NEXT:    ; use s[8:11]
1691; GFX90A-NEXT:    ;;#ASMEND
1692; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1693;
1694; GFX940-LABEL: s_shuffle_v2i64_v2i64__0_2:
1695; GFX940:       ; %bb.0:
1696; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1697; GFX940-NEXT:    ;;#ASMSTART
1698; GFX940-NEXT:    ; def s[8:11]
1699; GFX940-NEXT:    ;;#ASMEND
1700; GFX940-NEXT:    s_nop 0
1701; GFX940-NEXT:    ;;#ASMSTART
1702; GFX940-NEXT:    ; use s[8:11]
1703; GFX940-NEXT:    ;;#ASMEND
1704; GFX940-NEXT:    s_setpc_b64 s[30:31]
1705  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1706  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 0, i32 2>
1707  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1708  ret void
1709}
1710
1711define void @s_shuffle_v2i64_v2i64__1_2() {
1712; GFX900-LABEL: s_shuffle_v2i64_v2i64__1_2:
1713; GFX900:       ; %bb.0:
1714; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1715; GFX900-NEXT:    ;;#ASMSTART
1716; GFX900-NEXT:    ; def s[4:7]
1717; GFX900-NEXT:    ;;#ASMEND
1718; GFX900-NEXT:    s_mov_b32 s8, s6
1719; GFX900-NEXT:    s_mov_b32 s9, s7
1720; GFX900-NEXT:    ;;#ASMSTART
1721; GFX900-NEXT:    ; use s[8:11]
1722; GFX900-NEXT:    ;;#ASMEND
1723; GFX900-NEXT:    s_setpc_b64 s[30:31]
1724;
1725; GFX90A-LABEL: s_shuffle_v2i64_v2i64__1_2:
1726; GFX90A:       ; %bb.0:
1727; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1728; GFX90A-NEXT:    ;;#ASMSTART
1729; GFX90A-NEXT:    ; def s[4:7]
1730; GFX90A-NEXT:    ;;#ASMEND
1731; GFX90A-NEXT:    s_mov_b32 s8, s6
1732; GFX90A-NEXT:    s_mov_b32 s9, s7
1733; GFX90A-NEXT:    ;;#ASMSTART
1734; GFX90A-NEXT:    ; use s[8:11]
1735; GFX90A-NEXT:    ;;#ASMEND
1736; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1737;
1738; GFX940-LABEL: s_shuffle_v2i64_v2i64__1_2:
1739; GFX940:       ; %bb.0:
1740; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1741; GFX940-NEXT:    ;;#ASMSTART
1742; GFX940-NEXT:    ; def s[0:3]
1743; GFX940-NEXT:    ;;#ASMEND
1744; GFX940-NEXT:    s_mov_b32 s8, s2
1745; GFX940-NEXT:    s_mov_b32 s9, s3
1746; GFX940-NEXT:    ;;#ASMSTART
1747; GFX940-NEXT:    ; use s[8:11]
1748; GFX940-NEXT:    ;;#ASMEND
1749; GFX940-NEXT:    s_setpc_b64 s[30:31]
1750  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1751  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 1, i32 2>
1752  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1753  ret void
1754}
1755
1756define void @s_shuffle_v2i64_v2i64__2_2() {
1757; GFX9-LABEL: s_shuffle_v2i64_v2i64__2_2:
1758; GFX9:       ; %bb.0:
1759; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1760; GFX9-NEXT:    ;;#ASMSTART
1761; GFX9-NEXT:    ; use s[8:11]
1762; GFX9-NEXT:    ;;#ASMEND
1763; GFX9-NEXT:    s_setpc_b64 s[30:31]
1764  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1765  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> poison, <2 x i32> <i32 2, i32 2>
1766  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1767  ret void
1768}
1769
1770define void @s_shuffle_v2i64_v2i64__u_3() {
1771; GFX900-LABEL: s_shuffle_v2i64_v2i64__u_3:
1772; GFX900:       ; %bb.0:
1773; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1774; GFX900-NEXT:    ;;#ASMSTART
1775; GFX900-NEXT:    ; def s[8:11]
1776; GFX900-NEXT:    ;;#ASMEND
1777; GFX900-NEXT:    ;;#ASMSTART
1778; GFX900-NEXT:    ; use s[8:11]
1779; GFX900-NEXT:    ;;#ASMEND
1780; GFX900-NEXT:    s_setpc_b64 s[30:31]
1781;
1782; GFX90A-LABEL: s_shuffle_v2i64_v2i64__u_3:
1783; GFX90A:       ; %bb.0:
1784; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1785; GFX90A-NEXT:    ;;#ASMSTART
1786; GFX90A-NEXT:    ; def s[8:11]
1787; GFX90A-NEXT:    ;;#ASMEND
1788; GFX90A-NEXT:    ;;#ASMSTART
1789; GFX90A-NEXT:    ; use s[8:11]
1790; GFX90A-NEXT:    ;;#ASMEND
1791; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1792;
1793; GFX940-LABEL: s_shuffle_v2i64_v2i64__u_3:
1794; GFX940:       ; %bb.0:
1795; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1796; GFX940-NEXT:    ;;#ASMSTART
1797; GFX940-NEXT:    ; def s[8:11]
1798; GFX940-NEXT:    ;;#ASMEND
1799; GFX940-NEXT:    s_nop 0
1800; GFX940-NEXT:    ;;#ASMSTART
1801; GFX940-NEXT:    ; use s[8:11]
1802; GFX940-NEXT:    ;;#ASMEND
1803; GFX940-NEXT:    s_setpc_b64 s[30:31]
1804  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1805  %vec1 = call <2 x i64> asm "; def $0", "=s"()
1806  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 poison, i32 3>
1807  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1808  ret void
1809}
1810
1811define void @s_shuffle_v2i64_v2i64__0_3() {
1812; GFX900-LABEL: s_shuffle_v2i64_v2i64__0_3:
1813; GFX900:       ; %bb.0:
1814; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1815; GFX900-NEXT:    ;;#ASMSTART
1816; GFX900-NEXT:    ; def s[8:11]
1817; GFX900-NEXT:    ;;#ASMEND
1818; GFX900-NEXT:    ;;#ASMSTART
1819; GFX900-NEXT:    ; def s[4:7]
1820; GFX900-NEXT:    ;;#ASMEND
1821; GFX900-NEXT:    s_mov_b32 s10, s6
1822; GFX900-NEXT:    s_mov_b32 s11, s7
1823; GFX900-NEXT:    ;;#ASMSTART
1824; GFX900-NEXT:    ; use s[8:11]
1825; GFX900-NEXT:    ;;#ASMEND
1826; GFX900-NEXT:    s_setpc_b64 s[30:31]
1827;
1828; GFX90A-LABEL: s_shuffle_v2i64_v2i64__0_3:
1829; GFX90A:       ; %bb.0:
1830; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1831; GFX90A-NEXT:    ;;#ASMSTART
1832; GFX90A-NEXT:    ; def s[8:11]
1833; GFX90A-NEXT:    ;;#ASMEND
1834; GFX90A-NEXT:    ;;#ASMSTART
1835; GFX90A-NEXT:    ; def s[4:7]
1836; GFX90A-NEXT:    ;;#ASMEND
1837; GFX90A-NEXT:    s_mov_b32 s10, s6
1838; GFX90A-NEXT:    s_mov_b32 s11, s7
1839; GFX90A-NEXT:    ;;#ASMSTART
1840; GFX90A-NEXT:    ; use s[8:11]
1841; GFX90A-NEXT:    ;;#ASMEND
1842; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1843;
1844; GFX940-LABEL: s_shuffle_v2i64_v2i64__0_3:
1845; GFX940:       ; %bb.0:
1846; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1847; GFX940-NEXT:    ;;#ASMSTART
1848; GFX940-NEXT:    ; def s[8:11]
1849; GFX940-NEXT:    ;;#ASMEND
1850; GFX940-NEXT:    ;;#ASMSTART
1851; GFX940-NEXT:    ; def s[0:3]
1852; GFX940-NEXT:    ;;#ASMEND
1853; GFX940-NEXT:    s_mov_b32 s10, s2
1854; GFX940-NEXT:    s_mov_b32 s11, s3
1855; GFX940-NEXT:    ;;#ASMSTART
1856; GFX940-NEXT:    ; use s[8:11]
1857; GFX940-NEXT:    ;;#ASMEND
1858; GFX940-NEXT:    s_setpc_b64 s[30:31]
1859  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1860  %vec1 = call <2 x i64> asm "; def $0", "=s"()
1861  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 0, i32 3>
1862  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1863  ret void
1864}
1865
1866define void @s_shuffle_v2i64_v2i64__1_3() {
1867; GFX900-LABEL: s_shuffle_v2i64_v2i64__1_3:
1868; GFX900:       ; %bb.0:
1869; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1870; GFX900-NEXT:    ;;#ASMSTART
1871; GFX900-NEXT:    ; def s[8:11]
1872; GFX900-NEXT:    ;;#ASMEND
1873; GFX900-NEXT:    ;;#ASMSTART
1874; GFX900-NEXT:    ; def s[4:7]
1875; GFX900-NEXT:    ;;#ASMEND
1876; GFX900-NEXT:    s_mov_b32 s8, s6
1877; GFX900-NEXT:    s_mov_b32 s9, s7
1878; GFX900-NEXT:    ;;#ASMSTART
1879; GFX900-NEXT:    ; use s[8:11]
1880; GFX900-NEXT:    ;;#ASMEND
1881; GFX900-NEXT:    s_setpc_b64 s[30:31]
1882;
1883; GFX90A-LABEL: s_shuffle_v2i64_v2i64__1_3:
1884; GFX90A:       ; %bb.0:
1885; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1886; GFX90A-NEXT:    ;;#ASMSTART
1887; GFX90A-NEXT:    ; def s[8:11]
1888; GFX90A-NEXT:    ;;#ASMEND
1889; GFX90A-NEXT:    ;;#ASMSTART
1890; GFX90A-NEXT:    ; def s[4:7]
1891; GFX90A-NEXT:    ;;#ASMEND
1892; GFX90A-NEXT:    s_mov_b32 s8, s6
1893; GFX90A-NEXT:    s_mov_b32 s9, s7
1894; GFX90A-NEXT:    ;;#ASMSTART
1895; GFX90A-NEXT:    ; use s[8:11]
1896; GFX90A-NEXT:    ;;#ASMEND
1897; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1898;
1899; GFX940-LABEL: s_shuffle_v2i64_v2i64__1_3:
1900; GFX940:       ; %bb.0:
1901; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1902; GFX940-NEXT:    ;;#ASMSTART
1903; GFX940-NEXT:    ; def s[8:11]
1904; GFX940-NEXT:    ;;#ASMEND
1905; GFX940-NEXT:    ;;#ASMSTART
1906; GFX940-NEXT:    ; def s[0:3]
1907; GFX940-NEXT:    ;;#ASMEND
1908; GFX940-NEXT:    s_mov_b32 s8, s2
1909; GFX940-NEXT:    s_mov_b32 s9, s3
1910; GFX940-NEXT:    ;;#ASMSTART
1911; GFX940-NEXT:    ; use s[8:11]
1912; GFX940-NEXT:    ;;#ASMEND
1913; GFX940-NEXT:    s_setpc_b64 s[30:31]
1914  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1915  %vec1 = call <2 x i64> asm "; def $0", "=s"()
1916  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 1, i32 3>
1917  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1918  ret void
1919}
1920
1921define void @s_shuffle_v2i64_v2i64__2_3() {
1922; GFX900-LABEL: s_shuffle_v2i64_v2i64__2_3:
1923; GFX900:       ; %bb.0:
1924; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1925; GFX900-NEXT:    ;;#ASMSTART
1926; GFX900-NEXT:    ; def s[8:11]
1927; GFX900-NEXT:    ;;#ASMEND
1928; GFX900-NEXT:    ;;#ASMSTART
1929; GFX900-NEXT:    ; use s[8:11]
1930; GFX900-NEXT:    ;;#ASMEND
1931; GFX900-NEXT:    s_setpc_b64 s[30:31]
1932;
1933; GFX90A-LABEL: s_shuffle_v2i64_v2i64__2_3:
1934; GFX90A:       ; %bb.0:
1935; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1936; GFX90A-NEXT:    ;;#ASMSTART
1937; GFX90A-NEXT:    ; def s[8:11]
1938; GFX90A-NEXT:    ;;#ASMEND
1939; GFX90A-NEXT:    ;;#ASMSTART
1940; GFX90A-NEXT:    ; use s[8:11]
1941; GFX90A-NEXT:    ;;#ASMEND
1942; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1943;
1944; GFX940-LABEL: s_shuffle_v2i64_v2i64__2_3:
1945; GFX940:       ; %bb.0:
1946; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1947; GFX940-NEXT:    ;;#ASMSTART
1948; GFX940-NEXT:    ; def s[8:11]
1949; GFX940-NEXT:    ;;#ASMEND
1950; GFX940-NEXT:    s_nop 0
1951; GFX940-NEXT:    ;;#ASMSTART
1952; GFX940-NEXT:    ; use s[8:11]
1953; GFX940-NEXT:    ;;#ASMEND
1954; GFX940-NEXT:    s_setpc_b64 s[30:31]
1955  %vec0 = call <2 x i64> asm "; def $0", "=s"()
1956  %vec1 = call <2 x i64> asm "; def $0", "=s"()
1957  %shuf = shufflevector <2 x i64> %vec0, <2 x i64> %vec1, <2 x i32> <i32 2, i32 3>
1958  call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
1959  ret void
1960}
1961;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
1962; GFX90APLUS: {{.*}}
1963