blob: bc8a56a30d8f94b44d1f6567bed0d4bfe3441a26 [file] [log] [blame]
Matt Arsenault77862662025-01-21 10:08:42 +07001; 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
Fabian Rittera33a84e2025-02-13 15:17:12 +01004; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx942 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX942 %s
Matt Arsenault77862662025-01-21 10:08:42 +07005
6
7define void @v_shuffle_v2i64_v3i64__u_u(ptr addrspace(1) inreg %ptr) {
8; GFX9-LABEL: v_shuffle_v2i64_v3i64__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 <3 x i64> asm "; def $0", "=v"()
13 %shuf = shufflevector <3 x i64> %vec0, <3 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_v3i64__0_u(ptr addrspace(1) inreg %ptr) {
19; GFX900-LABEL: v_shuffle_v2i64_v3i64__0_u:
20; GFX900: ; %bb.0:
21; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22; GFX900-NEXT: v_mov_b32_e32 v6, 0
23; GFX900-NEXT: ;;#ASMSTART
24; GFX900-NEXT: ; def v[0:5]
25; GFX900-NEXT: ;;#ASMEND
26; GFX900-NEXT: global_store_dwordx4 v6, 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_v3i64__0_u:
31; GFX90A: ; %bb.0:
32; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33; GFX90A-NEXT: v_mov_b32_e32 v6, 0
34; GFX90A-NEXT: ;;#ASMSTART
35; GFX90A-NEXT: ; def v[0:5]
36; GFX90A-NEXT: ;;#ASMEND
37; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
38; GFX90A-NEXT: s_waitcnt vmcnt(0)
39; GFX90A-NEXT: s_setpc_b64 s[30:31]
40;
Fabian Rittera33a84e2025-02-13 15:17:12 +010041; GFX942-LABEL: v_shuffle_v2i64_v3i64__0_u:
42; GFX942: ; %bb.0:
43; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44; GFX942-NEXT: v_mov_b32_e32 v6, 0
45; GFX942-NEXT: ;;#ASMSTART
46; GFX942-NEXT: ; def v[0:5]
47; GFX942-NEXT: ;;#ASMEND
48; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
49; GFX942-NEXT: s_waitcnt vmcnt(0)
50; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +070051 %vec0 = call <3 x i64> asm "; def $0", "=v"()
52 %shuf = shufflevector <3 x i64> %vec0, <3 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_v3i64__1_u(ptr addrspace(1) inreg %ptr) {
58; GFX900-LABEL: v_shuffle_v2i64_v3i64__1_u:
59; GFX900: ; %bb.0:
60; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
61; GFX900-NEXT: v_mov_b32_e32 v6, 0
62; GFX900-NEXT: ;;#ASMSTART
63; GFX900-NEXT: ; def v[0:5]
64; GFX900-NEXT: ;;#ASMEND
65; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], 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_v2i64_v3i64__1_u:
70; GFX90A: ; %bb.0:
71; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
72; GFX90A-NEXT: v_mov_b32_e32 v6, 0
73; GFX90A-NEXT: ;;#ASMSTART
74; GFX90A-NEXT: ; def v[0:5]
75; GFX90A-NEXT: ;;#ASMEND
76; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
77; GFX90A-NEXT: s_waitcnt vmcnt(0)
78; GFX90A-NEXT: s_setpc_b64 s[30:31]
79;
Fabian Rittera33a84e2025-02-13 15:17:12 +010080; GFX942-LABEL: v_shuffle_v2i64_v3i64__1_u:
81; GFX942: ; %bb.0:
82; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
83; GFX942-NEXT: v_mov_b32_e32 v6, 0
84; GFX942-NEXT: ;;#ASMSTART
85; GFX942-NEXT: ; def v[0:5]
86; GFX942-NEXT: ;;#ASMEND
87; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
88; GFX942-NEXT: s_waitcnt vmcnt(0)
89; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +070090 %vec0 = call <3 x i64> asm "; def $0", "=v"()
91 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 1, i32 poison>
92 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
93 ret void
94}
95
96define void @v_shuffle_v2i64_v3i64__2_u(ptr addrspace(1) inreg %ptr) {
97; GFX900-LABEL: v_shuffle_v2i64_v3i64__2_u:
98; GFX900: ; %bb.0:
99; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
100; GFX900-NEXT: ;;#ASMSTART
101; GFX900-NEXT: ; def v[0:5]
102; GFX900-NEXT: ;;#ASMEND
103; GFX900-NEXT: v_mov_b32_e32 v6, 0
104; GFX900-NEXT: v_mov_b32_e32 v0, v4
105; GFX900-NEXT: v_mov_b32_e32 v1, v5
106; GFX900-NEXT: global_store_dwordx4 v6, v[0: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_v2i64_v3i64__2_u:
111; GFX90A: ; %bb.0:
112; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
113; GFX90A-NEXT: ;;#ASMSTART
114; GFX90A-NEXT: ; def v[0:5]
115; GFX90A-NEXT: ;;#ASMEND
116; GFX90A-NEXT: v_mov_b32_e32 v6, 0
117; GFX90A-NEXT: v_mov_b32_e32 v0, v4
118; GFX90A-NEXT: v_mov_b32_e32 v1, v5
119; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
120; GFX90A-NEXT: s_waitcnt vmcnt(0)
121; GFX90A-NEXT: s_setpc_b64 s[30:31]
122;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100123; GFX942-LABEL: v_shuffle_v2i64_v3i64__2_u:
124; GFX942: ; %bb.0:
125; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
126; GFX942-NEXT: ;;#ASMSTART
127; GFX942-NEXT: ; def v[0:5]
128; GFX942-NEXT: ;;#ASMEND
129; GFX942-NEXT: v_mov_b32_e32 v6, 0
130; GFX942-NEXT: v_mov_b32_e32 v0, v4
131; GFX942-NEXT: v_mov_b32_e32 v1, v5
132; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
133; GFX942-NEXT: s_waitcnt vmcnt(0)
134; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700135 %vec0 = call <3 x i64> asm "; def $0", "=v"()
136 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 poison>
137 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
138 ret void
139}
140
141define void @v_shuffle_v2i64_v3i64__3_u(ptr addrspace(1) inreg %ptr) {
142; GFX9-LABEL: v_shuffle_v2i64_v3i64__3_u:
143; GFX9: ; %bb.0:
144; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
145; GFX9-NEXT: s_setpc_b64 s[30:31]
146 %vec0 = call <3 x i64> asm "; def $0", "=v"()
147 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 3, i32 poison>
148 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
149 ret void
150}
151
152define void @v_shuffle_v2i64_v3i64__4_u(ptr addrspace(1) inreg %ptr) {
153; GFX900-LABEL: v_shuffle_v2i64_v3i64__4_u:
154; GFX900: ; %bb.0:
155; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
156; GFX900-NEXT: v_mov_b32_e32 v6, 0
157; GFX900-NEXT: ;;#ASMSTART
158; GFX900-NEXT: ; def v[0:5]
159; GFX900-NEXT: ;;#ASMEND
160; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
161; GFX900-NEXT: s_waitcnt vmcnt(0)
162; GFX900-NEXT: s_setpc_b64 s[30:31]
163;
164; GFX90A-LABEL: v_shuffle_v2i64_v3i64__4_u:
165; GFX90A: ; %bb.0:
166; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
167; GFX90A-NEXT: v_mov_b32_e32 v6, 0
168; GFX90A-NEXT: ;;#ASMSTART
169; GFX90A-NEXT: ; def v[0:5]
170; GFX90A-NEXT: ;;#ASMEND
171; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
172; GFX90A-NEXT: s_waitcnt vmcnt(0)
173; GFX90A-NEXT: s_setpc_b64 s[30:31]
174;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100175; GFX942-LABEL: v_shuffle_v2i64_v3i64__4_u:
176; GFX942: ; %bb.0:
177; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
178; GFX942-NEXT: v_mov_b32_e32 v6, 0
179; GFX942-NEXT: ;;#ASMSTART
180; GFX942-NEXT: ; def v[0:5]
181; GFX942-NEXT: ;;#ASMEND
182; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
183; GFX942-NEXT: s_waitcnt vmcnt(0)
184; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700185 %vec0 = call <3 x i64> asm "; def $0", "=v"()
186 %vec1 = call <3 x i64> asm "; def $0", "=v"()
187 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 poison>
188 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
189 ret void
190}
191
192define void @v_shuffle_v2i64_v3i64__5_u(ptr addrspace(1) inreg %ptr) {
193; GFX900-LABEL: v_shuffle_v2i64_v3i64__5_u:
194; GFX900: ; %bb.0:
195; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
196; GFX900-NEXT: ;;#ASMSTART
197; GFX900-NEXT: ; def v[0:5]
198; GFX900-NEXT: ;;#ASMEND
199; GFX900-NEXT: v_mov_b32_e32 v6, 0
200; GFX900-NEXT: v_mov_b32_e32 v0, v4
201; GFX900-NEXT: v_mov_b32_e32 v1, v5
202; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
203; GFX900-NEXT: s_waitcnt vmcnt(0)
204; GFX900-NEXT: s_setpc_b64 s[30:31]
205;
206; GFX90A-LABEL: v_shuffle_v2i64_v3i64__5_u:
207; GFX90A: ; %bb.0:
208; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
209; GFX90A-NEXT: ;;#ASMSTART
210; GFX90A-NEXT: ; def v[0:5]
211; GFX90A-NEXT: ;;#ASMEND
212; GFX90A-NEXT: v_mov_b32_e32 v6, 0
213; GFX90A-NEXT: v_mov_b32_e32 v0, v4
214; GFX90A-NEXT: v_mov_b32_e32 v1, v5
215; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
216; GFX90A-NEXT: s_waitcnt vmcnt(0)
217; GFX90A-NEXT: s_setpc_b64 s[30:31]
218;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100219; GFX942-LABEL: v_shuffle_v2i64_v3i64__5_u:
220; GFX942: ; %bb.0:
221; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
222; GFX942-NEXT: ;;#ASMSTART
223; GFX942-NEXT: ; def v[0:5]
224; GFX942-NEXT: ;;#ASMEND
225; GFX942-NEXT: v_mov_b32_e32 v6, 0
226; GFX942-NEXT: v_mov_b32_e32 v0, v4
227; GFX942-NEXT: v_mov_b32_e32 v1, v5
228; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
229; GFX942-NEXT: s_waitcnt vmcnt(0)
230; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700231 %vec0 = call <3 x i64> asm "; def $0", "=v"()
232 %vec1 = call <3 x i64> asm "; def $0", "=v"()
233 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 poison>
234 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
235 ret void
236}
237
238define void @v_shuffle_v2i64_v3i64__5_0(ptr addrspace(1) inreg %ptr) {
239; GFX900-LABEL: v_shuffle_v2i64_v3i64__5_0:
240; GFX900: ; %bb.0:
241; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
242; GFX900-NEXT: ;;#ASMSTART
243; GFX900-NEXT: ; def v[0:5]
244; GFX900-NEXT: ;;#ASMEND
245; GFX900-NEXT: ;;#ASMSTART
246; GFX900-NEXT: ; def v[2:7]
247; GFX900-NEXT: ;;#ASMEND
248; GFX900-NEXT: v_mov_b32_e32 v8, 0
249; GFX900-NEXT: v_mov_b32_e32 v2, v6
250; GFX900-NEXT: v_mov_b32_e32 v3, v7
251; GFX900-NEXT: v_mov_b32_e32 v4, v0
252; GFX900-NEXT: v_mov_b32_e32 v5, v1
253; GFX900-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]
254; GFX900-NEXT: s_waitcnt vmcnt(0)
255; GFX900-NEXT: s_setpc_b64 s[30:31]
256;
257; GFX90A-LABEL: v_shuffle_v2i64_v3i64__5_0:
258; GFX90A: ; %bb.0:
259; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
260; GFX90A-NEXT: ;;#ASMSTART
261; GFX90A-NEXT: ; def v[0:5]
262; GFX90A-NEXT: ;;#ASMEND
263; GFX90A-NEXT: ;;#ASMSTART
264; GFX90A-NEXT: ; def v[2:7]
265; GFX90A-NEXT: ;;#ASMEND
266; GFX90A-NEXT: v_mov_b32_e32 v8, 0
267; GFX90A-NEXT: v_mov_b32_e32 v2, v6
268; GFX90A-NEXT: v_mov_b32_e32 v3, v7
269; GFX90A-NEXT: v_mov_b32_e32 v4, v0
270; GFX90A-NEXT: v_mov_b32_e32 v5, v1
271; GFX90A-NEXT: global_store_dwordx4 v8, v[2:5], s[16:17]
272; GFX90A-NEXT: s_waitcnt vmcnt(0)
273; GFX90A-NEXT: s_setpc_b64 s[30:31]
274;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100275; GFX942-LABEL: v_shuffle_v2i64_v3i64__5_0:
276; GFX942: ; %bb.0:
277; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
278; GFX942-NEXT: ;;#ASMSTART
279; GFX942-NEXT: ; def v[0:5]
280; GFX942-NEXT: ;;#ASMEND
281; GFX942-NEXT: v_mov_b32_e32 v8, 0
282; GFX942-NEXT: ;;#ASMSTART
283; GFX942-NEXT: ; def v[2:7]
284; GFX942-NEXT: ;;#ASMEND
285; GFX942-NEXT: s_nop 0
286; GFX942-NEXT: v_mov_b32_e32 v2, v6
287; GFX942-NEXT: v_mov_b32_e32 v3, v7
288; GFX942-NEXT: v_mov_b32_e32 v4, v0
289; GFX942-NEXT: v_mov_b32_e32 v5, v1
290; GFX942-NEXT: global_store_dwordx4 v8, v[2:5], s[0:1]
291; GFX942-NEXT: s_waitcnt vmcnt(0)
292; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700293 %vec0 = call <3 x i64> asm "; def $0", "=v"()
294 %vec1 = call <3 x i64> asm "; def $0", "=v"()
295 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 0>
296 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
297 ret void
298}
299
300define void @v_shuffle_v2i64_v3i64__5_1(ptr addrspace(1) inreg %ptr) {
301; GFX900-LABEL: v_shuffle_v2i64_v3i64__5_1:
302; GFX900: ; %bb.0:
303; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
304; GFX900-NEXT: ;;#ASMSTART
305; GFX900-NEXT: ; def v[0:5]
306; GFX900-NEXT: ;;#ASMEND
307; GFX900-NEXT: v_mov_b32_e32 v10, 0
308; GFX900-NEXT: ;;#ASMSTART
309; GFX900-NEXT: ; def v[4:9]
310; GFX900-NEXT: ;;#ASMEND
311; GFX900-NEXT: v_mov_b32_e32 v0, v8
312; GFX900-NEXT: v_mov_b32_e32 v1, v9
313; GFX900-NEXT: global_store_dwordx4 v10, v[0:3], s[16:17]
314; GFX900-NEXT: s_waitcnt vmcnt(0)
315; GFX900-NEXT: s_setpc_b64 s[30:31]
316;
317; GFX90A-LABEL: v_shuffle_v2i64_v3i64__5_1:
318; GFX90A: ; %bb.0:
319; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
320; GFX90A-NEXT: ;;#ASMSTART
321; GFX90A-NEXT: ; def v[0:5]
322; GFX90A-NEXT: ;;#ASMEND
323; GFX90A-NEXT: v_mov_b32_e32 v10, 0
324; GFX90A-NEXT: ;;#ASMSTART
325; GFX90A-NEXT: ; def v[4:9]
326; GFX90A-NEXT: ;;#ASMEND
327; GFX90A-NEXT: v_mov_b32_e32 v0, v8
328; GFX90A-NEXT: v_mov_b32_e32 v1, v9
329; GFX90A-NEXT: global_store_dwordx4 v10, v[0:3], s[16:17]
330; GFX90A-NEXT: s_waitcnt vmcnt(0)
331; GFX90A-NEXT: s_setpc_b64 s[30:31]
332;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100333; GFX942-LABEL: v_shuffle_v2i64_v3i64__5_1:
334; GFX942: ; %bb.0:
335; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
336; GFX942-NEXT: ;;#ASMSTART
337; GFX942-NEXT: ; def v[0:5]
338; GFX942-NEXT: ;;#ASMEND
339; GFX942-NEXT: v_mov_b32_e32 v10, 0
340; GFX942-NEXT: ;;#ASMSTART
341; GFX942-NEXT: ; def v[4:9]
342; GFX942-NEXT: ;;#ASMEND
343; GFX942-NEXT: s_nop 0
344; GFX942-NEXT: v_mov_b32_e32 v0, v8
345; GFX942-NEXT: v_mov_b32_e32 v1, v9
346; GFX942-NEXT: global_store_dwordx4 v10, v[0:3], s[0:1]
347; GFX942-NEXT: s_waitcnt vmcnt(0)
348; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700349 %vec0 = call <3 x i64> asm "; def $0", "=v"()
350 %vec1 = call <3 x i64> asm "; def $0", "=v"()
351 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 1>
352 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
353 ret void
354}
355
356define void @v_shuffle_v2i64_v3i64__5_2(ptr addrspace(1) inreg %ptr) {
357; GFX900-LABEL: v_shuffle_v2i64_v3i64__5_2:
358; GFX900: ; %bb.0:
359; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
360; GFX900-NEXT: ;;#ASMSTART
361; GFX900-NEXT: ; def v[0:5]
362; GFX900-NEXT: ;;#ASMEND
363; GFX900-NEXT: v_mov_b32_e32 v12, 0
364; GFX900-NEXT: ;;#ASMSTART
365; GFX900-NEXT: ; def v[6:11]
366; GFX900-NEXT: ;;#ASMEND
367; GFX900-NEXT: v_mov_b32_e32 v2, v10
368; GFX900-NEXT: v_mov_b32_e32 v3, v11
369; GFX900-NEXT: global_store_dwordx4 v12, v[2:5], s[16:17]
370; GFX900-NEXT: s_waitcnt vmcnt(0)
371; GFX900-NEXT: s_setpc_b64 s[30:31]
372;
373; GFX90A-LABEL: v_shuffle_v2i64_v3i64__5_2:
374; GFX90A: ; %bb.0:
375; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
376; GFX90A-NEXT: ;;#ASMSTART
377; GFX90A-NEXT: ; def v[0:5]
378; GFX90A-NEXT: ;;#ASMEND
379; GFX90A-NEXT: v_mov_b32_e32 v12, 0
380; GFX90A-NEXT: ;;#ASMSTART
381; GFX90A-NEXT: ; def v[6:11]
382; GFX90A-NEXT: ;;#ASMEND
383; GFX90A-NEXT: v_mov_b32_e32 v2, v10
384; GFX90A-NEXT: v_mov_b32_e32 v3, v11
385; GFX90A-NEXT: global_store_dwordx4 v12, v[2:5], s[16:17]
386; GFX90A-NEXT: s_waitcnt vmcnt(0)
387; GFX90A-NEXT: s_setpc_b64 s[30:31]
388;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100389; GFX942-LABEL: v_shuffle_v2i64_v3i64__5_2:
390; GFX942: ; %bb.0:
391; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
392; GFX942-NEXT: ;;#ASMSTART
393; GFX942-NEXT: ; def v[0:5]
394; GFX942-NEXT: ;;#ASMEND
395; GFX942-NEXT: v_mov_b32_e32 v12, 0
396; GFX942-NEXT: ;;#ASMSTART
397; GFX942-NEXT: ; def v[6:11]
398; GFX942-NEXT: ;;#ASMEND
399; GFX942-NEXT: s_nop 0
400; GFX942-NEXT: v_mov_b32_e32 v2, v10
401; GFX942-NEXT: v_mov_b32_e32 v3, v11
402; GFX942-NEXT: global_store_dwordx4 v12, v[2:5], s[0:1]
403; GFX942-NEXT: s_waitcnt vmcnt(0)
404; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700405 %vec0 = call <3 x i64> asm "; def $0", "=v"()
406 %vec1 = call <3 x i64> asm "; def $0", "=v"()
407 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 2>
408 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
409 ret void
410}
411
412define void @v_shuffle_v2i64_v3i64__5_3(ptr addrspace(1) inreg %ptr) {
413; GFX900-LABEL: v_shuffle_v2i64_v3i64__5_3:
414; GFX900: ; %bb.0:
415; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
416; GFX900-NEXT: ;;#ASMSTART
417; GFX900-NEXT: ; def v[0:5]
418; GFX900-NEXT: ;;#ASMEND
419; GFX900-NEXT: v_mov_b32_e32 v6, 0
420; GFX900-NEXT: v_mov_b32_e32 v2, v4
421; GFX900-NEXT: v_mov_b32_e32 v3, v5
422; GFX900-NEXT: v_mov_b32_e32 v4, v0
423; GFX900-NEXT: v_mov_b32_e32 v5, v1
424; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
425; GFX900-NEXT: s_waitcnt vmcnt(0)
426; GFX900-NEXT: s_setpc_b64 s[30:31]
427;
428; GFX90A-LABEL: v_shuffle_v2i64_v3i64__5_3:
429; GFX90A: ; %bb.0:
430; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
431; GFX90A-NEXT: ;;#ASMSTART
432; GFX90A-NEXT: ; def v[0:5]
433; GFX90A-NEXT: ;;#ASMEND
434; GFX90A-NEXT: v_mov_b32_e32 v6, 0
435; GFX90A-NEXT: v_mov_b32_e32 v2, v4
436; GFX90A-NEXT: v_mov_b32_e32 v3, v5
437; GFX90A-NEXT: v_mov_b32_e32 v4, v0
438; GFX90A-NEXT: v_mov_b32_e32 v5, v1
439; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
440; GFX90A-NEXT: s_waitcnt vmcnt(0)
441; GFX90A-NEXT: s_setpc_b64 s[30:31]
442;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100443; GFX942-LABEL: v_shuffle_v2i64_v3i64__5_3:
444; GFX942: ; %bb.0:
445; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
446; GFX942-NEXT: ;;#ASMSTART
447; GFX942-NEXT: ; def v[0:5]
448; GFX942-NEXT: ;;#ASMEND
449; GFX942-NEXT: v_mov_b32_e32 v6, 0
450; GFX942-NEXT: v_mov_b32_e32 v2, v4
451; GFX942-NEXT: v_mov_b32_e32 v3, v5
452; GFX942-NEXT: v_mov_b32_e32 v4, v0
453; GFX942-NEXT: v_mov_b32_e32 v5, v1
454; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
455; GFX942-NEXT: s_waitcnt vmcnt(0)
456; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700457 %vec0 = call <3 x i64> asm "; def $0", "=v"()
458 %vec1 = call <3 x i64> asm "; def $0", "=v"()
459 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 3>
460 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
461 ret void
462}
463
464define void @v_shuffle_v2i64_v3i64__5_4(ptr addrspace(1) inreg %ptr) {
465; GFX900-LABEL: v_shuffle_v2i64_v3i64__5_4:
466; GFX900: ; %bb.0:
467; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
468; GFX900-NEXT: ;;#ASMSTART
469; GFX900-NEXT: ; def v[0:5]
470; GFX900-NEXT: ;;#ASMEND
471; GFX900-NEXT: v_mov_b32_e32 v6, 0
472; GFX900-NEXT: v_mov_b32_e32 v0, v4
473; GFX900-NEXT: v_mov_b32_e32 v1, v5
474; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
475; GFX900-NEXT: s_waitcnt vmcnt(0)
476; GFX900-NEXT: s_setpc_b64 s[30:31]
477;
478; GFX90A-LABEL: v_shuffle_v2i64_v3i64__5_4:
479; GFX90A: ; %bb.0:
480; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
481; GFX90A-NEXT: ;;#ASMSTART
482; GFX90A-NEXT: ; def v[0:5]
483; GFX90A-NEXT: ;;#ASMEND
484; GFX90A-NEXT: v_mov_b32_e32 v6, 0
485; GFX90A-NEXT: v_mov_b32_e32 v0, v4
486; GFX90A-NEXT: v_mov_b32_e32 v1, v5
487; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
488; GFX90A-NEXT: s_waitcnt vmcnt(0)
489; GFX90A-NEXT: s_setpc_b64 s[30:31]
490;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100491; GFX942-LABEL: v_shuffle_v2i64_v3i64__5_4:
492; GFX942: ; %bb.0:
493; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
494; GFX942-NEXT: ;;#ASMSTART
495; GFX942-NEXT: ; def v[0:5]
496; GFX942-NEXT: ;;#ASMEND
497; GFX942-NEXT: v_mov_b32_e32 v6, 0
498; GFX942-NEXT: v_mov_b32_e32 v0, v4
499; GFX942-NEXT: v_mov_b32_e32 v1, v5
500; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
501; GFX942-NEXT: s_waitcnt vmcnt(0)
502; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700503 %vec0 = call <3 x i64> asm "; def $0", "=v"()
504 %vec1 = call <3 x i64> asm "; def $0", "=v"()
505 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 4>
506 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
507 ret void
508}
509
510define void @v_shuffle_v2i64_v3i64__5_5(ptr addrspace(1) inreg %ptr) {
511; GFX900-LABEL: v_shuffle_v2i64_v3i64__5_5:
512; GFX900: ; %bb.0:
513; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
514; GFX900-NEXT: ;;#ASMSTART
515; GFX900-NEXT: ; def v[0:5]
516; GFX900-NEXT: ;;#ASMEND
517; GFX900-NEXT: v_mov_b32_e32 v6, 0
518; GFX900-NEXT: v_mov_b32_e32 v2, v4
519; GFX900-NEXT: v_mov_b32_e32 v3, v5
520; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
521; GFX900-NEXT: s_waitcnt vmcnt(0)
522; GFX900-NEXT: s_setpc_b64 s[30:31]
523;
524; GFX90A-LABEL: v_shuffle_v2i64_v3i64__5_5:
525; GFX90A: ; %bb.0:
526; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
527; GFX90A-NEXT: ;;#ASMSTART
528; GFX90A-NEXT: ; def v[0:5]
529; GFX90A-NEXT: ;;#ASMEND
530; GFX90A-NEXT: v_mov_b32_e32 v6, 0
531; GFX90A-NEXT: v_mov_b32_e32 v2, v4
532; GFX90A-NEXT: v_mov_b32_e32 v3, v5
533; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
534; GFX90A-NEXT: s_waitcnt vmcnt(0)
535; GFX90A-NEXT: s_setpc_b64 s[30:31]
536;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100537; GFX942-LABEL: v_shuffle_v2i64_v3i64__5_5:
538; GFX942: ; %bb.0:
539; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
540; GFX942-NEXT: ;;#ASMSTART
541; GFX942-NEXT: ; def v[0:5]
542; GFX942-NEXT: ;;#ASMEND
543; GFX942-NEXT: v_mov_b32_e32 v6, 0
544; GFX942-NEXT: v_mov_b32_e32 v2, v4
545; GFX942-NEXT: v_mov_b32_e32 v3, v5
546; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
547; GFX942-NEXT: s_waitcnt vmcnt(0)
548; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700549 %vec0 = call <3 x i64> asm "; def $0", "=v"()
550 %vec1 = call <3 x i64> asm "; def $0", "=v"()
551 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 5>
552 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
553 ret void
554}
555
556define void @v_shuffle_v2i64_v3i64__u_0(ptr addrspace(1) inreg %ptr) {
557; GFX900-LABEL: v_shuffle_v2i64_v3i64__u_0:
558; GFX900: ; %bb.0:
559; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
560; GFX900-NEXT: ;;#ASMSTART
561; GFX900-NEXT: ; def v[0:5]
562; GFX900-NEXT: ;;#ASMEND
563; GFX900-NEXT: v_mov_b32_e32 v6, 0
564; GFX900-NEXT: v_mov_b32_e32 v2, v0
565; GFX900-NEXT: v_mov_b32_e32 v3, v1
566; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
567; GFX900-NEXT: s_waitcnt vmcnt(0)
568; GFX900-NEXT: s_setpc_b64 s[30:31]
569;
570; GFX90A-LABEL: v_shuffle_v2i64_v3i64__u_0:
571; GFX90A: ; %bb.0:
572; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
573; GFX90A-NEXT: ;;#ASMSTART
574; GFX90A-NEXT: ; def v[0:5]
575; GFX90A-NEXT: ;;#ASMEND
576; GFX90A-NEXT: v_mov_b32_e32 v6, 0
577; GFX90A-NEXT: v_mov_b32_e32 v2, v0
578; GFX90A-NEXT: v_mov_b32_e32 v3, v1
579; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
580; GFX90A-NEXT: s_waitcnt vmcnt(0)
581; GFX90A-NEXT: s_setpc_b64 s[30:31]
582;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100583; GFX942-LABEL: v_shuffle_v2i64_v3i64__u_0:
584; GFX942: ; %bb.0:
585; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
586; GFX942-NEXT: ;;#ASMSTART
587; GFX942-NEXT: ; def v[0:5]
588; GFX942-NEXT: ;;#ASMEND
589; GFX942-NEXT: v_mov_b32_e32 v6, 0
590; GFX942-NEXT: v_mov_b32_e32 v2, v0
591; GFX942-NEXT: v_mov_b32_e32 v3, v1
592; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
593; GFX942-NEXT: s_waitcnt vmcnt(0)
594; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700595 %vec0 = call <3 x i64> asm "; def $0", "=v"()
596 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 poison, i32 0>
597 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
598 ret void
599}
600
601define void @v_shuffle_v2i64_v3i64__0_0(ptr addrspace(1) inreg %ptr) {
602; GFX900-LABEL: v_shuffle_v2i64_v3i64__0_0:
603; GFX900: ; %bb.0:
604; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
605; GFX900-NEXT: ;;#ASMSTART
606; GFX900-NEXT: ; def v[0:5]
607; GFX900-NEXT: ;;#ASMEND
608; GFX900-NEXT: v_mov_b32_e32 v6, 0
609; GFX900-NEXT: v_mov_b32_e32 v2, v0
610; GFX900-NEXT: v_mov_b32_e32 v3, v1
611; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
612; GFX900-NEXT: s_waitcnt vmcnt(0)
613; GFX900-NEXT: s_setpc_b64 s[30:31]
614;
615; GFX90A-LABEL: v_shuffle_v2i64_v3i64__0_0:
616; GFX90A: ; %bb.0:
617; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
618; GFX90A-NEXT: ;;#ASMSTART
619; GFX90A-NEXT: ; def v[0:5]
620; GFX90A-NEXT: ;;#ASMEND
621; GFX90A-NEXT: v_mov_b32_e32 v6, 0
622; GFX90A-NEXT: v_mov_b32_e32 v2, v0
623; GFX90A-NEXT: v_mov_b32_e32 v3, v1
624; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
625; GFX90A-NEXT: s_waitcnt vmcnt(0)
626; GFX90A-NEXT: s_setpc_b64 s[30:31]
627;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100628; GFX942-LABEL: v_shuffle_v2i64_v3i64__0_0:
629; GFX942: ; %bb.0:
630; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
631; GFX942-NEXT: ;;#ASMSTART
632; GFX942-NEXT: ; def v[0:5]
633; GFX942-NEXT: ;;#ASMEND
634; GFX942-NEXT: v_mov_b32_e32 v6, 0
635; GFX942-NEXT: v_mov_b32_e32 v2, v0
636; GFX942-NEXT: v_mov_b32_e32 v3, v1
637; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
638; GFX942-NEXT: s_waitcnt vmcnt(0)
639; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700640 %vec0 = call <3 x i64> asm "; def $0", "=v"()
641 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> zeroinitializer
642 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
643 ret void
644}
645
646define void @v_shuffle_v2i64_v3i64__1_0(ptr addrspace(1) inreg %ptr) {
647; GFX900-LABEL: v_shuffle_v2i64_v3i64__1_0:
648; GFX900: ; %bb.0:
649; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
650; GFX900-NEXT: ;;#ASMSTART
651; GFX900-NEXT: ; def v[0:5]
652; GFX900-NEXT: ;;#ASMEND
653; GFX900-NEXT: v_mov_b32_e32 v6, 0
654; GFX900-NEXT: v_mov_b32_e32 v4, v0
655; GFX900-NEXT: v_mov_b32_e32 v5, v1
656; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
657; GFX900-NEXT: s_waitcnt vmcnt(0)
658; GFX900-NEXT: s_setpc_b64 s[30:31]
659;
660; GFX90A-LABEL: v_shuffle_v2i64_v3i64__1_0:
661; GFX90A: ; %bb.0:
662; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
663; GFX90A-NEXT: ;;#ASMSTART
664; GFX90A-NEXT: ; def v[0:5]
665; GFX90A-NEXT: ;;#ASMEND
666; GFX90A-NEXT: v_mov_b32_e32 v6, 0
667; GFX90A-NEXT: v_mov_b32_e32 v4, v0
668; GFX90A-NEXT: v_mov_b32_e32 v5, v1
669; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
670; GFX90A-NEXT: s_waitcnt vmcnt(0)
671; GFX90A-NEXT: s_setpc_b64 s[30:31]
672;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100673; GFX942-LABEL: v_shuffle_v2i64_v3i64__1_0:
674; GFX942: ; %bb.0:
675; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
676; GFX942-NEXT: ;;#ASMSTART
677; GFX942-NEXT: ; def v[0:5]
678; GFX942-NEXT: ;;#ASMEND
679; GFX942-NEXT: v_mov_b32_e32 v6, 0
680; GFX942-NEXT: v_mov_b32_e32 v4, v0
681; GFX942-NEXT: v_mov_b32_e32 v5, v1
682; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
683; GFX942-NEXT: s_waitcnt vmcnt(0)
684; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700685 %vec0 = call <3 x i64> asm "; def $0", "=v"()
686 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 1, i32 0>
687 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
688 ret void
689}
690
691define void @v_shuffle_v2i64_v3i64__2_0(ptr addrspace(1) inreg %ptr) {
692; GFX900-LABEL: v_shuffle_v2i64_v3i64__2_0:
693; GFX900: ; %bb.0:
694; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
695; GFX900-NEXT: ;;#ASMSTART
696; GFX900-NEXT: ; def v[0:5]
697; GFX900-NEXT: ;;#ASMEND
698; GFX900-NEXT: v_mov_b32_e32 v6, 0
699; GFX900-NEXT: v_mov_b32_e32 v2, v4
700; GFX900-NEXT: v_mov_b32_e32 v3, v5
701; GFX900-NEXT: v_mov_b32_e32 v4, v0
702; GFX900-NEXT: v_mov_b32_e32 v5, v1
703; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
704; GFX900-NEXT: s_waitcnt vmcnt(0)
705; GFX900-NEXT: s_setpc_b64 s[30:31]
706;
707; GFX90A-LABEL: v_shuffle_v2i64_v3i64__2_0:
708; GFX90A: ; %bb.0:
709; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
710; GFX90A-NEXT: ;;#ASMSTART
711; GFX90A-NEXT: ; def v[0:5]
712; GFX90A-NEXT: ;;#ASMEND
713; GFX90A-NEXT: v_mov_b32_e32 v6, 0
714; GFX90A-NEXT: v_mov_b32_e32 v2, v4
715; GFX90A-NEXT: v_mov_b32_e32 v3, v5
716; GFX90A-NEXT: v_mov_b32_e32 v4, v0
717; GFX90A-NEXT: v_mov_b32_e32 v5, v1
718; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
719; GFX90A-NEXT: s_waitcnt vmcnt(0)
720; GFX90A-NEXT: s_setpc_b64 s[30:31]
721;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100722; GFX942-LABEL: v_shuffle_v2i64_v3i64__2_0:
723; GFX942: ; %bb.0:
724; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
725; GFX942-NEXT: ;;#ASMSTART
726; GFX942-NEXT: ; def v[0:5]
727; GFX942-NEXT: ;;#ASMEND
728; GFX942-NEXT: v_mov_b32_e32 v6, 0
729; GFX942-NEXT: v_mov_b32_e32 v2, v4
730; GFX942-NEXT: v_mov_b32_e32 v3, v5
731; GFX942-NEXT: v_mov_b32_e32 v4, v0
732; GFX942-NEXT: v_mov_b32_e32 v5, v1
733; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
734; GFX942-NEXT: s_waitcnt vmcnt(0)
735; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700736 %vec0 = call <3 x i64> asm "; def $0", "=v"()
737 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 0>
738 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
739 ret void
740}
741
742define void @v_shuffle_v2i64_v3i64__3_0(ptr addrspace(1) inreg %ptr) {
743; GFX900-LABEL: v_shuffle_v2i64_v3i64__3_0:
744; GFX900: ; %bb.0:
745; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
746; GFX900-NEXT: ;;#ASMSTART
747; GFX900-NEXT: ; def v[0:5]
748; GFX900-NEXT: ;;#ASMEND
749; GFX900-NEXT: v_mov_b32_e32 v6, 0
750; GFX900-NEXT: v_mov_b32_e32 v2, v0
751; GFX900-NEXT: v_mov_b32_e32 v3, v1
752; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
753; GFX900-NEXT: s_waitcnt vmcnt(0)
754; GFX900-NEXT: s_setpc_b64 s[30:31]
755;
756; GFX90A-LABEL: v_shuffle_v2i64_v3i64__3_0:
757; GFX90A: ; %bb.0:
758; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
759; GFX90A-NEXT: ;;#ASMSTART
760; GFX90A-NEXT: ; def v[0:5]
761; GFX90A-NEXT: ;;#ASMEND
762; GFX90A-NEXT: v_mov_b32_e32 v6, 0
763; GFX90A-NEXT: v_mov_b32_e32 v2, v0
764; GFX90A-NEXT: v_mov_b32_e32 v3, v1
765; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
766; GFX90A-NEXT: s_waitcnt vmcnt(0)
767; GFX90A-NEXT: s_setpc_b64 s[30:31]
768;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100769; GFX942-LABEL: v_shuffle_v2i64_v3i64__3_0:
770; GFX942: ; %bb.0:
771; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
772; GFX942-NEXT: ;;#ASMSTART
773; GFX942-NEXT: ; def v[0:5]
774; GFX942-NEXT: ;;#ASMEND
775; GFX942-NEXT: v_mov_b32_e32 v6, 0
776; GFX942-NEXT: v_mov_b32_e32 v2, v0
777; GFX942-NEXT: v_mov_b32_e32 v3, v1
778; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
779; GFX942-NEXT: s_waitcnt vmcnt(0)
780; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700781 %vec0 = call <3 x i64> asm "; def $0", "=v"()
782 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 3, i32 0>
783 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
784 ret void
785}
786
787define void @v_shuffle_v2i64_v3i64__4_0(ptr addrspace(1) inreg %ptr) {
788; GFX900-LABEL: v_shuffle_v2i64_v3i64__4_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:5]
793; GFX900-NEXT: ;;#ASMEND
794; GFX900-NEXT: ;;#ASMSTART
795; GFX900-NEXT: ; def v[2:7]
796; GFX900-NEXT: ;;#ASMEND
797; GFX900-NEXT: v_mov_b32_e32 v8, 0
798; GFX900-NEXT: v_mov_b32_e32 v6, v0
799; GFX900-NEXT: v_mov_b32_e32 v7, v1
800; GFX900-NEXT: global_store_dwordx4 v8, v[4:7], s[16:17]
801; GFX900-NEXT: s_waitcnt vmcnt(0)
802; GFX900-NEXT: s_setpc_b64 s[30:31]
803;
804; GFX90A-LABEL: v_shuffle_v2i64_v3i64__4_0:
805; GFX90A: ; %bb.0:
806; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
807; GFX90A-NEXT: ;;#ASMSTART
808; GFX90A-NEXT: ; def v[0:5]
809; GFX90A-NEXT: ;;#ASMEND
810; GFX90A-NEXT: ;;#ASMSTART
811; GFX90A-NEXT: ; def v[2:7]
812; GFX90A-NEXT: ;;#ASMEND
813; GFX90A-NEXT: v_mov_b32_e32 v8, 0
814; GFX90A-NEXT: v_mov_b32_e32 v6, v0
815; GFX90A-NEXT: v_mov_b32_e32 v7, v1
816; GFX90A-NEXT: global_store_dwordx4 v8, v[4:7], s[16:17]
817; GFX90A-NEXT: s_waitcnt vmcnt(0)
818; GFX90A-NEXT: s_setpc_b64 s[30:31]
819;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100820; GFX942-LABEL: v_shuffle_v2i64_v3i64__4_0:
821; GFX942: ; %bb.0:
822; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
823; GFX942-NEXT: ;;#ASMSTART
824; GFX942-NEXT: ; def v[0:5]
825; GFX942-NEXT: ;;#ASMEND
826; GFX942-NEXT: v_mov_b32_e32 v8, 0
827; GFX942-NEXT: ;;#ASMSTART
828; GFX942-NEXT: ; def v[2:7]
829; GFX942-NEXT: ;;#ASMEND
830; GFX942-NEXT: s_nop 0
831; GFX942-NEXT: v_mov_b32_e32 v6, v0
832; GFX942-NEXT: v_mov_b32_e32 v7, v1
833; GFX942-NEXT: global_store_dwordx4 v8, v[4:7], s[0:1]
834; GFX942-NEXT: s_waitcnt vmcnt(0)
835; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700836 %vec0 = call <3 x i64> asm "; def $0", "=v"()
837 %vec1 = call <3 x i64> asm "; def $0", "=v"()
838 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 0>
839 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
840 ret void
841}
842
843define void @v_shuffle_v2i64_v3i64__u_1(ptr addrspace(1) inreg %ptr) {
844; GFX900-LABEL: v_shuffle_v2i64_v3i64__u_1:
845; GFX900: ; %bb.0:
846; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
847; GFX900-NEXT: v_mov_b32_e32 v6, 0
848; GFX900-NEXT: ;;#ASMSTART
849; GFX900-NEXT: ; def v[0:5]
850; GFX900-NEXT: ;;#ASMEND
851; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
852; GFX900-NEXT: s_waitcnt vmcnt(0)
853; GFX900-NEXT: s_setpc_b64 s[30:31]
854;
855; GFX90A-LABEL: v_shuffle_v2i64_v3i64__u_1:
856; GFX90A: ; %bb.0:
857; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
858; GFX90A-NEXT: v_mov_b32_e32 v6, 0
859; GFX90A-NEXT: ;;#ASMSTART
860; GFX90A-NEXT: ; def v[0:5]
861; GFX90A-NEXT: ;;#ASMEND
862; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
863; GFX90A-NEXT: s_waitcnt vmcnt(0)
864; GFX90A-NEXT: s_setpc_b64 s[30:31]
865;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100866; GFX942-LABEL: v_shuffle_v2i64_v3i64__u_1:
867; GFX942: ; %bb.0:
868; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
869; GFX942-NEXT: v_mov_b32_e32 v6, 0
870; GFX942-NEXT: ;;#ASMSTART
871; GFX942-NEXT: ; def v[0:5]
872; GFX942-NEXT: ;;#ASMEND
873; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
874; GFX942-NEXT: s_waitcnt vmcnt(0)
875; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700876 %vec0 = call <3 x i64> asm "; def $0", "=v"()
877 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 poison, i32 1>
878 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
879 ret void
880}
881
882define void @v_shuffle_v2i64_v3i64__0_1(ptr addrspace(1) inreg %ptr) {
883; GFX900-LABEL: v_shuffle_v2i64_v3i64__0_1:
884; GFX900: ; %bb.0:
885; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
886; GFX900-NEXT: v_mov_b32_e32 v6, 0
887; GFX900-NEXT: ;;#ASMSTART
888; GFX900-NEXT: ; def v[0:5]
889; GFX900-NEXT: ;;#ASMEND
890; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
891; GFX900-NEXT: s_waitcnt vmcnt(0)
892; GFX900-NEXT: s_setpc_b64 s[30:31]
893;
894; GFX90A-LABEL: v_shuffle_v2i64_v3i64__0_1:
895; GFX90A: ; %bb.0:
896; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
897; GFX90A-NEXT: v_mov_b32_e32 v6, 0
898; GFX90A-NEXT: ;;#ASMSTART
899; GFX90A-NEXT: ; def v[0:5]
900; GFX90A-NEXT: ;;#ASMEND
901; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
902; GFX90A-NEXT: s_waitcnt vmcnt(0)
903; GFX90A-NEXT: s_setpc_b64 s[30:31]
904;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100905; GFX942-LABEL: v_shuffle_v2i64_v3i64__0_1:
906; GFX942: ; %bb.0:
907; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
908; GFX942-NEXT: v_mov_b32_e32 v6, 0
909; GFX942-NEXT: ;;#ASMSTART
910; GFX942-NEXT: ; def v[0:5]
911; GFX942-NEXT: ;;#ASMEND
912; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
913; GFX942-NEXT: s_waitcnt vmcnt(0)
914; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700915 %vec0 = call <3 x i64> asm "; def $0", "=v"()
916 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 0, i32 1>
917 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
918 ret void
919}
920
921define void @v_shuffle_v2i64_v3i64__1_1(ptr addrspace(1) inreg %ptr) {
922; GFX900-LABEL: v_shuffle_v2i64_v3i64__1_1:
923; GFX900: ; %bb.0:
924; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
925; GFX900-NEXT: ;;#ASMSTART
926; GFX900-NEXT: ; def v[0:5]
927; GFX900-NEXT: ;;#ASMEND
928; GFX900-NEXT: v_mov_b32_e32 v6, 0
929; GFX900-NEXT: v_mov_b32_e32 v4, v2
930; GFX900-NEXT: v_mov_b32_e32 v5, v3
931; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
932; GFX900-NEXT: s_waitcnt vmcnt(0)
933; GFX900-NEXT: s_setpc_b64 s[30:31]
934;
935; GFX90A-LABEL: v_shuffle_v2i64_v3i64__1_1:
936; GFX90A: ; %bb.0:
937; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
938; GFX90A-NEXT: ;;#ASMSTART
939; GFX90A-NEXT: ; def v[0:5]
940; GFX90A-NEXT: ;;#ASMEND
941; GFX90A-NEXT: v_mov_b32_e32 v6, 0
942; GFX90A-NEXT: v_mov_b32_e32 v4, v2
943; GFX90A-NEXT: v_mov_b32_e32 v5, v3
944; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
945; GFX90A-NEXT: s_waitcnt vmcnt(0)
946; GFX90A-NEXT: s_setpc_b64 s[30:31]
947;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100948; GFX942-LABEL: v_shuffle_v2i64_v3i64__1_1:
949; GFX942: ; %bb.0:
950; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
951; GFX942-NEXT: ;;#ASMSTART
952; GFX942-NEXT: ; def v[0:5]
953; GFX942-NEXT: ;;#ASMEND
954; GFX942-NEXT: v_mov_b32_e32 v6, 0
955; GFX942-NEXT: v_mov_b32_e32 v4, v2
956; GFX942-NEXT: v_mov_b32_e32 v5, v3
957; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
958; GFX942-NEXT: s_waitcnt vmcnt(0)
959; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +0700960 %vec0 = call <3 x i64> asm "; def $0", "=v"()
961 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 1, i32 1>
962 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
963 ret void
964}
965
966define void @v_shuffle_v2i64_v3i64__2_1(ptr addrspace(1) inreg %ptr) {
967; GFX900-LABEL: v_shuffle_v2i64_v3i64__2_1:
968; GFX900: ; %bb.0:
969; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
970; GFX900-NEXT: ;;#ASMSTART
971; GFX900-NEXT: ; def v[0:5]
972; GFX900-NEXT: ;;#ASMEND
973; GFX900-NEXT: v_mov_b32_e32 v6, 0
974; GFX900-NEXT: v_mov_b32_e32 v0, v4
975; GFX900-NEXT: v_mov_b32_e32 v1, v5
976; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
977; GFX900-NEXT: s_waitcnt vmcnt(0)
978; GFX900-NEXT: s_setpc_b64 s[30:31]
979;
980; GFX90A-LABEL: v_shuffle_v2i64_v3i64__2_1:
981; GFX90A: ; %bb.0:
982; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
983; GFX90A-NEXT: ;;#ASMSTART
984; GFX90A-NEXT: ; def v[0:5]
985; GFX90A-NEXT: ;;#ASMEND
986; GFX90A-NEXT: v_mov_b32_e32 v6, 0
987; GFX90A-NEXT: v_mov_b32_e32 v0, v4
988; GFX90A-NEXT: v_mov_b32_e32 v1, v5
989; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
990; GFX90A-NEXT: s_waitcnt vmcnt(0)
991; GFX90A-NEXT: s_setpc_b64 s[30:31]
992;
Fabian Rittera33a84e2025-02-13 15:17:12 +0100993; GFX942-LABEL: v_shuffle_v2i64_v3i64__2_1:
994; GFX942: ; %bb.0:
995; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
996; GFX942-NEXT: ;;#ASMSTART
997; GFX942-NEXT: ; def v[0:5]
998; GFX942-NEXT: ;;#ASMEND
999; GFX942-NEXT: v_mov_b32_e32 v6, 0
1000; GFX942-NEXT: v_mov_b32_e32 v0, v4
1001; GFX942-NEXT: v_mov_b32_e32 v1, v5
1002; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
1003; GFX942-NEXT: s_waitcnt vmcnt(0)
1004; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001005 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1006 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 1>
1007 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1008 ret void
1009}
1010
1011define void @v_shuffle_v2i64_v3i64__3_1(ptr addrspace(1) inreg %ptr) {
1012; GFX900-LABEL: v_shuffle_v2i64_v3i64__3_1:
1013; GFX900: ; %bb.0:
1014; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1015; GFX900-NEXT: v_mov_b32_e32 v6, 0
1016; GFX900-NEXT: ;;#ASMSTART
1017; GFX900-NEXT: ; def v[0:5]
1018; GFX900-NEXT: ;;#ASMEND
1019; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1020; GFX900-NEXT: s_waitcnt vmcnt(0)
1021; GFX900-NEXT: s_setpc_b64 s[30:31]
1022;
1023; GFX90A-LABEL: v_shuffle_v2i64_v3i64__3_1:
1024; GFX90A: ; %bb.0:
1025; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1026; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1027; GFX90A-NEXT: ;;#ASMSTART
1028; GFX90A-NEXT: ; def v[0:5]
1029; GFX90A-NEXT: ;;#ASMEND
1030; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1031; GFX90A-NEXT: s_waitcnt vmcnt(0)
1032; GFX90A-NEXT: s_setpc_b64 s[30:31]
1033;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001034; GFX942-LABEL: v_shuffle_v2i64_v3i64__3_1:
1035; GFX942: ; %bb.0:
1036; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1037; GFX942-NEXT: v_mov_b32_e32 v6, 0
1038; GFX942-NEXT: ;;#ASMSTART
1039; GFX942-NEXT: ; def v[0:5]
1040; GFX942-NEXT: ;;#ASMEND
1041; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
1042; GFX942-NEXT: s_waitcnt vmcnt(0)
1043; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001044 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1045 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 3, i32 1>
1046 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1047 ret void
1048}
1049
1050define void @v_shuffle_v2i64_v3i64__4_1(ptr addrspace(1) inreg %ptr) {
1051; GFX900-LABEL: v_shuffle_v2i64_v3i64__4_1:
1052; GFX900: ; %bb.0:
1053; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1054; GFX900-NEXT: ;;#ASMSTART
1055; GFX900-NEXT: ; def v[0:5]
1056; GFX900-NEXT: ;;#ASMEND
1057; GFX900-NEXT: ;;#ASMSTART
1058; GFX900-NEXT: ; def v[4:9]
1059; GFX900-NEXT: ;;#ASMEND
1060; GFX900-NEXT: v_mov_b32_e32 v10, 0
1061; GFX900-NEXT: v_mov_b32_e32 v8, v2
1062; GFX900-NEXT: v_mov_b32_e32 v9, v3
1063; GFX900-NEXT: global_store_dwordx4 v10, v[6:9], s[16:17]
1064; GFX900-NEXT: s_waitcnt vmcnt(0)
1065; GFX900-NEXT: s_setpc_b64 s[30:31]
1066;
1067; GFX90A-LABEL: v_shuffle_v2i64_v3i64__4_1:
1068; GFX90A: ; %bb.0:
1069; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1070; GFX90A-NEXT: ;;#ASMSTART
1071; GFX90A-NEXT: ; def v[0:5]
1072; GFX90A-NEXT: ;;#ASMEND
1073; GFX90A-NEXT: ;;#ASMSTART
1074; GFX90A-NEXT: ; def v[4:9]
1075; GFX90A-NEXT: ;;#ASMEND
1076; GFX90A-NEXT: v_mov_b32_e32 v10, 0
1077; GFX90A-NEXT: v_mov_b32_e32 v8, v2
1078; GFX90A-NEXT: v_mov_b32_e32 v9, v3
1079; GFX90A-NEXT: global_store_dwordx4 v10, v[6:9], s[16:17]
1080; GFX90A-NEXT: s_waitcnt vmcnt(0)
1081; GFX90A-NEXT: s_setpc_b64 s[30:31]
1082;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001083; GFX942-LABEL: v_shuffle_v2i64_v3i64__4_1:
1084; GFX942: ; %bb.0:
1085; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1086; GFX942-NEXT: ;;#ASMSTART
1087; GFX942-NEXT: ; def v[0:5]
1088; GFX942-NEXT: ;;#ASMEND
1089; GFX942-NEXT: v_mov_b32_e32 v10, 0
1090; GFX942-NEXT: ;;#ASMSTART
1091; GFX942-NEXT: ; def v[4:9]
1092; GFX942-NEXT: ;;#ASMEND
1093; GFX942-NEXT: s_nop 0
1094; GFX942-NEXT: v_mov_b32_e32 v8, v2
1095; GFX942-NEXT: v_mov_b32_e32 v9, v3
1096; GFX942-NEXT: global_store_dwordx4 v10, v[6:9], s[0:1]
1097; GFX942-NEXT: s_waitcnt vmcnt(0)
1098; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001099 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1100 %vec1 = call <3 x i64> asm "; def $0", "=v"()
1101 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 1>
1102 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1103 ret void
1104}
1105
1106define void @v_shuffle_v2i64_v3i64__u_2(ptr addrspace(1) inreg %ptr) {
1107; GFX900-LABEL: v_shuffle_v2i64_v3i64__u_2:
1108; GFX900: ; %bb.0:
1109; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1110; GFX900-NEXT: v_mov_b32_e32 v6, 0
1111; GFX900-NEXT: ;;#ASMSTART
1112; GFX900-NEXT: ; def v[0:5]
1113; GFX900-NEXT: ;;#ASMEND
1114; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1115; GFX900-NEXT: s_waitcnt vmcnt(0)
1116; GFX900-NEXT: s_setpc_b64 s[30:31]
1117;
1118; GFX90A-LABEL: v_shuffle_v2i64_v3i64__u_2:
1119; GFX90A: ; %bb.0:
1120; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1121; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1122; GFX90A-NEXT: ;;#ASMSTART
1123; GFX90A-NEXT: ; def v[0:5]
1124; GFX90A-NEXT: ;;#ASMEND
1125; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1126; GFX90A-NEXT: s_waitcnt vmcnt(0)
1127; GFX90A-NEXT: s_setpc_b64 s[30:31]
1128;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001129; GFX942-LABEL: v_shuffle_v2i64_v3i64__u_2:
1130; GFX942: ; %bb.0:
1131; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1132; GFX942-NEXT: v_mov_b32_e32 v6, 0
1133; GFX942-NEXT: ;;#ASMSTART
1134; GFX942-NEXT: ; def v[0:5]
1135; GFX942-NEXT: ;;#ASMEND
1136; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
1137; GFX942-NEXT: s_waitcnt vmcnt(0)
1138; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001139 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1140 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 poison, i32 2>
1141 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1142 ret void
1143}
1144
1145define void @v_shuffle_v2i64_v3i64__0_2(ptr addrspace(1) inreg %ptr) {
1146; GFX900-LABEL: v_shuffle_v2i64_v3i64__0_2:
1147; GFX900: ; %bb.0:
1148; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1149; GFX900-NEXT: ;;#ASMSTART
1150; GFX900-NEXT: ; def v[0:5]
1151; GFX900-NEXT: ;;#ASMEND
1152; GFX900-NEXT: v_mov_b32_e32 v6, 0
1153; GFX900-NEXT: v_mov_b32_e32 v2, v4
1154; GFX900-NEXT: v_mov_b32_e32 v3, v5
1155; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1156; GFX900-NEXT: s_waitcnt vmcnt(0)
1157; GFX900-NEXT: s_setpc_b64 s[30:31]
1158;
1159; GFX90A-LABEL: v_shuffle_v2i64_v3i64__0_2:
1160; GFX90A: ; %bb.0:
1161; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1162; GFX90A-NEXT: ;;#ASMSTART
1163; GFX90A-NEXT: ; def v[0:5]
1164; GFX90A-NEXT: ;;#ASMEND
1165; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1166; GFX90A-NEXT: v_mov_b32_e32 v2, v4
1167; GFX90A-NEXT: v_mov_b32_e32 v3, v5
1168; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1169; GFX90A-NEXT: s_waitcnt vmcnt(0)
1170; GFX90A-NEXT: s_setpc_b64 s[30:31]
1171;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001172; GFX942-LABEL: v_shuffle_v2i64_v3i64__0_2:
1173; GFX942: ; %bb.0:
1174; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1175; GFX942-NEXT: ;;#ASMSTART
1176; GFX942-NEXT: ; def v[0:5]
1177; GFX942-NEXT: ;;#ASMEND
1178; GFX942-NEXT: v_mov_b32_e32 v6, 0
1179; GFX942-NEXT: v_mov_b32_e32 v2, v4
1180; GFX942-NEXT: v_mov_b32_e32 v3, v5
1181; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
1182; GFX942-NEXT: s_waitcnt vmcnt(0)
1183; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001184 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1185 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 0, i32 2>
1186 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1187 ret void
1188}
1189
1190define void @v_shuffle_v2i64_v3i64__1_2(ptr addrspace(1) inreg %ptr) {
1191; GFX900-LABEL: v_shuffle_v2i64_v3i64__1_2:
1192; GFX900: ; %bb.0:
1193; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1194; GFX900-NEXT: v_mov_b32_e32 v6, 0
1195; GFX900-NEXT: ;;#ASMSTART
1196; GFX900-NEXT: ; def v[0:5]
1197; GFX900-NEXT: ;;#ASMEND
1198; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1199; GFX900-NEXT: s_waitcnt vmcnt(0)
1200; GFX900-NEXT: s_setpc_b64 s[30:31]
1201;
1202; GFX90A-LABEL: v_shuffle_v2i64_v3i64__1_2:
1203; GFX90A: ; %bb.0:
1204; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1205; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1206; GFX90A-NEXT: ;;#ASMSTART
1207; GFX90A-NEXT: ; def v[0:5]
1208; GFX90A-NEXT: ;;#ASMEND
1209; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1210; GFX90A-NEXT: s_waitcnt vmcnt(0)
1211; GFX90A-NEXT: s_setpc_b64 s[30:31]
1212;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001213; GFX942-LABEL: v_shuffle_v2i64_v3i64__1_2:
1214; GFX942: ; %bb.0:
1215; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1216; GFX942-NEXT: v_mov_b32_e32 v6, 0
1217; GFX942-NEXT: ;;#ASMSTART
1218; GFX942-NEXT: ; def v[0:5]
1219; GFX942-NEXT: ;;#ASMEND
1220; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
1221; GFX942-NEXT: s_waitcnt vmcnt(0)
1222; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001223 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1224 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 1, i32 2>
1225 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1226 ret void
1227}
1228
1229define void @v_shuffle_v2i64_v3i64__2_2(ptr addrspace(1) inreg %ptr) {
1230; GFX900-LABEL: v_shuffle_v2i64_v3i64__2_2:
1231; GFX900: ; %bb.0:
1232; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1233; GFX900-NEXT: ;;#ASMSTART
1234; GFX900-NEXT: ; def v[0:5]
1235; GFX900-NEXT: ;;#ASMEND
1236; GFX900-NEXT: v_mov_b32_e32 v6, 0
1237; GFX900-NEXT: v_mov_b32_e32 v2, v4
1238; GFX900-NEXT: v_mov_b32_e32 v3, v5
1239; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1240; GFX900-NEXT: s_waitcnt vmcnt(0)
1241; GFX900-NEXT: s_setpc_b64 s[30:31]
1242;
1243; GFX90A-LABEL: v_shuffle_v2i64_v3i64__2_2:
1244; GFX90A: ; %bb.0:
1245; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1246; GFX90A-NEXT: ;;#ASMSTART
1247; GFX90A-NEXT: ; def v[0:5]
1248; GFX90A-NEXT: ;;#ASMEND
1249; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1250; GFX90A-NEXT: v_mov_b32_e32 v2, v4
1251; GFX90A-NEXT: v_mov_b32_e32 v3, v5
1252; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1253; GFX90A-NEXT: s_waitcnt vmcnt(0)
1254; GFX90A-NEXT: s_setpc_b64 s[30:31]
1255;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001256; GFX942-LABEL: v_shuffle_v2i64_v3i64__2_2:
1257; GFX942: ; %bb.0:
1258; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1259; GFX942-NEXT: ;;#ASMSTART
1260; GFX942-NEXT: ; def v[0:5]
1261; GFX942-NEXT: ;;#ASMEND
1262; GFX942-NEXT: v_mov_b32_e32 v6, 0
1263; GFX942-NEXT: v_mov_b32_e32 v2, v4
1264; GFX942-NEXT: v_mov_b32_e32 v3, v5
1265; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
1266; GFX942-NEXT: s_waitcnt vmcnt(0)
1267; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001268 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1269 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 2>
1270 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1271 ret void
1272}
1273
1274define void @v_shuffle_v2i64_v3i64__3_2(ptr addrspace(1) inreg %ptr) {
1275; GFX900-LABEL: v_shuffle_v2i64_v3i64__3_2:
1276; GFX900: ; %bb.0:
1277; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1278; GFX900-NEXT: v_mov_b32_e32 v6, 0
1279; GFX900-NEXT: ;;#ASMSTART
1280; GFX900-NEXT: ; def v[0:5]
1281; GFX900-NEXT: ;;#ASMEND
1282; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1283; GFX900-NEXT: s_waitcnt vmcnt(0)
1284; GFX900-NEXT: s_setpc_b64 s[30:31]
1285;
1286; GFX90A-LABEL: v_shuffle_v2i64_v3i64__3_2:
1287; GFX90A: ; %bb.0:
1288; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1289; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1290; GFX90A-NEXT: ;;#ASMSTART
1291; GFX90A-NEXT: ; def v[0:5]
1292; GFX90A-NEXT: ;;#ASMEND
1293; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1294; GFX90A-NEXT: s_waitcnt vmcnt(0)
1295; GFX90A-NEXT: s_setpc_b64 s[30:31]
1296;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001297; GFX942-LABEL: v_shuffle_v2i64_v3i64__3_2:
1298; GFX942: ; %bb.0:
1299; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1300; GFX942-NEXT: v_mov_b32_e32 v6, 0
1301; GFX942-NEXT: ;;#ASMSTART
1302; GFX942-NEXT: ; def v[0:5]
1303; GFX942-NEXT: ;;#ASMEND
1304; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
1305; GFX942-NEXT: s_waitcnt vmcnt(0)
1306; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001307 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1308 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 3, i32 2>
1309 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1310 ret void
1311}
1312
1313define void @v_shuffle_v2i64_v3i64__4_2(ptr addrspace(1) inreg %ptr) {
1314; GFX900-LABEL: v_shuffle_v2i64_v3i64__4_2:
1315; GFX900: ; %bb.0:
1316; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1317; GFX900-NEXT: ;;#ASMSTART
1318; GFX900-NEXT: ; def v[6:11]
1319; GFX900-NEXT: ;;#ASMEND
1320; GFX900-NEXT: v_mov_b32_e32 v12, 0
1321; GFX900-NEXT: ;;#ASMSTART
1322; GFX900-NEXT: ; def v[0:5]
1323; GFX900-NEXT: ;;#ASMEND
1324; GFX900-NEXT: v_mov_b32_e32 v10, v4
1325; GFX900-NEXT: v_mov_b32_e32 v11, v5
1326; GFX900-NEXT: global_store_dwordx4 v12, v[8:11], s[16:17]
1327; GFX900-NEXT: s_waitcnt vmcnt(0)
1328; GFX900-NEXT: s_setpc_b64 s[30:31]
1329;
1330; GFX90A-LABEL: v_shuffle_v2i64_v3i64__4_2:
1331; GFX90A: ; %bb.0:
1332; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1333; GFX90A-NEXT: ;;#ASMSTART
1334; GFX90A-NEXT: ; def v[6:11]
1335; GFX90A-NEXT: ;;#ASMEND
1336; GFX90A-NEXT: v_mov_b32_e32 v12, 0
1337; GFX90A-NEXT: ;;#ASMSTART
1338; GFX90A-NEXT: ; def v[0:5]
1339; GFX90A-NEXT: ;;#ASMEND
1340; GFX90A-NEXT: v_mov_b32_e32 v10, v4
1341; GFX90A-NEXT: v_mov_b32_e32 v11, v5
1342; GFX90A-NEXT: global_store_dwordx4 v12, v[8:11], s[16:17]
1343; GFX90A-NEXT: s_waitcnt vmcnt(0)
1344; GFX90A-NEXT: s_setpc_b64 s[30:31]
1345;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001346; GFX942-LABEL: v_shuffle_v2i64_v3i64__4_2:
1347; GFX942: ; %bb.0:
1348; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1349; GFX942-NEXT: ;;#ASMSTART
1350; GFX942-NEXT: ; def v[6:11]
1351; GFX942-NEXT: ;;#ASMEND
1352; GFX942-NEXT: v_mov_b32_e32 v12, 0
1353; GFX942-NEXT: ;;#ASMSTART
1354; GFX942-NEXT: ; def v[0:5]
1355; GFX942-NEXT: ;;#ASMEND
1356; GFX942-NEXT: s_nop 0
1357; GFX942-NEXT: v_mov_b32_e32 v10, v4
1358; GFX942-NEXT: v_mov_b32_e32 v11, v5
1359; GFX942-NEXT: global_store_dwordx4 v12, v[8:11], s[0:1]
1360; GFX942-NEXT: s_waitcnt vmcnt(0)
1361; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001362 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1363 %vec1 = call <3 x i64> asm "; def $0", "=v"()
1364 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 2>
1365 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1366 ret void
1367}
1368
1369define void @v_shuffle_v2i64_v3i64__u_3(ptr addrspace(1) inreg %ptr) {
1370; GFX9-LABEL: v_shuffle_v2i64_v3i64__u_3:
1371; GFX9: ; %bb.0:
1372; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1373; GFX9-NEXT: s_setpc_b64 s[30:31]
1374 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1375 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 poison, i32 3>
1376 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1377 ret void
1378}
1379
1380define void @v_shuffle_v2i64_v3i64__0_3(ptr addrspace(1) inreg %ptr) {
1381; GFX900-LABEL: v_shuffle_v2i64_v3i64__0_3:
1382; GFX900: ; %bb.0:
1383; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1384; GFX900-NEXT: v_mov_b32_e32 v6, 0
1385; GFX900-NEXT: ;;#ASMSTART
1386; GFX900-NEXT: ; def v[0:5]
1387; GFX900-NEXT: ;;#ASMEND
1388; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1389; GFX900-NEXT: s_waitcnt vmcnt(0)
1390; GFX900-NEXT: s_setpc_b64 s[30:31]
1391;
1392; GFX90A-LABEL: v_shuffle_v2i64_v3i64__0_3:
1393; GFX90A: ; %bb.0:
1394; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1395; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1396; GFX90A-NEXT: ;;#ASMSTART
1397; GFX90A-NEXT: ; def v[0:5]
1398; GFX90A-NEXT: ;;#ASMEND
1399; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1400; GFX90A-NEXT: s_waitcnt vmcnt(0)
1401; GFX90A-NEXT: s_setpc_b64 s[30:31]
1402;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001403; GFX942-LABEL: v_shuffle_v2i64_v3i64__0_3:
1404; GFX942: ; %bb.0:
1405; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1406; GFX942-NEXT: v_mov_b32_e32 v6, 0
1407; GFX942-NEXT: ;;#ASMSTART
1408; GFX942-NEXT: ; def v[0:5]
1409; GFX942-NEXT: ;;#ASMEND
1410; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
1411; GFX942-NEXT: s_waitcnt vmcnt(0)
1412; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001413 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1414 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 0, i32 3>
1415 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1416 ret void
1417}
1418
1419define void @v_shuffle_v2i64_v3i64__1_3(ptr addrspace(1) inreg %ptr) {
1420; GFX900-LABEL: v_shuffle_v2i64_v3i64__1_3:
1421; GFX900: ; %bb.0:
1422; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1423; GFX900-NEXT: v_mov_b32_e32 v6, 0
1424; GFX900-NEXT: ;;#ASMSTART
1425; GFX900-NEXT: ; def v[0:5]
1426; GFX900-NEXT: ;;#ASMEND
1427; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1428; GFX900-NEXT: s_waitcnt vmcnt(0)
1429; GFX900-NEXT: s_setpc_b64 s[30:31]
1430;
1431; GFX90A-LABEL: v_shuffle_v2i64_v3i64__1_3:
1432; GFX90A: ; %bb.0:
1433; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1434; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1435; GFX90A-NEXT: ;;#ASMSTART
1436; GFX90A-NEXT: ; def v[0:5]
1437; GFX90A-NEXT: ;;#ASMEND
1438; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1439; GFX90A-NEXT: s_waitcnt vmcnt(0)
1440; GFX90A-NEXT: s_setpc_b64 s[30:31]
1441;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001442; GFX942-LABEL: v_shuffle_v2i64_v3i64__1_3:
1443; GFX942: ; %bb.0:
1444; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1445; GFX942-NEXT: v_mov_b32_e32 v6, 0
1446; GFX942-NEXT: ;;#ASMSTART
1447; GFX942-NEXT: ; def v[0:5]
1448; GFX942-NEXT: ;;#ASMEND
1449; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
1450; GFX942-NEXT: s_waitcnt vmcnt(0)
1451; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001452 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1453 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 1, i32 3>
1454 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1455 ret void
1456}
1457
1458define void @v_shuffle_v2i64_v3i64__2_3(ptr addrspace(1) inreg %ptr) {
1459; GFX900-LABEL: v_shuffle_v2i64_v3i64__2_3:
1460; GFX900: ; %bb.0:
1461; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1462; GFX900-NEXT: ;;#ASMSTART
1463; GFX900-NEXT: ; def v[0:5]
1464; GFX900-NEXT: ;;#ASMEND
1465; GFX900-NEXT: v_mov_b32_e32 v6, 0
1466; GFX900-NEXT: v_mov_b32_e32 v0, v4
1467; GFX900-NEXT: v_mov_b32_e32 v1, v5
1468; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1469; GFX900-NEXT: s_waitcnt vmcnt(0)
1470; GFX900-NEXT: s_setpc_b64 s[30:31]
1471;
1472; GFX90A-LABEL: v_shuffle_v2i64_v3i64__2_3:
1473; GFX90A: ; %bb.0:
1474; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1475; GFX90A-NEXT: ;;#ASMSTART
1476; GFX90A-NEXT: ; def v[0:5]
1477; GFX90A-NEXT: ;;#ASMEND
1478; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1479; GFX90A-NEXT: v_mov_b32_e32 v0, v4
1480; GFX90A-NEXT: v_mov_b32_e32 v1, v5
1481; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1482; GFX90A-NEXT: s_waitcnt vmcnt(0)
1483; GFX90A-NEXT: s_setpc_b64 s[30:31]
1484;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001485; GFX942-LABEL: v_shuffle_v2i64_v3i64__2_3:
1486; GFX942: ; %bb.0:
1487; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1488; GFX942-NEXT: ;;#ASMSTART
1489; GFX942-NEXT: ; def v[0:5]
1490; GFX942-NEXT: ;;#ASMEND
1491; GFX942-NEXT: v_mov_b32_e32 v6, 0
1492; GFX942-NEXT: v_mov_b32_e32 v0, v4
1493; GFX942-NEXT: v_mov_b32_e32 v1, v5
1494; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
1495; GFX942-NEXT: s_waitcnt vmcnt(0)
1496; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001497 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1498 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 3>
1499 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1500 ret void
1501}
1502
1503define void @v_shuffle_v2i64_v3i64__3_3(ptr addrspace(1) inreg %ptr) {
1504; GFX9-LABEL: v_shuffle_v2i64_v3i64__3_3:
1505; GFX9: ; %bb.0:
1506; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1507; GFX9-NEXT: s_setpc_b64 s[30:31]
1508 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1509 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 3, i32 3>
1510 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1511 ret void
1512}
1513
1514define void @v_shuffle_v2i64_v3i64__4_3(ptr addrspace(1) inreg %ptr) {
1515; GFX900-LABEL: v_shuffle_v2i64_v3i64__4_3:
1516; GFX900: ; %bb.0:
1517; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1518; GFX900-NEXT: ;;#ASMSTART
1519; GFX900-NEXT: ; def v[0:5]
1520; GFX900-NEXT: ;;#ASMEND
1521; GFX900-NEXT: v_mov_b32_e32 v6, 0
1522; GFX900-NEXT: v_mov_b32_e32 v4, v0
1523; GFX900-NEXT: v_mov_b32_e32 v5, v1
1524; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1525; GFX900-NEXT: s_waitcnt vmcnt(0)
1526; GFX900-NEXT: s_setpc_b64 s[30:31]
1527;
1528; GFX90A-LABEL: v_shuffle_v2i64_v3i64__4_3:
1529; GFX90A: ; %bb.0:
1530; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1531; GFX90A-NEXT: ;;#ASMSTART
1532; GFX90A-NEXT: ; def v[0:5]
1533; GFX90A-NEXT: ;;#ASMEND
1534; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1535; GFX90A-NEXT: v_mov_b32_e32 v4, v0
1536; GFX90A-NEXT: v_mov_b32_e32 v5, v1
1537; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1538; GFX90A-NEXT: s_waitcnt vmcnt(0)
1539; GFX90A-NEXT: s_setpc_b64 s[30:31]
1540;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001541; GFX942-LABEL: v_shuffle_v2i64_v3i64__4_3:
1542; GFX942: ; %bb.0:
1543; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1544; GFX942-NEXT: ;;#ASMSTART
1545; GFX942-NEXT: ; def v[0:5]
1546; GFX942-NEXT: ;;#ASMEND
1547; GFX942-NEXT: v_mov_b32_e32 v6, 0
1548; GFX942-NEXT: v_mov_b32_e32 v4, v0
1549; GFX942-NEXT: v_mov_b32_e32 v5, v1
1550; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
1551; GFX942-NEXT: s_waitcnt vmcnt(0)
1552; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001553 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1554 %vec1 = call <3 x i64> asm "; def $0", "=v"()
1555 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 3>
1556 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1557 ret void
1558}
1559
1560define void @v_shuffle_v2i64_v3i64__u_4(ptr addrspace(1) inreg %ptr) {
1561; GFX900-LABEL: v_shuffle_v2i64_v3i64__u_4:
1562; GFX900: ; %bb.0:
1563; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1564; GFX900-NEXT: v_mov_b32_e32 v6, 0
1565; GFX900-NEXT: ;;#ASMSTART
1566; GFX900-NEXT: ; def v[0:5]
1567; GFX900-NEXT: ;;#ASMEND
1568; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1569; GFX900-NEXT: s_waitcnt vmcnt(0)
1570; GFX900-NEXT: s_setpc_b64 s[30:31]
1571;
1572; GFX90A-LABEL: v_shuffle_v2i64_v3i64__u_4:
1573; GFX90A: ; %bb.0:
1574; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1575; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1576; GFX90A-NEXT: ;;#ASMSTART
1577; GFX90A-NEXT: ; def v[0:5]
1578; GFX90A-NEXT: ;;#ASMEND
1579; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1580; GFX90A-NEXT: s_waitcnt vmcnt(0)
1581; GFX90A-NEXT: s_setpc_b64 s[30:31]
1582;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001583; GFX942-LABEL: v_shuffle_v2i64_v3i64__u_4:
1584; GFX942: ; %bb.0:
1585; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1586; GFX942-NEXT: v_mov_b32_e32 v6, 0
1587; GFX942-NEXT: ;;#ASMSTART
1588; GFX942-NEXT: ; def v[0:5]
1589; GFX942-NEXT: ;;#ASMEND
1590; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
1591; GFX942-NEXT: s_waitcnt vmcnt(0)
1592; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001593 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1594 %vec1 = call <3 x i64> asm "; def $0", "=v"()
1595 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 poison, i32 4>
1596 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1597 ret void
1598}
1599
1600define void @v_shuffle_v2i64_v3i64__0_4(ptr addrspace(1) inreg %ptr) {
1601; GFX900-LABEL: v_shuffle_v2i64_v3i64__0_4:
1602; GFX900: ; %bb.0:
1603; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1604; GFX900-NEXT: ;;#ASMSTART
1605; GFX900-NEXT: ; def v[0:5]
1606; GFX900-NEXT: ;;#ASMEND
1607; GFX900-NEXT: ;;#ASMSTART
1608; GFX900-NEXT: ; def v[2:7]
1609; GFX900-NEXT: ;;#ASMEND
1610; GFX900-NEXT: v_mov_b32_e32 v8, 0
1611; GFX900-NEXT: v_mov_b32_e32 v2, v4
1612; GFX900-NEXT: v_mov_b32_e32 v3, v5
1613; GFX900-NEXT: global_store_dwordx4 v8, v[0:3], s[16:17]
1614; GFX900-NEXT: s_waitcnt vmcnt(0)
1615; GFX900-NEXT: s_setpc_b64 s[30:31]
1616;
1617; GFX90A-LABEL: v_shuffle_v2i64_v3i64__0_4:
1618; GFX90A: ; %bb.0:
1619; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1620; GFX90A-NEXT: ;;#ASMSTART
1621; GFX90A-NEXT: ; def v[0:5]
1622; GFX90A-NEXT: ;;#ASMEND
1623; GFX90A-NEXT: ;;#ASMSTART
1624; GFX90A-NEXT: ; def v[2:7]
1625; GFX90A-NEXT: ;;#ASMEND
1626; GFX90A-NEXT: v_mov_b32_e32 v8, 0
1627; GFX90A-NEXT: v_mov_b32_e32 v2, v4
1628; GFX90A-NEXT: v_mov_b32_e32 v3, v5
1629; GFX90A-NEXT: global_store_dwordx4 v8, v[0:3], s[16:17]
1630; GFX90A-NEXT: s_waitcnt vmcnt(0)
1631; GFX90A-NEXT: s_setpc_b64 s[30:31]
1632;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001633; GFX942-LABEL: v_shuffle_v2i64_v3i64__0_4:
1634; GFX942: ; %bb.0:
1635; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1636; GFX942-NEXT: ;;#ASMSTART
1637; GFX942-NEXT: ; def v[0:5]
1638; GFX942-NEXT: ;;#ASMEND
1639; GFX942-NEXT: v_mov_b32_e32 v8, 0
1640; GFX942-NEXT: ;;#ASMSTART
1641; GFX942-NEXT: ; def v[2:7]
1642; GFX942-NEXT: ;;#ASMEND
1643; GFX942-NEXT: s_nop 0
1644; GFX942-NEXT: v_mov_b32_e32 v2, v4
1645; GFX942-NEXT: v_mov_b32_e32 v3, v5
1646; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
1647; GFX942-NEXT: s_waitcnt vmcnt(0)
1648; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001649 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1650 %vec1 = call <3 x i64> asm "; def $0", "=v"()
1651 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 0, i32 4>
1652 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1653 ret void
1654}
1655
1656define void @v_shuffle_v2i64_v3i64__1_4(ptr addrspace(1) inreg %ptr) {
1657; GFX900-LABEL: v_shuffle_v2i64_v3i64__1_4:
1658; GFX900: ; %bb.0:
1659; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1660; GFX900-NEXT: ;;#ASMSTART
1661; GFX900-NEXT: ; def v[0:5]
1662; GFX900-NEXT: ;;#ASMEND
1663; GFX900-NEXT: ;;#ASMSTART
1664; GFX900-NEXT: ; def v[4:9]
1665; GFX900-NEXT: ;;#ASMEND
1666; GFX900-NEXT: v_mov_b32_e32 v10, 0
1667; GFX900-NEXT: v_mov_b32_e32 v4, v6
1668; GFX900-NEXT: v_mov_b32_e32 v5, v7
1669; GFX900-NEXT: global_store_dwordx4 v10, v[2:5], s[16:17]
1670; GFX900-NEXT: s_waitcnt vmcnt(0)
1671; GFX900-NEXT: s_setpc_b64 s[30:31]
1672;
1673; GFX90A-LABEL: v_shuffle_v2i64_v3i64__1_4:
1674; GFX90A: ; %bb.0:
1675; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1676; GFX90A-NEXT: ;;#ASMSTART
1677; GFX90A-NEXT: ; def v[0:5]
1678; GFX90A-NEXT: ;;#ASMEND
1679; GFX90A-NEXT: ;;#ASMSTART
1680; GFX90A-NEXT: ; def v[4:9]
1681; GFX90A-NEXT: ;;#ASMEND
1682; GFX90A-NEXT: v_mov_b32_e32 v10, 0
1683; GFX90A-NEXT: v_mov_b32_e32 v4, v6
1684; GFX90A-NEXT: v_mov_b32_e32 v5, v7
1685; GFX90A-NEXT: global_store_dwordx4 v10, v[2:5], s[16:17]
1686; GFX90A-NEXT: s_waitcnt vmcnt(0)
1687; GFX90A-NEXT: s_setpc_b64 s[30:31]
1688;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001689; GFX942-LABEL: v_shuffle_v2i64_v3i64__1_4:
1690; GFX942: ; %bb.0:
1691; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1692; GFX942-NEXT: ;;#ASMSTART
1693; GFX942-NEXT: ; def v[0:5]
1694; GFX942-NEXT: ;;#ASMEND
1695; GFX942-NEXT: v_mov_b32_e32 v10, 0
1696; GFX942-NEXT: ;;#ASMSTART
1697; GFX942-NEXT: ; def v[4:9]
1698; GFX942-NEXT: ;;#ASMEND
1699; GFX942-NEXT: s_nop 0
1700; GFX942-NEXT: v_mov_b32_e32 v4, v6
1701; GFX942-NEXT: v_mov_b32_e32 v5, v7
1702; GFX942-NEXT: global_store_dwordx4 v10, v[2:5], s[0:1]
1703; GFX942-NEXT: s_waitcnt vmcnt(0)
1704; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001705 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1706 %vec1 = call <3 x i64> asm "; def $0", "=v"()
1707 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 1, i32 4>
1708 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1709 ret void
1710}
1711
1712define void @v_shuffle_v2i64_v3i64__2_4(ptr addrspace(1) inreg %ptr) {
1713; GFX900-LABEL: v_shuffle_v2i64_v3i64__2_4:
1714; GFX900: ; %bb.0:
1715; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1716; GFX900-NEXT: ;;#ASMSTART
1717; GFX900-NEXT: ; def v[6:11]
1718; GFX900-NEXT: ;;#ASMEND
1719; GFX900-NEXT: v_mov_b32_e32 v12, 0
1720; GFX900-NEXT: ;;#ASMSTART
1721; GFX900-NEXT: ; def v[0:5]
1722; GFX900-NEXT: ;;#ASMEND
1723; GFX900-NEXT: v_mov_b32_e32 v6, v4
1724; GFX900-NEXT: v_mov_b32_e32 v7, v5
1725; GFX900-NEXT: global_store_dwordx4 v12, v[6:9], s[16:17]
1726; GFX900-NEXT: s_waitcnt vmcnt(0)
1727; GFX900-NEXT: s_setpc_b64 s[30:31]
1728;
1729; GFX90A-LABEL: v_shuffle_v2i64_v3i64__2_4:
1730; GFX90A: ; %bb.0:
1731; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1732; GFX90A-NEXT: ;;#ASMSTART
1733; GFX90A-NEXT: ; def v[6:11]
1734; GFX90A-NEXT: ;;#ASMEND
1735; GFX90A-NEXT: v_mov_b32_e32 v12, 0
1736; GFX90A-NEXT: ;;#ASMSTART
1737; GFX90A-NEXT: ; def v[0:5]
1738; GFX90A-NEXT: ;;#ASMEND
1739; GFX90A-NEXT: v_mov_b32_e32 v6, v4
1740; GFX90A-NEXT: v_mov_b32_e32 v7, v5
1741; GFX90A-NEXT: global_store_dwordx4 v12, v[6:9], s[16:17]
1742; GFX90A-NEXT: s_waitcnt vmcnt(0)
1743; GFX90A-NEXT: s_setpc_b64 s[30:31]
1744;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001745; GFX942-LABEL: v_shuffle_v2i64_v3i64__2_4:
1746; GFX942: ; %bb.0:
1747; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1748; GFX942-NEXT: ;;#ASMSTART
1749; GFX942-NEXT: ; def v[6:11]
1750; GFX942-NEXT: ;;#ASMEND
1751; GFX942-NEXT: v_mov_b32_e32 v12, 0
1752; GFX942-NEXT: ;;#ASMSTART
1753; GFX942-NEXT: ; def v[0:5]
1754; GFX942-NEXT: ;;#ASMEND
1755; GFX942-NEXT: s_nop 0
1756; GFX942-NEXT: v_mov_b32_e32 v6, v4
1757; GFX942-NEXT: v_mov_b32_e32 v7, v5
1758; GFX942-NEXT: global_store_dwordx4 v12, v[6:9], s[0:1]
1759; GFX942-NEXT: s_waitcnt vmcnt(0)
1760; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001761 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1762 %vec1 = call <3 x i64> asm "; def $0", "=v"()
1763 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 2, i32 4>
1764 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1765 ret void
1766}
1767
1768define void @v_shuffle_v2i64_v3i64__3_4(ptr addrspace(1) inreg %ptr) {
1769; GFX900-LABEL: v_shuffle_v2i64_v3i64__3_4:
1770; GFX900: ; %bb.0:
1771; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1772; GFX900-NEXT: v_mov_b32_e32 v6, 0
1773; GFX900-NEXT: ;;#ASMSTART
1774; GFX900-NEXT: ; def v[0:5]
1775; GFX900-NEXT: ;;#ASMEND
1776; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1777; GFX900-NEXT: s_waitcnt vmcnt(0)
1778; GFX900-NEXT: s_setpc_b64 s[30:31]
1779;
1780; GFX90A-LABEL: v_shuffle_v2i64_v3i64__3_4:
1781; GFX90A: ; %bb.0:
1782; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1783; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1784; GFX90A-NEXT: ;;#ASMSTART
1785; GFX90A-NEXT: ; def v[0:5]
1786; GFX90A-NEXT: ;;#ASMEND
1787; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
1788; GFX90A-NEXT: s_waitcnt vmcnt(0)
1789; GFX90A-NEXT: s_setpc_b64 s[30:31]
1790;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001791; GFX942-LABEL: v_shuffle_v2i64_v3i64__3_4:
1792; GFX942: ; %bb.0:
1793; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1794; GFX942-NEXT: v_mov_b32_e32 v6, 0
1795; GFX942-NEXT: ;;#ASMSTART
1796; GFX942-NEXT: ; def v[0:5]
1797; GFX942-NEXT: ;;#ASMEND
1798; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
1799; GFX942-NEXT: s_waitcnt vmcnt(0)
1800; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001801 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1802 %vec1 = call <3 x i64> asm "; def $0", "=v"()
1803 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 3, i32 4>
1804 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1805 ret void
1806}
1807
1808define void @v_shuffle_v2i64_v3i64__4_4(ptr addrspace(1) inreg %ptr) {
1809; GFX900-LABEL: v_shuffle_v2i64_v3i64__4_4:
1810; GFX900: ; %bb.0:
1811; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1812; GFX900-NEXT: ;;#ASMSTART
1813; GFX900-NEXT: ; def v[0:5]
1814; GFX900-NEXT: ;;#ASMEND
1815; GFX900-NEXT: v_mov_b32_e32 v6, 0
1816; GFX900-NEXT: v_mov_b32_e32 v4, v2
1817; GFX900-NEXT: v_mov_b32_e32 v5, v3
1818; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], 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_v2i64_v3i64__4_4:
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:5]
1827; GFX90A-NEXT: ;;#ASMEND
1828; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1829; GFX90A-NEXT: v_mov_b32_e32 v4, v2
1830; GFX90A-NEXT: v_mov_b32_e32 v5, v3
1831; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1832; GFX90A-NEXT: s_waitcnt vmcnt(0)
1833; GFX90A-NEXT: s_setpc_b64 s[30:31]
1834;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001835; GFX942-LABEL: v_shuffle_v2i64_v3i64__4_4:
1836; GFX942: ; %bb.0:
1837; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1838; GFX942-NEXT: ;;#ASMSTART
1839; GFX942-NEXT: ; def v[0:5]
1840; GFX942-NEXT: ;;#ASMEND
1841; GFX942-NEXT: v_mov_b32_e32 v6, 0
1842; GFX942-NEXT: v_mov_b32_e32 v4, v2
1843; GFX942-NEXT: v_mov_b32_e32 v5, v3
1844; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
1845; GFX942-NEXT: s_waitcnt vmcnt(0)
1846; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001847 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1848 %vec1 = call <3 x i64> asm "; def $0", "=v"()
1849 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 4>
1850 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1851 ret void
1852}
1853
1854define void @v_shuffle_v2i64_v3i64__u_5(ptr addrspace(1) inreg %ptr) {
1855; GFX900-LABEL: v_shuffle_v2i64_v3i64__u_5:
1856; GFX900: ; %bb.0:
1857; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1858; GFX900-NEXT: v_mov_b32_e32 v6, 0
1859; GFX900-NEXT: ;;#ASMSTART
1860; GFX900-NEXT: ; def v[0:5]
1861; GFX900-NEXT: ;;#ASMEND
1862; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1863; GFX900-NEXT: s_waitcnt vmcnt(0)
1864; GFX900-NEXT: s_setpc_b64 s[30:31]
1865;
1866; GFX90A-LABEL: v_shuffle_v2i64_v3i64__u_5:
1867; GFX90A: ; %bb.0:
1868; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1869; GFX90A-NEXT: v_mov_b32_e32 v6, 0
1870; GFX90A-NEXT: ;;#ASMSTART
1871; GFX90A-NEXT: ; def v[0:5]
1872; GFX90A-NEXT: ;;#ASMEND
1873; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
1874; GFX90A-NEXT: s_waitcnt vmcnt(0)
1875; GFX90A-NEXT: s_setpc_b64 s[30:31]
1876;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001877; GFX942-LABEL: v_shuffle_v2i64_v3i64__u_5:
1878; GFX942: ; %bb.0:
1879; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1880; GFX942-NEXT: v_mov_b32_e32 v6, 0
1881; GFX942-NEXT: ;;#ASMSTART
1882; GFX942-NEXT: ; def v[0:5]
1883; GFX942-NEXT: ;;#ASMEND
1884; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
1885; GFX942-NEXT: s_waitcnt vmcnt(0)
1886; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001887 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1888 %vec1 = call <3 x i64> asm "; def $0", "=v"()
1889 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 poison, i32 5>
1890 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1891 ret void
1892}
1893
1894define void @v_shuffle_v2i64_v3i64__0_5(ptr addrspace(1) inreg %ptr) {
1895; GFX900-LABEL: v_shuffle_v2i64_v3i64__0_5:
1896; GFX900: ; %bb.0:
1897; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1898; GFX900-NEXT: ;;#ASMSTART
1899; GFX900-NEXT: ; def v[0:5]
1900; GFX900-NEXT: ;;#ASMEND
1901; GFX900-NEXT: ;;#ASMSTART
1902; GFX900-NEXT: ; def v[2:7]
1903; GFX900-NEXT: ;;#ASMEND
1904; GFX900-NEXT: v_mov_b32_e32 v8, 0
1905; GFX900-NEXT: v_mov_b32_e32 v2, v6
1906; GFX900-NEXT: v_mov_b32_e32 v3, v7
1907; GFX900-NEXT: global_store_dwordx4 v8, v[0:3], s[16:17]
1908; GFX900-NEXT: s_waitcnt vmcnt(0)
1909; GFX900-NEXT: s_setpc_b64 s[30:31]
1910;
1911; GFX90A-LABEL: v_shuffle_v2i64_v3i64__0_5:
1912; GFX90A: ; %bb.0:
1913; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1914; GFX90A-NEXT: ;;#ASMSTART
1915; GFX90A-NEXT: ; def v[0:5]
1916; GFX90A-NEXT: ;;#ASMEND
1917; GFX90A-NEXT: ;;#ASMSTART
1918; GFX90A-NEXT: ; def v[2:7]
1919; GFX90A-NEXT: ;;#ASMEND
1920; GFX90A-NEXT: v_mov_b32_e32 v8, 0
1921; GFX90A-NEXT: v_mov_b32_e32 v2, v6
1922; GFX90A-NEXT: v_mov_b32_e32 v3, v7
1923; GFX90A-NEXT: global_store_dwordx4 v8, v[0:3], s[16:17]
1924; GFX90A-NEXT: s_waitcnt vmcnt(0)
1925; GFX90A-NEXT: s_setpc_b64 s[30:31]
1926;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001927; GFX942-LABEL: v_shuffle_v2i64_v3i64__0_5:
1928; GFX942: ; %bb.0:
1929; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1930; GFX942-NEXT: ;;#ASMSTART
1931; GFX942-NEXT: ; def v[0:5]
1932; GFX942-NEXT: ;;#ASMEND
1933; GFX942-NEXT: v_mov_b32_e32 v8, 0
1934; GFX942-NEXT: ;;#ASMSTART
1935; GFX942-NEXT: ; def v[2:7]
1936; GFX942-NEXT: ;;#ASMEND
1937; GFX942-NEXT: s_nop 0
1938; GFX942-NEXT: v_mov_b32_e32 v2, v6
1939; GFX942-NEXT: v_mov_b32_e32 v3, v7
1940; GFX942-NEXT: global_store_dwordx4 v8, v[0:3], s[0:1]
1941; GFX942-NEXT: s_waitcnt vmcnt(0)
1942; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001943 %vec0 = call <3 x i64> asm "; def $0", "=v"()
1944 %vec1 = call <3 x i64> asm "; def $0", "=v"()
1945 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 0, i32 5>
1946 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
1947 ret void
1948}
1949
1950define void @v_shuffle_v2i64_v3i64__1_5(ptr addrspace(1) inreg %ptr) {
1951; GFX900-LABEL: v_shuffle_v2i64_v3i64__1_5:
1952; GFX900: ; %bb.0:
1953; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1954; GFX900-NEXT: ;;#ASMSTART
1955; GFX900-NEXT: ; def v[0:5]
1956; GFX900-NEXT: ;;#ASMEND
1957; GFX900-NEXT: ;;#ASMSTART
1958; GFX900-NEXT: ; def v[4:9]
1959; GFX900-NEXT: ;;#ASMEND
1960; GFX900-NEXT: v_mov_b32_e32 v10, 0
1961; GFX900-NEXT: v_mov_b32_e32 v4, v8
1962; GFX900-NEXT: v_mov_b32_e32 v5, v9
1963; GFX900-NEXT: global_store_dwordx4 v10, v[2:5], s[16:17]
1964; GFX900-NEXT: s_waitcnt vmcnt(0)
1965; GFX900-NEXT: s_setpc_b64 s[30:31]
1966;
1967; GFX90A-LABEL: v_shuffle_v2i64_v3i64__1_5:
1968; GFX90A: ; %bb.0:
1969; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1970; GFX90A-NEXT: ;;#ASMSTART
1971; GFX90A-NEXT: ; def v[0:5]
1972; GFX90A-NEXT: ;;#ASMEND
1973; GFX90A-NEXT: ;;#ASMSTART
1974; GFX90A-NEXT: ; def v[4:9]
1975; GFX90A-NEXT: ;;#ASMEND
1976; GFX90A-NEXT: v_mov_b32_e32 v10, 0
1977; GFX90A-NEXT: v_mov_b32_e32 v4, v8
1978; GFX90A-NEXT: v_mov_b32_e32 v5, v9
1979; GFX90A-NEXT: global_store_dwordx4 v10, v[2:5], s[16:17]
1980; GFX90A-NEXT: s_waitcnt vmcnt(0)
1981; GFX90A-NEXT: s_setpc_b64 s[30:31]
1982;
Fabian Rittera33a84e2025-02-13 15:17:12 +01001983; GFX942-LABEL: v_shuffle_v2i64_v3i64__1_5:
1984; GFX942: ; %bb.0:
1985; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1986; GFX942-NEXT: ;;#ASMSTART
1987; GFX942-NEXT: ; def v[0:5]
1988; GFX942-NEXT: ;;#ASMEND
1989; GFX942-NEXT: v_mov_b32_e32 v10, 0
1990; GFX942-NEXT: ;;#ASMSTART
1991; GFX942-NEXT: ; def v[4:9]
1992; GFX942-NEXT: ;;#ASMEND
1993; GFX942-NEXT: s_nop 0
1994; GFX942-NEXT: v_mov_b32_e32 v4, v8
1995; GFX942-NEXT: v_mov_b32_e32 v5, v9
1996; GFX942-NEXT: global_store_dwordx4 v10, v[2:5], s[0:1]
1997; GFX942-NEXT: s_waitcnt vmcnt(0)
1998; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07001999 %vec0 = call <3 x i64> asm "; def $0", "=v"()
2000 %vec1 = call <3 x i64> asm "; def $0", "=v"()
2001 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 1, i32 5>
2002 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
2003 ret void
2004}
2005
2006define void @v_shuffle_v2i64_v3i64__2_5(ptr addrspace(1) inreg %ptr) {
2007; GFX900-LABEL: v_shuffle_v2i64_v3i64__2_5:
2008; GFX900: ; %bb.0:
2009; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2010; GFX900-NEXT: ;;#ASMSTART
2011; GFX900-NEXT: ; def v[6:11]
2012; GFX900-NEXT: ;;#ASMEND
2013; GFX900-NEXT: v_mov_b32_e32 v12, 0
2014; GFX900-NEXT: ;;#ASMSTART
2015; GFX900-NEXT: ; def v[0:5]
2016; GFX900-NEXT: ;;#ASMEND
2017; GFX900-NEXT: v_mov_b32_e32 v8, v4
2018; GFX900-NEXT: v_mov_b32_e32 v9, v5
2019; GFX900-NEXT: global_store_dwordx4 v12, v[8:11], s[16:17]
2020; GFX900-NEXT: s_waitcnt vmcnt(0)
2021; GFX900-NEXT: s_setpc_b64 s[30:31]
2022;
2023; GFX90A-LABEL: v_shuffle_v2i64_v3i64__2_5:
2024; GFX90A: ; %bb.0:
2025; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2026; GFX90A-NEXT: ;;#ASMSTART
2027; GFX90A-NEXT: ; def v[6:11]
2028; GFX90A-NEXT: ;;#ASMEND
2029; GFX90A-NEXT: v_mov_b32_e32 v12, 0
2030; GFX90A-NEXT: ;;#ASMSTART
2031; GFX90A-NEXT: ; def v[0:5]
2032; GFX90A-NEXT: ;;#ASMEND
2033; GFX90A-NEXT: v_mov_b32_e32 v8, v4
2034; GFX90A-NEXT: v_mov_b32_e32 v9, v5
2035; GFX90A-NEXT: global_store_dwordx4 v12, v[8:11], s[16:17]
2036; GFX90A-NEXT: s_waitcnt vmcnt(0)
2037; GFX90A-NEXT: s_setpc_b64 s[30:31]
2038;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002039; GFX942-LABEL: v_shuffle_v2i64_v3i64__2_5:
2040; GFX942: ; %bb.0:
2041; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2042; GFX942-NEXT: ;;#ASMSTART
2043; GFX942-NEXT: ; def v[6:11]
2044; GFX942-NEXT: ;;#ASMEND
2045; GFX942-NEXT: v_mov_b32_e32 v12, 0
2046; GFX942-NEXT: ;;#ASMSTART
2047; GFX942-NEXT: ; def v[0:5]
2048; GFX942-NEXT: ;;#ASMEND
2049; GFX942-NEXT: s_nop 0
2050; GFX942-NEXT: v_mov_b32_e32 v8, v4
2051; GFX942-NEXT: v_mov_b32_e32 v9, v5
2052; GFX942-NEXT: global_store_dwordx4 v12, v[8:11], s[0:1]
2053; GFX942-NEXT: s_waitcnt vmcnt(0)
2054; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002055 %vec0 = call <3 x i64> asm "; def $0", "=v"()
2056 %vec1 = call <3 x i64> asm "; def $0", "=v"()
2057 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 2, i32 5>
2058 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
2059 ret void
2060}
2061
2062define void @v_shuffle_v2i64_v3i64__3_5(ptr addrspace(1) inreg %ptr) {
2063; GFX900-LABEL: v_shuffle_v2i64_v3i64__3_5:
2064; GFX900: ; %bb.0:
2065; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2066; GFX900-NEXT: ;;#ASMSTART
2067; GFX900-NEXT: ; def v[0:5]
2068; GFX900-NEXT: ;;#ASMEND
2069; GFX900-NEXT: v_mov_b32_e32 v6, 0
2070; GFX900-NEXT: v_mov_b32_e32 v2, v4
2071; GFX900-NEXT: v_mov_b32_e32 v3, v5
2072; GFX900-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
2073; GFX900-NEXT: s_waitcnt vmcnt(0)
2074; GFX900-NEXT: s_setpc_b64 s[30:31]
2075;
2076; GFX90A-LABEL: v_shuffle_v2i64_v3i64__3_5:
2077; GFX90A: ; %bb.0:
2078; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2079; GFX90A-NEXT: ;;#ASMSTART
2080; GFX90A-NEXT: ; def v[0:5]
2081; GFX90A-NEXT: ;;#ASMEND
2082; GFX90A-NEXT: v_mov_b32_e32 v6, 0
2083; GFX90A-NEXT: v_mov_b32_e32 v2, v4
2084; GFX90A-NEXT: v_mov_b32_e32 v3, v5
2085; GFX90A-NEXT: global_store_dwordx4 v6, v[0:3], s[16:17]
2086; GFX90A-NEXT: s_waitcnt vmcnt(0)
2087; GFX90A-NEXT: s_setpc_b64 s[30:31]
2088;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002089; GFX942-LABEL: v_shuffle_v2i64_v3i64__3_5:
2090; GFX942: ; %bb.0:
2091; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2092; GFX942-NEXT: ;;#ASMSTART
2093; GFX942-NEXT: ; def v[0:5]
2094; GFX942-NEXT: ;;#ASMEND
2095; GFX942-NEXT: v_mov_b32_e32 v6, 0
2096; GFX942-NEXT: v_mov_b32_e32 v2, v4
2097; GFX942-NEXT: v_mov_b32_e32 v3, v5
2098; GFX942-NEXT: global_store_dwordx4 v6, v[0:3], s[0:1]
2099; GFX942-NEXT: s_waitcnt vmcnt(0)
2100; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002101 %vec0 = call <3 x i64> asm "; def $0", "=v"()
2102 %vec1 = call <3 x i64> asm "; def $0", "=v"()
2103 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 3, i32 5>
2104 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
2105 ret void
2106}
2107
2108define void @v_shuffle_v2i64_v3i64__4_5(ptr addrspace(1) inreg %ptr) {
2109; GFX900-LABEL: v_shuffle_v2i64_v3i64__4_5:
2110; GFX900: ; %bb.0:
2111; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2112; GFX900-NEXT: v_mov_b32_e32 v6, 0
2113; GFX900-NEXT: ;;#ASMSTART
2114; GFX900-NEXT: ; def v[0:5]
2115; GFX900-NEXT: ;;#ASMEND
2116; GFX900-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
2117; GFX900-NEXT: s_waitcnt vmcnt(0)
2118; GFX900-NEXT: s_setpc_b64 s[30:31]
2119;
2120; GFX90A-LABEL: v_shuffle_v2i64_v3i64__4_5:
2121; GFX90A: ; %bb.0:
2122; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2123; GFX90A-NEXT: v_mov_b32_e32 v6, 0
2124; GFX90A-NEXT: ;;#ASMSTART
2125; GFX90A-NEXT: ; def v[0:5]
2126; GFX90A-NEXT: ;;#ASMEND
2127; GFX90A-NEXT: global_store_dwordx4 v6, v[2:5], s[16:17]
2128; GFX90A-NEXT: s_waitcnt vmcnt(0)
2129; GFX90A-NEXT: s_setpc_b64 s[30:31]
2130;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002131; GFX942-LABEL: v_shuffle_v2i64_v3i64__4_5:
2132; GFX942: ; %bb.0:
2133; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2134; GFX942-NEXT: v_mov_b32_e32 v6, 0
2135; GFX942-NEXT: ;;#ASMSTART
2136; GFX942-NEXT: ; def v[0:5]
2137; GFX942-NEXT: ;;#ASMEND
2138; GFX942-NEXT: global_store_dwordx4 v6, v[2:5], s[0:1]
2139; GFX942-NEXT: s_waitcnt vmcnt(0)
2140; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002141 %vec0 = call <3 x i64> asm "; def $0", "=v"()
2142 %vec1 = call <3 x i64> asm "; def $0", "=v"()
2143 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 5>
2144 store <2 x i64> %shuf, ptr addrspace(1) %ptr, align 16
2145 ret void
2146}
2147
2148define void @s_shuffle_v2i64_v3i64__u_u() {
Matt Arsenault585858a2025-01-21 10:34:53 +07002149; GFX9-LABEL: s_shuffle_v2i64_v3i64__u_u:
2150; GFX9: ; %bb.0:
2151; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2152; GFX9-NEXT: ;;#ASMSTART
2153; GFX9-NEXT: ; use s[8:11]
2154; GFX9-NEXT: ;;#ASMEND
2155; GFX9-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002156 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2157 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> poison
Matt Arsenault585858a2025-01-21 10:34:53 +07002158 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002159 ret void
2160}
2161
2162define void @s_shuffle_v2i64_v3i64__0_u() {
2163; GFX900-LABEL: s_shuffle_v2i64_v3i64__0_u:
2164; GFX900: ; %bb.0:
2165; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2166; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002167; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07002168; GFX900-NEXT: ;;#ASMEND
2169; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002170; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002171; GFX900-NEXT: ;;#ASMEND
2172; GFX900-NEXT: s_setpc_b64 s[30:31]
2173;
2174; GFX90A-LABEL: s_shuffle_v2i64_v3i64__0_u:
2175; GFX90A: ; %bb.0:
2176; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2177; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002178; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07002179; GFX90A-NEXT: ;;#ASMEND
2180; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002181; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002182; GFX90A-NEXT: ;;#ASMEND
2183; GFX90A-NEXT: s_setpc_b64 s[30:31]
2184;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002185; GFX942-LABEL: s_shuffle_v2i64_v3i64__0_u:
2186; GFX942: ; %bb.0:
2187; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2188; GFX942-NEXT: ;;#ASMSTART
2189; GFX942-NEXT: ; def s[8:13]
2190; GFX942-NEXT: ;;#ASMEND
2191; GFX942-NEXT: s_nop 0
2192; GFX942-NEXT: ;;#ASMSTART
2193; GFX942-NEXT: ; use s[8:11]
2194; GFX942-NEXT: ;;#ASMEND
2195; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002196 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2197 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 0, i32 poison>
Matt Arsenault585858a2025-01-21 10:34:53 +07002198 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002199 ret void
2200}
2201
2202define void @s_shuffle_v2i64_v3i64__1_u() {
2203; GFX900-LABEL: s_shuffle_v2i64_v3i64__1_u:
2204; GFX900: ; %bb.0:
2205; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2206; GFX900-NEXT: ;;#ASMSTART
2207; GFX900-NEXT: ; def s[4:9]
2208; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002209; GFX900-NEXT: s_mov_b32 s8, s6
2210; GFX900-NEXT: s_mov_b32 s9, s7
Matt Arsenault77862662025-01-21 10:08:42 +07002211; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002212; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002213; GFX900-NEXT: ;;#ASMEND
2214; GFX900-NEXT: s_setpc_b64 s[30:31]
2215;
2216; GFX90A-LABEL: s_shuffle_v2i64_v3i64__1_u:
2217; GFX90A: ; %bb.0:
2218; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2219; GFX90A-NEXT: ;;#ASMSTART
2220; GFX90A-NEXT: ; def s[4:9]
2221; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002222; GFX90A-NEXT: s_mov_b32 s8, s6
2223; GFX90A-NEXT: s_mov_b32 s9, s7
Matt Arsenault77862662025-01-21 10:08:42 +07002224; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002225; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002226; GFX90A-NEXT: ;;#ASMEND
2227; GFX90A-NEXT: s_setpc_b64 s[30:31]
2228;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002229; GFX942-LABEL: s_shuffle_v2i64_v3i64__1_u:
2230; GFX942: ; %bb.0:
2231; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2232; GFX942-NEXT: ;;#ASMSTART
2233; GFX942-NEXT: ; def s[0:5]
2234; GFX942-NEXT: ;;#ASMEND
2235; GFX942-NEXT: s_mov_b32 s8, s2
2236; GFX942-NEXT: s_mov_b32 s9, s3
2237; GFX942-NEXT: ;;#ASMSTART
2238; GFX942-NEXT: ; use s[8:11]
2239; GFX942-NEXT: ;;#ASMEND
2240; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002241 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2242 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 1, i32 poison>
Matt Arsenault585858a2025-01-21 10:34:53 +07002243 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002244 ret void
2245}
2246
2247define void @s_shuffle_v2i64_v3i64__2_u() {
2248; GFX900-LABEL: s_shuffle_v2i64_v3i64__2_u:
2249; GFX900: ; %bb.0:
2250; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2251; GFX900-NEXT: ;;#ASMSTART
2252; GFX900-NEXT: ; def s[4:9]
2253; GFX900-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07002254; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002255; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002256; GFX900-NEXT: ;;#ASMEND
2257; GFX900-NEXT: s_setpc_b64 s[30:31]
2258;
2259; GFX90A-LABEL: s_shuffle_v2i64_v3i64__2_u:
2260; GFX90A: ; %bb.0:
2261; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2262; GFX90A-NEXT: ;;#ASMSTART
2263; GFX90A-NEXT: ; def s[4:9]
2264; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07002265; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002266; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002267; GFX90A-NEXT: ;;#ASMEND
2268; GFX90A-NEXT: s_setpc_b64 s[30:31]
2269;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002270; GFX942-LABEL: s_shuffle_v2i64_v3i64__2_u:
2271; GFX942: ; %bb.0:
2272; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2273; GFX942-NEXT: ;;#ASMSTART
2274; GFX942-NEXT: ; def s[0:5]
2275; GFX942-NEXT: ;;#ASMEND
2276; GFX942-NEXT: s_mov_b32 s8, s4
2277; GFX942-NEXT: s_mov_b32 s9, s5
2278; GFX942-NEXT: ;;#ASMSTART
2279; GFX942-NEXT: ; use s[8:11]
2280; GFX942-NEXT: ;;#ASMEND
2281; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002282 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2283 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 poison>
Matt Arsenault585858a2025-01-21 10:34:53 +07002284 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002285 ret void
2286}
2287
2288define void @s_shuffle_v2i64_v3i64__3_u() {
Matt Arsenault585858a2025-01-21 10:34:53 +07002289; GFX9-LABEL: s_shuffle_v2i64_v3i64__3_u:
2290; GFX9: ; %bb.0:
2291; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2292; GFX9-NEXT: ;;#ASMSTART
2293; GFX9-NEXT: ; use s[8:11]
2294; GFX9-NEXT: ;;#ASMEND
2295; GFX9-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002296 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2297 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 3, i32 poison>
Matt Arsenault585858a2025-01-21 10:34:53 +07002298 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002299 ret void
2300}
2301
2302define void @s_shuffle_v2i64_v3i64__4_u() {
2303; GFX900-LABEL: s_shuffle_v2i64_v3i64__4_u:
2304; GFX900: ; %bb.0:
2305; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2306; GFX900-NEXT: ;;#ASMSTART
2307; GFX900-NEXT: ; def s[4:9]
2308; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002309; GFX900-NEXT: s_mov_b32 s8, s6
2310; GFX900-NEXT: s_mov_b32 s9, s7
Matt Arsenault77862662025-01-21 10:08:42 +07002311; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002312; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002313; GFX900-NEXT: ;;#ASMEND
2314; GFX900-NEXT: s_setpc_b64 s[30:31]
2315;
2316; GFX90A-LABEL: s_shuffle_v2i64_v3i64__4_u:
2317; GFX90A: ; %bb.0:
2318; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2319; GFX90A-NEXT: ;;#ASMSTART
2320; GFX90A-NEXT: ; def s[4:9]
2321; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002322; GFX90A-NEXT: s_mov_b32 s8, s6
2323; GFX90A-NEXT: s_mov_b32 s9, s7
Matt Arsenault77862662025-01-21 10:08:42 +07002324; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002325; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002326; GFX90A-NEXT: ;;#ASMEND
2327; GFX90A-NEXT: s_setpc_b64 s[30:31]
2328;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002329; GFX942-LABEL: s_shuffle_v2i64_v3i64__4_u:
2330; GFX942: ; %bb.0:
2331; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2332; GFX942-NEXT: ;;#ASMSTART
2333; GFX942-NEXT: ; def s[0:5]
2334; GFX942-NEXT: ;;#ASMEND
2335; GFX942-NEXT: s_mov_b32 s8, s2
2336; GFX942-NEXT: s_mov_b32 s9, s3
2337; GFX942-NEXT: ;;#ASMSTART
2338; GFX942-NEXT: ; use s[8:11]
2339; GFX942-NEXT: ;;#ASMEND
2340; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002341 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2342 %vec1 = call <3 x i64> asm "; def $0", "=s"()
2343 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 poison>
Matt Arsenault585858a2025-01-21 10:34:53 +07002344 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002345 ret void
2346}
2347
2348define void @s_shuffle_v2i64_v3i64__5_u() {
2349; GFX900-LABEL: s_shuffle_v2i64_v3i64__5_u:
2350; GFX900: ; %bb.0:
2351; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2352; GFX900-NEXT: ;;#ASMSTART
2353; GFX900-NEXT: ; def s[4:9]
2354; GFX900-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07002355; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002356; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002357; GFX900-NEXT: ;;#ASMEND
2358; GFX900-NEXT: s_setpc_b64 s[30:31]
2359;
2360; GFX90A-LABEL: s_shuffle_v2i64_v3i64__5_u:
2361; GFX90A: ; %bb.0:
2362; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2363; GFX90A-NEXT: ;;#ASMSTART
2364; GFX90A-NEXT: ; def s[4:9]
2365; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07002366; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002367; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002368; GFX90A-NEXT: ;;#ASMEND
2369; GFX90A-NEXT: s_setpc_b64 s[30:31]
2370;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002371; GFX942-LABEL: s_shuffle_v2i64_v3i64__5_u:
2372; GFX942: ; %bb.0:
2373; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2374; GFX942-NEXT: ;;#ASMSTART
2375; GFX942-NEXT: ; def s[0:5]
2376; GFX942-NEXT: ;;#ASMEND
2377; GFX942-NEXT: s_mov_b32 s8, s4
2378; GFX942-NEXT: s_mov_b32 s9, s5
2379; GFX942-NEXT: ;;#ASMSTART
2380; GFX942-NEXT: ; use s[8:11]
2381; GFX942-NEXT: ;;#ASMEND
2382; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002383 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2384 %vec1 = call <3 x i64> asm "; def $0", "=s"()
2385 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 poison>
Matt Arsenault585858a2025-01-21 10:34:53 +07002386 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002387 ret void
2388}
2389
2390define void @s_shuffle_v2i64_v3i64__5_0() {
2391; GFX900-LABEL: s_shuffle_v2i64_v3i64__5_0:
2392; GFX900: ; %bb.0:
2393; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2394; GFX900-NEXT: ;;#ASMSTART
2395; GFX900-NEXT: ; def s[4:9]
2396; GFX900-NEXT: ;;#ASMEND
2397; GFX900-NEXT: ;;#ASMSTART
2398; GFX900-NEXT: ; def s[8:13]
2399; GFX900-NEXT: ;;#ASMEND
2400; GFX900-NEXT: s_mov_b32 s8, s12
2401; GFX900-NEXT: s_mov_b32 s9, s13
2402; GFX900-NEXT: s_mov_b32 s10, s4
2403; GFX900-NEXT: s_mov_b32 s11, s5
2404; GFX900-NEXT: ;;#ASMSTART
2405; GFX900-NEXT: ; use s[8:11]
2406; GFX900-NEXT: ;;#ASMEND
2407; GFX900-NEXT: s_setpc_b64 s[30:31]
2408;
2409; GFX90A-LABEL: s_shuffle_v2i64_v3i64__5_0:
2410; GFX90A: ; %bb.0:
2411; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2412; GFX90A-NEXT: ;;#ASMSTART
2413; GFX90A-NEXT: ; def s[4:9]
2414; GFX90A-NEXT: ;;#ASMEND
2415; GFX90A-NEXT: ;;#ASMSTART
2416; GFX90A-NEXT: ; def s[8:13]
2417; GFX90A-NEXT: ;;#ASMEND
2418; GFX90A-NEXT: s_mov_b32 s8, s12
2419; GFX90A-NEXT: s_mov_b32 s9, s13
2420; GFX90A-NEXT: s_mov_b32 s10, s4
2421; GFX90A-NEXT: s_mov_b32 s11, s5
2422; GFX90A-NEXT: ;;#ASMSTART
2423; GFX90A-NEXT: ; use s[8:11]
2424; GFX90A-NEXT: ;;#ASMEND
2425; GFX90A-NEXT: s_setpc_b64 s[30:31]
2426;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002427; GFX942-LABEL: s_shuffle_v2i64_v3i64__5_0:
2428; GFX942: ; %bb.0:
2429; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2430; GFX942-NEXT: ;;#ASMSTART
2431; GFX942-NEXT: ; def s[0:5]
2432; GFX942-NEXT: ;;#ASMEND
2433; GFX942-NEXT: s_mov_b32 s10, s0
2434; GFX942-NEXT: ;;#ASMSTART
2435; GFX942-NEXT: ; def s[4:9]
2436; GFX942-NEXT: ;;#ASMEND
2437; GFX942-NEXT: s_mov_b32 s11, s1
2438; GFX942-NEXT: ;;#ASMSTART
2439; GFX942-NEXT: ; use s[8:11]
2440; GFX942-NEXT: ;;#ASMEND
2441; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002442 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2443 %vec1 = call <3 x i64> asm "; def $0", "=s"()
2444 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 0>
Matt Arsenault585858a2025-01-21 10:34:53 +07002445 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002446 ret void
2447}
2448
2449define void @s_shuffle_v2i64_v3i64__5_1() {
2450; GFX900-LABEL: s_shuffle_v2i64_v3i64__5_1:
2451; GFX900: ; %bb.0:
2452; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2453; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002454; GFX900-NEXT: ; def s[8:13]
2455; GFX900-NEXT: ;;#ASMEND
2456; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07002457; GFX900-NEXT: ; def s[4:9]
2458; GFX900-NEXT: ;;#ASMEND
2459; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002460; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002461; GFX900-NEXT: ;;#ASMEND
2462; GFX900-NEXT: s_setpc_b64 s[30:31]
2463;
2464; GFX90A-LABEL: s_shuffle_v2i64_v3i64__5_1:
2465; GFX90A: ; %bb.0:
2466; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2467; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002468; GFX90A-NEXT: ; def s[8:13]
2469; GFX90A-NEXT: ;;#ASMEND
2470; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07002471; GFX90A-NEXT: ; def s[4:9]
2472; GFX90A-NEXT: ;;#ASMEND
2473; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002474; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002475; GFX90A-NEXT: ;;#ASMEND
2476; GFX90A-NEXT: s_setpc_b64 s[30:31]
2477;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002478; GFX942-LABEL: s_shuffle_v2i64_v3i64__5_1:
2479; GFX942: ; %bb.0:
2480; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2481; GFX942-NEXT: ;;#ASMSTART
2482; GFX942-NEXT: ; def s[8:13]
2483; GFX942-NEXT: ;;#ASMEND
2484; GFX942-NEXT: ;;#ASMSTART
2485; GFX942-NEXT: ; def s[0:5]
2486; GFX942-NEXT: ;;#ASMEND
2487; GFX942-NEXT: s_mov_b32 s8, s4
2488; GFX942-NEXT: s_mov_b32 s9, s5
2489; GFX942-NEXT: ;;#ASMSTART
2490; GFX942-NEXT: ; use s[8:11]
2491; GFX942-NEXT: ;;#ASMEND
2492; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002493 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2494 %vec1 = call <3 x i64> asm "; def $0", "=s"()
2495 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 1>
Matt Arsenault585858a2025-01-21 10:34:53 +07002496 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002497 ret void
2498}
2499
2500define void @s_shuffle_v2i64_v3i64__5_2() {
2501; GFX900-LABEL: s_shuffle_v2i64_v3i64__5_2:
2502; GFX900: ; %bb.0:
2503; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2504; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002505; GFX900-NEXT: ; def s[8:13]
2506; GFX900-NEXT: ;;#ASMEND
2507; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07002508; GFX900-NEXT: ; def s[4:9]
2509; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002510; GFX900-NEXT: s_mov_b32 s10, s12
2511; GFX900-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07002512; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002513; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002514; GFX900-NEXT: ;;#ASMEND
2515; GFX900-NEXT: s_setpc_b64 s[30:31]
2516;
2517; GFX90A-LABEL: s_shuffle_v2i64_v3i64__5_2:
2518; GFX90A: ; %bb.0:
2519; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2520; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002521; GFX90A-NEXT: ; def s[8:13]
2522; GFX90A-NEXT: ;;#ASMEND
2523; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07002524; GFX90A-NEXT: ; def s[4:9]
2525; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002526; GFX90A-NEXT: s_mov_b32 s10, s12
2527; GFX90A-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07002528; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002529; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002530; GFX90A-NEXT: ;;#ASMEND
2531; GFX90A-NEXT: s_setpc_b64 s[30:31]
2532;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002533; GFX942-LABEL: s_shuffle_v2i64_v3i64__5_2:
2534; GFX942: ; %bb.0:
2535; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2536; GFX942-NEXT: ;;#ASMSTART
2537; GFX942-NEXT: ; def s[8:13]
2538; GFX942-NEXT: ;;#ASMEND
2539; GFX942-NEXT: ;;#ASMSTART
2540; GFX942-NEXT: ; def s[0:5]
2541; GFX942-NEXT: ;;#ASMEND
2542; GFX942-NEXT: s_mov_b32 s8, s12
2543; GFX942-NEXT: s_mov_b32 s9, s13
2544; GFX942-NEXT: s_mov_b32 s10, s4
2545; GFX942-NEXT: s_mov_b32 s11, s5
2546; GFX942-NEXT: ;;#ASMSTART
2547; GFX942-NEXT: ; use s[8:11]
2548; GFX942-NEXT: ;;#ASMEND
2549; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002550 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2551 %vec1 = call <3 x i64> asm "; def $0", "=s"()
2552 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 2>
Matt Arsenault585858a2025-01-21 10:34:53 +07002553 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002554 ret void
2555}
2556
2557define void @s_shuffle_v2i64_v3i64__5_3() {
2558; GFX900-LABEL: s_shuffle_v2i64_v3i64__5_3:
2559; GFX900: ; %bb.0:
2560; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2561; GFX900-NEXT: ;;#ASMSTART
2562; GFX900-NEXT: ; def s[4:9]
2563; GFX900-NEXT: ;;#ASMEND
2564; GFX900-NEXT: s_mov_b32 s10, s4
2565; GFX900-NEXT: s_mov_b32 s11, s5
2566; GFX900-NEXT: ;;#ASMSTART
2567; GFX900-NEXT: ; use s[8:11]
2568; GFX900-NEXT: ;;#ASMEND
2569; GFX900-NEXT: s_setpc_b64 s[30:31]
2570;
2571; GFX90A-LABEL: s_shuffle_v2i64_v3i64__5_3:
2572; GFX90A: ; %bb.0:
2573; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2574; GFX90A-NEXT: ;;#ASMSTART
2575; GFX90A-NEXT: ; def s[4:9]
2576; GFX90A-NEXT: ;;#ASMEND
2577; GFX90A-NEXT: s_mov_b32 s10, s4
2578; GFX90A-NEXT: s_mov_b32 s11, s5
2579; GFX90A-NEXT: ;;#ASMSTART
2580; GFX90A-NEXT: ; use s[8:11]
2581; GFX90A-NEXT: ;;#ASMEND
2582; GFX90A-NEXT: s_setpc_b64 s[30:31]
2583;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002584; GFX942-LABEL: s_shuffle_v2i64_v3i64__5_3:
2585; GFX942: ; %bb.0:
2586; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2587; GFX942-NEXT: ;;#ASMSTART
2588; GFX942-NEXT: ; def s[0:5]
2589; GFX942-NEXT: ;;#ASMEND
2590; GFX942-NEXT: s_mov_b32 s8, s4
2591; GFX942-NEXT: s_mov_b32 s9, s5
2592; GFX942-NEXT: s_mov_b32 s10, s0
2593; GFX942-NEXT: s_mov_b32 s11, s1
2594; GFX942-NEXT: ;;#ASMSTART
2595; GFX942-NEXT: ; use s[8:11]
2596; GFX942-NEXT: ;;#ASMEND
2597; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002598 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2599 %vec1 = call <3 x i64> asm "; def $0", "=s"()
2600 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 3>
Matt Arsenault585858a2025-01-21 10:34:53 +07002601 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002602 ret void
2603}
2604
2605define void @s_shuffle_v2i64_v3i64__5_4() {
Matt Arsenault585858a2025-01-21 10:34:53 +07002606; GFX9-LABEL: s_shuffle_v2i64_v3i64__5_4:
2607; GFX9: ; %bb.0:
2608; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2609; GFX9-NEXT: ;;#ASMSTART
2610; GFX9-NEXT: ; def s[8:13]
2611; GFX9-NEXT: ;;#ASMEND
2612; GFX9-NEXT: s_mov_b32 s8, s12
2613; GFX9-NEXT: s_mov_b32 s9, s13
2614; GFX9-NEXT: ;;#ASMSTART
2615; GFX9-NEXT: ; use s[8:11]
2616; GFX9-NEXT: ;;#ASMEND
2617; GFX9-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002618 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2619 %vec1 = call <3 x i64> asm "; def $0", "=s"()
2620 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 4>
Matt Arsenault585858a2025-01-21 10:34:53 +07002621 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002622 ret void
2623}
2624
2625define void @s_shuffle_v2i64_v3i64__5_5() {
2626; GFX900-LABEL: s_shuffle_v2i64_v3i64__5_5:
2627; GFX900: ; %bb.0:
2628; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2629; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002630; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07002631; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002632; GFX900-NEXT: s_mov_b32 s8, s12
2633; GFX900-NEXT: s_mov_b32 s9, s13
2634; GFX900-NEXT: s_mov_b32 s10, s12
2635; GFX900-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07002636; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002637; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002638; GFX900-NEXT: ;;#ASMEND
2639; GFX900-NEXT: s_setpc_b64 s[30:31]
2640;
2641; GFX90A-LABEL: s_shuffle_v2i64_v3i64__5_5:
2642; GFX90A: ; %bb.0:
2643; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2644; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002645; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07002646; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002647; GFX90A-NEXT: s_mov_b32 s8, s12
2648; GFX90A-NEXT: s_mov_b32 s9, s13
2649; GFX90A-NEXT: s_mov_b32 s10, s12
2650; GFX90A-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07002651; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002652; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002653; GFX90A-NEXT: ;;#ASMEND
2654; GFX90A-NEXT: s_setpc_b64 s[30:31]
2655;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002656; GFX942-LABEL: s_shuffle_v2i64_v3i64__5_5:
2657; GFX942: ; %bb.0:
2658; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2659; GFX942-NEXT: ;;#ASMSTART
2660; GFX942-NEXT: ; def s[0:5]
2661; GFX942-NEXT: ;;#ASMEND
2662; GFX942-NEXT: s_mov_b32 s8, s4
2663; GFX942-NEXT: s_mov_b32 s9, s5
2664; GFX942-NEXT: s_mov_b32 s10, s4
2665; GFX942-NEXT: s_mov_b32 s11, s5
2666; GFX942-NEXT: ;;#ASMSTART
2667; GFX942-NEXT: ; use s[8:11]
2668; GFX942-NEXT: ;;#ASMEND
2669; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002670 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2671 %vec1 = call <3 x i64> asm "; def $0", "=s"()
2672 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 5, i32 5>
Matt Arsenault585858a2025-01-21 10:34:53 +07002673 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002674 ret void
2675}
2676
2677define void @s_shuffle_v2i64_v3i64__u_0() {
2678; GFX900-LABEL: s_shuffle_v2i64_v3i64__u_0:
2679; GFX900: ; %bb.0:
2680; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2681; GFX900-NEXT: ;;#ASMSTART
2682; GFX900-NEXT: ; def s[4:9]
2683; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002684; GFX900-NEXT: s_mov_b32 s10, s4
2685; GFX900-NEXT: s_mov_b32 s11, s5
Matt Arsenault77862662025-01-21 10:08:42 +07002686; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002687; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002688; GFX900-NEXT: ;;#ASMEND
2689; GFX900-NEXT: s_setpc_b64 s[30:31]
2690;
2691; GFX90A-LABEL: s_shuffle_v2i64_v3i64__u_0:
2692; GFX90A: ; %bb.0:
2693; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2694; GFX90A-NEXT: ;;#ASMSTART
2695; GFX90A-NEXT: ; def s[4:9]
2696; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002697; GFX90A-NEXT: s_mov_b32 s10, s4
2698; GFX90A-NEXT: s_mov_b32 s11, s5
Matt Arsenault77862662025-01-21 10:08:42 +07002699; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002700; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002701; GFX90A-NEXT: ;;#ASMEND
2702; GFX90A-NEXT: s_setpc_b64 s[30:31]
2703;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002704; GFX942-LABEL: s_shuffle_v2i64_v3i64__u_0:
2705; GFX942: ; %bb.0:
2706; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2707; GFX942-NEXT: ;;#ASMSTART
2708; GFX942-NEXT: ; def s[0:5]
2709; GFX942-NEXT: ;;#ASMEND
2710; GFX942-NEXT: s_mov_b32 s10, s0
2711; GFX942-NEXT: s_mov_b32 s11, s1
2712; GFX942-NEXT: ;;#ASMSTART
2713; GFX942-NEXT: ; use s[8:11]
2714; GFX942-NEXT: ;;#ASMEND
2715; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002716 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2717 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 poison, i32 0>
Matt Arsenault585858a2025-01-21 10:34:53 +07002718 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002719 ret void
2720}
2721
2722define void @s_shuffle_v2i64_v3i64__0_0() {
Matt Arsenault585858a2025-01-21 10:34:53 +07002723; GFX9-LABEL: s_shuffle_v2i64_v3i64__0_0:
2724; GFX9: ; %bb.0:
2725; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2726; GFX9-NEXT: ;;#ASMSTART
2727; GFX9-NEXT: ; def s[8:13]
2728; GFX9-NEXT: ;;#ASMEND
2729; GFX9-NEXT: s_mov_b32 s10, s8
2730; GFX9-NEXT: s_mov_b32 s11, s9
2731; GFX9-NEXT: ;;#ASMSTART
2732; GFX9-NEXT: ; use s[8:11]
2733; GFX9-NEXT: ;;#ASMEND
2734; GFX9-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002735 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2736 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> zeroinitializer
Matt Arsenault585858a2025-01-21 10:34:53 +07002737 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002738 ret void
2739}
2740
2741define void @s_shuffle_v2i64_v3i64__1_0() {
2742; GFX900-LABEL: s_shuffle_v2i64_v3i64__1_0:
2743; GFX900: ; %bb.0:
2744; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2745; GFX900-NEXT: ;;#ASMSTART
2746; GFX900-NEXT: ; def s[4:9]
2747; GFX900-NEXT: ;;#ASMEND
2748; GFX900-NEXT: s_mov_b32 s8, s6
2749; GFX900-NEXT: s_mov_b32 s9, s7
2750; GFX900-NEXT: s_mov_b32 s10, s4
2751; GFX900-NEXT: s_mov_b32 s11, s5
2752; GFX900-NEXT: ;;#ASMSTART
2753; GFX900-NEXT: ; use s[8:11]
2754; GFX900-NEXT: ;;#ASMEND
2755; GFX900-NEXT: s_setpc_b64 s[30:31]
2756;
2757; GFX90A-LABEL: s_shuffle_v2i64_v3i64__1_0:
2758; GFX90A: ; %bb.0:
2759; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2760; GFX90A-NEXT: ;;#ASMSTART
2761; GFX90A-NEXT: ; def s[4:9]
2762; GFX90A-NEXT: ;;#ASMEND
2763; GFX90A-NEXT: s_mov_b32 s8, s6
2764; GFX90A-NEXT: s_mov_b32 s9, s7
2765; GFX90A-NEXT: s_mov_b32 s10, s4
2766; GFX90A-NEXT: s_mov_b32 s11, s5
2767; GFX90A-NEXT: ;;#ASMSTART
2768; GFX90A-NEXT: ; use s[8:11]
2769; GFX90A-NEXT: ;;#ASMEND
2770; GFX90A-NEXT: s_setpc_b64 s[30:31]
2771;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002772; GFX942-LABEL: s_shuffle_v2i64_v3i64__1_0:
2773; GFX942: ; %bb.0:
2774; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2775; GFX942-NEXT: ;;#ASMSTART
2776; GFX942-NEXT: ; def s[0:5]
2777; GFX942-NEXT: ;;#ASMEND
2778; GFX942-NEXT: s_mov_b32 s8, s2
2779; GFX942-NEXT: s_mov_b32 s9, s3
2780; GFX942-NEXT: s_mov_b32 s10, s0
2781; GFX942-NEXT: s_mov_b32 s11, s1
2782; GFX942-NEXT: ;;#ASMSTART
2783; GFX942-NEXT: ; use s[8:11]
2784; GFX942-NEXT: ;;#ASMEND
2785; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002786 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2787 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 1, i32 0>
Matt Arsenault585858a2025-01-21 10:34:53 +07002788 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002789 ret void
2790}
2791
2792define void @s_shuffle_v2i64_v3i64__2_0() {
2793; GFX900-LABEL: s_shuffle_v2i64_v3i64__2_0:
2794; GFX900: ; %bb.0:
2795; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2796; GFX900-NEXT: ;;#ASMSTART
2797; GFX900-NEXT: ; def s[4:9]
2798; GFX900-NEXT: ;;#ASMEND
2799; GFX900-NEXT: s_mov_b32 s10, s4
2800; GFX900-NEXT: s_mov_b32 s11, s5
2801; GFX900-NEXT: ;;#ASMSTART
2802; GFX900-NEXT: ; use s[8:11]
2803; GFX900-NEXT: ;;#ASMEND
2804; GFX900-NEXT: s_setpc_b64 s[30:31]
2805;
2806; GFX90A-LABEL: s_shuffle_v2i64_v3i64__2_0:
2807; GFX90A: ; %bb.0:
2808; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2809; GFX90A-NEXT: ;;#ASMSTART
2810; GFX90A-NEXT: ; def s[4:9]
2811; GFX90A-NEXT: ;;#ASMEND
2812; GFX90A-NEXT: s_mov_b32 s10, s4
2813; GFX90A-NEXT: s_mov_b32 s11, s5
2814; GFX90A-NEXT: ;;#ASMSTART
2815; GFX90A-NEXT: ; use s[8:11]
2816; GFX90A-NEXT: ;;#ASMEND
2817; GFX90A-NEXT: s_setpc_b64 s[30:31]
2818;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002819; GFX942-LABEL: s_shuffle_v2i64_v3i64__2_0:
2820; GFX942: ; %bb.0:
2821; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2822; GFX942-NEXT: ;;#ASMSTART
2823; GFX942-NEXT: ; def s[0:5]
2824; GFX942-NEXT: ;;#ASMEND
2825; GFX942-NEXT: s_mov_b32 s8, s4
2826; GFX942-NEXT: s_mov_b32 s9, s5
2827; GFX942-NEXT: s_mov_b32 s10, s0
2828; GFX942-NEXT: s_mov_b32 s11, s1
2829; GFX942-NEXT: ;;#ASMSTART
2830; GFX942-NEXT: ; use s[8:11]
2831; GFX942-NEXT: ;;#ASMEND
2832; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002833 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2834 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 0>
Matt Arsenault585858a2025-01-21 10:34:53 +07002835 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002836 ret void
2837}
2838
2839define void @s_shuffle_v2i64_v3i64__3_0() {
2840; GFX900-LABEL: s_shuffle_v2i64_v3i64__3_0:
2841; GFX900: ; %bb.0:
2842; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2843; GFX900-NEXT: ;;#ASMSTART
2844; GFX900-NEXT: ; def s[4:9]
2845; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002846; GFX900-NEXT: s_mov_b32 s10, s4
2847; GFX900-NEXT: s_mov_b32 s11, s5
Matt Arsenault77862662025-01-21 10:08:42 +07002848; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002849; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002850; GFX900-NEXT: ;;#ASMEND
2851; GFX900-NEXT: s_setpc_b64 s[30:31]
2852;
2853; GFX90A-LABEL: s_shuffle_v2i64_v3i64__3_0:
2854; GFX90A: ; %bb.0:
2855; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2856; GFX90A-NEXT: ;;#ASMSTART
2857; GFX90A-NEXT: ; def s[4:9]
2858; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07002859; GFX90A-NEXT: s_mov_b32 s10, s4
2860; GFX90A-NEXT: s_mov_b32 s11, s5
Matt Arsenault77862662025-01-21 10:08:42 +07002861; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002862; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002863; GFX90A-NEXT: ;;#ASMEND
2864; GFX90A-NEXT: s_setpc_b64 s[30:31]
2865;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002866; GFX942-LABEL: s_shuffle_v2i64_v3i64__3_0:
2867; GFX942: ; %bb.0:
2868; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2869; GFX942-NEXT: ;;#ASMSTART
2870; GFX942-NEXT: ; def s[0:5]
2871; GFX942-NEXT: ;;#ASMEND
2872; GFX942-NEXT: s_mov_b32 s10, s0
2873; GFX942-NEXT: s_mov_b32 s11, s1
2874; GFX942-NEXT: ;;#ASMSTART
2875; GFX942-NEXT: ; use s[8:11]
2876; GFX942-NEXT: ;;#ASMEND
2877; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002878 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2879 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 3, i32 0>
Matt Arsenault585858a2025-01-21 10:34:53 +07002880 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002881 ret void
2882}
2883
2884define void @s_shuffle_v2i64_v3i64__4_0() {
2885; GFX900-LABEL: s_shuffle_v2i64_v3i64__4_0:
2886; GFX900: ; %bb.0:
2887; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2888; GFX900-NEXT: ;;#ASMSTART
2889; GFX900-NEXT: ; def s[4:9]
2890; GFX900-NEXT: ;;#ASMEND
2891; GFX900-NEXT: ;;#ASMSTART
2892; GFX900-NEXT: ; def s[8:13]
2893; GFX900-NEXT: ;;#ASMEND
2894; GFX900-NEXT: s_mov_b32 s8, s10
2895; GFX900-NEXT: s_mov_b32 s9, s11
2896; GFX900-NEXT: s_mov_b32 s10, s4
2897; GFX900-NEXT: s_mov_b32 s11, s5
2898; GFX900-NEXT: ;;#ASMSTART
2899; GFX900-NEXT: ; use s[8:11]
2900; GFX900-NEXT: ;;#ASMEND
2901; GFX900-NEXT: s_setpc_b64 s[30:31]
2902;
2903; GFX90A-LABEL: s_shuffle_v2i64_v3i64__4_0:
2904; GFX90A: ; %bb.0:
2905; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2906; GFX90A-NEXT: ;;#ASMSTART
2907; GFX90A-NEXT: ; def s[4:9]
2908; GFX90A-NEXT: ;;#ASMEND
2909; GFX90A-NEXT: ;;#ASMSTART
2910; GFX90A-NEXT: ; def s[8:13]
2911; GFX90A-NEXT: ;;#ASMEND
2912; GFX90A-NEXT: s_mov_b32 s8, s10
2913; GFX90A-NEXT: s_mov_b32 s9, s11
2914; GFX90A-NEXT: s_mov_b32 s10, s4
2915; GFX90A-NEXT: s_mov_b32 s11, s5
2916; GFX90A-NEXT: ;;#ASMSTART
2917; GFX90A-NEXT: ; use s[8:11]
2918; GFX90A-NEXT: ;;#ASMEND
2919; GFX90A-NEXT: s_setpc_b64 s[30:31]
2920;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002921; GFX942-LABEL: s_shuffle_v2i64_v3i64__4_0:
2922; GFX942: ; %bb.0:
2923; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2924; GFX942-NEXT: ;;#ASMSTART
2925; GFX942-NEXT: ; def s[0:5]
2926; GFX942-NEXT: ;;#ASMEND
2927; GFX942-NEXT: s_mov_b32 s10, s0
2928; GFX942-NEXT: ;;#ASMSTART
2929; GFX942-NEXT: ; def s[4:9]
2930; GFX942-NEXT: ;;#ASMEND
2931; GFX942-NEXT: s_mov_b32 s8, s6
2932; GFX942-NEXT: s_mov_b32 s9, s7
2933; GFX942-NEXT: s_mov_b32 s11, s1
2934; GFX942-NEXT: ;;#ASMSTART
2935; GFX942-NEXT: ; use s[8:11]
2936; GFX942-NEXT: ;;#ASMEND
2937; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002938 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2939 %vec1 = call <3 x i64> asm "; def $0", "=s"()
2940 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 0>
Matt Arsenault585858a2025-01-21 10:34:53 +07002941 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002942 ret void
2943}
2944
2945define void @s_shuffle_v2i64_v3i64__u_1() {
2946; GFX900-LABEL: s_shuffle_v2i64_v3i64__u_1:
2947; GFX900: ; %bb.0:
2948; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2949; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002950; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07002951; GFX900-NEXT: ;;#ASMEND
2952; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002953; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002954; GFX900-NEXT: ;;#ASMEND
2955; GFX900-NEXT: s_setpc_b64 s[30:31]
2956;
2957; GFX90A-LABEL: s_shuffle_v2i64_v3i64__u_1:
2958; GFX90A: ; %bb.0:
2959; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2960; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002961; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07002962; GFX90A-NEXT: ;;#ASMEND
2963; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002964; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002965; GFX90A-NEXT: ;;#ASMEND
2966; GFX90A-NEXT: s_setpc_b64 s[30:31]
2967;
Fabian Rittera33a84e2025-02-13 15:17:12 +01002968; GFX942-LABEL: s_shuffle_v2i64_v3i64__u_1:
2969; GFX942: ; %bb.0:
2970; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2971; GFX942-NEXT: ;;#ASMSTART
2972; GFX942-NEXT: ; def s[8:13]
2973; GFX942-NEXT: ;;#ASMEND
2974; GFX942-NEXT: s_nop 0
2975; GFX942-NEXT: ;;#ASMSTART
2976; GFX942-NEXT: ; use s[8:11]
2977; GFX942-NEXT: ;;#ASMEND
2978; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07002979 %vec0 = call <3 x i64> asm "; def $0", "=s"()
2980 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 poison, i32 1>
Matt Arsenault585858a2025-01-21 10:34:53 +07002981 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07002982 ret void
2983}
2984
2985define void @s_shuffle_v2i64_v3i64__0_1() {
2986; GFX900-LABEL: s_shuffle_v2i64_v3i64__0_1:
2987; GFX900: ; %bb.0:
2988; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2989; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002990; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07002991; GFX900-NEXT: ;;#ASMEND
2992; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07002993; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07002994; GFX900-NEXT: ;;#ASMEND
2995; GFX900-NEXT: s_setpc_b64 s[30:31]
2996;
2997; GFX90A-LABEL: s_shuffle_v2i64_v3i64__0_1:
2998; GFX90A: ; %bb.0:
2999; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3000; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003001; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003002; GFX90A-NEXT: ;;#ASMEND
3003; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003004; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003005; GFX90A-NEXT: ;;#ASMEND
3006; GFX90A-NEXT: s_setpc_b64 s[30:31]
3007;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003008; GFX942-LABEL: s_shuffle_v2i64_v3i64__0_1:
3009; GFX942: ; %bb.0:
3010; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3011; GFX942-NEXT: ;;#ASMSTART
3012; GFX942-NEXT: ; def s[8:13]
3013; GFX942-NEXT: ;;#ASMEND
3014; GFX942-NEXT: s_nop 0
3015; GFX942-NEXT: ;;#ASMSTART
3016; GFX942-NEXT: ; use s[8:11]
3017; GFX942-NEXT: ;;#ASMEND
3018; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003019 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3020 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 0, i32 1>
Matt Arsenault585858a2025-01-21 10:34:53 +07003021 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003022 ret void
3023}
3024
3025define void @s_shuffle_v2i64_v3i64__1_1() {
Matt Arsenault585858a2025-01-21 10:34:53 +07003026; GFX9-LABEL: s_shuffle_v2i64_v3i64__1_1:
3027; GFX9: ; %bb.0:
3028; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3029; GFX9-NEXT: ;;#ASMSTART
3030; GFX9-NEXT: ; def s[8:13]
3031; GFX9-NEXT: ;;#ASMEND
3032; GFX9-NEXT: s_mov_b32 s8, s10
3033; GFX9-NEXT: s_mov_b32 s9, s11
3034; GFX9-NEXT: ;;#ASMSTART
3035; GFX9-NEXT: ; use s[8:11]
3036; GFX9-NEXT: ;;#ASMEND
3037; GFX9-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003038 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3039 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 1, i32 1>
Matt Arsenault585858a2025-01-21 10:34:53 +07003040 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003041 ret void
3042}
3043
3044define void @s_shuffle_v2i64_v3i64__2_1() {
Matt Arsenault585858a2025-01-21 10:34:53 +07003045; GFX9-LABEL: s_shuffle_v2i64_v3i64__2_1:
3046; GFX9: ; %bb.0:
3047; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3048; GFX9-NEXT: ;;#ASMSTART
3049; GFX9-NEXT: ; def s[8:13]
3050; GFX9-NEXT: ;;#ASMEND
3051; GFX9-NEXT: s_mov_b32 s8, s12
3052; GFX9-NEXT: s_mov_b32 s9, s13
3053; GFX9-NEXT: ;;#ASMSTART
3054; GFX9-NEXT: ; use s[8:11]
3055; GFX9-NEXT: ;;#ASMEND
3056; GFX9-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003057 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3058 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 1>
Matt Arsenault585858a2025-01-21 10:34:53 +07003059 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003060 ret void
3061}
3062
3063define void @s_shuffle_v2i64_v3i64__3_1() {
3064; GFX900-LABEL: s_shuffle_v2i64_v3i64__3_1:
3065; GFX900: ; %bb.0:
3066; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3067; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003068; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003069; GFX900-NEXT: ;;#ASMEND
3070; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003071; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003072; GFX900-NEXT: ;;#ASMEND
3073; GFX900-NEXT: s_setpc_b64 s[30:31]
3074;
3075; GFX90A-LABEL: s_shuffle_v2i64_v3i64__3_1:
3076; GFX90A: ; %bb.0:
3077; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3078; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003079; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003080; GFX90A-NEXT: ;;#ASMEND
3081; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003082; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003083; GFX90A-NEXT: ;;#ASMEND
3084; GFX90A-NEXT: s_setpc_b64 s[30:31]
3085;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003086; GFX942-LABEL: s_shuffle_v2i64_v3i64__3_1:
3087; GFX942: ; %bb.0:
3088; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3089; GFX942-NEXT: ;;#ASMSTART
3090; GFX942-NEXT: ; def s[8:13]
3091; GFX942-NEXT: ;;#ASMEND
3092; GFX942-NEXT: s_nop 0
3093; GFX942-NEXT: ;;#ASMSTART
3094; GFX942-NEXT: ; use s[8:11]
3095; GFX942-NEXT: ;;#ASMEND
3096; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003097 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3098 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 3, i32 1>
Matt Arsenault585858a2025-01-21 10:34:53 +07003099 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003100 ret void
3101}
3102
3103define void @s_shuffle_v2i64_v3i64__4_1() {
3104; GFX900-LABEL: s_shuffle_v2i64_v3i64__4_1:
3105; GFX900: ; %bb.0:
3106; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3107; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07003108; GFX900-NEXT: ; def s[8:13]
3109; GFX900-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07003110; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003111; GFX900-NEXT: ; def s[4:9]
3112; GFX900-NEXT: ;;#ASMEND
3113; GFX900-NEXT: s_mov_b32 s8, s6
3114; GFX900-NEXT: s_mov_b32 s9, s7
3115; GFX900-NEXT: ;;#ASMSTART
3116; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003117; GFX900-NEXT: ;;#ASMEND
3118; GFX900-NEXT: s_setpc_b64 s[30:31]
3119;
3120; GFX90A-LABEL: s_shuffle_v2i64_v3i64__4_1:
3121; GFX90A: ; %bb.0:
3122; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3123; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07003124; GFX90A-NEXT: ; def s[8:13]
3125; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07003126; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003127; GFX90A-NEXT: ; def s[4:9]
3128; GFX90A-NEXT: ;;#ASMEND
3129; GFX90A-NEXT: s_mov_b32 s8, s6
3130; GFX90A-NEXT: s_mov_b32 s9, s7
3131; GFX90A-NEXT: ;;#ASMSTART
3132; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003133; GFX90A-NEXT: ;;#ASMEND
3134; GFX90A-NEXT: s_setpc_b64 s[30:31]
3135;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003136; GFX942-LABEL: s_shuffle_v2i64_v3i64__4_1:
3137; GFX942: ; %bb.0:
3138; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3139; GFX942-NEXT: ;;#ASMSTART
3140; GFX942-NEXT: ; def s[8:13]
3141; GFX942-NEXT: ;;#ASMEND
3142; GFX942-NEXT: ;;#ASMSTART
3143; GFX942-NEXT: ; def s[0:5]
3144; GFX942-NEXT: ;;#ASMEND
3145; GFX942-NEXT: s_mov_b32 s8, s2
3146; GFX942-NEXT: s_mov_b32 s9, s3
3147; GFX942-NEXT: ;;#ASMSTART
3148; GFX942-NEXT: ; use s[8:11]
3149; GFX942-NEXT: ;;#ASMEND
3150; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003151 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3152 %vec1 = call <3 x i64> asm "; def $0", "=s"()
3153 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 1>
Matt Arsenault585858a2025-01-21 10:34:53 +07003154 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003155 ret void
3156}
3157
3158define void @s_shuffle_v2i64_v3i64__u_2() {
3159; GFX900-LABEL: s_shuffle_v2i64_v3i64__u_2:
3160; GFX900: ; %bb.0:
3161; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3162; GFX900-NEXT: ;;#ASMSTART
3163; GFX900-NEXT: ; def s[4:9]
3164; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003165; GFX900-NEXT: s_mov_b32 s10, s8
3166; GFX900-NEXT: s_mov_b32 s11, s9
Matt Arsenault77862662025-01-21 10:08:42 +07003167; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003168; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003169; GFX900-NEXT: ;;#ASMEND
3170; GFX900-NEXT: s_setpc_b64 s[30:31]
3171;
3172; GFX90A-LABEL: s_shuffle_v2i64_v3i64__u_2:
3173; GFX90A: ; %bb.0:
3174; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3175; GFX90A-NEXT: ;;#ASMSTART
3176; GFX90A-NEXT: ; def s[4:9]
3177; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003178; GFX90A-NEXT: s_mov_b32 s10, s8
3179; GFX90A-NEXT: s_mov_b32 s11, s9
Matt Arsenault77862662025-01-21 10:08:42 +07003180; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003181; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003182; GFX90A-NEXT: ;;#ASMEND
3183; GFX90A-NEXT: s_setpc_b64 s[30:31]
3184;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003185; GFX942-LABEL: s_shuffle_v2i64_v3i64__u_2:
3186; GFX942: ; %bb.0:
3187; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3188; GFX942-NEXT: ;;#ASMSTART
3189; GFX942-NEXT: ; def s[0:5]
3190; GFX942-NEXT: ;;#ASMEND
3191; GFX942-NEXT: s_mov_b32 s10, s4
3192; GFX942-NEXT: s_mov_b32 s11, s5
3193; GFX942-NEXT: ;;#ASMSTART
3194; GFX942-NEXT: ; use s[8:11]
3195; GFX942-NEXT: ;;#ASMEND
3196; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003197 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3198 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 poison, i32 2>
Matt Arsenault585858a2025-01-21 10:34:53 +07003199 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003200 ret void
3201}
3202
3203define void @s_shuffle_v2i64_v3i64__0_2() {
Matt Arsenault585858a2025-01-21 10:34:53 +07003204; GFX9-LABEL: s_shuffle_v2i64_v3i64__0_2:
3205; GFX9: ; %bb.0:
3206; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3207; GFX9-NEXT: ;;#ASMSTART
3208; GFX9-NEXT: ; def s[8:13]
3209; GFX9-NEXT: ;;#ASMEND
3210; GFX9-NEXT: s_mov_b32 s10, s12
3211; GFX9-NEXT: s_mov_b32 s11, s13
3212; GFX9-NEXT: ;;#ASMSTART
3213; GFX9-NEXT: ; use s[8:11]
3214; GFX9-NEXT: ;;#ASMEND
3215; GFX9-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003216 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3217 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 0, i32 2>
Matt Arsenault585858a2025-01-21 10:34:53 +07003218 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003219 ret void
3220}
3221
3222define void @s_shuffle_v2i64_v3i64__1_2() {
3223; GFX900-LABEL: s_shuffle_v2i64_v3i64__1_2:
3224; GFX900: ; %bb.0:
3225; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3226; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003227; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003228; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003229; GFX900-NEXT: s_mov_b32 s8, s10
3230; GFX900-NEXT: s_mov_b32 s9, s11
3231; GFX900-NEXT: s_mov_b32 s10, s12
3232; GFX900-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07003233; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003234; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003235; GFX900-NEXT: ;;#ASMEND
3236; GFX900-NEXT: s_setpc_b64 s[30:31]
3237;
3238; GFX90A-LABEL: s_shuffle_v2i64_v3i64__1_2:
3239; GFX90A: ; %bb.0:
3240; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3241; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003242; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003243; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003244; GFX90A-NEXT: s_mov_b32 s8, s10
3245; GFX90A-NEXT: s_mov_b32 s9, s11
3246; GFX90A-NEXT: s_mov_b32 s10, s12
3247; GFX90A-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07003248; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003249; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003250; GFX90A-NEXT: ;;#ASMEND
3251; GFX90A-NEXT: s_setpc_b64 s[30:31]
3252;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003253; GFX942-LABEL: s_shuffle_v2i64_v3i64__1_2:
3254; GFX942: ; %bb.0:
3255; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3256; GFX942-NEXT: ;;#ASMSTART
3257; GFX942-NEXT: ; def s[0:5]
3258; GFX942-NEXT: ;;#ASMEND
3259; GFX942-NEXT: s_mov_b32 s8, s2
3260; GFX942-NEXT: s_mov_b32 s9, s3
3261; GFX942-NEXT: s_mov_b32 s10, s4
3262; GFX942-NEXT: s_mov_b32 s11, s5
3263; GFX942-NEXT: ;;#ASMSTART
3264; GFX942-NEXT: ; use s[8:11]
3265; GFX942-NEXT: ;;#ASMEND
3266; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003267 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3268 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 1, i32 2>
Matt Arsenault585858a2025-01-21 10:34:53 +07003269 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003270 ret void
3271}
3272
3273define void @s_shuffle_v2i64_v3i64__2_2() {
3274; GFX900-LABEL: s_shuffle_v2i64_v3i64__2_2:
3275; GFX900: ; %bb.0:
3276; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3277; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003278; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003279; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003280; GFX900-NEXT: s_mov_b32 s8, s12
3281; GFX900-NEXT: s_mov_b32 s9, s13
3282; GFX900-NEXT: s_mov_b32 s10, s12
3283; GFX900-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07003284; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003285; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003286; GFX900-NEXT: ;;#ASMEND
3287; GFX900-NEXT: s_setpc_b64 s[30:31]
3288;
3289; GFX90A-LABEL: s_shuffle_v2i64_v3i64__2_2:
3290; GFX90A: ; %bb.0:
3291; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3292; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003293; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003294; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003295; GFX90A-NEXT: s_mov_b32 s8, s12
3296; GFX90A-NEXT: s_mov_b32 s9, s13
3297; GFX90A-NEXT: s_mov_b32 s10, s12
3298; GFX90A-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07003299; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003300; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003301; GFX90A-NEXT: ;;#ASMEND
3302; GFX90A-NEXT: s_setpc_b64 s[30:31]
3303;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003304; GFX942-LABEL: s_shuffle_v2i64_v3i64__2_2:
3305; GFX942: ; %bb.0:
3306; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3307; GFX942-NEXT: ;;#ASMSTART
3308; GFX942-NEXT: ; def s[0:5]
3309; GFX942-NEXT: ;;#ASMEND
3310; GFX942-NEXT: s_mov_b32 s8, s4
3311; GFX942-NEXT: s_mov_b32 s9, s5
3312; GFX942-NEXT: s_mov_b32 s10, s4
3313; GFX942-NEXT: s_mov_b32 s11, s5
3314; GFX942-NEXT: ;;#ASMSTART
3315; GFX942-NEXT: ; use s[8:11]
3316; GFX942-NEXT: ;;#ASMEND
3317; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003318 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3319 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 2>
Matt Arsenault585858a2025-01-21 10:34:53 +07003320 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003321 ret void
3322}
3323
3324define void @s_shuffle_v2i64_v3i64__3_2() {
3325; GFX900-LABEL: s_shuffle_v2i64_v3i64__3_2:
3326; GFX900: ; %bb.0:
3327; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3328; GFX900-NEXT: ;;#ASMSTART
3329; GFX900-NEXT: ; def s[4:9]
3330; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003331; GFX900-NEXT: s_mov_b32 s10, s8
3332; GFX900-NEXT: s_mov_b32 s11, s9
Matt Arsenault77862662025-01-21 10:08:42 +07003333; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003334; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003335; GFX900-NEXT: ;;#ASMEND
3336; GFX900-NEXT: s_setpc_b64 s[30:31]
3337;
3338; GFX90A-LABEL: s_shuffle_v2i64_v3i64__3_2:
3339; GFX90A: ; %bb.0:
3340; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3341; GFX90A-NEXT: ;;#ASMSTART
3342; GFX90A-NEXT: ; def s[4:9]
3343; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003344; GFX90A-NEXT: s_mov_b32 s10, s8
3345; GFX90A-NEXT: s_mov_b32 s11, s9
Matt Arsenault77862662025-01-21 10:08:42 +07003346; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003347; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003348; GFX90A-NEXT: ;;#ASMEND
3349; GFX90A-NEXT: s_setpc_b64 s[30:31]
3350;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003351; GFX942-LABEL: s_shuffle_v2i64_v3i64__3_2:
3352; GFX942: ; %bb.0:
3353; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3354; GFX942-NEXT: ;;#ASMSTART
3355; GFX942-NEXT: ; def s[0:5]
3356; GFX942-NEXT: ;;#ASMEND
3357; GFX942-NEXT: s_mov_b32 s10, s4
3358; GFX942-NEXT: s_mov_b32 s11, s5
3359; GFX942-NEXT: ;;#ASMSTART
3360; GFX942-NEXT: ; use s[8:11]
3361; GFX942-NEXT: ;;#ASMEND
3362; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003363 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3364 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 3, i32 2>
Matt Arsenault585858a2025-01-21 10:34:53 +07003365 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003366 ret void
3367}
3368
3369define void @s_shuffle_v2i64_v3i64__4_2() {
3370; GFX900-LABEL: s_shuffle_v2i64_v3i64__4_2:
3371; GFX900: ; %bb.0:
3372; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3373; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003374; GFX900-NEXT: ; def s[8:13]
3375; GFX900-NEXT: ;;#ASMEND
3376; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07003377; GFX900-NEXT: ; def s[4:9]
3378; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003379; GFX900-NEXT: s_mov_b32 s8, s6
3380; GFX900-NEXT: s_mov_b32 s9, s7
3381; GFX900-NEXT: s_mov_b32 s10, s12
3382; GFX900-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07003383; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003384; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003385; GFX900-NEXT: ;;#ASMEND
3386; GFX900-NEXT: s_setpc_b64 s[30:31]
3387;
3388; GFX90A-LABEL: s_shuffle_v2i64_v3i64__4_2:
3389; GFX90A: ; %bb.0:
3390; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3391; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003392; GFX90A-NEXT: ; def s[8:13]
3393; GFX90A-NEXT: ;;#ASMEND
3394; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07003395; GFX90A-NEXT: ; def s[4:9]
3396; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003397; GFX90A-NEXT: s_mov_b32 s8, s6
3398; GFX90A-NEXT: s_mov_b32 s9, s7
3399; GFX90A-NEXT: s_mov_b32 s10, s12
3400; GFX90A-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07003401; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003402; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003403; GFX90A-NEXT: ;;#ASMEND
3404; GFX90A-NEXT: s_setpc_b64 s[30:31]
3405;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003406; GFX942-LABEL: s_shuffle_v2i64_v3i64__4_2:
3407; GFX942: ; %bb.0:
3408; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3409; GFX942-NEXT: ;;#ASMSTART
3410; GFX942-NEXT: ; def s[8:13]
3411; GFX942-NEXT: ;;#ASMEND
3412; GFX942-NEXT: ;;#ASMSTART
3413; GFX942-NEXT: ; def s[0:5]
3414; GFX942-NEXT: ;;#ASMEND
3415; GFX942-NEXT: s_mov_b32 s8, s10
3416; GFX942-NEXT: s_mov_b32 s9, s11
3417; GFX942-NEXT: s_mov_b32 s10, s4
3418; GFX942-NEXT: s_mov_b32 s11, s5
3419; GFX942-NEXT: ;;#ASMSTART
3420; GFX942-NEXT: ; use s[8:11]
3421; GFX942-NEXT: ;;#ASMEND
3422; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003423 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3424 %vec1 = call <3 x i64> asm "; def $0", "=s"()
3425 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 2>
Matt Arsenault585858a2025-01-21 10:34:53 +07003426 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003427 ret void
3428}
3429
3430define void @s_shuffle_v2i64_v3i64__u_3() {
Matt Arsenault585858a2025-01-21 10:34:53 +07003431; GFX9-LABEL: s_shuffle_v2i64_v3i64__u_3:
3432; GFX9: ; %bb.0:
3433; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3434; GFX9-NEXT: ;;#ASMSTART
3435; GFX9-NEXT: ; use s[8:11]
3436; GFX9-NEXT: ;;#ASMEND
3437; GFX9-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003438 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3439 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 poison, i32 3>
Matt Arsenault585858a2025-01-21 10:34:53 +07003440 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003441 ret void
3442}
3443
3444define void @s_shuffle_v2i64_v3i64__0_3() {
3445; GFX900-LABEL: s_shuffle_v2i64_v3i64__0_3:
3446; GFX900: ; %bb.0:
3447; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3448; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003449; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003450; GFX900-NEXT: ;;#ASMEND
3451; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003452; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003453; GFX900-NEXT: ;;#ASMEND
3454; GFX900-NEXT: s_setpc_b64 s[30:31]
3455;
3456; GFX90A-LABEL: s_shuffle_v2i64_v3i64__0_3:
3457; GFX90A: ; %bb.0:
3458; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3459; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003460; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003461; GFX90A-NEXT: ;;#ASMEND
3462; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003463; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003464; GFX90A-NEXT: ;;#ASMEND
3465; GFX90A-NEXT: s_setpc_b64 s[30:31]
3466;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003467; GFX942-LABEL: s_shuffle_v2i64_v3i64__0_3:
3468; GFX942: ; %bb.0:
3469; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3470; GFX942-NEXT: ;;#ASMSTART
3471; GFX942-NEXT: ; def s[8:13]
3472; GFX942-NEXT: ;;#ASMEND
3473; GFX942-NEXT: s_nop 0
3474; GFX942-NEXT: ;;#ASMSTART
3475; GFX942-NEXT: ; use s[8:11]
3476; GFX942-NEXT: ;;#ASMEND
3477; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003478 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3479 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 0, i32 3>
Matt Arsenault585858a2025-01-21 10:34:53 +07003480 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003481 ret void
3482}
3483
3484define void @s_shuffle_v2i64_v3i64__1_3() {
3485; GFX900-LABEL: s_shuffle_v2i64_v3i64__1_3:
3486; GFX900: ; %bb.0:
3487; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3488; GFX900-NEXT: ;;#ASMSTART
3489; GFX900-NEXT: ; def s[4:9]
3490; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003491; GFX900-NEXT: s_mov_b32 s8, s6
3492; GFX900-NEXT: s_mov_b32 s9, s7
Matt Arsenault77862662025-01-21 10:08:42 +07003493; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003494; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003495; GFX900-NEXT: ;;#ASMEND
3496; GFX900-NEXT: s_setpc_b64 s[30:31]
3497;
3498; GFX90A-LABEL: s_shuffle_v2i64_v3i64__1_3:
3499; GFX90A: ; %bb.0:
3500; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3501; GFX90A-NEXT: ;;#ASMSTART
3502; GFX90A-NEXT: ; def s[4:9]
3503; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003504; GFX90A-NEXT: s_mov_b32 s8, s6
3505; GFX90A-NEXT: s_mov_b32 s9, s7
Matt Arsenault77862662025-01-21 10:08:42 +07003506; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003507; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003508; GFX90A-NEXT: ;;#ASMEND
3509; GFX90A-NEXT: s_setpc_b64 s[30:31]
3510;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003511; GFX942-LABEL: s_shuffle_v2i64_v3i64__1_3:
3512; GFX942: ; %bb.0:
3513; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3514; GFX942-NEXT: ;;#ASMSTART
3515; GFX942-NEXT: ; def s[0:5]
3516; GFX942-NEXT: ;;#ASMEND
3517; GFX942-NEXT: s_mov_b32 s8, s2
3518; GFX942-NEXT: s_mov_b32 s9, s3
3519; GFX942-NEXT: ;;#ASMSTART
3520; GFX942-NEXT: ; use s[8:11]
3521; GFX942-NEXT: ;;#ASMEND
3522; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003523 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3524 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 1, i32 3>
Matt Arsenault585858a2025-01-21 10:34:53 +07003525 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003526 ret void
3527}
3528
3529define void @s_shuffle_v2i64_v3i64__2_3() {
3530; GFX900-LABEL: s_shuffle_v2i64_v3i64__2_3:
3531; GFX900: ; %bb.0:
3532; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3533; GFX900-NEXT: ;;#ASMSTART
3534; GFX900-NEXT: ; def s[4:9]
3535; GFX900-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07003536; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003537; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003538; GFX900-NEXT: ;;#ASMEND
3539; GFX900-NEXT: s_setpc_b64 s[30:31]
3540;
3541; GFX90A-LABEL: s_shuffle_v2i64_v3i64__2_3:
3542; GFX90A: ; %bb.0:
3543; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3544; GFX90A-NEXT: ;;#ASMSTART
3545; GFX90A-NEXT: ; def s[4:9]
3546; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07003547; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003548; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003549; GFX90A-NEXT: ;;#ASMEND
3550; GFX90A-NEXT: s_setpc_b64 s[30:31]
3551;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003552; GFX942-LABEL: s_shuffle_v2i64_v3i64__2_3:
3553; GFX942: ; %bb.0:
3554; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3555; GFX942-NEXT: ;;#ASMSTART
3556; GFX942-NEXT: ; def s[0:5]
3557; GFX942-NEXT: ;;#ASMEND
3558; GFX942-NEXT: s_mov_b32 s8, s4
3559; GFX942-NEXT: s_mov_b32 s9, s5
3560; GFX942-NEXT: ;;#ASMSTART
3561; GFX942-NEXT: ; use s[8:11]
3562; GFX942-NEXT: ;;#ASMEND
3563; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003564 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3565 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 2, i32 3>
Matt Arsenault585858a2025-01-21 10:34:53 +07003566 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003567 ret void
3568}
3569
3570define void @s_shuffle_v2i64_v3i64__3_3() {
Matt Arsenault585858a2025-01-21 10:34:53 +07003571; GFX9-LABEL: s_shuffle_v2i64_v3i64__3_3:
3572; GFX9: ; %bb.0:
3573; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3574; GFX9-NEXT: ;;#ASMSTART
3575; GFX9-NEXT: ; use s[8:11]
3576; GFX9-NEXT: ;;#ASMEND
3577; GFX9-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003578 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3579 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> poison, <2 x i32> <i32 3, i32 3>
Matt Arsenault585858a2025-01-21 10:34:53 +07003580 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003581 ret void
3582}
3583
3584define void @s_shuffle_v2i64_v3i64__4_3() {
3585; GFX900-LABEL: s_shuffle_v2i64_v3i64__4_3:
3586; GFX900: ; %bb.0:
3587; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3588; GFX900-NEXT: ;;#ASMSTART
3589; GFX900-NEXT: ; def s[4:9]
3590; GFX900-NEXT: ;;#ASMEND
3591; GFX900-NEXT: s_mov_b32 s8, s6
3592; GFX900-NEXT: s_mov_b32 s9, s7
3593; GFX900-NEXT: s_mov_b32 s10, s4
3594; GFX900-NEXT: s_mov_b32 s11, s5
3595; GFX900-NEXT: ;;#ASMSTART
3596; GFX900-NEXT: ; use s[8:11]
3597; GFX900-NEXT: ;;#ASMEND
3598; GFX900-NEXT: s_setpc_b64 s[30:31]
3599;
3600; GFX90A-LABEL: s_shuffle_v2i64_v3i64__4_3:
3601; GFX90A: ; %bb.0:
3602; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3603; GFX90A-NEXT: ;;#ASMSTART
3604; GFX90A-NEXT: ; def s[4:9]
3605; GFX90A-NEXT: ;;#ASMEND
3606; GFX90A-NEXT: s_mov_b32 s8, s6
3607; GFX90A-NEXT: s_mov_b32 s9, s7
3608; GFX90A-NEXT: s_mov_b32 s10, s4
3609; GFX90A-NEXT: s_mov_b32 s11, s5
3610; GFX90A-NEXT: ;;#ASMSTART
3611; GFX90A-NEXT: ; use s[8:11]
3612; GFX90A-NEXT: ;;#ASMEND
3613; GFX90A-NEXT: s_setpc_b64 s[30:31]
3614;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003615; GFX942-LABEL: s_shuffle_v2i64_v3i64__4_3:
3616; GFX942: ; %bb.0:
3617; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3618; GFX942-NEXT: ;;#ASMSTART
3619; GFX942-NEXT: ; def s[0:5]
3620; GFX942-NEXT: ;;#ASMEND
3621; GFX942-NEXT: s_mov_b32 s8, s2
3622; GFX942-NEXT: s_mov_b32 s9, s3
3623; GFX942-NEXT: s_mov_b32 s10, s0
3624; GFX942-NEXT: s_mov_b32 s11, s1
3625; GFX942-NEXT: ;;#ASMSTART
3626; GFX942-NEXT: ; use s[8:11]
3627; GFX942-NEXT: ;;#ASMEND
3628; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003629 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3630 %vec1 = call <3 x i64> asm "; def $0", "=s"()
3631 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 3>
Matt Arsenault585858a2025-01-21 10:34:53 +07003632 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003633 ret void
3634}
3635
3636define void @s_shuffle_v2i64_v3i64__u_4() {
3637; GFX900-LABEL: s_shuffle_v2i64_v3i64__u_4:
3638; GFX900: ; %bb.0:
3639; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3640; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003641; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003642; GFX900-NEXT: ;;#ASMEND
3643; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003644; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003645; GFX900-NEXT: ;;#ASMEND
3646; GFX900-NEXT: s_setpc_b64 s[30:31]
3647;
3648; GFX90A-LABEL: s_shuffle_v2i64_v3i64__u_4:
3649; GFX90A: ; %bb.0:
3650; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3651; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003652; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003653; GFX90A-NEXT: ;;#ASMEND
3654; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003655; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003656; GFX90A-NEXT: ;;#ASMEND
3657; GFX90A-NEXT: s_setpc_b64 s[30:31]
3658;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003659; GFX942-LABEL: s_shuffle_v2i64_v3i64__u_4:
3660; GFX942: ; %bb.0:
3661; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3662; GFX942-NEXT: ;;#ASMSTART
3663; GFX942-NEXT: ; def s[8:13]
3664; GFX942-NEXT: ;;#ASMEND
3665; GFX942-NEXT: s_nop 0
3666; GFX942-NEXT: ;;#ASMSTART
3667; GFX942-NEXT: ; use s[8:11]
3668; GFX942-NEXT: ;;#ASMEND
3669; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003670 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3671 %vec1 = call <3 x i64> asm "; def $0", "=s"()
3672 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 poison, i32 4>
Matt Arsenault585858a2025-01-21 10:34:53 +07003673 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003674 ret void
3675}
3676
3677define void @s_shuffle_v2i64_v3i64__0_4() {
3678; GFX900-LABEL: s_shuffle_v2i64_v3i64__0_4:
3679; GFX900: ; %bb.0:
3680; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3681; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07003682; GFX900-NEXT: ; def s[8:13]
3683; GFX900-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07003684; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003685; GFX900-NEXT: ; def s[12:17]
3686; GFX900-NEXT: ;;#ASMEND
3687; GFX900-NEXT: s_mov_b32 s10, s14
3688; GFX900-NEXT: s_mov_b32 s11, s15
3689; GFX900-NEXT: ;;#ASMSTART
3690; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003691; GFX900-NEXT: ;;#ASMEND
3692; GFX900-NEXT: s_setpc_b64 s[30:31]
3693;
3694; GFX90A-LABEL: s_shuffle_v2i64_v3i64__0_4:
3695; GFX90A: ; %bb.0:
3696; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3697; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07003698; GFX90A-NEXT: ; def s[8:13]
3699; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07003700; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003701; GFX90A-NEXT: ; def s[12:17]
3702; GFX90A-NEXT: ;;#ASMEND
3703; GFX90A-NEXT: s_mov_b32 s10, s14
3704; GFX90A-NEXT: s_mov_b32 s11, s15
3705; GFX90A-NEXT: ;;#ASMSTART
3706; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003707; GFX90A-NEXT: ;;#ASMEND
3708; GFX90A-NEXT: s_setpc_b64 s[30:31]
3709;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003710; GFX942-LABEL: s_shuffle_v2i64_v3i64__0_4:
3711; GFX942: ; %bb.0:
3712; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3713; GFX942-NEXT: ;;#ASMSTART
3714; GFX942-NEXT: ; def s[8:13]
3715; GFX942-NEXT: ;;#ASMEND
3716; GFX942-NEXT: ;;#ASMSTART
3717; GFX942-NEXT: ; def s[0:5]
3718; GFX942-NEXT: ;;#ASMEND
3719; GFX942-NEXT: s_mov_b32 s10, s2
3720; GFX942-NEXT: s_mov_b32 s11, s3
3721; GFX942-NEXT: ;;#ASMSTART
3722; GFX942-NEXT: ; use s[8:11]
3723; GFX942-NEXT: ;;#ASMEND
3724; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003725 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3726 %vec1 = call <3 x i64> asm "; def $0", "=s"()
3727 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 0, i32 4>
Matt Arsenault585858a2025-01-21 10:34:53 +07003728 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003729 ret void
3730}
3731
3732define void @s_shuffle_v2i64_v3i64__1_4() {
3733; GFX900-LABEL: s_shuffle_v2i64_v3i64__1_4:
3734; GFX900: ; %bb.0:
3735; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3736; GFX900-NEXT: ;;#ASMSTART
3737; GFX900-NEXT: ; def s[4:9]
3738; GFX900-NEXT: ;;#ASMEND
3739; GFX900-NEXT: ;;#ASMSTART
3740; GFX900-NEXT: ; def s[8:13]
3741; GFX900-NEXT: ;;#ASMEND
3742; GFX900-NEXT: s_mov_b32 s8, s6
3743; GFX900-NEXT: s_mov_b32 s9, s7
3744; GFX900-NEXT: ;;#ASMSTART
3745; GFX900-NEXT: ; use s[8:11]
3746; GFX900-NEXT: ;;#ASMEND
3747; GFX900-NEXT: s_setpc_b64 s[30:31]
3748;
3749; GFX90A-LABEL: s_shuffle_v2i64_v3i64__1_4:
3750; GFX90A: ; %bb.0:
3751; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3752; GFX90A-NEXT: ;;#ASMSTART
3753; GFX90A-NEXT: ; def s[4:9]
3754; GFX90A-NEXT: ;;#ASMEND
3755; GFX90A-NEXT: ;;#ASMSTART
3756; GFX90A-NEXT: ; def s[8:13]
3757; GFX90A-NEXT: ;;#ASMEND
3758; GFX90A-NEXT: s_mov_b32 s8, s6
3759; GFX90A-NEXT: s_mov_b32 s9, s7
3760; GFX90A-NEXT: ;;#ASMSTART
3761; GFX90A-NEXT: ; use s[8:11]
3762; GFX90A-NEXT: ;;#ASMEND
3763; GFX90A-NEXT: s_setpc_b64 s[30:31]
3764;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003765; GFX942-LABEL: s_shuffle_v2i64_v3i64__1_4:
3766; GFX942: ; %bb.0:
3767; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3768; GFX942-NEXT: ;;#ASMSTART
3769; GFX942-NEXT: ; def s[8:13]
3770; GFX942-NEXT: ;;#ASMEND
3771; GFX942-NEXT: ;;#ASMSTART
3772; GFX942-NEXT: ; def s[0:5]
3773; GFX942-NEXT: ;;#ASMEND
3774; GFX942-NEXT: s_mov_b32 s8, s2
3775; GFX942-NEXT: s_mov_b32 s9, s3
3776; GFX942-NEXT: ;;#ASMSTART
3777; GFX942-NEXT: ; use s[8:11]
3778; GFX942-NEXT: ;;#ASMEND
3779; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003780 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3781 %vec1 = call <3 x i64> asm "; def $0", "=s"()
3782 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 1, i32 4>
Matt Arsenault585858a2025-01-21 10:34:53 +07003783 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003784 ret void
3785}
3786
3787define void @s_shuffle_v2i64_v3i64__2_4() {
3788; GFX900-LABEL: s_shuffle_v2i64_v3i64__2_4:
3789; GFX900: ; %bb.0:
3790; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3791; GFX900-NEXT: ;;#ASMSTART
3792; GFX900-NEXT: ; def s[12:17]
3793; GFX900-NEXT: ;;#ASMEND
3794; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003795; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003796; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003797; GFX900-NEXT: s_mov_b32 s8, s16
3798; GFX900-NEXT: s_mov_b32 s9, s17
Matt Arsenault77862662025-01-21 10:08:42 +07003799; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003800; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003801; GFX900-NEXT: ;;#ASMEND
3802; GFX900-NEXT: s_setpc_b64 s[30:31]
3803;
3804; GFX90A-LABEL: s_shuffle_v2i64_v3i64__2_4:
3805; GFX90A: ; %bb.0:
3806; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3807; GFX90A-NEXT: ;;#ASMSTART
3808; GFX90A-NEXT: ; def s[12:17]
3809; GFX90A-NEXT: ;;#ASMEND
3810; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003811; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003812; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003813; GFX90A-NEXT: s_mov_b32 s8, s16
3814; GFX90A-NEXT: s_mov_b32 s9, s17
Matt Arsenault77862662025-01-21 10:08:42 +07003815; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003816; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003817; GFX90A-NEXT: ;;#ASMEND
3818; GFX90A-NEXT: s_setpc_b64 s[30:31]
3819;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003820; GFX942-LABEL: s_shuffle_v2i64_v3i64__2_4:
3821; GFX942: ; %bb.0:
3822; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3823; GFX942-NEXT: ;;#ASMSTART
3824; GFX942-NEXT: ; def s[8:13]
3825; GFX942-NEXT: ;;#ASMEND
3826; GFX942-NEXT: ;;#ASMSTART
3827; GFX942-NEXT: ; def s[0:5]
3828; GFX942-NEXT: ;;#ASMEND
3829; GFX942-NEXT: s_mov_b32 s8, s4
3830; GFX942-NEXT: s_mov_b32 s9, s5
3831; GFX942-NEXT: ;;#ASMSTART
3832; GFX942-NEXT: ; use s[8:11]
3833; GFX942-NEXT: ;;#ASMEND
3834; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003835 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3836 %vec1 = call <3 x i64> asm "; def $0", "=s"()
3837 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 2, i32 4>
Matt Arsenault585858a2025-01-21 10:34:53 +07003838 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003839 ret void
3840}
3841
3842define void @s_shuffle_v2i64_v3i64__3_4() {
3843; GFX900-LABEL: s_shuffle_v2i64_v3i64__3_4:
3844; GFX900: ; %bb.0:
3845; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3846; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003847; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003848; GFX900-NEXT: ;;#ASMEND
3849; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003850; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003851; GFX900-NEXT: ;;#ASMEND
3852; GFX900-NEXT: s_setpc_b64 s[30:31]
3853;
3854; GFX90A-LABEL: s_shuffle_v2i64_v3i64__3_4:
3855; GFX90A: ; %bb.0:
3856; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3857; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003858; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07003859; GFX90A-NEXT: ;;#ASMEND
3860; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003861; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003862; GFX90A-NEXT: ;;#ASMEND
3863; GFX90A-NEXT: s_setpc_b64 s[30:31]
3864;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003865; GFX942-LABEL: s_shuffle_v2i64_v3i64__3_4:
3866; GFX942: ; %bb.0:
3867; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3868; GFX942-NEXT: ;;#ASMSTART
3869; GFX942-NEXT: ; def s[8:13]
3870; GFX942-NEXT: ;;#ASMEND
3871; GFX942-NEXT: s_nop 0
3872; GFX942-NEXT: ;;#ASMSTART
3873; GFX942-NEXT: ; use s[8:11]
3874; GFX942-NEXT: ;;#ASMEND
3875; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003876 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3877 %vec1 = call <3 x i64> asm "; def $0", "=s"()
3878 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 3, i32 4>
Matt Arsenault585858a2025-01-21 10:34:53 +07003879 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003880 ret void
3881}
3882
3883define void @s_shuffle_v2i64_v3i64__4_4() {
Matt Arsenault585858a2025-01-21 10:34:53 +07003884; GFX9-LABEL: s_shuffle_v2i64_v3i64__4_4:
3885; GFX9: ; %bb.0:
3886; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3887; GFX9-NEXT: ;;#ASMSTART
3888; GFX9-NEXT: ; def s[8:13]
3889; GFX9-NEXT: ;;#ASMEND
3890; GFX9-NEXT: s_mov_b32 s8, s10
3891; GFX9-NEXT: s_mov_b32 s9, s11
3892; GFX9-NEXT: ;;#ASMSTART
3893; GFX9-NEXT: ; use s[8:11]
3894; GFX9-NEXT: ;;#ASMEND
3895; GFX9-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003896 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3897 %vec1 = call <3 x i64> asm "; def $0", "=s"()
3898 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 4>
Matt Arsenault585858a2025-01-21 10:34:53 +07003899 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003900 ret void
3901}
3902
3903define void @s_shuffle_v2i64_v3i64__u_5() {
3904; GFX900-LABEL: s_shuffle_v2i64_v3i64__u_5:
3905; GFX900: ; %bb.0:
3906; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3907; GFX900-NEXT: ;;#ASMSTART
3908; GFX900-NEXT: ; def s[4:9]
3909; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003910; GFX900-NEXT: s_mov_b32 s10, s8
3911; GFX900-NEXT: s_mov_b32 s11, s9
Matt Arsenault77862662025-01-21 10:08:42 +07003912; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003913; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003914; GFX900-NEXT: ;;#ASMEND
3915; GFX900-NEXT: s_setpc_b64 s[30:31]
3916;
3917; GFX90A-LABEL: s_shuffle_v2i64_v3i64__u_5:
3918; GFX90A: ; %bb.0:
3919; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3920; GFX90A-NEXT: ;;#ASMSTART
3921; GFX90A-NEXT: ; def s[4:9]
3922; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07003923; GFX90A-NEXT: s_mov_b32 s10, s8
3924; GFX90A-NEXT: s_mov_b32 s11, s9
Matt Arsenault77862662025-01-21 10:08:42 +07003925; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003926; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003927; GFX90A-NEXT: ;;#ASMEND
3928; GFX90A-NEXT: s_setpc_b64 s[30:31]
3929;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003930; GFX942-LABEL: s_shuffle_v2i64_v3i64__u_5:
3931; GFX942: ; %bb.0:
3932; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3933; GFX942-NEXT: ;;#ASMSTART
3934; GFX942-NEXT: ; def s[0:5]
3935; GFX942-NEXT: ;;#ASMEND
3936; GFX942-NEXT: s_mov_b32 s10, s4
3937; GFX942-NEXT: s_mov_b32 s11, s5
3938; GFX942-NEXT: ;;#ASMSTART
3939; GFX942-NEXT: ; use s[8:11]
3940; GFX942-NEXT: ;;#ASMEND
3941; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003942 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3943 %vec1 = call <3 x i64> asm "; def $0", "=s"()
3944 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 poison, i32 5>
Matt Arsenault585858a2025-01-21 10:34:53 +07003945 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07003946 ret void
3947}
3948
3949define void @s_shuffle_v2i64_v3i64__0_5() {
3950; GFX900-LABEL: s_shuffle_v2i64_v3i64__0_5:
3951; GFX900: ; %bb.0:
3952; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3953; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07003954; GFX900-NEXT: ; def s[8:13]
3955; GFX900-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07003956; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003957; GFX900-NEXT: ; def s[12:17]
3958; GFX900-NEXT: ;;#ASMEND
3959; GFX900-NEXT: s_mov_b32 s10, s16
3960; GFX900-NEXT: s_mov_b32 s11, s17
3961; GFX900-NEXT: ;;#ASMSTART
3962; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003963; GFX900-NEXT: ;;#ASMEND
3964; GFX900-NEXT: s_setpc_b64 s[30:31]
3965;
3966; GFX90A-LABEL: s_shuffle_v2i64_v3i64__0_5:
3967; GFX90A: ; %bb.0:
3968; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3969; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault77862662025-01-21 10:08:42 +07003970; GFX90A-NEXT: ; def s[8:13]
3971; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault77862662025-01-21 10:08:42 +07003972; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07003973; GFX90A-NEXT: ; def s[12:17]
3974; GFX90A-NEXT: ;;#ASMEND
3975; GFX90A-NEXT: s_mov_b32 s10, s16
3976; GFX90A-NEXT: s_mov_b32 s11, s17
3977; GFX90A-NEXT: ;;#ASMSTART
3978; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07003979; GFX90A-NEXT: ;;#ASMEND
3980; GFX90A-NEXT: s_setpc_b64 s[30:31]
3981;
Fabian Rittera33a84e2025-02-13 15:17:12 +01003982; GFX942-LABEL: s_shuffle_v2i64_v3i64__0_5:
3983; GFX942: ; %bb.0:
3984; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3985; GFX942-NEXT: ;;#ASMSTART
3986; GFX942-NEXT: ; def s[8:13]
3987; GFX942-NEXT: ;;#ASMEND
3988; GFX942-NEXT: ;;#ASMSTART
3989; GFX942-NEXT: ; def s[0:5]
3990; GFX942-NEXT: ;;#ASMEND
3991; GFX942-NEXT: s_mov_b32 s10, s4
3992; GFX942-NEXT: s_mov_b32 s11, s5
3993; GFX942-NEXT: ;;#ASMSTART
3994; GFX942-NEXT: ; use s[8:11]
3995; GFX942-NEXT: ;;#ASMEND
3996; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07003997 %vec0 = call <3 x i64> asm "; def $0", "=s"()
3998 %vec1 = call <3 x i64> asm "; def $0", "=s"()
3999 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 0, i32 5>
Matt Arsenault585858a2025-01-21 10:34:53 +07004000 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07004001 ret void
4002}
4003
4004define void @s_shuffle_v2i64_v3i64__1_5() {
4005; GFX900-LABEL: s_shuffle_v2i64_v3i64__1_5:
4006; GFX900: ; %bb.0:
4007; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4008; GFX900-NEXT: ;;#ASMSTART
4009; GFX900-NEXT: ; def s[4:9]
4010; GFX900-NEXT: ;;#ASMEND
4011; GFX900-NEXT: ;;#ASMSTART
4012; GFX900-NEXT: ; def s[8:13]
4013; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07004014; GFX900-NEXT: s_mov_b32 s8, s6
4015; GFX900-NEXT: s_mov_b32 s9, s7
4016; GFX900-NEXT: s_mov_b32 s10, s12
4017; GFX900-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07004018; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07004019; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07004020; GFX900-NEXT: ;;#ASMEND
4021; GFX900-NEXT: s_setpc_b64 s[30:31]
4022;
4023; GFX90A-LABEL: s_shuffle_v2i64_v3i64__1_5:
4024; GFX90A: ; %bb.0:
4025; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4026; GFX90A-NEXT: ;;#ASMSTART
4027; GFX90A-NEXT: ; def s[4:9]
4028; GFX90A-NEXT: ;;#ASMEND
4029; GFX90A-NEXT: ;;#ASMSTART
4030; GFX90A-NEXT: ; def s[8:13]
4031; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07004032; GFX90A-NEXT: s_mov_b32 s8, s6
4033; GFX90A-NEXT: s_mov_b32 s9, s7
4034; GFX90A-NEXT: s_mov_b32 s10, s12
4035; GFX90A-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07004036; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07004037; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07004038; GFX90A-NEXT: ;;#ASMEND
4039; GFX90A-NEXT: s_setpc_b64 s[30:31]
4040;
Fabian Rittera33a84e2025-02-13 15:17:12 +01004041; GFX942-LABEL: s_shuffle_v2i64_v3i64__1_5:
4042; GFX942: ; %bb.0:
4043; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4044; GFX942-NEXT: ;;#ASMSTART
4045; GFX942-NEXT: ; def s[8:13]
4046; GFX942-NEXT: ;;#ASMEND
4047; GFX942-NEXT: ;;#ASMSTART
4048; GFX942-NEXT: ; def s[0:5]
4049; GFX942-NEXT: ;;#ASMEND
4050; GFX942-NEXT: s_mov_b32 s8, s2
4051; GFX942-NEXT: s_mov_b32 s9, s3
4052; GFX942-NEXT: s_mov_b32 s10, s12
4053; GFX942-NEXT: s_mov_b32 s11, s13
4054; GFX942-NEXT: ;;#ASMSTART
4055; GFX942-NEXT: ; use s[8:11]
4056; GFX942-NEXT: ;;#ASMEND
4057; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07004058 %vec0 = call <3 x i64> asm "; def $0", "=s"()
4059 %vec1 = call <3 x i64> asm "; def $0", "=s"()
4060 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 1, i32 5>
Matt Arsenault585858a2025-01-21 10:34:53 +07004061 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07004062 ret void
4063}
4064
4065define void @s_shuffle_v2i64_v3i64__2_5() {
4066; GFX900-LABEL: s_shuffle_v2i64_v3i64__2_5:
4067; GFX900: ; %bb.0:
4068; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4069; GFX900-NEXT: ;;#ASMSTART
4070; GFX900-NEXT: ; def s[4:9]
4071; GFX900-NEXT: ;;#ASMEND
4072; GFX900-NEXT: ;;#ASMSTART
4073; GFX900-NEXT: ; def s[12:17]
4074; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07004075; GFX900-NEXT: s_mov_b32 s10, s16
4076; GFX900-NEXT: s_mov_b32 s11, s17
Matt Arsenault77862662025-01-21 10:08:42 +07004077; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07004078; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07004079; GFX900-NEXT: ;;#ASMEND
4080; GFX900-NEXT: s_setpc_b64 s[30:31]
4081;
4082; GFX90A-LABEL: s_shuffle_v2i64_v3i64__2_5:
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:9]
4087; GFX90A-NEXT: ;;#ASMEND
4088; GFX90A-NEXT: ;;#ASMSTART
4089; GFX90A-NEXT: ; def s[12:17]
4090; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07004091; GFX90A-NEXT: s_mov_b32 s10, s16
4092; GFX90A-NEXT: s_mov_b32 s11, s17
Matt Arsenault77862662025-01-21 10:08:42 +07004093; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07004094; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07004095; GFX90A-NEXT: ;;#ASMEND
4096; GFX90A-NEXT: s_setpc_b64 s[30:31]
4097;
Fabian Rittera33a84e2025-02-13 15:17:12 +01004098; GFX942-LABEL: s_shuffle_v2i64_v3i64__2_5:
4099; GFX942: ; %bb.0:
4100; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4101; GFX942-NEXT: ;;#ASMSTART
4102; GFX942-NEXT: ; def s[8:13]
4103; GFX942-NEXT: ;;#ASMEND
4104; GFX942-NEXT: ;;#ASMSTART
4105; GFX942-NEXT: ; def s[0:5]
4106; GFX942-NEXT: ;;#ASMEND
4107; GFX942-NEXT: s_mov_b32 s8, s4
4108; GFX942-NEXT: s_mov_b32 s9, s5
4109; GFX942-NEXT: s_mov_b32 s10, s12
4110; GFX942-NEXT: s_mov_b32 s11, s13
4111; GFX942-NEXT: ;;#ASMSTART
4112; GFX942-NEXT: ; use s[8:11]
4113; GFX942-NEXT: ;;#ASMEND
4114; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07004115 %vec0 = call <3 x i64> asm "; def $0", "=s"()
4116 %vec1 = call <3 x i64> asm "; def $0", "=s"()
4117 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 2, i32 5>
Matt Arsenault585858a2025-01-21 10:34:53 +07004118 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07004119 ret void
4120}
4121
4122define void @s_shuffle_v2i64_v3i64__3_5() {
Matt Arsenault585858a2025-01-21 10:34:53 +07004123; GFX9-LABEL: s_shuffle_v2i64_v3i64__3_5:
4124; GFX9: ; %bb.0:
4125; GFX9-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4126; GFX9-NEXT: ;;#ASMSTART
4127; GFX9-NEXT: ; def s[8:13]
4128; GFX9-NEXT: ;;#ASMEND
4129; GFX9-NEXT: s_mov_b32 s10, s12
4130; GFX9-NEXT: s_mov_b32 s11, s13
4131; GFX9-NEXT: ;;#ASMSTART
4132; GFX9-NEXT: ; use s[8:11]
4133; GFX9-NEXT: ;;#ASMEND
4134; GFX9-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07004135 %vec0 = call <3 x i64> asm "; def $0", "=s"()
4136 %vec1 = call <3 x i64> asm "; def $0", "=s"()
4137 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 3, i32 5>
Matt Arsenault585858a2025-01-21 10:34:53 +07004138 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07004139 ret void
4140}
4141
4142define void @s_shuffle_v2i64_v3i64__4_5() {
4143; GFX900-LABEL: s_shuffle_v2i64_v3i64__4_5:
4144; GFX900: ; %bb.0:
4145; GFX900-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4146; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07004147; GFX900-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07004148; GFX900-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07004149; GFX900-NEXT: s_mov_b32 s8, s10
4150; GFX900-NEXT: s_mov_b32 s9, s11
4151; GFX900-NEXT: s_mov_b32 s10, s12
4152; GFX900-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07004153; GFX900-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07004154; GFX900-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07004155; GFX900-NEXT: ;;#ASMEND
4156; GFX900-NEXT: s_setpc_b64 s[30:31]
4157;
4158; GFX90A-LABEL: s_shuffle_v2i64_v3i64__4_5:
4159; GFX90A: ; %bb.0:
4160; GFX90A-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4161; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07004162; GFX90A-NEXT: ; def s[8:13]
Matt Arsenault77862662025-01-21 10:08:42 +07004163; GFX90A-NEXT: ;;#ASMEND
Matt Arsenault585858a2025-01-21 10:34:53 +07004164; GFX90A-NEXT: s_mov_b32 s8, s10
4165; GFX90A-NEXT: s_mov_b32 s9, s11
4166; GFX90A-NEXT: s_mov_b32 s10, s12
4167; GFX90A-NEXT: s_mov_b32 s11, s13
Matt Arsenault77862662025-01-21 10:08:42 +07004168; GFX90A-NEXT: ;;#ASMSTART
Matt Arsenault585858a2025-01-21 10:34:53 +07004169; GFX90A-NEXT: ; use s[8:11]
Matt Arsenault77862662025-01-21 10:08:42 +07004170; GFX90A-NEXT: ;;#ASMEND
4171; GFX90A-NEXT: s_setpc_b64 s[30:31]
4172;
Fabian Rittera33a84e2025-02-13 15:17:12 +01004173; GFX942-LABEL: s_shuffle_v2i64_v3i64__4_5:
4174; GFX942: ; %bb.0:
4175; GFX942-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4176; GFX942-NEXT: ;;#ASMSTART
4177; GFX942-NEXT: ; def s[0:5]
4178; GFX942-NEXT: ;;#ASMEND
4179; GFX942-NEXT: s_mov_b32 s8, s2
4180; GFX942-NEXT: s_mov_b32 s9, s3
4181; GFX942-NEXT: s_mov_b32 s10, s4
4182; GFX942-NEXT: s_mov_b32 s11, s5
4183; GFX942-NEXT: ;;#ASMSTART
4184; GFX942-NEXT: ; use s[8:11]
4185; GFX942-NEXT: ;;#ASMEND
4186; GFX942-NEXT: s_setpc_b64 s[30:31]
Matt Arsenault77862662025-01-21 10:08:42 +07004187 %vec0 = call <3 x i64> asm "; def $0", "=s"()
4188 %vec1 = call <3 x i64> asm "; def $0", "=s"()
4189 %shuf = shufflevector <3 x i64> %vec0, <3 x i64> %vec1, <2 x i32> <i32 4, i32 5>
Matt Arsenault585858a2025-01-21 10:34:53 +07004190 call void asm sideeffect "; use $0", "{s[8:11]}"(<2 x i64> %shuf)
Matt Arsenault77862662025-01-21 10:08:42 +07004191 ret void
4192}
4193;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
4194; GFX90APLUS: {{.*}}