[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / shufflevector.v4f32.v2f32.ll
blob9e3c044a76295f0f0376bf16df8cf36767f186bb
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
2 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 < %s | FileCheck -check-prefixes=GFX9,GFX900 %s
3 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX90A %s
4 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx940 < %s | FileCheck -check-prefixes=GFX9,GFX90APLUS,GFX940 %s
7 define void @v_shuffle_v4f32_v2f32__u_u_u_u(ptr addrspace(1) inreg %ptr) {
8 ; GFX9-LABEL: v_shuffle_v4f32_v2f32__u_u_u_u:
9 ; GFX9:       ; %bb.0:
10 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
11 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
12   %vec0 = call <2 x float> asm "; def $0", "=v"()
13   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> poison
14   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
15   ret void
18 define void @v_shuffle_v4f32_v2f32__0_u_u_u(ptr addrspace(1) inreg %ptr) {
19 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__0_u_u_u:
20 ; GFX900:       ; %bb.0:
21 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
23 ; GFX900-NEXT:    ;;#ASMSTART
24 ; GFX900-NEXT:    ; def v[0:1]
25 ; GFX900-NEXT:    ;;#ASMEND
26 ; GFX900-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
27 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
28 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
30 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__0_u_u_u:
31 ; GFX90A:       ; %bb.0:
32 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
34 ; GFX90A-NEXT:    ;;#ASMSTART
35 ; GFX90A-NEXT:    ; def v[0:1]
36 ; GFX90A-NEXT:    ;;#ASMEND
37 ; GFX90A-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
38 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
39 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
41 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__0_u_u_u:
42 ; GFX940:       ; %bb.0:
43 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
45 ; GFX940-NEXT:    ;;#ASMSTART
46 ; GFX940-NEXT:    ; def v[0:1]
47 ; GFX940-NEXT:    ;;#ASMEND
48 ; GFX940-NEXT:    global_store_dwordx4 v2, v[0:3], s[0:1] sc0 sc1
49 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
50 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
51   %vec0 = call <2 x float> asm "; def $0", "=v"()
52   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>
53   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
54   ret void
57 define void @v_shuffle_v4f32_v2f32__1_u_u_u(ptr addrspace(1) inreg %ptr) {
58 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__1_u_u_u:
59 ; GFX900:       ; %bb.0:
60 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
61 ; GFX900-NEXT:    ;;#ASMSTART
62 ; GFX900-NEXT:    ; def v[0:1]
63 ; GFX900-NEXT:    ;;#ASMEND
64 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
65 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
66 ; GFX900-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
67 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
68 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
70 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__1_u_u_u:
71 ; GFX90A:       ; %bb.0:
72 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
73 ; GFX90A-NEXT:    ;;#ASMSTART
74 ; GFX90A-NEXT:    ; def v[0:1]
75 ; GFX90A-NEXT:    ;;#ASMEND
76 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
77 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
78 ; GFX90A-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
79 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
80 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
82 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__1_u_u_u:
83 ; GFX940:       ; %bb.0:
84 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
85 ; GFX940-NEXT:    ;;#ASMSTART
86 ; GFX940-NEXT:    ; def v[0:1]
87 ; GFX940-NEXT:    ;;#ASMEND
88 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
89 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
90 ; GFX940-NEXT:    global_store_dwordx4 v2, v[0:3], s[0:1] sc0 sc1
91 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
92 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
93   %vec0 = call <2 x float> asm "; def $0", "=v"()
94   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>
95   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
96   ret void
99 define void @v_shuffle_v4f32_v2f32__2_u_u_u(ptr addrspace(1) inreg %ptr) {
100 ; GFX9-LABEL: v_shuffle_v4f32_v2f32__2_u_u_u:
101 ; GFX9:       ; %bb.0:
102 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
103 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
104   %vec0 = call <2 x float> asm "; def $0", "=v"()
105   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>
106   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
107   ret void
110 define void @v_shuffle_v4f32_v2f32__3_u_u_u(ptr addrspace(1) inreg %ptr) {
111 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_u_u_u:
112 ; GFX900:       ; %bb.0:
113 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
114 ; GFX900-NEXT:    ;;#ASMSTART
115 ; GFX900-NEXT:    ; def v[0:1]
116 ; GFX900-NEXT:    ;;#ASMEND
117 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
118 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
119 ; GFX900-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
120 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
121 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
123 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_u_u_u:
124 ; GFX90A:       ; %bb.0:
125 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
126 ; GFX90A-NEXT:    ;;#ASMSTART
127 ; GFX90A-NEXT:    ; def v[0:1]
128 ; GFX90A-NEXT:    ;;#ASMEND
129 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
130 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
131 ; GFX90A-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
132 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
133 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
135 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_u_u_u:
136 ; GFX940:       ; %bb.0:
137 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
138 ; GFX940-NEXT:    ;;#ASMSTART
139 ; GFX940-NEXT:    ; def v[0:1]
140 ; GFX940-NEXT:    ;;#ASMEND
141 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
142 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
143 ; GFX940-NEXT:    global_store_dwordx4 v2, v[0:3], s[0:1] sc0 sc1
144 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
145 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
146   %vec0 = call <2 x float> asm "; def $0", "=v"()
147   %vec1 = call <2 x float> asm "; def $0", "=v"()
148   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>
149   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
150   ret void
153 define void @v_shuffle_v4f32_v2f32__3_0_u_u(ptr addrspace(1) inreg %ptr) {
154 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_0_u_u:
155 ; GFX900:       ; %bb.0:
156 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
157 ; GFX900-NEXT:    ;;#ASMSTART
158 ; GFX900-NEXT:    ; def v[1:2]
159 ; GFX900-NEXT:    ;;#ASMEND
160 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
161 ; GFX900-NEXT:    ;;#ASMSTART
162 ; GFX900-NEXT:    ; def v[2:3]
163 ; GFX900-NEXT:    ;;#ASMEND
164 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
165 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
166 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
167 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
169 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_0_u_u:
170 ; GFX90A:       ; %bb.0:
171 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
172 ; GFX90A-NEXT:    ;;#ASMSTART
173 ; GFX90A-NEXT:    ; def v[0:1]
174 ; GFX90A-NEXT:    ;;#ASMEND
175 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
176 ; GFX90A-NEXT:    ;;#ASMSTART
177 ; GFX90A-NEXT:    ; def v[2:3]
178 ; GFX90A-NEXT:    ;;#ASMEND
179 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]
180 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
181 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
182 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
184 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_0_u_u:
185 ; GFX940:       ; %bb.0:
186 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
187 ; GFX940-NEXT:    ;;#ASMSTART
188 ; GFX940-NEXT:    ; def v[0:1]
189 ; GFX940-NEXT:    ;;#ASMEND
190 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
191 ; GFX940-NEXT:    ;;#ASMSTART
192 ; GFX940-NEXT:    ; def v[2:3]
193 ; GFX940-NEXT:    ;;#ASMEND
194 ; GFX940-NEXT:    s_nop 0
195 ; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]
196 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
197 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
198 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
199   %vec0 = call <2 x float> asm "; def $0", "=v"()
200   %vec1 = call <2 x float> asm "; def $0", "=v"()
201   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 poison, i32 poison>
202   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
203   ret void
206 define void @v_shuffle_v4f32_v2f32__3_1_u_u(ptr addrspace(1) inreg %ptr) {
207 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_1_u_u:
208 ; GFX900:       ; %bb.0:
209 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
210 ; GFX900-NEXT:    ;;#ASMSTART
211 ; GFX900-NEXT:    ; def v[0:1]
212 ; GFX900-NEXT:    ;;#ASMEND
213 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
214 ; GFX900-NEXT:    ;;#ASMSTART
215 ; GFX900-NEXT:    ; def v[2:3]
216 ; GFX900-NEXT:    ;;#ASMEND
217 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
218 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
219 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
220 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
222 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_1_u_u:
223 ; GFX90A:       ; %bb.0:
224 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
225 ; GFX90A-NEXT:    ;;#ASMSTART
226 ; GFX90A-NEXT:    ; def v[0:1]
227 ; GFX90A-NEXT:    ;;#ASMEND
228 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
229 ; GFX90A-NEXT:    ;;#ASMSTART
230 ; GFX90A-NEXT:    ; def v[2:3]
231 ; GFX90A-NEXT:    ;;#ASMEND
232 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
233 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
234 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
235 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
237 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_1_u_u:
238 ; GFX940:       ; %bb.0:
239 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
240 ; GFX940-NEXT:    ;;#ASMSTART
241 ; GFX940-NEXT:    ; def v[0:1]
242 ; GFX940-NEXT:    ;;#ASMEND
243 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
244 ; GFX940-NEXT:    ;;#ASMSTART
245 ; GFX940-NEXT:    ; def v[2:3]
246 ; GFX940-NEXT:    ;;#ASMEND
247 ; GFX940-NEXT:    s_nop 0
248 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
249 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
250 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
251 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
252   %vec0 = call <2 x float> asm "; def $0", "=v"()
253   %vec1 = call <2 x float> asm "; def $0", "=v"()
254   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 poison, i32 poison>
255   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
256   ret void
259 define void @v_shuffle_v4f32_v2f32__3_2_u_u(ptr addrspace(1) inreg %ptr) {
260 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_2_u_u:
261 ; GFX900:       ; %bb.0:
262 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
263 ; GFX900-NEXT:    v_mov_b32_e32 v3, 0
264 ; GFX900-NEXT:    ;;#ASMSTART
265 ; GFX900-NEXT:    ; def v[1:2]
266 ; GFX900-NEXT:    ;;#ASMEND
267 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
268 ; GFX900-NEXT:    global_store_dwordx4 v3, v[0:3], s[16:17]
269 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
270 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
272 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_2_u_u:
273 ; GFX90A:       ; %bb.0:
274 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
275 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
276 ; GFX90A-NEXT:    ;;#ASMSTART
277 ; GFX90A-NEXT:    ; def v[2:3]
278 ; GFX90A-NEXT:    ;;#ASMEND
279 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
280 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v2
281 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
282 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
283 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
285 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_2_u_u:
286 ; GFX940:       ; %bb.0:
287 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
288 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
289 ; GFX940-NEXT:    ;;#ASMSTART
290 ; GFX940-NEXT:    ; def v[2:3]
291 ; GFX940-NEXT:    ;;#ASMEND
292 ; GFX940-NEXT:    s_nop 0
293 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
294 ; GFX940-NEXT:    v_mov_b32_e32 v1, v2
295 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
296 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
297 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
298   %vec0 = call <2 x float> asm "; def $0", "=v"()
299   %vec1 = call <2 x float> asm "; def $0", "=v"()
300   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 poison, i32 poison>
301   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
302   ret void
305 define void @v_shuffle_v4f32_v2f32__3_3_u_u(ptr addrspace(1) inreg %ptr) {
306 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_u_u:
307 ; GFX900:       ; %bb.0:
308 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
309 ; GFX900-NEXT:    ;;#ASMSTART
310 ; GFX900-NEXT:    ; def v[0:1]
311 ; GFX900-NEXT:    ;;#ASMEND
312 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
313 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
314 ; GFX900-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
315 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
316 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
318 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_u_u:
319 ; GFX90A:       ; %bb.0:
320 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
321 ; GFX90A-NEXT:    ;;#ASMSTART
322 ; GFX90A-NEXT:    ; def v[0:1]
323 ; GFX90A-NEXT:    ;;#ASMEND
324 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
325 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
326 ; GFX90A-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
327 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
328 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
330 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_u_u:
331 ; GFX940:       ; %bb.0:
332 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
333 ; GFX940-NEXT:    ;;#ASMSTART
334 ; GFX940-NEXT:    ; def v[0:1]
335 ; GFX940-NEXT:    ;;#ASMEND
336 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
337 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
338 ; GFX940-NEXT:    global_store_dwordx4 v2, v[0:3], s[0:1] sc0 sc1
339 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
340 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
341   %vec0 = call <2 x float> asm "; def $0", "=v"()
342   %vec1 = call <2 x float> asm "; def $0", "=v"()
343   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 poison>
344   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
345   ret void
348 define void @v_shuffle_v4f32_v2f32__3_3_0_u(ptr addrspace(1) inreg %ptr) {
349 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_0_u:
350 ; GFX900:       ; %bb.0:
351 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
352 ; GFX900-NEXT:    ;;#ASMSTART
353 ; GFX900-NEXT:    ; def v[0:1]
354 ; GFX900-NEXT:    ;;#ASMEND
355 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
356 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
357 ; GFX900-NEXT:    ;;#ASMSTART
358 ; GFX900-NEXT:    ; def v[2:3]
359 ; GFX900-NEXT:    ;;#ASMEND
360 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
361 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
362 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
364 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_0_u:
365 ; GFX90A:       ; %bb.0:
366 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
367 ; GFX90A-NEXT:    ;;#ASMSTART
368 ; GFX90A-NEXT:    ; def v[0:1]
369 ; GFX90A-NEXT:    ;;#ASMEND
370 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
371 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
372 ; GFX90A-NEXT:    ;;#ASMSTART
373 ; GFX90A-NEXT:    ; def v[2:3]
374 ; GFX90A-NEXT:    ;;#ASMEND
375 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
376 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
377 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
379 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_0_u:
380 ; GFX940:       ; %bb.0:
381 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
382 ; GFX940-NEXT:    ;;#ASMSTART
383 ; GFX940-NEXT:    ; def v[0:1]
384 ; GFX940-NEXT:    ;;#ASMEND
385 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
386 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
387 ; GFX940-NEXT:    ;;#ASMSTART
388 ; GFX940-NEXT:    ; def v[2:3]
389 ; GFX940-NEXT:    ;;#ASMEND
390 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
391 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
392 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
393   %vec0 = call <2 x float> asm "; def $0", "=v"()
394   %vec1 = call <2 x float> asm "; def $0", "=v"()
395   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 poison>
396   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
397   ret void
400 define void @v_shuffle_v4f32_v2f32__3_3_1_u(ptr addrspace(1) inreg %ptr) {
401 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_1_u:
402 ; GFX900:       ; %bb.0:
403 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
404 ; GFX900-NEXT:    ;;#ASMSTART
405 ; GFX900-NEXT:    ; def v[1:2]
406 ; GFX900-NEXT:    ;;#ASMEND
407 ; GFX900-NEXT:    ;;#ASMSTART
408 ; GFX900-NEXT:    ; def v[0:1]
409 ; GFX900-NEXT:    ;;#ASMEND
410 ; GFX900-NEXT:    v_mov_b32_e32 v3, 0
411 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
412 ; GFX900-NEXT:    global_store_dwordx4 v3, v[0:3], s[16:17]
413 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
414 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
416 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_1_u:
417 ; GFX90A:       ; %bb.0:
418 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
419 ; GFX90A-NEXT:    ;;#ASMSTART
420 ; GFX90A-NEXT:    ; def v[2:3]
421 ; GFX90A-NEXT:    ;;#ASMEND
422 ; GFX90A-NEXT:    ;;#ASMSTART
423 ; GFX90A-NEXT:    ; def v[0:1]
424 ; GFX90A-NEXT:    ;;#ASMEND
425 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
426 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
427 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
428 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
429 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
430 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
432 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_1_u:
433 ; GFX940:       ; %bb.0:
434 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
435 ; GFX940-NEXT:    ;;#ASMSTART
436 ; GFX940-NEXT:    ; def v[2:3]
437 ; GFX940-NEXT:    ;;#ASMEND
438 ; GFX940-NEXT:    ;;#ASMSTART
439 ; GFX940-NEXT:    ; def v[0:1]
440 ; GFX940-NEXT:    ;;#ASMEND
441 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
442 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
443 ; GFX940-NEXT:    v_mov_b32_e32 v2, v3
444 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
445 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
446 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
447   %vec0 = call <2 x float> asm "; def $0", "=v"()
448   %vec1 = call <2 x float> asm "; def $0", "=v"()
449   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 poison>
450   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
451   ret void
454 define void @v_shuffle_v4f32_v2f32__3_3_2_u(ptr addrspace(1) inreg %ptr) {
455 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_2_u:
456 ; GFX900:       ; %bb.0:
457 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
458 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
459 ; GFX900-NEXT:    ;;#ASMSTART
460 ; GFX900-NEXT:    ; def v[2:3]
461 ; GFX900-NEXT:    ;;#ASMEND
462 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
463 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
464 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
465 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
466 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
468 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_2_u:
469 ; GFX90A:       ; %bb.0:
470 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
471 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
472 ; GFX90A-NEXT:    ;;#ASMSTART
473 ; GFX90A-NEXT:    ; def v[2:3]
474 ; GFX90A-NEXT:    ;;#ASMEND
475 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
476 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
477 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
478 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
479 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
481 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_2_u:
482 ; GFX940:       ; %bb.0:
483 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
484 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
485 ; GFX940-NEXT:    ;;#ASMSTART
486 ; GFX940-NEXT:    ; def v[2:3]
487 ; GFX940-NEXT:    ;;#ASMEND
488 ; GFX940-NEXT:    s_nop 0
489 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
490 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
491 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
492 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
493 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
494   %vec0 = call <2 x float> asm "; def $0", "=v"()
495   %vec1 = call <2 x float> asm "; def $0", "=v"()
496   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 poison>
497   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
498   ret void
501 define void @v_shuffle_v4f32_v2f32__3_3_3_u(ptr addrspace(1) inreg %ptr) {
502 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_3_u:
503 ; GFX900:       ; %bb.0:
504 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
505 ; GFX900-NEXT:    ;;#ASMSTART
506 ; GFX900-NEXT:    ; def v[0:1]
507 ; GFX900-NEXT:    ;;#ASMEND
508 ; GFX900-NEXT:    v_mov_b32_e32 v3, 0
509 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
510 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
511 ; GFX900-NEXT:    global_store_dwordx4 v3, v[0:3], s[16:17]
512 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
513 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
515 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_3_u:
516 ; GFX90A:       ; %bb.0:
517 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
518 ; GFX90A-NEXT:    ;;#ASMSTART
519 ; GFX90A-NEXT:    ; def v[0:1]
520 ; GFX90A-NEXT:    ;;#ASMEND
521 ; GFX90A-NEXT:    v_mov_b32_e32 v3, 0
522 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
523 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
524 ; GFX90A-NEXT:    global_store_dwordx4 v3, v[0:3], s[16:17]
525 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
526 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
528 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_3_u:
529 ; GFX940:       ; %bb.0:
530 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
531 ; GFX940-NEXT:    ;;#ASMSTART
532 ; GFX940-NEXT:    ; def v[0:1]
533 ; GFX940-NEXT:    ;;#ASMEND
534 ; GFX940-NEXT:    v_mov_b32_e32 v3, 0
535 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
536 ; GFX940-NEXT:    v_mov_b32_e32 v2, v1
537 ; GFX940-NEXT:    global_store_dwordx4 v3, v[0:3], s[0:1] sc0 sc1
538 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
539 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
540   %vec0 = call <2 x float> asm "; def $0", "=v"()
541   %vec1 = call <2 x float> asm "; def $0", "=v"()
542   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 poison>
543   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
544   ret void
547 define void @v_shuffle_v4f32_v2f32__3_3_3_0(ptr addrspace(1) inreg %ptr) {
548 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_3_0:
549 ; GFX900:       ; %bb.0:
550 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
551 ; GFX900-NEXT:    ;;#ASMSTART
552 ; GFX900-NEXT:    ; def v[0:1]
553 ; GFX900-NEXT:    ;;#ASMEND
554 ; GFX900-NEXT:    v_mov_b32_e32 v5, 0
555 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
556 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
557 ; GFX900-NEXT:    ;;#ASMSTART
558 ; GFX900-NEXT:    ; def v[3:4]
559 ; GFX900-NEXT:    ;;#ASMEND
560 ; GFX900-NEXT:    global_store_dwordx4 v5, v[0:3], s[16:17]
561 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
562 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
564 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_3_0:
565 ; GFX90A:       ; %bb.0:
566 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
567 ; GFX90A-NEXT:    ;;#ASMSTART
568 ; GFX90A-NEXT:    ; def v[2:3]
569 ; GFX90A-NEXT:    ;;#ASMEND
570 ; GFX90A-NEXT:    ;;#ASMSTART
571 ; GFX90A-NEXT:    ; def v[0:1]
572 ; GFX90A-NEXT:    ;;#ASMEND
573 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
574 ; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[2:3] op_sel:[1,0]
575 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
576 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
577 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
578 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
580 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_3_0:
581 ; GFX940:       ; %bb.0:
582 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
583 ; GFX940-NEXT:    ;;#ASMSTART
584 ; GFX940-NEXT:    ; def v[2:3]
585 ; GFX940-NEXT:    ;;#ASMEND
586 ; GFX940-NEXT:    ;;#ASMSTART
587 ; GFX940-NEXT:    ; def v[0:1]
588 ; GFX940-NEXT:    ;;#ASMEND
589 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
590 ; GFX940-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[2:3] op_sel:[1,0]
591 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
592 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
593 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
594 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
595   %vec0 = call <2 x float> asm "; def $0", "=v"()
596   %vec1 = call <2 x float> asm "; def $0", "=v"()
597   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 0>
598   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
599   ret void
602 define void @v_shuffle_v4f32_v2f32__3_3_3_1(ptr addrspace(1) inreg %ptr) {
603 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_3_1:
604 ; GFX900:       ; %bb.0:
605 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
606 ; GFX900-NEXT:    ;;#ASMSTART
607 ; GFX900-NEXT:    ; def v[2:3]
608 ; GFX900-NEXT:    ;;#ASMEND
609 ; GFX900-NEXT:    ;;#ASMSTART
610 ; GFX900-NEXT:    ; def v[0:1]
611 ; GFX900-NEXT:    ;;#ASMEND
612 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
613 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
614 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
615 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
616 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
617 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
619 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_3_1:
620 ; GFX90A:       ; %bb.0:
621 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
622 ; GFX90A-NEXT:    ;;#ASMSTART
623 ; GFX90A-NEXT:    ; def v[2:3]
624 ; GFX90A-NEXT:    ;;#ASMEND
625 ; GFX90A-NEXT:    ;;#ASMSTART
626 ; GFX90A-NEXT:    ; def v[0:1]
627 ; GFX90A-NEXT:    ;;#ASMEND
628 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
629 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
630 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
631 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
632 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
633 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
635 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_3_1:
636 ; GFX940:       ; %bb.0:
637 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
638 ; GFX940-NEXT:    ;;#ASMSTART
639 ; GFX940-NEXT:    ; def v[2:3]
640 ; GFX940-NEXT:    ;;#ASMEND
641 ; GFX940-NEXT:    ;;#ASMSTART
642 ; GFX940-NEXT:    ; def v[0:1]
643 ; GFX940-NEXT:    ;;#ASMEND
644 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
645 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
646 ; GFX940-NEXT:    v_mov_b32_e32 v2, v1
647 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
648 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
649 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
650   %vec0 = call <2 x float> asm "; def $0", "=v"()
651   %vec1 = call <2 x float> asm "; def $0", "=v"()
652   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 1>
653   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
654   ret void
657 define void @v_shuffle_v4f32_v2f32__3_3_3_2(ptr addrspace(1) inreg %ptr) {
658 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_3_2:
659 ; GFX900:       ; %bb.0:
660 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
661 ; GFX900-NEXT:    v_mov_b32_e32 v5, 0
662 ; GFX900-NEXT:    ;;#ASMSTART
663 ; GFX900-NEXT:    ; def v[3:4]
664 ; GFX900-NEXT:    ;;#ASMEND
665 ; GFX900-NEXT:    v_mov_b32_e32 v0, v4
666 ; GFX900-NEXT:    v_mov_b32_e32 v1, v4
667 ; GFX900-NEXT:    v_mov_b32_e32 v2, v4
668 ; GFX900-NEXT:    global_store_dwordx4 v5, v[0:3], s[16:17]
669 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
670 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
672 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_3_2:
673 ; GFX90A:       ; %bb.0:
674 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
675 ; GFX90A-NEXT:    ;;#ASMSTART
676 ; GFX90A-NEXT:    ; def v[0:1]
677 ; GFX90A-NEXT:    ;;#ASMEND
678 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
679 ; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[1,0]
680 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
681 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
682 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
683 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
685 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_3_2:
686 ; GFX940:       ; %bb.0:
687 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
688 ; GFX940-NEXT:    ;;#ASMSTART
689 ; GFX940-NEXT:    ; def v[0:1]
690 ; GFX940-NEXT:    ;;#ASMEND
691 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
692 ; GFX940-NEXT:    v_pk_mov_b32 v[2:3], v[0:1], v[0:1] op_sel:[1,0]
693 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
694 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
695 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
696 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
697   %vec0 = call <2 x float> asm "; def $0", "=v"()
698   %vec1 = call <2 x float> asm "; def $0", "=v"()
699   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 2>
700   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
701   ret void
704 define void @v_shuffle_v4f32_v2f32__3_3_3_3(ptr addrspace(1) inreg %ptr) {
705 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_3_3:
706 ; GFX900:       ; %bb.0:
707 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
708 ; GFX900-NEXT:    ;;#ASMSTART
709 ; GFX900-NEXT:    ; def v[0:1]
710 ; GFX900-NEXT:    ;;#ASMEND
711 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
712 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
713 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
714 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
715 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
716 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
717 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
719 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_3_3:
720 ; GFX90A:       ; %bb.0:
721 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
722 ; GFX90A-NEXT:    ;;#ASMSTART
723 ; GFX90A-NEXT:    ; def v[0:1]
724 ; GFX90A-NEXT:    ;;#ASMEND
725 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
726 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
727 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
728 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
729 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
730 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
731 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
733 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_3_3:
734 ; GFX940:       ; %bb.0:
735 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
736 ; GFX940-NEXT:    ;;#ASMSTART
737 ; GFX940-NEXT:    ; def v[0:1]
738 ; GFX940-NEXT:    ;;#ASMEND
739 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
740 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
741 ; GFX940-NEXT:    v_mov_b32_e32 v2, v1
742 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
743 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
744 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
745 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
746   %vec0 = call <2 x float> asm "; def $0", "=v"()
747   %vec1 = call <2 x float> asm "; def $0", "=v"()
748   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
749   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
750   ret void
753 define void @v_shuffle_v4f32_v2f32__u_0_0_0(ptr addrspace(1) inreg %ptr) {
754 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__u_0_0_0:
755 ; GFX900:       ; %bb.0:
756 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
757 ; GFX900-NEXT:    ;;#ASMSTART
758 ; GFX900-NEXT:    ; def v[1:2]
759 ; GFX900-NEXT:    ;;#ASMEND
760 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
761 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
762 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
763 ; GFX900-NEXT:    global_store_dwordx4 v0, v[0:3], s[16:17]
764 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
765 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
767 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__u_0_0_0:
768 ; GFX90A:       ; %bb.0:
769 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
770 ; GFX90A-NEXT:    ;;#ASMSTART
771 ; GFX90A-NEXT:    ; def v[2:3]
772 ; GFX90A-NEXT:    ;;#ASMEND
773 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
774 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v2
775 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
776 ; GFX90A-NEXT:    global_store_dwordx4 v0, v[0:3], s[16:17]
777 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
778 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
780 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__u_0_0_0:
781 ; GFX940:       ; %bb.0:
782 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
783 ; GFX940-NEXT:    ;;#ASMSTART
784 ; GFX940-NEXT:    ; def v[2:3]
785 ; GFX940-NEXT:    ;;#ASMEND
786 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
787 ; GFX940-NEXT:    v_mov_b32_e32 v1, v2
788 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
789 ; GFX940-NEXT:    global_store_dwordx4 v0, v[0:3], s[0:1] sc0 sc1
790 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
791 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
792   %vec0 = call <2 x float> asm "; def $0", "=v"()
793   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
794   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
795   ret void
798 define void @v_shuffle_v4f32_v2f32__0_0_0_0(ptr addrspace(1) inreg %ptr) {
799 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__0_0_0_0:
800 ; GFX900:       ; %bb.0:
801 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
802 ; GFX900-NEXT:    ;;#ASMSTART
803 ; GFX900-NEXT:    ; def v[0:1]
804 ; GFX900-NEXT:    ;;#ASMEND
805 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
806 ; GFX900-NEXT:    v_mov_b32_e32 v1, v0
807 ; GFX900-NEXT:    v_mov_b32_e32 v2, v0
808 ; GFX900-NEXT:    v_mov_b32_e32 v3, v0
809 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
810 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
811 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
813 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__0_0_0_0:
814 ; GFX90A:       ; %bb.0:
815 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
816 ; GFX90A-NEXT:    ;;#ASMSTART
817 ; GFX90A-NEXT:    ; def v[0:1]
818 ; GFX90A-NEXT:    ;;#ASMEND
819 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
820 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v0
821 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
822 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v0
823 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
824 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
825 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
827 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__0_0_0_0:
828 ; GFX940:       ; %bb.0:
829 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
830 ; GFX940-NEXT:    ;;#ASMSTART
831 ; GFX940-NEXT:    ; def v[0:1]
832 ; GFX940-NEXT:    ;;#ASMEND
833 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
834 ; GFX940-NEXT:    v_mov_b32_e32 v1, v0
835 ; GFX940-NEXT:    v_mov_b32_e32 v2, v0
836 ; GFX940-NEXT:    v_mov_b32_e32 v3, v0
837 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
838 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
839 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
840   %vec0 = call <2 x float> asm "; def $0", "=v"()
841   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> zeroinitializer
842   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
843   ret void
846 define void @v_shuffle_v4f32_v2f32__1_0_0_0(ptr addrspace(1) inreg %ptr) {
847 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__1_0_0_0:
848 ; GFX900:       ; %bb.0:
849 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
850 ; GFX900-NEXT:    ;;#ASMSTART
851 ; GFX900-NEXT:    ; def v[1:2]
852 ; GFX900-NEXT:    ;;#ASMEND
853 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
854 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
855 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
856 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
857 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
858 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
859 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
861 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__1_0_0_0:
862 ; GFX90A:       ; %bb.0:
863 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
864 ; GFX90A-NEXT:    ;;#ASMSTART
865 ; GFX90A-NEXT:    ; def v[2:3]
866 ; GFX90A-NEXT:    ;;#ASMEND
867 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
868 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]
869 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
870 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
871 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
872 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
874 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__1_0_0_0:
875 ; GFX940:       ; %bb.0:
876 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
877 ; GFX940-NEXT:    ;;#ASMSTART
878 ; GFX940-NEXT:    ; def v[2:3]
879 ; GFX940-NEXT:    ;;#ASMEND
880 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
881 ; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]
882 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
883 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
884 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
885 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
886   %vec0 = call <2 x float> asm "; def $0", "=v"()
887   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
888   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
889   ret void
892 define void @v_shuffle_v4f32_v2f32__2_0_0_0(ptr addrspace(1) inreg %ptr) {
893 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__2_0_0_0:
894 ; GFX900:       ; %bb.0:
895 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
896 ; GFX900-NEXT:    ;;#ASMSTART
897 ; GFX900-NEXT:    ; def v[1:2]
898 ; GFX900-NEXT:    ;;#ASMEND
899 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
900 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
901 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
902 ; GFX900-NEXT:    global_store_dwordx4 v0, v[0:3], s[16:17]
903 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
904 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
906 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__2_0_0_0:
907 ; GFX90A:       ; %bb.0:
908 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
909 ; GFX90A-NEXT:    ;;#ASMSTART
910 ; GFX90A-NEXT:    ; def v[2:3]
911 ; GFX90A-NEXT:    ;;#ASMEND
912 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
913 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v2
914 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
915 ; GFX90A-NEXT:    global_store_dwordx4 v0, v[0:3], s[16:17]
916 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
917 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
919 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__2_0_0_0:
920 ; GFX940:       ; %bb.0:
921 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
922 ; GFX940-NEXT:    ;;#ASMSTART
923 ; GFX940-NEXT:    ; def v[2:3]
924 ; GFX940-NEXT:    ;;#ASMEND
925 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
926 ; GFX940-NEXT:    v_mov_b32_e32 v1, v2
927 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
928 ; GFX940-NEXT:    global_store_dwordx4 v0, v[0:3], s[0:1] sc0 sc1
929 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
930 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
931   %vec0 = call <2 x float> asm "; def $0", "=v"()
932   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
933   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
934   ret void
937 define void @v_shuffle_v4f32_v2f32__3_0_0_0(ptr addrspace(1) inreg %ptr) {
938 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_0_0_0:
939 ; GFX900:       ; %bb.0:
940 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
941 ; GFX900-NEXT:    ;;#ASMSTART
942 ; GFX900-NEXT:    ; def v[1:2]
943 ; GFX900-NEXT:    ;;#ASMEND
944 ; GFX900-NEXT:    ;;#ASMSTART
945 ; GFX900-NEXT:    ; def v[2:3]
946 ; GFX900-NEXT:    ;;#ASMEND
947 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
948 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
949 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
950 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
951 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
952 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
953 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
955 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_0_0_0:
956 ; GFX90A:       ; %bb.0:
957 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
958 ; GFX90A-NEXT:    ;;#ASMSTART
959 ; GFX90A-NEXT:    ; def v[2:3]
960 ; GFX90A-NEXT:    ;;#ASMEND
961 ; GFX90A-NEXT:    ;;#ASMSTART
962 ; GFX90A-NEXT:    ; def v[0:1]
963 ; GFX90A-NEXT:    ;;#ASMEND
964 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
965 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[2:3] op_sel:[1,0]
966 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
967 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
968 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
969 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
971 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_0_0_0:
972 ; GFX940:       ; %bb.0:
973 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
974 ; GFX940-NEXT:    ;;#ASMSTART
975 ; GFX940-NEXT:    ; def v[2:3]
976 ; GFX940-NEXT:    ;;#ASMEND
977 ; GFX940-NEXT:    ;;#ASMSTART
978 ; GFX940-NEXT:    ; def v[0:1]
979 ; GFX940-NEXT:    ;;#ASMEND
980 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
981 ; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[2:3] op_sel:[1,0]
982 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
983 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
984 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
985 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
986   %vec0 = call <2 x float> asm "; def $0", "=v"()
987   %vec1 = call <2 x float> asm "; def $0", "=v"()
988   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
989   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
990   ret void
993 define void @v_shuffle_v4f32_v2f32__3_u_0_0(ptr addrspace(1) inreg %ptr) {
994 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_u_0_0:
995 ; GFX900:       ; %bb.0:
996 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
997 ; GFX900-NEXT:    ;;#ASMSTART
998 ; GFX900-NEXT:    ; def v[2:3]
999 ; GFX900-NEXT:    ;;#ASMEND
1000 ; GFX900-NEXT:    ;;#ASMSTART
1001 ; GFX900-NEXT:    ; def v[0:1]
1002 ; GFX900-NEXT:    ;;#ASMEND
1003 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1004 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
1005 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
1006 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1007 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1008 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1010 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_u_0_0:
1011 ; GFX90A:       ; %bb.0:
1012 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1013 ; GFX90A-NEXT:    ;;#ASMSTART
1014 ; GFX90A-NEXT:    ; def v[2:3]
1015 ; GFX90A-NEXT:    ;;#ASMEND
1016 ; GFX90A-NEXT:    ;;#ASMSTART
1017 ; GFX90A-NEXT:    ; def v[0:1]
1018 ; GFX90A-NEXT:    ;;#ASMEND
1019 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1020 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1021 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
1022 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1023 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1024 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1026 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_u_0_0:
1027 ; GFX940:       ; %bb.0:
1028 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1029 ; GFX940-NEXT:    ;;#ASMSTART
1030 ; GFX940-NEXT:    ; def v[2:3]
1031 ; GFX940-NEXT:    ;;#ASMEND
1032 ; GFX940-NEXT:    ;;#ASMSTART
1033 ; GFX940-NEXT:    ; def v[0:1]
1034 ; GFX940-NEXT:    ;;#ASMEND
1035 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1036 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1037 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
1038 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1039 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1040 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1041   %vec0 = call <2 x float> asm "; def $0", "=v"()
1042   %vec1 = call <2 x float> asm "; def $0", "=v"()
1043   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 0, i32 0>
1044   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1045   ret void
1048 define void @v_shuffle_v4f32_v2f32__3_1_0_0(ptr addrspace(1) inreg %ptr) {
1049 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_1_0_0:
1050 ; GFX900:       ; %bb.0:
1051 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1052 ; GFX900-NEXT:    ;;#ASMSTART
1053 ; GFX900-NEXT:    ; def v[2:3]
1054 ; GFX900-NEXT:    ;;#ASMEND
1055 ; GFX900-NEXT:    ;;#ASMSTART
1056 ; GFX900-NEXT:    ; def v[0:1]
1057 ; GFX900-NEXT:    ;;#ASMEND
1058 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1059 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
1060 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
1061 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
1062 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1063 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1064 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1066 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_1_0_0:
1067 ; GFX90A:       ; %bb.0:
1068 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1069 ; GFX90A-NEXT:    ;;#ASMSTART
1070 ; GFX90A-NEXT:    ; def v[2:3]
1071 ; GFX90A-NEXT:    ;;#ASMEND
1072 ; GFX90A-NEXT:    ;;#ASMSTART
1073 ; GFX90A-NEXT:    ; def v[0:1]
1074 ; GFX90A-NEXT:    ;;#ASMEND
1075 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1076 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1077 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
1078 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
1079 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1080 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1081 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1083 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_1_0_0:
1084 ; GFX940:       ; %bb.0:
1085 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1086 ; GFX940-NEXT:    ;;#ASMSTART
1087 ; GFX940-NEXT:    ; def v[2:3]
1088 ; GFX940-NEXT:    ;;#ASMEND
1089 ; GFX940-NEXT:    ;;#ASMSTART
1090 ; GFX940-NEXT:    ; def v[0:1]
1091 ; GFX940-NEXT:    ;;#ASMEND
1092 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1093 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1094 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
1095 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
1096 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1097 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1098 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1099   %vec0 = call <2 x float> asm "; def $0", "=v"()
1100   %vec1 = call <2 x float> asm "; def $0", "=v"()
1101   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 0, i32 0>
1102   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1103   ret void
1106 define void @v_shuffle_v4f32_v2f32__3_2_0_0(ptr addrspace(1) inreg %ptr) {
1107 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_2_0_0:
1108 ; GFX900:       ; %bb.0:
1109 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1110 ; GFX900-NEXT:    ;;#ASMSTART
1111 ; GFX900-NEXT:    ; def v[1:2]
1112 ; GFX900-NEXT:    ;;#ASMEND
1113 ; GFX900-NEXT:    v_mov_b32_e32 v5, 0
1114 ; GFX900-NEXT:    ;;#ASMSTART
1115 ; GFX900-NEXT:    ; def v[3:4]
1116 ; GFX900-NEXT:    ;;#ASMEND
1117 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
1118 ; GFX900-NEXT:    v_mov_b32_e32 v2, v3
1119 ; GFX900-NEXT:    global_store_dwordx4 v5, v[0:3], s[16:17]
1120 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1121 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1123 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_2_0_0:
1124 ; GFX90A:       ; %bb.0:
1125 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1126 ; GFX90A-NEXT:    ;;#ASMSTART
1127 ; GFX90A-NEXT:    ; def v[2:3]
1128 ; GFX90A-NEXT:    ;;#ASMEND
1129 ; GFX90A-NEXT:    ;;#ASMSTART
1130 ; GFX90A-NEXT:    ; def v[0:1]
1131 ; GFX90A-NEXT:    ;;#ASMEND
1132 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1133 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]
1134 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
1135 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1136 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1137 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1139 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_2_0_0:
1140 ; GFX940:       ; %bb.0:
1141 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1142 ; GFX940-NEXT:    ;;#ASMSTART
1143 ; GFX940-NEXT:    ; def v[2:3]
1144 ; GFX940-NEXT:    ;;#ASMEND
1145 ; GFX940-NEXT:    ;;#ASMSTART
1146 ; GFX940-NEXT:    ; def v[0:1]
1147 ; GFX940-NEXT:    ;;#ASMEND
1148 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1149 ; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]
1150 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
1151 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1152 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1153 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1154   %vec0 = call <2 x float> asm "; def $0", "=v"()
1155   %vec1 = call <2 x float> asm "; def $0", "=v"()
1156   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 0, i32 0>
1157   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1158   ret void
1161 define void @v_shuffle_v4f32_v2f32__3_3_0_0(ptr addrspace(1) inreg %ptr) {
1162 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_0_0:
1163 ; GFX900:       ; %bb.0:
1164 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1165 ; GFX900-NEXT:    ;;#ASMSTART
1166 ; GFX900-NEXT:    ; def v[2:3]
1167 ; GFX900-NEXT:    ;;#ASMEND
1168 ; GFX900-NEXT:    ;;#ASMSTART
1169 ; GFX900-NEXT:    ; def v[0:1]
1170 ; GFX900-NEXT:    ;;#ASMEND
1171 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1172 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
1173 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
1174 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1175 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1176 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1178 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_0_0:
1179 ; GFX90A:       ; %bb.0:
1180 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1181 ; GFX90A-NEXT:    ;;#ASMSTART
1182 ; GFX90A-NEXT:    ; def v[2:3]
1183 ; GFX90A-NEXT:    ;;#ASMEND
1184 ; GFX90A-NEXT:    ;;#ASMSTART
1185 ; GFX90A-NEXT:    ; def v[0:1]
1186 ; GFX90A-NEXT:    ;;#ASMEND
1187 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1188 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1189 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
1190 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1191 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1192 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1194 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_0_0:
1195 ; GFX940:       ; %bb.0:
1196 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1197 ; GFX940-NEXT:    ;;#ASMSTART
1198 ; GFX940-NEXT:    ; def v[2:3]
1199 ; GFX940-NEXT:    ;;#ASMEND
1200 ; GFX940-NEXT:    ;;#ASMSTART
1201 ; GFX940-NEXT:    ; def v[0:1]
1202 ; GFX940-NEXT:    ;;#ASMEND
1203 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1204 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1205 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
1206 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1207 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1208 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1209   %vec0 = call <2 x float> asm "; def $0", "=v"()
1210   %vec1 = call <2 x float> asm "; def $0", "=v"()
1211   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>
1212   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1213   ret void
1216 define void @v_shuffle_v4f32_v2f32__3_3_u_0(ptr addrspace(1) inreg %ptr) {
1217 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_u_0:
1218 ; GFX900:       ; %bb.0:
1219 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1220 ; GFX900-NEXT:    ;;#ASMSTART
1221 ; GFX900-NEXT:    ; def v[2:3]
1222 ; GFX900-NEXT:    ;;#ASMEND
1223 ; GFX900-NEXT:    ;;#ASMSTART
1224 ; GFX900-NEXT:    ; def v[0:1]
1225 ; GFX900-NEXT:    ;;#ASMEND
1226 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1227 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
1228 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
1229 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1230 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1231 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1233 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_u_0:
1234 ; GFX90A:       ; %bb.0:
1235 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1236 ; GFX90A-NEXT:    ;;#ASMSTART
1237 ; GFX90A-NEXT:    ; def v[2:3]
1238 ; GFX90A-NEXT:    ;;#ASMEND
1239 ; GFX90A-NEXT:    ;;#ASMSTART
1240 ; GFX90A-NEXT:    ; def v[0:1]
1241 ; GFX90A-NEXT:    ;;#ASMEND
1242 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1243 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1244 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
1245 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1246 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1247 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1249 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_u_0:
1250 ; GFX940:       ; %bb.0:
1251 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1252 ; GFX940-NEXT:    ;;#ASMSTART
1253 ; GFX940-NEXT:    ; def v[2:3]
1254 ; GFX940-NEXT:    ;;#ASMEND
1255 ; GFX940-NEXT:    ;;#ASMSTART
1256 ; GFX940-NEXT:    ; def v[0:1]
1257 ; GFX940-NEXT:    ;;#ASMEND
1258 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1259 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1260 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
1261 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1262 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1263 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1264   %vec0 = call <2 x float> asm "; def $0", "=v"()
1265   %vec1 = call <2 x float> asm "; def $0", "=v"()
1266   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 0>
1267   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1268   ret void
1271 define void @v_shuffle_v4f32_v2f32__3_3_1_0(ptr addrspace(1) inreg %ptr) {
1272 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_1_0:
1273 ; GFX900:       ; %bb.0:
1274 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1275 ; GFX900-NEXT:    ;;#ASMSTART
1276 ; GFX900-NEXT:    ; def v[0:1]
1277 ; GFX900-NEXT:    ;;#ASMEND
1278 ; GFX900-NEXT:    v_mov_b32_e32 v5, 0
1279 ; GFX900-NEXT:    ;;#ASMSTART
1280 ; GFX900-NEXT:    ; def v[3:4]
1281 ; GFX900-NEXT:    ;;#ASMEND
1282 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
1283 ; GFX900-NEXT:    v_mov_b32_e32 v2, v4
1284 ; GFX900-NEXT:    global_store_dwordx4 v5, v[0:3], s[16:17]
1285 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1286 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1288 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_1_0:
1289 ; GFX90A:       ; %bb.0:
1290 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1291 ; GFX90A-NEXT:    ;;#ASMSTART
1292 ; GFX90A-NEXT:    ; def v[2:3]
1293 ; GFX90A-NEXT:    ;;#ASMEND
1294 ; GFX90A-NEXT:    ;;#ASMSTART
1295 ; GFX90A-NEXT:    ; def v[0:1]
1296 ; GFX90A-NEXT:    ;;#ASMEND
1297 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1298 ; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[2:3], v[2:3] op_sel:[1,0]
1299 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1300 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1301 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1302 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1304 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_1_0:
1305 ; GFX940:       ; %bb.0:
1306 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1307 ; GFX940-NEXT:    ;;#ASMSTART
1308 ; GFX940-NEXT:    ; def v[2:3]
1309 ; GFX940-NEXT:    ;;#ASMEND
1310 ; GFX940-NEXT:    ;;#ASMSTART
1311 ; GFX940-NEXT:    ; def v[0:1]
1312 ; GFX940-NEXT:    ;;#ASMEND
1313 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1314 ; GFX940-NEXT:    v_pk_mov_b32 v[2:3], v[2:3], v[2:3] op_sel:[1,0]
1315 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1316 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1317 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1318 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1319   %vec0 = call <2 x float> asm "; def $0", "=v"()
1320   %vec1 = call <2 x float> asm "; def $0", "=v"()
1321   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 0>
1322   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1323   ret void
1326 define void @v_shuffle_v4f32_v2f32__3_3_2_0(ptr addrspace(1) inreg %ptr) {
1327 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_2_0:
1328 ; GFX900:       ; %bb.0:
1329 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1330 ; GFX900-NEXT:    ;;#ASMSTART
1331 ; GFX900-NEXT:    ; def v[2:3]
1332 ; GFX900-NEXT:    ;;#ASMEND
1333 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
1334 ; GFX900-NEXT:    ;;#ASMSTART
1335 ; GFX900-NEXT:    ; def v[4:5]
1336 ; GFX900-NEXT:    ;;#ASMEND
1337 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
1338 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
1339 ; GFX900-NEXT:    v_mov_b32_e32 v3, v4
1340 ; GFX900-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
1341 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1342 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1344 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_2_0:
1345 ; GFX90A:       ; %bb.0:
1346 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1347 ; GFX90A-NEXT:    ;;#ASMSTART
1348 ; GFX90A-NEXT:    ; def v[2:3]
1349 ; GFX90A-NEXT:    ;;#ASMEND
1350 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
1351 ; GFX90A-NEXT:    ;;#ASMSTART
1352 ; GFX90A-NEXT:    ; def v[4:5]
1353 ; GFX90A-NEXT:    ;;#ASMEND
1354 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
1355 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
1356 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v4
1357 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
1358 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1359 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1361 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_2_0:
1362 ; GFX940:       ; %bb.0:
1363 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1364 ; GFX940-NEXT:    ;;#ASMSTART
1365 ; GFX940-NEXT:    ; def v[2:3]
1366 ; GFX940-NEXT:    ;;#ASMEND
1367 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
1368 ; GFX940-NEXT:    ;;#ASMSTART
1369 ; GFX940-NEXT:    ; def v[4:5]
1370 ; GFX940-NEXT:    ;;#ASMEND
1371 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
1372 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
1373 ; GFX940-NEXT:    v_mov_b32_e32 v3, v4
1374 ; GFX940-NEXT:    global_store_dwordx4 v6, v[0:3], s[0:1] sc0 sc1
1375 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1376 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1377   %vec0 = call <2 x float> asm "; def $0", "=v"()
1378   %vec1 = call <2 x float> asm "; def $0", "=v"()
1379   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 0>
1380   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1381   ret void
1384 define void @v_shuffle_v4f32_v2f32__u_1_1_1(ptr addrspace(1) inreg %ptr) {
1385 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__u_1_1_1:
1386 ; GFX900:       ; %bb.0:
1387 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1388 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1389 ; GFX900-NEXT:    ;;#ASMSTART
1390 ; GFX900-NEXT:    ; def v[0:1]
1391 ; GFX900-NEXT:    ;;#ASMEND
1392 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
1393 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
1394 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1395 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1396 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1398 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__u_1_1_1:
1399 ; GFX90A:       ; %bb.0:
1400 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1401 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1402 ; GFX90A-NEXT:    ;;#ASMSTART
1403 ; GFX90A-NEXT:    ; def v[0:1]
1404 ; GFX90A-NEXT:    ;;#ASMEND
1405 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
1406 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
1407 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1408 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1409 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1411 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__u_1_1_1:
1412 ; GFX940:       ; %bb.0:
1413 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1414 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1415 ; GFX940-NEXT:    ;;#ASMSTART
1416 ; GFX940-NEXT:    ; def v[0:1]
1417 ; GFX940-NEXT:    ;;#ASMEND
1418 ; GFX940-NEXT:    s_nop 0
1419 ; GFX940-NEXT:    v_mov_b32_e32 v2, v1
1420 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
1421 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1422 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1423 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1424   %vec0 = call <2 x float> asm "; def $0", "=v"()
1425   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
1426   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1427   ret void
1430 define void @v_shuffle_v4f32_v2f32__0_1_1_1(ptr addrspace(1) inreg %ptr) {
1431 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__0_1_1_1:
1432 ; GFX900:       ; %bb.0:
1433 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1434 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1435 ; GFX900-NEXT:    ;;#ASMSTART
1436 ; GFX900-NEXT:    ; def v[0:1]
1437 ; GFX900-NEXT:    ;;#ASMEND
1438 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
1439 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
1440 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1441 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1442 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1444 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__0_1_1_1:
1445 ; GFX90A:       ; %bb.0:
1446 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1447 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1448 ; GFX90A-NEXT:    ;;#ASMSTART
1449 ; GFX90A-NEXT:    ; def v[0:1]
1450 ; GFX90A-NEXT:    ;;#ASMEND
1451 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
1452 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
1453 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1454 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1455 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1457 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__0_1_1_1:
1458 ; GFX940:       ; %bb.0:
1459 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1460 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1461 ; GFX940-NEXT:    ;;#ASMSTART
1462 ; GFX940-NEXT:    ; def v[0:1]
1463 ; GFX940-NEXT:    ;;#ASMEND
1464 ; GFX940-NEXT:    s_nop 0
1465 ; GFX940-NEXT:    v_mov_b32_e32 v2, v1
1466 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
1467 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1468 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1469 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1470   %vec0 = call <2 x float> asm "; def $0", "=v"()
1471   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
1472   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1473   ret void
1476 define void @v_shuffle_v4f32_v2f32__1_1_1_1(ptr addrspace(1) inreg %ptr) {
1477 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__1_1_1_1:
1478 ; GFX900:       ; %bb.0:
1479 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1480 ; GFX900-NEXT:    ;;#ASMSTART
1481 ; GFX900-NEXT:    ; def v[0:1]
1482 ; GFX900-NEXT:    ;;#ASMEND
1483 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1484 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
1485 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
1486 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
1487 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1488 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1489 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1491 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__1_1_1_1:
1492 ; GFX90A:       ; %bb.0:
1493 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1494 ; GFX90A-NEXT:    ;;#ASMSTART
1495 ; GFX90A-NEXT:    ; def v[0:1]
1496 ; GFX90A-NEXT:    ;;#ASMEND
1497 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1498 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1499 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
1500 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
1501 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1502 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1503 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1505 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__1_1_1_1:
1506 ; GFX940:       ; %bb.0:
1507 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1508 ; GFX940-NEXT:    ;;#ASMSTART
1509 ; GFX940-NEXT:    ; def v[0:1]
1510 ; GFX940-NEXT:    ;;#ASMEND
1511 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1512 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1513 ; GFX940-NEXT:    v_mov_b32_e32 v2, v1
1514 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
1515 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1516 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1517 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1518   %vec0 = call <2 x float> asm "; def $0", "=v"()
1519   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
1520   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1521   ret void
1524 define void @v_shuffle_v4f32_v2f32__2_1_1_1(ptr addrspace(1) inreg %ptr) {
1525 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__2_1_1_1:
1526 ; GFX900:       ; %bb.0:
1527 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1528 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1529 ; GFX900-NEXT:    ;;#ASMSTART
1530 ; GFX900-NEXT:    ; def v[0:1]
1531 ; GFX900-NEXT:    ;;#ASMEND
1532 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
1533 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
1534 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1535 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1536 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1538 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__2_1_1_1:
1539 ; GFX90A:       ; %bb.0:
1540 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1541 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1542 ; GFX90A-NEXT:    ;;#ASMSTART
1543 ; GFX90A-NEXT:    ; def v[0:1]
1544 ; GFX90A-NEXT:    ;;#ASMEND
1545 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
1546 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
1547 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1548 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1549 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1551 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__2_1_1_1:
1552 ; GFX940:       ; %bb.0:
1553 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1554 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1555 ; GFX940-NEXT:    ;;#ASMSTART
1556 ; GFX940-NEXT:    ; def v[0:1]
1557 ; GFX940-NEXT:    ;;#ASMEND
1558 ; GFX940-NEXT:    s_nop 0
1559 ; GFX940-NEXT:    v_mov_b32_e32 v2, v1
1560 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
1561 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1562 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1563 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1564   %vec0 = call <2 x float> asm "; def $0", "=v"()
1565   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
1566   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1567   ret void
1570 define void @v_shuffle_v4f32_v2f32__3_1_1_1(ptr addrspace(1) inreg %ptr) {
1571 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_1_1_1:
1572 ; GFX900:       ; %bb.0:
1573 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1574 ; GFX900-NEXT:    ;;#ASMSTART
1575 ; GFX900-NEXT:    ; def v[0:1]
1576 ; GFX900-NEXT:    ;;#ASMEND
1577 ; GFX900-NEXT:    ;;#ASMSTART
1578 ; GFX900-NEXT:    ; def v[2:3]
1579 ; GFX900-NEXT:    ;;#ASMEND
1580 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1581 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
1582 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
1583 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
1584 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1585 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1586 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1588 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_1_1_1:
1589 ; GFX90A:       ; %bb.0:
1590 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1591 ; GFX90A-NEXT:    ;;#ASMSTART
1592 ; GFX90A-NEXT:    ; def v[0:1]
1593 ; GFX90A-NEXT:    ;;#ASMEND
1594 ; GFX90A-NEXT:    ;;#ASMSTART
1595 ; GFX90A-NEXT:    ; def v[2:3]
1596 ; GFX90A-NEXT:    ;;#ASMEND
1597 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1598 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
1599 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
1600 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
1601 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1602 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1603 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1605 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_1_1_1:
1606 ; GFX940:       ; %bb.0:
1607 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1608 ; GFX940-NEXT:    ;;#ASMSTART
1609 ; GFX940-NEXT:    ; def v[0:1]
1610 ; GFX940-NEXT:    ;;#ASMEND
1611 ; GFX940-NEXT:    ;;#ASMSTART
1612 ; GFX940-NEXT:    ; def v[2:3]
1613 ; GFX940-NEXT:    ;;#ASMEND
1614 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1615 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
1616 ; GFX940-NEXT:    v_mov_b32_e32 v2, v1
1617 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
1618 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1619 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1620 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1621   %vec0 = call <2 x float> asm "; def $0", "=v"()
1622   %vec1 = call <2 x float> asm "; def $0", "=v"()
1623   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
1624   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1625   ret void
1628 define void @v_shuffle_v4f32_v2f32__3_u_1_1(ptr addrspace(1) inreg %ptr) {
1629 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_u_1_1:
1630 ; GFX900:       ; %bb.0:
1631 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1632 ; GFX900-NEXT:    ;;#ASMSTART
1633 ; GFX900-NEXT:    ; def v[1:2]
1634 ; GFX900-NEXT:    ;;#ASMEND
1635 ; GFX900-NEXT:    ;;#ASMSTART
1636 ; GFX900-NEXT:    ; def v[0:1]
1637 ; GFX900-NEXT:    ;;#ASMEND
1638 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1639 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
1640 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
1641 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1642 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1643 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1645 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_u_1_1:
1646 ; GFX90A:       ; %bb.0:
1647 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1648 ; GFX90A-NEXT:    ;;#ASMSTART
1649 ; GFX90A-NEXT:    ; def v[2:3]
1650 ; GFX90A-NEXT:    ;;#ASMEND
1651 ; GFX90A-NEXT:    ;;#ASMSTART
1652 ; GFX90A-NEXT:    ; def v[0:1]
1653 ; GFX90A-NEXT:    ;;#ASMEND
1654 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1655 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1656 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
1657 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1658 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1659 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1661 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_u_1_1:
1662 ; GFX940:       ; %bb.0:
1663 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1664 ; GFX940-NEXT:    ;;#ASMSTART
1665 ; GFX940-NEXT:    ; def v[2:3]
1666 ; GFX940-NEXT:    ;;#ASMEND
1667 ; GFX940-NEXT:    ;;#ASMSTART
1668 ; GFX940-NEXT:    ; def v[0:1]
1669 ; GFX940-NEXT:    ;;#ASMEND
1670 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1671 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1672 ; GFX940-NEXT:    v_mov_b32_e32 v2, v3
1673 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1674 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1675 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1676   %vec0 = call <2 x float> asm "; def $0", "=v"()
1677   %vec1 = call <2 x float> asm "; def $0", "=v"()
1678   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 1, i32 1>
1679   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1680   ret void
1683 define void @v_shuffle_v4f32_v2f32__3_0_1_1(ptr addrspace(1) inreg %ptr) {
1684 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_0_1_1:
1685 ; GFX900:       ; %bb.0:
1686 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1687 ; GFX900-NEXT:    ;;#ASMSTART
1688 ; GFX900-NEXT:    ; def v[3:4]
1689 ; GFX900-NEXT:    ;;#ASMEND
1690 ; GFX900-NEXT:    v_mov_b32_e32 v5, 0
1691 ; GFX900-NEXT:    ;;#ASMSTART
1692 ; GFX900-NEXT:    ; def v[1:2]
1693 ; GFX900-NEXT:    ;;#ASMEND
1694 ; GFX900-NEXT:    v_mov_b32_e32 v0, v4
1695 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
1696 ; GFX900-NEXT:    global_store_dwordx4 v5, v[0:3], s[16:17]
1697 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1698 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1700 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_0_1_1:
1701 ; GFX90A:       ; %bb.0:
1702 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1703 ; GFX90A-NEXT:    ;;#ASMSTART
1704 ; GFX90A-NEXT:    ; def v[2:3]
1705 ; GFX90A-NEXT:    ;;#ASMEND
1706 ; GFX90A-NEXT:    ;;#ASMSTART
1707 ; GFX90A-NEXT:    ; def v[0:1]
1708 ; GFX90A-NEXT:    ;;#ASMEND
1709 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1710 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[2:3] op_sel:[1,0]
1711 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
1712 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1713 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1714 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1716 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_0_1_1:
1717 ; GFX940:       ; %bb.0:
1718 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1719 ; GFX940-NEXT:    ;;#ASMSTART
1720 ; GFX940-NEXT:    ; def v[2:3]
1721 ; GFX940-NEXT:    ;;#ASMEND
1722 ; GFX940-NEXT:    ;;#ASMSTART
1723 ; GFX940-NEXT:    ; def v[0:1]
1724 ; GFX940-NEXT:    ;;#ASMEND
1725 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1726 ; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[2:3] op_sel:[1,0]
1727 ; GFX940-NEXT:    v_mov_b32_e32 v2, v3
1728 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1729 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1730 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1731   %vec0 = call <2 x float> asm "; def $0", "=v"()
1732   %vec1 = call <2 x float> asm "; def $0", "=v"()
1733   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 1, i32 1>
1734   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1735   ret void
1738 define void @v_shuffle_v4f32_v2f32__3_2_1_1(ptr addrspace(1) inreg %ptr) {
1739 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_2_1_1:
1740 ; GFX900:       ; %bb.0:
1741 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1742 ; GFX900-NEXT:    ;;#ASMSTART
1743 ; GFX900-NEXT:    ; def v[2:3]
1744 ; GFX900-NEXT:    ;;#ASMEND
1745 ; GFX900-NEXT:    ;;#ASMSTART
1746 ; GFX900-NEXT:    ; def v[1:2]
1747 ; GFX900-NEXT:    ;;#ASMEND
1748 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1749 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
1750 ; GFX900-NEXT:    v_mov_b32_e32 v2, v3
1751 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1752 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1753 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1755 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_2_1_1:
1756 ; GFX90A:       ; %bb.0:
1757 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1758 ; GFX90A-NEXT:    ;;#ASMSTART
1759 ; GFX90A-NEXT:    ; def v[2:3]
1760 ; GFX90A-NEXT:    ;;#ASMEND
1761 ; GFX90A-NEXT:    ;;#ASMSTART
1762 ; GFX90A-NEXT:    ; def v[0:1]
1763 ; GFX90A-NEXT:    ;;#ASMEND
1764 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1765 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]
1766 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
1767 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1768 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1769 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1771 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_2_1_1:
1772 ; GFX940:       ; %bb.0:
1773 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1774 ; GFX940-NEXT:    ;;#ASMSTART
1775 ; GFX940-NEXT:    ; def v[2:3]
1776 ; GFX940-NEXT:    ;;#ASMEND
1777 ; GFX940-NEXT:    ;;#ASMSTART
1778 ; GFX940-NEXT:    ; def v[0:1]
1779 ; GFX940-NEXT:    ;;#ASMEND
1780 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1781 ; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[0:1], v[0:1] op_sel:[1,0]
1782 ; GFX940-NEXT:    v_mov_b32_e32 v2, v3
1783 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1784 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1785 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1786   %vec0 = call <2 x float> asm "; def $0", "=v"()
1787   %vec1 = call <2 x float> asm "; def $0", "=v"()
1788   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 1, i32 1>
1789   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1790   ret void
1793 define void @v_shuffle_v4f32_v2f32__3_3_1_1(ptr addrspace(1) inreg %ptr) {
1794 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_1_1:
1795 ; GFX900:       ; %bb.0:
1796 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1797 ; GFX900-NEXT:    ;;#ASMSTART
1798 ; GFX900-NEXT:    ; def v[1:2]
1799 ; GFX900-NEXT:    ;;#ASMEND
1800 ; GFX900-NEXT:    ;;#ASMSTART
1801 ; GFX900-NEXT:    ; def v[0:1]
1802 ; GFX900-NEXT:    ;;#ASMEND
1803 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1804 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
1805 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
1806 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1807 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1808 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1810 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_1_1:
1811 ; GFX90A:       ; %bb.0:
1812 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1813 ; GFX90A-NEXT:    ;;#ASMSTART
1814 ; GFX90A-NEXT:    ; def v[2:3]
1815 ; GFX90A-NEXT:    ;;#ASMEND
1816 ; GFX90A-NEXT:    ;;#ASMSTART
1817 ; GFX90A-NEXT:    ; def v[0:1]
1818 ; GFX90A-NEXT:    ;;#ASMEND
1819 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1820 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1821 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
1822 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1823 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1824 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1826 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_1_1:
1827 ; GFX940:       ; %bb.0:
1828 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1829 ; GFX940-NEXT:    ;;#ASMSTART
1830 ; GFX940-NEXT:    ; def v[2:3]
1831 ; GFX940-NEXT:    ;;#ASMEND
1832 ; GFX940-NEXT:    ;;#ASMSTART
1833 ; GFX940-NEXT:    ; def v[0:1]
1834 ; GFX940-NEXT:    ;;#ASMEND
1835 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1836 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1837 ; GFX940-NEXT:    v_mov_b32_e32 v2, v3
1838 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1839 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1840 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1841   %vec0 = call <2 x float> asm "; def $0", "=v"()
1842   %vec1 = call <2 x float> asm "; def $0", "=v"()
1843   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>
1844   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1845   ret void
1848 define void @v_shuffle_v4f32_v2f32__3_3_u_1(ptr addrspace(1) inreg %ptr) {
1849 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_u_1:
1850 ; GFX900:       ; %bb.0:
1851 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1852 ; GFX900-NEXT:    ;;#ASMSTART
1853 ; GFX900-NEXT:    ; def v[0:1]
1854 ; GFX900-NEXT:    ;;#ASMEND
1855 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1856 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
1857 ; GFX900-NEXT:    ;;#ASMSTART
1858 ; GFX900-NEXT:    ; def v[2:3]
1859 ; GFX900-NEXT:    ;;#ASMEND
1860 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1861 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1862 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1864 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_u_1:
1865 ; GFX90A:       ; %bb.0:
1866 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1867 ; GFX90A-NEXT:    ;;#ASMSTART
1868 ; GFX90A-NEXT:    ; def v[0:1]
1869 ; GFX90A-NEXT:    ;;#ASMEND
1870 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1871 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1872 ; GFX90A-NEXT:    ;;#ASMSTART
1873 ; GFX90A-NEXT:    ; def v[2:3]
1874 ; GFX90A-NEXT:    ;;#ASMEND
1875 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1876 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1877 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1879 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_u_1:
1880 ; GFX940:       ; %bb.0:
1881 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1882 ; GFX940-NEXT:    ;;#ASMSTART
1883 ; GFX940-NEXT:    ; def v[0:1]
1884 ; GFX940-NEXT:    ;;#ASMEND
1885 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1886 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1887 ; GFX940-NEXT:    ;;#ASMSTART
1888 ; GFX940-NEXT:    ; def v[2:3]
1889 ; GFX940-NEXT:    ;;#ASMEND
1890 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1891 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1892 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1893   %vec0 = call <2 x float> asm "; def $0", "=v"()
1894   %vec1 = call <2 x float> asm "; def $0", "=v"()
1895   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 1>
1896   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1897   ret void
1900 define void @v_shuffle_v4f32_v2f32__3_3_0_1(ptr addrspace(1) inreg %ptr) {
1901 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_0_1:
1902 ; GFX900:       ; %bb.0:
1903 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1904 ; GFX900-NEXT:    ;;#ASMSTART
1905 ; GFX900-NEXT:    ; def v[0:1]
1906 ; GFX900-NEXT:    ;;#ASMEND
1907 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1908 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
1909 ; GFX900-NEXT:    ;;#ASMSTART
1910 ; GFX900-NEXT:    ; def v[2:3]
1911 ; GFX900-NEXT:    ;;#ASMEND
1912 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1913 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1914 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1916 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_0_1:
1917 ; GFX90A:       ; %bb.0:
1918 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1919 ; GFX90A-NEXT:    ;;#ASMSTART
1920 ; GFX90A-NEXT:    ; def v[0:1]
1921 ; GFX90A-NEXT:    ;;#ASMEND
1922 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1923 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
1924 ; GFX90A-NEXT:    ;;#ASMSTART
1925 ; GFX90A-NEXT:    ; def v[2:3]
1926 ; GFX90A-NEXT:    ;;#ASMEND
1927 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1928 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1929 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1931 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_0_1:
1932 ; GFX940:       ; %bb.0:
1933 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1934 ; GFX940-NEXT:    ;;#ASMSTART
1935 ; GFX940-NEXT:    ; def v[0:1]
1936 ; GFX940-NEXT:    ;;#ASMEND
1937 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1938 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
1939 ; GFX940-NEXT:    ;;#ASMSTART
1940 ; GFX940-NEXT:    ; def v[2:3]
1941 ; GFX940-NEXT:    ;;#ASMEND
1942 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1943 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1944 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1945   %vec0 = call <2 x float> asm "; def $0", "=v"()
1946   %vec1 = call <2 x float> asm "; def $0", "=v"()
1947   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 1>
1948   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
1949   ret void
1952 define void @v_shuffle_v4f32_v2f32__3_3_2_1(ptr addrspace(1) inreg %ptr) {
1953 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_2_1:
1954 ; GFX900:       ; %bb.0:
1955 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1956 ; GFX900-NEXT:    ;;#ASMSTART
1957 ; GFX900-NEXT:    ; def v[3:4]
1958 ; GFX900-NEXT:    ;;#ASMEND
1959 ; GFX900-NEXT:    ;;#ASMSTART
1960 ; GFX900-NEXT:    ; def v[2:3]
1961 ; GFX900-NEXT:    ;;#ASMEND
1962 ; GFX900-NEXT:    v_mov_b32_e32 v5, 0
1963 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
1964 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
1965 ; GFX900-NEXT:    v_mov_b32_e32 v3, v4
1966 ; GFX900-NEXT:    global_store_dwordx4 v5, v[0:3], s[16:17]
1967 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1968 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1970 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_2_1:
1971 ; GFX90A:       ; %bb.0:
1972 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1973 ; GFX90A-NEXT:    ;;#ASMSTART
1974 ; GFX90A-NEXT:    ; def v[2:3]
1975 ; GFX90A-NEXT:    ;;#ASMEND
1976 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
1977 ; GFX90A-NEXT:    ;;#ASMSTART
1978 ; GFX90A-NEXT:    ; def v[4:5]
1979 ; GFX90A-NEXT:    ;;#ASMEND
1980 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
1981 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
1982 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v5
1983 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
1984 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1985 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1987 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_2_1:
1988 ; GFX940:       ; %bb.0:
1989 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1990 ; GFX940-NEXT:    ;;#ASMSTART
1991 ; GFX940-NEXT:    ; def v[2:3]
1992 ; GFX940-NEXT:    ;;#ASMEND
1993 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
1994 ; GFX940-NEXT:    ;;#ASMSTART
1995 ; GFX940-NEXT:    ; def v[4:5]
1996 ; GFX940-NEXT:    ;;#ASMEND
1997 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
1998 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
1999 ; GFX940-NEXT:    v_mov_b32_e32 v3, v5
2000 ; GFX940-NEXT:    global_store_dwordx4 v6, v[0:3], s[0:1] sc0 sc1
2001 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2002 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2003   %vec0 = call <2 x float> asm "; def $0", "=v"()
2004   %vec1 = call <2 x float> asm "; def $0", "=v"()
2005   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 1>
2006   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2007   ret void
2010 define void @v_shuffle_v4f32_v2f32__u_2_2_2(ptr addrspace(1) inreg %ptr) {
2011 ; GFX9-LABEL: v_shuffle_v4f32_v2f32__u_2_2_2:
2012 ; GFX9:       ; %bb.0:
2013 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2014 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2015   %vec0 = call <2 x float> asm "; def $0", "=v"()
2016   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
2017   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2018   ret void
2021 define void @v_shuffle_v4f32_v2f32__0_2_2_2(ptr addrspace(1) inreg %ptr) {
2022 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__0_2_2_2:
2023 ; GFX900:       ; %bb.0:
2024 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2025 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
2026 ; GFX900-NEXT:    ;;#ASMSTART
2027 ; GFX900-NEXT:    ; def v[0:1]
2028 ; GFX900-NEXT:    ;;#ASMEND
2029 ; GFX900-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
2030 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2031 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2033 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__0_2_2_2:
2034 ; GFX90A:       ; %bb.0:
2035 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2036 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
2037 ; GFX90A-NEXT:    ;;#ASMSTART
2038 ; GFX90A-NEXT:    ; def v[0:1]
2039 ; GFX90A-NEXT:    ;;#ASMEND
2040 ; GFX90A-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
2041 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2042 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2044 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__0_2_2_2:
2045 ; GFX940:       ; %bb.0:
2046 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2047 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
2048 ; GFX940-NEXT:    ;;#ASMSTART
2049 ; GFX940-NEXT:    ; def v[0:1]
2050 ; GFX940-NEXT:    ;;#ASMEND
2051 ; GFX940-NEXT:    global_store_dwordx4 v2, v[0:3], s[0:1] sc0 sc1
2052 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2053 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2054   %vec0 = call <2 x float> asm "; def $0", "=v"()
2055   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
2056   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2057   ret void
2060 define void @v_shuffle_v4f32_v2f32__1_2_2_2(ptr addrspace(1) inreg %ptr) {
2061 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__1_2_2_2:
2062 ; GFX900:       ; %bb.0:
2063 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2064 ; GFX900-NEXT:    ;;#ASMSTART
2065 ; GFX900-NEXT:    ; def v[0:1]
2066 ; GFX900-NEXT:    ;;#ASMEND
2067 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
2068 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
2069 ; GFX900-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
2070 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2071 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2073 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__1_2_2_2:
2074 ; GFX90A:       ; %bb.0:
2075 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2076 ; GFX90A-NEXT:    ;;#ASMSTART
2077 ; GFX90A-NEXT:    ; def v[0:1]
2078 ; GFX90A-NEXT:    ;;#ASMEND
2079 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
2080 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
2081 ; GFX90A-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
2082 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2083 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2085 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__1_2_2_2:
2086 ; GFX940:       ; %bb.0:
2087 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2088 ; GFX940-NEXT:    ;;#ASMSTART
2089 ; GFX940-NEXT:    ; def v[0:1]
2090 ; GFX940-NEXT:    ;;#ASMEND
2091 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
2092 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
2093 ; GFX940-NEXT:    global_store_dwordx4 v2, v[0:3], s[0:1] sc0 sc1
2094 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2095 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2096   %vec0 = call <2 x float> asm "; def $0", "=v"()
2097   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
2098   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2099   ret void
2102 define void @v_shuffle_v4f32_v2f32__2_2_2_2(ptr addrspace(1) inreg %ptr) {
2103 ; GFX9-LABEL: v_shuffle_v4f32_v2f32__2_2_2_2:
2104 ; GFX9:       ; %bb.0:
2105 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2106 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2107   %vec0 = call <2 x float> asm "; def $0", "=v"()
2108   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
2109   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2110   ret void
2113 define void @v_shuffle_v4f32_v2f32__3_2_2_2(ptr addrspace(1) inreg %ptr) {
2114 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_2_2_2:
2115 ; GFX900:       ; %bb.0:
2116 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2117 ; GFX900-NEXT:    ;;#ASMSTART
2118 ; GFX900-NEXT:    ; def v[1:2]
2119 ; GFX900-NEXT:    ;;#ASMEND
2120 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2121 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
2122 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
2123 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
2124 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2125 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2126 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2128 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_2_2_2:
2129 ; GFX90A:       ; %bb.0:
2130 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2131 ; GFX90A-NEXT:    ;;#ASMSTART
2132 ; GFX90A-NEXT:    ; def v[2:3]
2133 ; GFX90A-NEXT:    ;;#ASMEND
2134 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2135 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]
2136 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
2137 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2138 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2139 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2141 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_2_2_2:
2142 ; GFX940:       ; %bb.0:
2143 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2144 ; GFX940-NEXT:    ;;#ASMSTART
2145 ; GFX940-NEXT:    ; def v[2:3]
2146 ; GFX940-NEXT:    ;;#ASMEND
2147 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2148 ; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]
2149 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
2150 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2151 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2152 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2153   %vec0 = call <2 x float> asm "; def $0", "=v"()
2154   %vec1 = call <2 x float> asm "; def $0", "=v"()
2155   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
2156   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2157   ret void
2160 define void @v_shuffle_v4f32_v2f32__3_u_2_2(ptr addrspace(1) inreg %ptr) {
2161 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_u_2_2:
2162 ; GFX900:       ; %bb.0:
2163 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2164 ; GFX900-NEXT:    ;;#ASMSTART
2165 ; GFX900-NEXT:    ; def v[2:3]
2166 ; GFX900-NEXT:    ;;#ASMEND
2167 ; GFX900-NEXT:    v_mov_b32_e32 v1, 0
2168 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
2169 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
2170 ; GFX900-NEXT:    global_store_dwordx4 v1, v[0:3], s[16:17]
2171 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2172 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2174 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_u_2_2:
2175 ; GFX90A:       ; %bb.0:
2176 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2177 ; GFX90A-NEXT:    ;;#ASMSTART
2178 ; GFX90A-NEXT:    ; def v[2:3]
2179 ; GFX90A-NEXT:    ;;#ASMEND
2180 ; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
2181 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
2182 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
2183 ; GFX90A-NEXT:    global_store_dwordx4 v1, v[0:3], s[16:17]
2184 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2185 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2187 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_u_2_2:
2188 ; GFX940:       ; %bb.0:
2189 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2190 ; GFX940-NEXT:    ;;#ASMSTART
2191 ; GFX940-NEXT:    ; def v[2:3]
2192 ; GFX940-NEXT:    ;;#ASMEND
2193 ; GFX940-NEXT:    v_mov_b32_e32 v1, 0
2194 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
2195 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
2196 ; GFX940-NEXT:    global_store_dwordx4 v1, v[0:3], s[0:1] sc0 sc1
2197 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2198 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2199   %vec0 = call <2 x float> asm "; def $0", "=v"()
2200   %vec1 = call <2 x float> asm "; def $0", "=v"()
2201   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 2, i32 2>
2202   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2203   ret void
2206 define void @v_shuffle_v4f32_v2f32__3_0_2_2(ptr addrspace(1) inreg %ptr) {
2207 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_0_2_2:
2208 ; GFX900:       ; %bb.0:
2209 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2210 ; GFX900-NEXT:    ;;#ASMSTART
2211 ; GFX900-NEXT:    ; def v[1:2]
2212 ; GFX900-NEXT:    ;;#ASMEND
2213 ; GFX900-NEXT:    ;;#ASMSTART
2214 ; GFX900-NEXT:    ; def v[2:3]
2215 ; GFX900-NEXT:    ;;#ASMEND
2216 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2217 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
2218 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
2219 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2220 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2221 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2223 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_0_2_2:
2224 ; GFX90A:       ; %bb.0:
2225 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2226 ; GFX90A-NEXT:    ;;#ASMSTART
2227 ; GFX90A-NEXT:    ; def v[0:1]
2228 ; GFX90A-NEXT:    ;;#ASMEND
2229 ; GFX90A-NEXT:    ;;#ASMSTART
2230 ; GFX90A-NEXT:    ; def v[2:3]
2231 ; GFX90A-NEXT:    ;;#ASMEND
2232 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2233 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]
2234 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
2235 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2236 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2237 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2239 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_0_2_2:
2240 ; GFX940:       ; %bb.0:
2241 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2242 ; GFX940-NEXT:    ;;#ASMSTART
2243 ; GFX940-NEXT:    ; def v[0:1]
2244 ; GFX940-NEXT:    ;;#ASMEND
2245 ; GFX940-NEXT:    ;;#ASMSTART
2246 ; GFX940-NEXT:    ; def v[2:3]
2247 ; GFX940-NEXT:    ;;#ASMEND
2248 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2249 ; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]
2250 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
2251 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2252 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2253 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2254   %vec0 = call <2 x float> asm "; def $0", "=v"()
2255   %vec1 = call <2 x float> asm "; def $0", "=v"()
2256   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 2, i32 2>
2257   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2258   ret void
2261 define void @v_shuffle_v4f32_v2f32__3_1_2_2(ptr addrspace(1) inreg %ptr) {
2262 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_1_2_2:
2263 ; GFX900:       ; %bb.0:
2264 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2265 ; GFX900-NEXT:    ;;#ASMSTART
2266 ; GFX900-NEXT:    ; def v[0:1]
2267 ; GFX900-NEXT:    ;;#ASMEND
2268 ; GFX900-NEXT:    ;;#ASMSTART
2269 ; GFX900-NEXT:    ; def v[2:3]
2270 ; GFX900-NEXT:    ;;#ASMEND
2271 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2272 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
2273 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
2274 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2275 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2276 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2278 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_1_2_2:
2279 ; GFX90A:       ; %bb.0:
2280 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2281 ; GFX90A-NEXT:    ;;#ASMSTART
2282 ; GFX90A-NEXT:    ; def v[0:1]
2283 ; GFX90A-NEXT:    ;;#ASMEND
2284 ; GFX90A-NEXT:    ;;#ASMSTART
2285 ; GFX90A-NEXT:    ; def v[2:3]
2286 ; GFX90A-NEXT:    ;;#ASMEND
2287 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2288 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
2289 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
2290 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2291 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2292 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2294 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_1_2_2:
2295 ; GFX940:       ; %bb.0:
2296 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2297 ; GFX940-NEXT:    ;;#ASMSTART
2298 ; GFX940-NEXT:    ; def v[0:1]
2299 ; GFX940-NEXT:    ;;#ASMEND
2300 ; GFX940-NEXT:    ;;#ASMSTART
2301 ; GFX940-NEXT:    ; def v[2:3]
2302 ; GFX940-NEXT:    ;;#ASMEND
2303 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2304 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
2305 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
2306 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2307 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2308 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2309   %vec0 = call <2 x float> asm "; def $0", "=v"()
2310   %vec1 = call <2 x float> asm "; def $0", "=v"()
2311   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 2, i32 2>
2312   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2313   ret void
2316 define void @v_shuffle_v4f32_v2f32__3_3_2_2(ptr addrspace(1) inreg %ptr) {
2317 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_2_2:
2318 ; GFX900:       ; %bb.0:
2319 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2320 ; GFX900-NEXT:    ;;#ASMSTART
2321 ; GFX900-NEXT:    ; def v[2:3]
2322 ; GFX900-NEXT:    ;;#ASMEND
2323 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2324 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
2325 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
2326 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
2327 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2328 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2329 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2331 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_2_2:
2332 ; GFX90A:       ; %bb.0:
2333 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2334 ; GFX90A-NEXT:    ;;#ASMSTART
2335 ; GFX90A-NEXT:    ; def v[2:3]
2336 ; GFX90A-NEXT:    ;;#ASMEND
2337 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2338 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
2339 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
2340 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
2341 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2342 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2343 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2345 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_2_2:
2346 ; GFX940:       ; %bb.0:
2347 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2348 ; GFX940-NEXT:    ;;#ASMSTART
2349 ; GFX940-NEXT:    ; def v[2:3]
2350 ; GFX940-NEXT:    ;;#ASMEND
2351 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2352 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
2353 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
2354 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
2355 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2356 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2357 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2358   %vec0 = call <2 x float> asm "; def $0", "=v"()
2359   %vec1 = call <2 x float> asm "; def $0", "=v"()
2360   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 2>
2361   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2362   ret void
2365 define void @v_shuffle_v4f32_v2f32__3_3_u_2(ptr addrspace(1) inreg %ptr) {
2366 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_u_2:
2367 ; GFX900:       ; %bb.0:
2368 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2369 ; GFX900-NEXT:    ;;#ASMSTART
2370 ; GFX900-NEXT:    ; def v[2:3]
2371 ; GFX900-NEXT:    ;;#ASMEND
2372 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2373 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
2374 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
2375 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
2376 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2377 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2378 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2380 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_u_2:
2381 ; GFX90A:       ; %bb.0:
2382 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2383 ; GFX90A-NEXT:    ;;#ASMSTART
2384 ; GFX90A-NEXT:    ; def v[2:3]
2385 ; GFX90A-NEXT:    ;;#ASMEND
2386 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2387 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
2388 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
2389 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v2
2390 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2391 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2392 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2394 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_u_2:
2395 ; GFX940:       ; %bb.0:
2396 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2397 ; GFX940-NEXT:    ;;#ASMSTART
2398 ; GFX940-NEXT:    ; def v[2:3]
2399 ; GFX940-NEXT:    ;;#ASMEND
2400 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2401 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
2402 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
2403 ; GFX940-NEXT:    v_mov_b32_e32 v3, v2
2404 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2405 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2406 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2407   %vec0 = call <2 x float> asm "; def $0", "=v"()
2408   %vec1 = call <2 x float> asm "; def $0", "=v"()
2409   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 2>
2410   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2411   ret void
2414 define void @v_shuffle_v4f32_v2f32__3_3_0_2(ptr addrspace(1) inreg %ptr) {
2415 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_0_2:
2416 ; GFX900:       ; %bb.0:
2417 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2418 ; GFX900-NEXT:    ;;#ASMSTART
2419 ; GFX900-NEXT:    ; def v[2:3]
2420 ; GFX900-NEXT:    ;;#ASMEND
2421 ; GFX900-NEXT:    v_mov_b32_e32 v5, 0
2422 ; GFX900-NEXT:    ;;#ASMSTART
2423 ; GFX900-NEXT:    ; def v[3:4]
2424 ; GFX900-NEXT:    ;;#ASMEND
2425 ; GFX900-NEXT:    v_mov_b32_e32 v0, v4
2426 ; GFX900-NEXT:    v_mov_b32_e32 v1, v4
2427 ; GFX900-NEXT:    global_store_dwordx4 v5, v[0:3], s[16:17]
2428 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2429 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2431 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_0_2:
2432 ; GFX90A:       ; %bb.0:
2433 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2434 ; GFX90A-NEXT:    ;;#ASMSTART
2435 ; GFX90A-NEXT:    ; def v[2:3]
2436 ; GFX90A-NEXT:    ;;#ASMEND
2437 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
2438 ; GFX90A-NEXT:    ;;#ASMSTART
2439 ; GFX90A-NEXT:    ; def v[4:5]
2440 ; GFX90A-NEXT:    ;;#ASMEND
2441 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v5
2442 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v5
2443 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v4
2444 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
2445 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2446 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2448 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_0_2:
2449 ; GFX940:       ; %bb.0:
2450 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2451 ; GFX940-NEXT:    ;;#ASMSTART
2452 ; GFX940-NEXT:    ; def v[2:3]
2453 ; GFX940-NEXT:    ;;#ASMEND
2454 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
2455 ; GFX940-NEXT:    ;;#ASMSTART
2456 ; GFX940-NEXT:    ; def v[4:5]
2457 ; GFX940-NEXT:    ;;#ASMEND
2458 ; GFX940-NEXT:    s_nop 0
2459 ; GFX940-NEXT:    v_mov_b32_e32 v0, v5
2460 ; GFX940-NEXT:    v_mov_b32_e32 v1, v5
2461 ; GFX940-NEXT:    v_mov_b32_e32 v3, v4
2462 ; GFX940-NEXT:    global_store_dwordx4 v6, v[0:3], s[0:1] sc0 sc1
2463 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2464 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2465   %vec0 = call <2 x float> asm "; def $0", "=v"()
2466   %vec1 = call <2 x float> asm "; def $0", "=v"()
2467   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 2>
2468   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2469   ret void
2472 define void @v_shuffle_v4f32_v2f32__3_3_1_2(ptr addrspace(1) inreg %ptr) {
2473 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_1_2:
2474 ; GFX900:       ; %bb.0:
2475 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2476 ; GFX900-NEXT:    ;;#ASMSTART
2477 ; GFX900-NEXT:    ; def v[1:2]
2478 ; GFX900-NEXT:    ;;#ASMEND
2479 ; GFX900-NEXT:    v_mov_b32_e32 v5, 0
2480 ; GFX900-NEXT:    ;;#ASMSTART
2481 ; GFX900-NEXT:    ; def v[3:4]
2482 ; GFX900-NEXT:    ;;#ASMEND
2483 ; GFX900-NEXT:    v_mov_b32_e32 v0, v4
2484 ; GFX900-NEXT:    v_mov_b32_e32 v1, v4
2485 ; GFX900-NEXT:    global_store_dwordx4 v5, v[0:3], s[16:17]
2486 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2487 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2489 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_1_2:
2490 ; GFX90A:       ; %bb.0:
2491 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2492 ; GFX90A-NEXT:    ;;#ASMSTART
2493 ; GFX90A-NEXT:    ; def v[2:3]
2494 ; GFX90A-NEXT:    ;;#ASMEND
2495 ; GFX90A-NEXT:    ;;#ASMSTART
2496 ; GFX90A-NEXT:    ; def v[0:1]
2497 ; GFX90A-NEXT:    ;;#ASMEND
2498 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2499 ; GFX90A-NEXT:    v_pk_mov_b32 v[2:3], v[2:3], v[0:1] op_sel:[1,0]
2500 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
2501 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2502 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2503 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2505 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_1_2:
2506 ; GFX940:       ; %bb.0:
2507 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2508 ; GFX940-NEXT:    ;;#ASMSTART
2509 ; GFX940-NEXT:    ; def v[2:3]
2510 ; GFX940-NEXT:    ;;#ASMEND
2511 ; GFX940-NEXT:    ;;#ASMSTART
2512 ; GFX940-NEXT:    ; def v[0:1]
2513 ; GFX940-NEXT:    ;;#ASMEND
2514 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2515 ; GFX940-NEXT:    v_pk_mov_b32 v[2:3], v[2:3], v[0:1] op_sel:[1,0]
2516 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
2517 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2518 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2519 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2520   %vec0 = call <2 x float> asm "; def $0", "=v"()
2521   %vec1 = call <2 x float> asm "; def $0", "=v"()
2522   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 2>
2523   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2524   ret void
2527 define void @v_shuffle_v4f32_v2f32__u_3_3_3(ptr addrspace(1) inreg %ptr) {
2528 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__u_3_3_3:
2529 ; GFX900:       ; %bb.0:
2530 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2531 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2532 ; GFX900-NEXT:    ;;#ASMSTART
2533 ; GFX900-NEXT:    ; def v[0:1]
2534 ; GFX900-NEXT:    ;;#ASMEND
2535 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
2536 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
2537 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2538 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2539 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2541 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__u_3_3_3:
2542 ; GFX90A:       ; %bb.0:
2543 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2544 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2545 ; GFX90A-NEXT:    ;;#ASMSTART
2546 ; GFX90A-NEXT:    ; def v[0:1]
2547 ; GFX90A-NEXT:    ;;#ASMEND
2548 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
2549 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
2550 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2551 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2552 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2554 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__u_3_3_3:
2555 ; GFX940:       ; %bb.0:
2556 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2557 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2558 ; GFX940-NEXT:    ;;#ASMSTART
2559 ; GFX940-NEXT:    ; def v[0:1]
2560 ; GFX940-NEXT:    ;;#ASMEND
2561 ; GFX940-NEXT:    s_nop 0
2562 ; GFX940-NEXT:    v_mov_b32_e32 v2, v1
2563 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
2564 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2565 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2566 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2567   %vec0 = call <2 x float> asm "; def $0", "=v"()
2568   %vec1 = call <2 x float> asm "; def $0", "=v"()
2569   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
2570   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2571   ret void
2574 define void @v_shuffle_v4f32_v2f32__0_3_3_3(ptr addrspace(1) inreg %ptr) {
2575 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__0_3_3_3:
2576 ; GFX900:       ; %bb.0:
2577 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2578 ; GFX900-NEXT:    ;;#ASMSTART
2579 ; GFX900-NEXT:    ; def v[0:1]
2580 ; GFX900-NEXT:    ;;#ASMEND
2581 ; GFX900-NEXT:    ;;#ASMSTART
2582 ; GFX900-NEXT:    ; def v[1:2]
2583 ; GFX900-NEXT:    ;;#ASMEND
2584 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2585 ; GFX900-NEXT:    v_mov_b32_e32 v1, v2
2586 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
2587 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2588 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2589 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2591 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__0_3_3_3:
2592 ; GFX90A:       ; %bb.0:
2593 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2594 ; GFX90A-NEXT:    ;;#ASMSTART
2595 ; GFX90A-NEXT:    ; def v[0:1]
2596 ; GFX90A-NEXT:    ;;#ASMEND
2597 ; GFX90A-NEXT:    ;;#ASMSTART
2598 ; GFX90A-NEXT:    ; def v[2:3]
2599 ; GFX90A-NEXT:    ;;#ASMEND
2600 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2601 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
2602 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
2603 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2604 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2605 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2607 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__0_3_3_3:
2608 ; GFX940:       ; %bb.0:
2609 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2610 ; GFX940-NEXT:    ;;#ASMSTART
2611 ; GFX940-NEXT:    ; def v[0:1]
2612 ; GFX940-NEXT:    ;;#ASMEND
2613 ; GFX940-NEXT:    ;;#ASMSTART
2614 ; GFX940-NEXT:    ; def v[2:3]
2615 ; GFX940-NEXT:    ;;#ASMEND
2616 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2617 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
2618 ; GFX940-NEXT:    v_mov_b32_e32 v2, v3
2619 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2620 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2621 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2622   %vec0 = call <2 x float> asm "; def $0", "=v"()
2623   %vec1 = call <2 x float> asm "; def $0", "=v"()
2624   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
2625   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2626   ret void
2629 define void @v_shuffle_v4f32_v2f32__1_3_3_3(ptr addrspace(1) inreg %ptr) {
2630 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__1_3_3_3:
2631 ; GFX900:       ; %bb.0:
2632 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2633 ; GFX900-NEXT:    ;;#ASMSTART
2634 ; GFX900-NEXT:    ; def v[1:2]
2635 ; GFX900-NEXT:    ;;#ASMEND
2636 ; GFX900-NEXT:    ;;#ASMSTART
2637 ; GFX900-NEXT:    ; def v[0:1]
2638 ; GFX900-NEXT:    ;;#ASMEND
2639 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2640 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
2641 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
2642 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
2643 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2644 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2645 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2647 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__1_3_3_3:
2648 ; GFX90A:       ; %bb.0:
2649 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2650 ; GFX90A-NEXT:    ;;#ASMSTART
2651 ; GFX90A-NEXT:    ; def v[2:3]
2652 ; GFX90A-NEXT:    ;;#ASMEND
2653 ; GFX90A-NEXT:    ;;#ASMSTART
2654 ; GFX90A-NEXT:    ; def v[0:1]
2655 ; GFX90A-NEXT:    ;;#ASMEND
2656 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2657 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
2658 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
2659 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
2660 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2661 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2662 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2664 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__1_3_3_3:
2665 ; GFX940:       ; %bb.0:
2666 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2667 ; GFX940-NEXT:    ;;#ASMSTART
2668 ; GFX940-NEXT:    ; def v[2:3]
2669 ; GFX940-NEXT:    ;;#ASMEND
2670 ; GFX940-NEXT:    ;;#ASMSTART
2671 ; GFX940-NEXT:    ; def v[0:1]
2672 ; GFX940-NEXT:    ;;#ASMEND
2673 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2674 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
2675 ; GFX940-NEXT:    v_mov_b32_e32 v2, v1
2676 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
2677 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2678 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2679 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2680   %vec0 = call <2 x float> asm "; def $0", "=v"()
2681   %vec1 = call <2 x float> asm "; def $0", "=v"()
2682   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
2683   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2684   ret void
2687 define void @v_shuffle_v4f32_v2f32__2_3_3_3(ptr addrspace(1) inreg %ptr) {
2688 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__2_3_3_3:
2689 ; GFX900:       ; %bb.0:
2690 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2691 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2692 ; GFX900-NEXT:    ;;#ASMSTART
2693 ; GFX900-NEXT:    ; def v[0:1]
2694 ; GFX900-NEXT:    ;;#ASMEND
2695 ; GFX900-NEXT:    v_mov_b32_e32 v2, v1
2696 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
2697 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2698 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2699 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2701 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__2_3_3_3:
2702 ; GFX90A:       ; %bb.0:
2703 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2704 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2705 ; GFX90A-NEXT:    ;;#ASMSTART
2706 ; GFX90A-NEXT:    ; def v[0:1]
2707 ; GFX90A-NEXT:    ;;#ASMEND
2708 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v1
2709 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
2710 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2711 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2712 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2714 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__2_3_3_3:
2715 ; GFX940:       ; %bb.0:
2716 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2717 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2718 ; GFX940-NEXT:    ;;#ASMSTART
2719 ; GFX940-NEXT:    ; def v[0:1]
2720 ; GFX940-NEXT:    ;;#ASMEND
2721 ; GFX940-NEXT:    s_nop 0
2722 ; GFX940-NEXT:    v_mov_b32_e32 v2, v1
2723 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
2724 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2725 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2726 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2727   %vec0 = call <2 x float> asm "; def $0", "=v"()
2728   %vec1 = call <2 x float> asm "; def $0", "=v"()
2729   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
2730   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2731   ret void
2734 define void @v_shuffle_v4f32_v2f32__3_u_3_3(ptr addrspace(1) inreg %ptr) {
2735 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_u_3_3:
2736 ; GFX900:       ; %bb.0:
2737 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2738 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2739 ; GFX900-NEXT:    ;;#ASMSTART
2740 ; GFX900-NEXT:    ; def v[1:2]
2741 ; GFX900-NEXT:    ;;#ASMEND
2742 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
2743 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
2744 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2745 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2746 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2748 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_u_3_3:
2749 ; GFX90A:       ; %bb.0:
2750 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2751 ; GFX90A-NEXT:    ;;#ASMSTART
2752 ; GFX90A-NEXT:    ; def v[2:3]
2753 ; GFX90A-NEXT:    ;;#ASMEND
2754 ; GFX90A-NEXT:    v_mov_b32_e32 v1, 0
2755 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
2756 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
2757 ; GFX90A-NEXT:    global_store_dwordx4 v1, v[0:3], s[16:17]
2758 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2759 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2761 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_u_3_3:
2762 ; GFX940:       ; %bb.0:
2763 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2764 ; GFX940-NEXT:    ;;#ASMSTART
2765 ; GFX940-NEXT:    ; def v[2:3]
2766 ; GFX940-NEXT:    ;;#ASMEND
2767 ; GFX940-NEXT:    v_mov_b32_e32 v1, 0
2768 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
2769 ; GFX940-NEXT:    v_mov_b32_e32 v2, v3
2770 ; GFX940-NEXT:    global_store_dwordx4 v1, v[0:3], s[0:1] sc0 sc1
2771 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2772 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2773   %vec0 = call <2 x float> asm "; def $0", "=v"()
2774   %vec1 = call <2 x float> asm "; def $0", "=v"()
2775   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>
2776   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2777   ret void
2780 define void @v_shuffle_v4f32_v2f32__3_0_3_3(ptr addrspace(1) inreg %ptr) {
2781 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_0_3_3:
2782 ; GFX900:       ; %bb.0:
2783 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2784 ; GFX900-NEXT:    ;;#ASMSTART
2785 ; GFX900-NEXT:    ; def v[1:2]
2786 ; GFX900-NEXT:    ;;#ASMEND
2787 ; GFX900-NEXT:    ;;#ASMSTART
2788 ; GFX900-NEXT:    ; def v[2:3]
2789 ; GFX900-NEXT:    ;;#ASMEND
2790 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2791 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
2792 ; GFX900-NEXT:    v_mov_b32_e32 v2, v3
2793 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2794 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2795 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2797 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_0_3_3:
2798 ; GFX90A:       ; %bb.0:
2799 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2800 ; GFX90A-NEXT:    ;;#ASMSTART
2801 ; GFX90A-NEXT:    ; def v[0:1]
2802 ; GFX90A-NEXT:    ;;#ASMEND
2803 ; GFX90A-NEXT:    ;;#ASMSTART
2804 ; GFX90A-NEXT:    ; def v[2:3]
2805 ; GFX90A-NEXT:    ;;#ASMEND
2806 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2807 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]
2808 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
2809 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2810 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2811 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2813 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_0_3_3:
2814 ; GFX940:       ; %bb.0:
2815 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2816 ; GFX940-NEXT:    ;;#ASMSTART
2817 ; GFX940-NEXT:    ; def v[0:1]
2818 ; GFX940-NEXT:    ;;#ASMEND
2819 ; GFX940-NEXT:    ;;#ASMSTART
2820 ; GFX940-NEXT:    ; def v[2:3]
2821 ; GFX940-NEXT:    ;;#ASMEND
2822 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2823 ; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[0:1] op_sel:[1,0]
2824 ; GFX940-NEXT:    v_mov_b32_e32 v2, v3
2825 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2826 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2827 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2828   %vec0 = call <2 x float> asm "; def $0", "=v"()
2829   %vec1 = call <2 x float> asm "; def $0", "=v"()
2830   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 3, i32 3>
2831   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2832   ret void
2835 define void @v_shuffle_v4f32_v2f32__3_1_3_3(ptr addrspace(1) inreg %ptr) {
2836 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_1_3_3:
2837 ; GFX900:       ; %bb.0:
2838 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2839 ; GFX900-NEXT:    ;;#ASMSTART
2840 ; GFX900-NEXT:    ; def v[0:1]
2841 ; GFX900-NEXT:    ;;#ASMEND
2842 ; GFX900-NEXT:    ;;#ASMSTART
2843 ; GFX900-NEXT:    ; def v[2:3]
2844 ; GFX900-NEXT:    ;;#ASMEND
2845 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2846 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
2847 ; GFX900-NEXT:    v_mov_b32_e32 v2, v3
2848 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2849 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2850 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2852 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_1_3_3:
2853 ; GFX90A:       ; %bb.0:
2854 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2855 ; GFX90A-NEXT:    ;;#ASMSTART
2856 ; GFX90A-NEXT:    ; def v[0:1]
2857 ; GFX90A-NEXT:    ;;#ASMEND
2858 ; GFX90A-NEXT:    ;;#ASMSTART
2859 ; GFX90A-NEXT:    ; def v[2:3]
2860 ; GFX90A-NEXT:    ;;#ASMEND
2861 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2862 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
2863 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
2864 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2865 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2866 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2868 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_1_3_3:
2869 ; GFX940:       ; %bb.0:
2870 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2871 ; GFX940-NEXT:    ;;#ASMSTART
2872 ; GFX940-NEXT:    ; def v[0:1]
2873 ; GFX940-NEXT:    ;;#ASMEND
2874 ; GFX940-NEXT:    ;;#ASMSTART
2875 ; GFX940-NEXT:    ; def v[2:3]
2876 ; GFX940-NEXT:    ;;#ASMEND
2877 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2878 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
2879 ; GFX940-NEXT:    v_mov_b32_e32 v2, v3
2880 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2881 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2882 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2883   %vec0 = call <2 x float> asm "; def $0", "=v"()
2884   %vec1 = call <2 x float> asm "; def $0", "=v"()
2885   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 3, i32 3>
2886   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2887   ret void
2890 define void @v_shuffle_v4f32_v2f32__3_2_3_3(ptr addrspace(1) inreg %ptr) {
2891 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_2_3_3:
2892 ; GFX900:       ; %bb.0:
2893 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2894 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2895 ; GFX900-NEXT:    ;;#ASMSTART
2896 ; GFX900-NEXT:    ; def v[1:2]
2897 ; GFX900-NEXT:    ;;#ASMEND
2898 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
2899 ; GFX900-NEXT:    v_mov_b32_e32 v3, v2
2900 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2901 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2902 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2904 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_2_3_3:
2905 ; GFX90A:       ; %bb.0:
2906 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2907 ; GFX90A-NEXT:    ;;#ASMSTART
2908 ; GFX90A-NEXT:    ; def v[2:3]
2909 ; GFX90A-NEXT:    ;;#ASMEND
2910 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2911 ; GFX90A-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]
2912 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
2913 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2914 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2915 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2917 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_2_3_3:
2918 ; GFX940:       ; %bb.0:
2919 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2920 ; GFX940-NEXT:    ;;#ASMSTART
2921 ; GFX940-NEXT:    ; def v[2:3]
2922 ; GFX940-NEXT:    ;;#ASMEND
2923 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2924 ; GFX940-NEXT:    v_pk_mov_b32 v[0:1], v[2:3], v[2:3] op_sel:[1,0]
2925 ; GFX940-NEXT:    v_mov_b32_e32 v2, v3
2926 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2927 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2928 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2929   %vec0 = call <2 x float> asm "; def $0", "=v"()
2930   %vec1 = call <2 x float> asm "; def $0", "=v"()
2931   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 3, i32 3>
2932   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2933   ret void
2936 define void @v_shuffle_v4f32_v2f32__3_3_u_3(ptr addrspace(1) inreg %ptr) {
2937 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_u_3:
2938 ; GFX900:       ; %bb.0:
2939 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2940 ; GFX900-NEXT:    ;;#ASMSTART
2941 ; GFX900-NEXT:    ; def v[0:1]
2942 ; GFX900-NEXT:    ;;#ASMEND
2943 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
2944 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
2945 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
2946 ; GFX900-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
2947 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2948 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2950 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_u_3:
2951 ; GFX90A:       ; %bb.0:
2952 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2953 ; GFX90A-NEXT:    ;;#ASMSTART
2954 ; GFX90A-NEXT:    ; def v[0:1]
2955 ; GFX90A-NEXT:    ;;#ASMEND
2956 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
2957 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
2958 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
2959 ; GFX90A-NEXT:    global_store_dwordx4 v2, v[0:3], s[16:17]
2960 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2961 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2963 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_u_3:
2964 ; GFX940:       ; %bb.0:
2965 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2966 ; GFX940-NEXT:    ;;#ASMSTART
2967 ; GFX940-NEXT:    ; def v[0:1]
2968 ; GFX940-NEXT:    ;;#ASMEND
2969 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
2970 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
2971 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
2972 ; GFX940-NEXT:    global_store_dwordx4 v2, v[0:3], s[0:1] sc0 sc1
2973 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2974 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2975   %vec0 = call <2 x float> asm "; def $0", "=v"()
2976   %vec1 = call <2 x float> asm "; def $0", "=v"()
2977   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 3>
2978   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
2979   ret void
2982 define void @v_shuffle_v4f32_v2f32__3_3_0_3(ptr addrspace(1) inreg %ptr) {
2983 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_0_3:
2984 ; GFX900:       ; %bb.0:
2985 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2986 ; GFX900-NEXT:    ;;#ASMSTART
2987 ; GFX900-NEXT:    ; def v[2:3]
2988 ; GFX900-NEXT:    ;;#ASMEND
2989 ; GFX900-NEXT:    ;;#ASMSTART
2990 ; GFX900-NEXT:    ; def v[0:1]
2991 ; GFX900-NEXT:    ;;#ASMEND
2992 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2993 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
2994 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
2995 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
2996 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2997 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2999 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_0_3:
3000 ; GFX90A:       ; %bb.0:
3001 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3002 ; GFX90A-NEXT:    ;;#ASMSTART
3003 ; GFX90A-NEXT:    ; def v[2:3]
3004 ; GFX90A-NEXT:    ;;#ASMEND
3005 ; GFX90A-NEXT:    ;;#ASMSTART
3006 ; GFX90A-NEXT:    ; def v[0:1]
3007 ; GFX90A-NEXT:    ;;#ASMEND
3008 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
3009 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
3010 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
3011 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
3012 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3013 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3015 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_0_3:
3016 ; GFX940:       ; %bb.0:
3017 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3018 ; GFX940-NEXT:    ;;#ASMSTART
3019 ; GFX940-NEXT:    ; def v[2:3]
3020 ; GFX940-NEXT:    ;;#ASMEND
3021 ; GFX940-NEXT:    ;;#ASMSTART
3022 ; GFX940-NEXT:    ; def v[0:1]
3023 ; GFX940-NEXT:    ;;#ASMEND
3024 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
3025 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
3026 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
3027 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
3028 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
3029 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3030   %vec0 = call <2 x float> asm "; def $0", "=v"()
3031   %vec1 = call <2 x float> asm "; def $0", "=v"()
3032   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 3>
3033   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
3034   ret void
3037 define void @v_shuffle_v4f32_v2f32__3_3_1_3(ptr addrspace(1) inreg %ptr) {
3038 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_1_3:
3039 ; GFX900:       ; %bb.0:
3040 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3041 ; GFX900-NEXT:    ;;#ASMSTART
3042 ; GFX900-NEXT:    ; def v[1:2]
3043 ; GFX900-NEXT:    ;;#ASMEND
3044 ; GFX900-NEXT:    ;;#ASMSTART
3045 ; GFX900-NEXT:    ; def v[0:1]
3046 ; GFX900-NEXT:    ;;#ASMEND
3047 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
3048 ; GFX900-NEXT:    v_mov_b32_e32 v0, v1
3049 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
3050 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
3051 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
3052 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3054 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_1_3:
3055 ; GFX90A:       ; %bb.0:
3056 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3057 ; GFX90A-NEXT:    ;;#ASMSTART
3058 ; GFX90A-NEXT:    ; def v[2:3]
3059 ; GFX90A-NEXT:    ;;#ASMEND
3060 ; GFX90A-NEXT:    ;;#ASMSTART
3061 ; GFX90A-NEXT:    ; def v[0:1]
3062 ; GFX90A-NEXT:    ;;#ASMEND
3063 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
3064 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v1
3065 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v3
3066 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
3067 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
3068 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3069 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3071 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_1_3:
3072 ; GFX940:       ; %bb.0:
3073 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3074 ; GFX940-NEXT:    ;;#ASMSTART
3075 ; GFX940-NEXT:    ; def v[2:3]
3076 ; GFX940-NEXT:    ;;#ASMEND
3077 ; GFX940-NEXT:    ;;#ASMSTART
3078 ; GFX940-NEXT:    ; def v[0:1]
3079 ; GFX940-NEXT:    ;;#ASMEND
3080 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
3081 ; GFX940-NEXT:    v_mov_b32_e32 v0, v1
3082 ; GFX940-NEXT:    v_mov_b32_e32 v2, v3
3083 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
3084 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
3085 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
3086 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3087   %vec0 = call <2 x float> asm "; def $0", "=v"()
3088   %vec1 = call <2 x float> asm "; def $0", "=v"()
3089   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 3>
3090   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
3091   ret void
3094 define void @v_shuffle_v4f32_v2f32__3_3_2_3(ptr addrspace(1) inreg %ptr) {
3095 ; GFX900-LABEL: v_shuffle_v4f32_v2f32__3_3_2_3:
3096 ; GFX900:       ; %bb.0:
3097 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3098 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
3099 ; GFX900-NEXT:    ;;#ASMSTART
3100 ; GFX900-NEXT:    ; def v[2:3]
3101 ; GFX900-NEXT:    ;;#ASMEND
3102 ; GFX900-NEXT:    v_mov_b32_e32 v0, v3
3103 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
3104 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
3105 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
3106 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3108 ; GFX90A-LABEL: v_shuffle_v4f32_v2f32__3_3_2_3:
3109 ; GFX90A:       ; %bb.0:
3110 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3111 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
3112 ; GFX90A-NEXT:    ;;#ASMSTART
3113 ; GFX90A-NEXT:    ; def v[2:3]
3114 ; GFX90A-NEXT:    ;;#ASMEND
3115 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v3
3116 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
3117 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
3118 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
3119 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3121 ; GFX940-LABEL: v_shuffle_v4f32_v2f32__3_3_2_3:
3122 ; GFX940:       ; %bb.0:
3123 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3124 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
3125 ; GFX940-NEXT:    ;;#ASMSTART
3126 ; GFX940-NEXT:    ; def v[2:3]
3127 ; GFX940-NEXT:    ;;#ASMEND
3128 ; GFX940-NEXT:    s_nop 0
3129 ; GFX940-NEXT:    v_mov_b32_e32 v0, v3
3130 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
3131 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
3132 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
3133 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3134   %vec0 = call <2 x float> asm "; def $0", "=v"()
3135   %vec1 = call <2 x float> asm "; def $0", "=v"()
3136   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 3>
3137   store <4 x float> %shuf, ptr addrspace(1) %ptr, align 16
3138   ret void
3141 define void @s_shuffle_v4f32_v2f32__u_u_u_u() {
3142 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__u_u_u_u:
3143 ; GFX9:       ; %bb.0:
3144 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3145 ; GFX9-NEXT:    ;;#ASMSTART
3146 ; GFX9-NEXT:    ; use s[8:11]
3147 ; GFX9-NEXT:    ;;#ASMEND
3148 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3149   %vec0 = call <2 x float> asm "; def $0", "=s"()
3150   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> poison
3151   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3152   ret void
3155 define void @s_shuffle_v4f32_v2f32__0_u_u_u() {
3156 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__0_u_u_u:
3157 ; GFX900:       ; %bb.0:
3158 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3159 ; GFX900-NEXT:    ;;#ASMSTART
3160 ; GFX900-NEXT:    ; def s[8:9]
3161 ; GFX900-NEXT:    ;;#ASMEND
3162 ; GFX900-NEXT:    ;;#ASMSTART
3163 ; GFX900-NEXT:    ; use s[8:11]
3164 ; GFX900-NEXT:    ;;#ASMEND
3165 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3167 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__0_u_u_u:
3168 ; GFX90A:       ; %bb.0:
3169 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3170 ; GFX90A-NEXT:    ;;#ASMSTART
3171 ; GFX90A-NEXT:    ; def s[8:9]
3172 ; GFX90A-NEXT:    ;;#ASMEND
3173 ; GFX90A-NEXT:    ;;#ASMSTART
3174 ; GFX90A-NEXT:    ; use s[8:11]
3175 ; GFX90A-NEXT:    ;;#ASMEND
3176 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3178 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__0_u_u_u:
3179 ; GFX940:       ; %bb.0:
3180 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3181 ; GFX940-NEXT:    ;;#ASMSTART
3182 ; GFX940-NEXT:    ; def s[8:9]
3183 ; GFX940-NEXT:    ;;#ASMEND
3184 ; GFX940-NEXT:    s_nop 0
3185 ; GFX940-NEXT:    ;;#ASMSTART
3186 ; GFX940-NEXT:    ; use s[8:11]
3187 ; GFX940-NEXT:    ;;#ASMEND
3188 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3189   %vec0 = call <2 x float> asm "; def $0", "=s"()
3190   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>
3191   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3192   ret void
3195 define void @s_shuffle_v4f32_v2f32__1_u_u_u() {
3196 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__1_u_u_u:
3197 ; GFX900:       ; %bb.0:
3198 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3199 ; GFX900-NEXT:    ;;#ASMSTART
3200 ; GFX900-NEXT:    ; def s[4:5]
3201 ; GFX900-NEXT:    ;;#ASMEND
3202 ; GFX900-NEXT:    s_mov_b32 s8, s5
3203 ; GFX900-NEXT:    ;;#ASMSTART
3204 ; GFX900-NEXT:    ; use s[8:11]
3205 ; GFX900-NEXT:    ;;#ASMEND
3206 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3208 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__1_u_u_u:
3209 ; GFX90A:       ; %bb.0:
3210 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3211 ; GFX90A-NEXT:    ;;#ASMSTART
3212 ; GFX90A-NEXT:    ; def s[4:5]
3213 ; GFX90A-NEXT:    ;;#ASMEND
3214 ; GFX90A-NEXT:    s_mov_b32 s8, s5
3215 ; GFX90A-NEXT:    ;;#ASMSTART
3216 ; GFX90A-NEXT:    ; use s[8:11]
3217 ; GFX90A-NEXT:    ;;#ASMEND
3218 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3220 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__1_u_u_u:
3221 ; GFX940:       ; %bb.0:
3222 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3223 ; GFX940-NEXT:    ;;#ASMSTART
3224 ; GFX940-NEXT:    ; def s[0:1]
3225 ; GFX940-NEXT:    ;;#ASMEND
3226 ; GFX940-NEXT:    s_mov_b32 s8, s1
3227 ; GFX940-NEXT:    ;;#ASMSTART
3228 ; GFX940-NEXT:    ; use s[8:11]
3229 ; GFX940-NEXT:    ;;#ASMEND
3230 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3231   %vec0 = call <2 x float> asm "; def $0", "=s"()
3232   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 poison, i32 poison, i32 poison>
3233   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3234   ret void
3237 define void @s_shuffle_v4f32_v2f32__2_u_u_u() {
3238 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__2_u_u_u:
3239 ; GFX9:       ; %bb.0:
3240 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3241 ; GFX9-NEXT:    ;;#ASMSTART
3242 ; GFX9-NEXT:    ; use s[8:11]
3243 ; GFX9-NEXT:    ;;#ASMEND
3244 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3245   %vec0 = call <2 x float> asm "; def $0", "=s"()
3246   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 poison, i32 poison, i32 poison>
3247   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3248   ret void
3251 define void @s_shuffle_v4f32_v2f32__3_u_u_u() {
3252 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_u_u_u:
3253 ; GFX900:       ; %bb.0:
3254 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3255 ; GFX900-NEXT:    ;;#ASMSTART
3256 ; GFX900-NEXT:    ; def s[4:5]
3257 ; GFX900-NEXT:    ;;#ASMEND
3258 ; GFX900-NEXT:    s_mov_b32 s8, s5
3259 ; GFX900-NEXT:    ;;#ASMSTART
3260 ; GFX900-NEXT:    ; use s[8:11]
3261 ; GFX900-NEXT:    ;;#ASMEND
3262 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3264 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_u_u_u:
3265 ; GFX90A:       ; %bb.0:
3266 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3267 ; GFX90A-NEXT:    ;;#ASMSTART
3268 ; GFX90A-NEXT:    ; def s[4:5]
3269 ; GFX90A-NEXT:    ;;#ASMEND
3270 ; GFX90A-NEXT:    s_mov_b32 s8, s5
3271 ; GFX90A-NEXT:    ;;#ASMSTART
3272 ; GFX90A-NEXT:    ; use s[8:11]
3273 ; GFX90A-NEXT:    ;;#ASMEND
3274 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3276 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_u_u_u:
3277 ; GFX940:       ; %bb.0:
3278 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3279 ; GFX940-NEXT:    ;;#ASMSTART
3280 ; GFX940-NEXT:    ; def s[0:1]
3281 ; GFX940-NEXT:    ;;#ASMEND
3282 ; GFX940-NEXT:    s_mov_b32 s8, s1
3283 ; GFX940-NEXT:    ;;#ASMSTART
3284 ; GFX940-NEXT:    ; use s[8:11]
3285 ; GFX940-NEXT:    ;;#ASMEND
3286 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3287   %vec0 = call <2 x float> asm "; def $0", "=s"()
3288   %vec1 = call <2 x float> asm "; def $0", "=s"()
3289   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 poison, i32 poison>
3290   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3291   ret void
3294 define void @s_shuffle_v4f32_v2f32__3_0_u_u() {
3295 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_0_u_u:
3296 ; GFX900:       ; %bb.0:
3297 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3298 ; GFX900-NEXT:    ;;#ASMSTART
3299 ; GFX900-NEXT:    ; def s[4:5]
3300 ; GFX900-NEXT:    ;;#ASMEND
3301 ; GFX900-NEXT:    ;;#ASMSTART
3302 ; GFX900-NEXT:    ; def s[6:7]
3303 ; GFX900-NEXT:    ;;#ASMEND
3304 ; GFX900-NEXT:    s_mov_b32 s8, s7
3305 ; GFX900-NEXT:    s_mov_b32 s9, s4
3306 ; GFX900-NEXT:    ;;#ASMSTART
3307 ; GFX900-NEXT:    ; use s[8:11]
3308 ; GFX900-NEXT:    ;;#ASMEND
3309 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3311 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_0_u_u:
3312 ; GFX90A:       ; %bb.0:
3313 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3314 ; GFX90A-NEXT:    ;;#ASMSTART
3315 ; GFX90A-NEXT:    ; def s[4:5]
3316 ; GFX90A-NEXT:    ;;#ASMEND
3317 ; GFX90A-NEXT:    ;;#ASMSTART
3318 ; GFX90A-NEXT:    ; def s[6:7]
3319 ; GFX90A-NEXT:    ;;#ASMEND
3320 ; GFX90A-NEXT:    s_mov_b32 s8, s7
3321 ; GFX90A-NEXT:    s_mov_b32 s9, s4
3322 ; GFX90A-NEXT:    ;;#ASMSTART
3323 ; GFX90A-NEXT:    ; use s[8:11]
3324 ; GFX90A-NEXT:    ;;#ASMEND
3325 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3327 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_0_u_u:
3328 ; GFX940:       ; %bb.0:
3329 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3330 ; GFX940-NEXT:    ;;#ASMSTART
3331 ; GFX940-NEXT:    ; def s[0:1]
3332 ; GFX940-NEXT:    ;;#ASMEND
3333 ; GFX940-NEXT:    ;;#ASMSTART
3334 ; GFX940-NEXT:    ; def s[2:3]
3335 ; GFX940-NEXT:    ;;#ASMEND
3336 ; GFX940-NEXT:    s_mov_b32 s8, s3
3337 ; GFX940-NEXT:    s_mov_b32 s9, s0
3338 ; GFX940-NEXT:    ;;#ASMSTART
3339 ; GFX940-NEXT:    ; use s[8:11]
3340 ; GFX940-NEXT:    ;;#ASMEND
3341 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3342   %vec0 = call <2 x float> asm "; def $0", "=s"()
3343   %vec1 = call <2 x float> asm "; def $0", "=s"()
3344   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 poison, i32 poison>
3345   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3346   ret void
3349 define void @s_shuffle_v4f32_v2f32__3_1_u_u() {
3350 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_1_u_u:
3351 ; GFX900:       ; %bb.0:
3352 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3353 ; GFX900-NEXT:    ;;#ASMSTART
3354 ; GFX900-NEXT:    ; def s[8:9]
3355 ; GFX900-NEXT:    ;;#ASMEND
3356 ; GFX900-NEXT:    ;;#ASMSTART
3357 ; GFX900-NEXT:    ; def s[4:5]
3358 ; GFX900-NEXT:    ;;#ASMEND
3359 ; GFX900-NEXT:    s_mov_b32 s8, s5
3360 ; GFX900-NEXT:    ;;#ASMSTART
3361 ; GFX900-NEXT:    ; use s[8:11]
3362 ; GFX900-NEXT:    ;;#ASMEND
3363 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3365 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_1_u_u:
3366 ; GFX90A:       ; %bb.0:
3367 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3368 ; GFX90A-NEXT:    ;;#ASMSTART
3369 ; GFX90A-NEXT:    ; def s[8:9]
3370 ; GFX90A-NEXT:    ;;#ASMEND
3371 ; GFX90A-NEXT:    ;;#ASMSTART
3372 ; GFX90A-NEXT:    ; def s[4:5]
3373 ; GFX90A-NEXT:    ;;#ASMEND
3374 ; GFX90A-NEXT:    s_mov_b32 s8, s5
3375 ; GFX90A-NEXT:    ;;#ASMSTART
3376 ; GFX90A-NEXT:    ; use s[8:11]
3377 ; GFX90A-NEXT:    ;;#ASMEND
3378 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3380 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_1_u_u:
3381 ; GFX940:       ; %bb.0:
3382 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3383 ; GFX940-NEXT:    ;;#ASMSTART
3384 ; GFX940-NEXT:    ; def s[8:9]
3385 ; GFX940-NEXT:    ;;#ASMEND
3386 ; GFX940-NEXT:    ;;#ASMSTART
3387 ; GFX940-NEXT:    ; def s[0:1]
3388 ; GFX940-NEXT:    ;;#ASMEND
3389 ; GFX940-NEXT:    s_mov_b32 s8, s1
3390 ; GFX940-NEXT:    ;;#ASMSTART
3391 ; GFX940-NEXT:    ; use s[8:11]
3392 ; GFX940-NEXT:    ;;#ASMEND
3393 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3394   %vec0 = call <2 x float> asm "; def $0", "=s"()
3395   %vec1 = call <2 x float> asm "; def $0", "=s"()
3396   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 poison, i32 poison>
3397   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3398   ret void
3401 define void @s_shuffle_v4f32_v2f32__3_2_u_u() {
3402 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_2_u_u:
3403 ; GFX900:       ; %bb.0:
3404 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3405 ; GFX900-NEXT:    ;;#ASMSTART
3406 ; GFX900-NEXT:    ; def s[4:5]
3407 ; GFX900-NEXT:    ;;#ASMEND
3408 ; GFX900-NEXT:    s_mov_b32 s8, s5
3409 ; GFX900-NEXT:    s_mov_b32 s9, s4
3410 ; GFX900-NEXT:    ;;#ASMSTART
3411 ; GFX900-NEXT:    ; use s[8:11]
3412 ; GFX900-NEXT:    ;;#ASMEND
3413 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3415 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_2_u_u:
3416 ; GFX90A:       ; %bb.0:
3417 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3418 ; GFX90A-NEXT:    ;;#ASMSTART
3419 ; GFX90A-NEXT:    ; def s[4:5]
3420 ; GFX90A-NEXT:    ;;#ASMEND
3421 ; GFX90A-NEXT:    s_mov_b32 s8, s5
3422 ; GFX90A-NEXT:    s_mov_b32 s9, s4
3423 ; GFX90A-NEXT:    ;;#ASMSTART
3424 ; GFX90A-NEXT:    ; use s[8:11]
3425 ; GFX90A-NEXT:    ;;#ASMEND
3426 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3428 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_2_u_u:
3429 ; GFX940:       ; %bb.0:
3430 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3431 ; GFX940-NEXT:    ;;#ASMSTART
3432 ; GFX940-NEXT:    ; def s[0:1]
3433 ; GFX940-NEXT:    ;;#ASMEND
3434 ; GFX940-NEXT:    s_mov_b32 s8, s1
3435 ; GFX940-NEXT:    s_mov_b32 s9, s0
3436 ; GFX940-NEXT:    ;;#ASMSTART
3437 ; GFX940-NEXT:    ; use s[8:11]
3438 ; GFX940-NEXT:    ;;#ASMEND
3439 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3440   %vec0 = call <2 x float> asm "; def $0", "=s"()
3441   %vec1 = call <2 x float> asm "; def $0", "=s"()
3442   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 poison, i32 poison>
3443   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3444   ret void
3447 define void @s_shuffle_v4f32_v2f32__3_3_u_u() {
3448 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_u_u:
3449 ; GFX9:       ; %bb.0:
3450 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3451 ; GFX9-NEXT:    ;;#ASMSTART
3452 ; GFX9-NEXT:    ; def s[8:9]
3453 ; GFX9-NEXT:    ;;#ASMEND
3454 ; GFX9-NEXT:    s_mov_b32 s8, s9
3455 ; GFX9-NEXT:    ;;#ASMSTART
3456 ; GFX9-NEXT:    ; use s[8:11]
3457 ; GFX9-NEXT:    ;;#ASMEND
3458 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3459   %vec0 = call <2 x float> asm "; def $0", "=s"()
3460   %vec1 = call <2 x float> asm "; def $0", "=s"()
3461   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 poison>
3462   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3463   ret void
3466 define void @s_shuffle_v4f32_v2f32__3_3_0_u() {
3467 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_0_u:
3468 ; GFX9:       ; %bb.0:
3469 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3470 ; GFX9-NEXT:    ;;#ASMSTART
3471 ; GFX9-NEXT:    ; def s[8:9]
3472 ; GFX9-NEXT:    ;;#ASMEND
3473 ; GFX9-NEXT:    ;;#ASMSTART
3474 ; GFX9-NEXT:    ; def s[10:11]
3475 ; GFX9-NEXT:    ;;#ASMEND
3476 ; GFX9-NEXT:    s_mov_b32 s8, s9
3477 ; GFX9-NEXT:    ;;#ASMSTART
3478 ; GFX9-NEXT:    ; use s[8:11]
3479 ; GFX9-NEXT:    ;;#ASMEND
3480 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3481   %vec0 = call <2 x float> asm "; def $0", "=s"()
3482   %vec1 = call <2 x float> asm "; def $0", "=s"()
3483   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 poison>
3484   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3485   ret void
3488 define void @s_shuffle_v4f32_v2f32__3_3_1_u() {
3489 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_1_u:
3490 ; GFX900:       ; %bb.0:
3491 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3492 ; GFX900-NEXT:    ;;#ASMSTART
3493 ; GFX900-NEXT:    ; def s[8:9]
3494 ; GFX900-NEXT:    ;;#ASMEND
3495 ; GFX900-NEXT:    ;;#ASMSTART
3496 ; GFX900-NEXT:    ; def s[4:5]
3497 ; GFX900-NEXT:    ;;#ASMEND
3498 ; GFX900-NEXT:    s_mov_b32 s8, s9
3499 ; GFX900-NEXT:    s_mov_b32 s10, s5
3500 ; GFX900-NEXT:    ;;#ASMSTART
3501 ; GFX900-NEXT:    ; use s[8:11]
3502 ; GFX900-NEXT:    ;;#ASMEND
3503 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3505 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_1_u:
3506 ; GFX90A:       ; %bb.0:
3507 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3508 ; GFX90A-NEXT:    ;;#ASMSTART
3509 ; GFX90A-NEXT:    ; def s[8:9]
3510 ; GFX90A-NEXT:    ;;#ASMEND
3511 ; GFX90A-NEXT:    ;;#ASMSTART
3512 ; GFX90A-NEXT:    ; def s[4:5]
3513 ; GFX90A-NEXT:    ;;#ASMEND
3514 ; GFX90A-NEXT:    s_mov_b32 s8, s9
3515 ; GFX90A-NEXT:    s_mov_b32 s10, s5
3516 ; GFX90A-NEXT:    ;;#ASMSTART
3517 ; GFX90A-NEXT:    ; use s[8:11]
3518 ; GFX90A-NEXT:    ;;#ASMEND
3519 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3521 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_3_1_u:
3522 ; GFX940:       ; %bb.0:
3523 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3524 ; GFX940-NEXT:    ;;#ASMSTART
3525 ; GFX940-NEXT:    ; def s[8:9]
3526 ; GFX940-NEXT:    ;;#ASMEND
3527 ; GFX940-NEXT:    ;;#ASMSTART
3528 ; GFX940-NEXT:    ; def s[0:1]
3529 ; GFX940-NEXT:    ;;#ASMEND
3530 ; GFX940-NEXT:    s_mov_b32 s8, s9
3531 ; GFX940-NEXT:    s_mov_b32 s10, s1
3532 ; GFX940-NEXT:    ;;#ASMSTART
3533 ; GFX940-NEXT:    ; use s[8:11]
3534 ; GFX940-NEXT:    ;;#ASMEND
3535 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3536   %vec0 = call <2 x float> asm "; def $0", "=s"()
3537   %vec1 = call <2 x float> asm "; def $0", "=s"()
3538   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 poison>
3539   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3540   ret void
3543 define void @s_shuffle_v4f32_v2f32__3_3_2_u() {
3544 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_2_u:
3545 ; GFX9:       ; %bb.0:
3546 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3547 ; GFX9-NEXT:    ;;#ASMSTART
3548 ; GFX9-NEXT:    ; def s[10:11]
3549 ; GFX9-NEXT:    ;;#ASMEND
3550 ; GFX9-NEXT:    s_mov_b32 s8, s11
3551 ; GFX9-NEXT:    s_mov_b32 s9, s11
3552 ; GFX9-NEXT:    ;;#ASMSTART
3553 ; GFX9-NEXT:    ; use s[8:11]
3554 ; GFX9-NEXT:    ;;#ASMEND
3555 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3556   %vec0 = call <2 x float> asm "; def $0", "=s"()
3557   %vec1 = call <2 x float> asm "; def $0", "=s"()
3558   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 poison>
3559   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3560   ret void
3563 define void @s_shuffle_v4f32_v2f32__3_3_3_u() {
3564 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_3_u:
3565 ; GFX9:       ; %bb.0:
3566 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3567 ; GFX9-NEXT:    ;;#ASMSTART
3568 ; GFX9-NEXT:    ; def s[8:9]
3569 ; GFX9-NEXT:    ;;#ASMEND
3570 ; GFX9-NEXT:    s_mov_b32 s8, s9
3571 ; GFX9-NEXT:    s_mov_b32 s10, s9
3572 ; GFX9-NEXT:    ;;#ASMSTART
3573 ; GFX9-NEXT:    ; use s[8:11]
3574 ; GFX9-NEXT:    ;;#ASMEND
3575 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3576   %vec0 = call <2 x float> asm "; def $0", "=s"()
3577   %vec1 = call <2 x float> asm "; def $0", "=s"()
3578   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 poison>
3579   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3580   ret void
3583 define void @s_shuffle_v4f32_v2f32__3_3_3_0() {
3584 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_3_0:
3585 ; GFX900:       ; %bb.0:
3586 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3587 ; GFX900-NEXT:    ;;#ASMSTART
3588 ; GFX900-NEXT:    ; def s[8:9]
3589 ; GFX900-NEXT:    ;;#ASMEND
3590 ; GFX900-NEXT:    ;;#ASMSTART
3591 ; GFX900-NEXT:    ; def s[4:5]
3592 ; GFX900-NEXT:    ;;#ASMEND
3593 ; GFX900-NEXT:    s_mov_b32 s8, s9
3594 ; GFX900-NEXT:    s_mov_b32 s10, s9
3595 ; GFX900-NEXT:    s_mov_b32 s11, s4
3596 ; GFX900-NEXT:    ;;#ASMSTART
3597 ; GFX900-NEXT:    ; use s[8:11]
3598 ; GFX900-NEXT:    ;;#ASMEND
3599 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3601 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_3_0:
3602 ; GFX90A:       ; %bb.0:
3603 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3604 ; GFX90A-NEXT:    ;;#ASMSTART
3605 ; GFX90A-NEXT:    ; def s[8:9]
3606 ; GFX90A-NEXT:    ;;#ASMEND
3607 ; GFX90A-NEXT:    ;;#ASMSTART
3608 ; GFX90A-NEXT:    ; def s[4:5]
3609 ; GFX90A-NEXT:    ;;#ASMEND
3610 ; GFX90A-NEXT:    s_mov_b32 s8, s9
3611 ; GFX90A-NEXT:    s_mov_b32 s10, s9
3612 ; GFX90A-NEXT:    s_mov_b32 s11, s4
3613 ; GFX90A-NEXT:    ;;#ASMSTART
3614 ; GFX90A-NEXT:    ; use s[8:11]
3615 ; GFX90A-NEXT:    ;;#ASMEND
3616 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3618 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_3_3_0:
3619 ; GFX940:       ; %bb.0:
3620 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3621 ; GFX940-NEXT:    ;;#ASMSTART
3622 ; GFX940-NEXT:    ; def s[8:9]
3623 ; GFX940-NEXT:    ;;#ASMEND
3624 ; GFX940-NEXT:    ;;#ASMSTART
3625 ; GFX940-NEXT:    ; def s[0:1]
3626 ; GFX940-NEXT:    ;;#ASMEND
3627 ; GFX940-NEXT:    s_mov_b32 s8, s9
3628 ; GFX940-NEXT:    s_mov_b32 s10, s9
3629 ; GFX940-NEXT:    s_mov_b32 s11, s0
3630 ; GFX940-NEXT:    ;;#ASMSTART
3631 ; GFX940-NEXT:    ; use s[8:11]
3632 ; GFX940-NEXT:    ;;#ASMEND
3633 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3634   %vec0 = call <2 x float> asm "; def $0", "=s"()
3635   %vec1 = call <2 x float> asm "; def $0", "=s"()
3636   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 0>
3637   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3638   ret void
3641 define void @s_shuffle_v4f32_v2f32__3_3_3_1() {
3642 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_3_1:
3643 ; GFX9:       ; %bb.0:
3644 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3645 ; GFX9-NEXT:    ;;#ASMSTART
3646 ; GFX9-NEXT:    ; def s[10:11]
3647 ; GFX9-NEXT:    ;;#ASMEND
3648 ; GFX9-NEXT:    ;;#ASMSTART
3649 ; GFX9-NEXT:    ; def s[8:9]
3650 ; GFX9-NEXT:    ;;#ASMEND
3651 ; GFX9-NEXT:    s_mov_b32 s8, s9
3652 ; GFX9-NEXT:    s_mov_b32 s10, s9
3653 ; GFX9-NEXT:    ;;#ASMSTART
3654 ; GFX9-NEXT:    ; use s[8:11]
3655 ; GFX9-NEXT:    ;;#ASMEND
3656 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3657   %vec0 = call <2 x float> asm "; def $0", "=s"()
3658   %vec1 = call <2 x float> asm "; def $0", "=s"()
3659   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 1>
3660   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3661   ret void
3664 define void @s_shuffle_v4f32_v2f32__3_3_3_2() {
3665 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_3_2:
3666 ; GFX900:       ; %bb.0:
3667 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3668 ; GFX900-NEXT:    ;;#ASMSTART
3669 ; GFX900-NEXT:    ; def s[4:5]
3670 ; GFX900-NEXT:    ;;#ASMEND
3671 ; GFX900-NEXT:    s_mov_b32 s8, s5
3672 ; GFX900-NEXT:    s_mov_b32 s9, s5
3673 ; GFX900-NEXT:    s_mov_b32 s10, s5
3674 ; GFX900-NEXT:    s_mov_b32 s11, s4
3675 ; GFX900-NEXT:    ;;#ASMSTART
3676 ; GFX900-NEXT:    ; use s[8:11]
3677 ; GFX900-NEXT:    ;;#ASMEND
3678 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3680 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_3_2:
3681 ; GFX90A:       ; %bb.0:
3682 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3683 ; GFX90A-NEXT:    ;;#ASMSTART
3684 ; GFX90A-NEXT:    ; def s[4:5]
3685 ; GFX90A-NEXT:    ;;#ASMEND
3686 ; GFX90A-NEXT:    s_mov_b32 s8, s5
3687 ; GFX90A-NEXT:    s_mov_b32 s9, s5
3688 ; GFX90A-NEXT:    s_mov_b32 s10, s5
3689 ; GFX90A-NEXT:    s_mov_b32 s11, s4
3690 ; GFX90A-NEXT:    ;;#ASMSTART
3691 ; GFX90A-NEXT:    ; use s[8:11]
3692 ; GFX90A-NEXT:    ;;#ASMEND
3693 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3695 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_3_3_2:
3696 ; GFX940:       ; %bb.0:
3697 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3698 ; GFX940-NEXT:    ;;#ASMSTART
3699 ; GFX940-NEXT:    ; def s[0:1]
3700 ; GFX940-NEXT:    ;;#ASMEND
3701 ; GFX940-NEXT:    s_mov_b32 s8, s1
3702 ; GFX940-NEXT:    s_mov_b32 s9, s1
3703 ; GFX940-NEXT:    s_mov_b32 s10, s1
3704 ; GFX940-NEXT:    s_mov_b32 s11, s0
3705 ; GFX940-NEXT:    ;;#ASMSTART
3706 ; GFX940-NEXT:    ; use s[8:11]
3707 ; GFX940-NEXT:    ;;#ASMEND
3708 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3709   %vec0 = call <2 x float> asm "; def $0", "=s"()
3710   %vec1 = call <2 x float> asm "; def $0", "=s"()
3711   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 2>
3712   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3713   ret void
3716 define void @s_shuffle_v4f32_v2f32__3_3_3_3() {
3717 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_3_3:
3718 ; GFX9:       ; %bb.0:
3719 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3720 ; GFX9-NEXT:    ;;#ASMSTART
3721 ; GFX9-NEXT:    ; def s[8:9]
3722 ; GFX9-NEXT:    ;;#ASMEND
3723 ; GFX9-NEXT:    s_mov_b32 s8, s9
3724 ; GFX9-NEXT:    s_mov_b32 s10, s9
3725 ; GFX9-NEXT:    s_mov_b32 s11, s9
3726 ; GFX9-NEXT:    ;;#ASMSTART
3727 ; GFX9-NEXT:    ; use s[8:11]
3728 ; GFX9-NEXT:    ;;#ASMEND
3729 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3730   %vec0 = call <2 x float> asm "; def $0", "=s"()
3731   %vec1 = call <2 x float> asm "; def $0", "=s"()
3732   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 3, i32 3>
3733   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3734   ret void
3737 define void @s_shuffle_v4f32_v2f32__u_0_0_0() {
3738 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__u_0_0_0:
3739 ; GFX9:       ; %bb.0:
3740 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3741 ; GFX9-NEXT:    ;;#ASMSTART
3742 ; GFX9-NEXT:    ; def s[10:11]
3743 ; GFX9-NEXT:    ;;#ASMEND
3744 ; GFX9-NEXT:    s_mov_b32 s9, s10
3745 ; GFX9-NEXT:    s_mov_b32 s11, s10
3746 ; GFX9-NEXT:    ;;#ASMSTART
3747 ; GFX9-NEXT:    ; use s[8:11]
3748 ; GFX9-NEXT:    ;;#ASMEND
3749 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3750   %vec0 = call <2 x float> asm "; def $0", "=s"()
3751   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 0, i32 0, i32 0>
3752   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3753   ret void
3756 define void @s_shuffle_v4f32_v2f32__0_0_0_0() {
3757 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__0_0_0_0:
3758 ; GFX9:       ; %bb.0:
3759 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3760 ; GFX9-NEXT:    ;;#ASMSTART
3761 ; GFX9-NEXT:    ; def s[8:9]
3762 ; GFX9-NEXT:    ;;#ASMEND
3763 ; GFX9-NEXT:    s_mov_b32 s9, s8
3764 ; GFX9-NEXT:    s_mov_b32 s10, s8
3765 ; GFX9-NEXT:    s_mov_b32 s11, s8
3766 ; GFX9-NEXT:    ;;#ASMSTART
3767 ; GFX9-NEXT:    ; use s[8:11]
3768 ; GFX9-NEXT:    ;;#ASMEND
3769 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3770   %vec0 = call <2 x float> asm "; def $0", "=s"()
3771   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> zeroinitializer
3772   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3773   ret void
3776 define void @s_shuffle_v4f32_v2f32__1_0_0_0() {
3777 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__1_0_0_0:
3778 ; GFX9:       ; %bb.0:
3779 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3780 ; GFX9-NEXT:    ;;#ASMSTART
3781 ; GFX9-NEXT:    ; def s[10:11]
3782 ; GFX9-NEXT:    ;;#ASMEND
3783 ; GFX9-NEXT:    s_mov_b32 s8, s11
3784 ; GFX9-NEXT:    s_mov_b32 s9, s10
3785 ; GFX9-NEXT:    s_mov_b32 s11, s10
3786 ; GFX9-NEXT:    ;;#ASMSTART
3787 ; GFX9-NEXT:    ; use s[8:11]
3788 ; GFX9-NEXT:    ;;#ASMEND
3789 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3790   %vec0 = call <2 x float> asm "; def $0", "=s"()
3791   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 0, i32 0, i32 0>
3792   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3793   ret void
3796 define void @s_shuffle_v4f32_v2f32__2_0_0_0() {
3797 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__2_0_0_0:
3798 ; GFX9:       ; %bb.0:
3799 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3800 ; GFX9-NEXT:    ;;#ASMSTART
3801 ; GFX9-NEXT:    ; def s[10:11]
3802 ; GFX9-NEXT:    ;;#ASMEND
3803 ; GFX9-NEXT:    s_mov_b32 s9, s10
3804 ; GFX9-NEXT:    s_mov_b32 s11, s10
3805 ; GFX9-NEXT:    ;;#ASMSTART
3806 ; GFX9-NEXT:    ; use s[8:11]
3807 ; GFX9-NEXT:    ;;#ASMEND
3808 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3809   %vec0 = call <2 x float> asm "; def $0", "=s"()
3810   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 0, i32 0, i32 0>
3811   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3812   ret void
3815 define void @s_shuffle_v4f32_v2f32__3_0_0_0() {
3816 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_0_0_0:
3817 ; GFX900:       ; %bb.0:
3818 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3819 ; GFX900-NEXT:    ;;#ASMSTART
3820 ; GFX900-NEXT:    ; def s[10:11]
3821 ; GFX900-NEXT:    ;;#ASMEND
3822 ; GFX900-NEXT:    ;;#ASMSTART
3823 ; GFX900-NEXT:    ; def s[4:5]
3824 ; GFX900-NEXT:    ;;#ASMEND
3825 ; GFX900-NEXT:    s_mov_b32 s8, s5
3826 ; GFX900-NEXT:    s_mov_b32 s9, s10
3827 ; GFX900-NEXT:    s_mov_b32 s11, s10
3828 ; GFX900-NEXT:    ;;#ASMSTART
3829 ; GFX900-NEXT:    ; use s[8:11]
3830 ; GFX900-NEXT:    ;;#ASMEND
3831 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3833 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_0_0_0:
3834 ; GFX90A:       ; %bb.0:
3835 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3836 ; GFX90A-NEXT:    ;;#ASMSTART
3837 ; GFX90A-NEXT:    ; def s[10:11]
3838 ; GFX90A-NEXT:    ;;#ASMEND
3839 ; GFX90A-NEXT:    ;;#ASMSTART
3840 ; GFX90A-NEXT:    ; def s[4:5]
3841 ; GFX90A-NEXT:    ;;#ASMEND
3842 ; GFX90A-NEXT:    s_mov_b32 s8, s5
3843 ; GFX90A-NEXT:    s_mov_b32 s9, s10
3844 ; GFX90A-NEXT:    s_mov_b32 s11, s10
3845 ; GFX90A-NEXT:    ;;#ASMSTART
3846 ; GFX90A-NEXT:    ; use s[8:11]
3847 ; GFX90A-NEXT:    ;;#ASMEND
3848 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3850 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_0_0_0:
3851 ; GFX940:       ; %bb.0:
3852 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3853 ; GFX940-NEXT:    ;;#ASMSTART
3854 ; GFX940-NEXT:    ; def s[10:11]
3855 ; GFX940-NEXT:    ;;#ASMEND
3856 ; GFX940-NEXT:    ;;#ASMSTART
3857 ; GFX940-NEXT:    ; def s[0:1]
3858 ; GFX940-NEXT:    ;;#ASMEND
3859 ; GFX940-NEXT:    s_mov_b32 s8, s1
3860 ; GFX940-NEXT:    s_mov_b32 s9, s10
3861 ; GFX940-NEXT:    s_mov_b32 s11, s10
3862 ; GFX940-NEXT:    ;;#ASMSTART
3863 ; GFX940-NEXT:    ; use s[8:11]
3864 ; GFX940-NEXT:    ;;#ASMEND
3865 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3866   %vec0 = call <2 x float> asm "; def $0", "=s"()
3867   %vec1 = call <2 x float> asm "; def $0", "=s"()
3868   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 0, i32 0>
3869   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3870   ret void
3873 define void @s_shuffle_v4f32_v2f32__3_u_0_0() {
3874 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_u_0_0:
3875 ; GFX900:       ; %bb.0:
3876 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3877 ; GFX900-NEXT:    ;;#ASMSTART
3878 ; GFX900-NEXT:    ; def s[10:11]
3879 ; GFX900-NEXT:    ;;#ASMEND
3880 ; GFX900-NEXT:    ;;#ASMSTART
3881 ; GFX900-NEXT:    ; def s[4:5]
3882 ; GFX900-NEXT:    ;;#ASMEND
3883 ; GFX900-NEXT:    s_mov_b32 s8, s5
3884 ; GFX900-NEXT:    s_mov_b32 s11, s10
3885 ; GFX900-NEXT:    ;;#ASMSTART
3886 ; GFX900-NEXT:    ; use s[8:11]
3887 ; GFX900-NEXT:    ;;#ASMEND
3888 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3890 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_u_0_0:
3891 ; GFX90A:       ; %bb.0:
3892 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3893 ; GFX90A-NEXT:    ;;#ASMSTART
3894 ; GFX90A-NEXT:    ; def s[10:11]
3895 ; GFX90A-NEXT:    ;;#ASMEND
3896 ; GFX90A-NEXT:    ;;#ASMSTART
3897 ; GFX90A-NEXT:    ; def s[4:5]
3898 ; GFX90A-NEXT:    ;;#ASMEND
3899 ; GFX90A-NEXT:    s_mov_b32 s8, s5
3900 ; GFX90A-NEXT:    s_mov_b32 s11, s10
3901 ; GFX90A-NEXT:    ;;#ASMSTART
3902 ; GFX90A-NEXT:    ; use s[8:11]
3903 ; GFX90A-NEXT:    ;;#ASMEND
3904 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3906 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_u_0_0:
3907 ; GFX940:       ; %bb.0:
3908 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3909 ; GFX940-NEXT:    ;;#ASMSTART
3910 ; GFX940-NEXT:    ; def s[10:11]
3911 ; GFX940-NEXT:    ;;#ASMEND
3912 ; GFX940-NEXT:    ;;#ASMSTART
3913 ; GFX940-NEXT:    ; def s[0:1]
3914 ; GFX940-NEXT:    ;;#ASMEND
3915 ; GFX940-NEXT:    s_mov_b32 s8, s1
3916 ; GFX940-NEXT:    s_mov_b32 s11, s10
3917 ; GFX940-NEXT:    ;;#ASMSTART
3918 ; GFX940-NEXT:    ; use s[8:11]
3919 ; GFX940-NEXT:    ;;#ASMEND
3920 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3921   %vec0 = call <2 x float> asm "; def $0", "=s"()
3922   %vec1 = call <2 x float> asm "; def $0", "=s"()
3923   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 0, i32 0>
3924   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3925   ret void
3928 define void @s_shuffle_v4f32_v2f32__3_1_0_0() {
3929 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_1_0_0:
3930 ; GFX900:       ; %bb.0:
3931 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3932 ; GFX900-NEXT:    ;;#ASMSTART
3933 ; GFX900-NEXT:    ; def s[10:11]
3934 ; GFX900-NEXT:    ;;#ASMEND
3935 ; GFX900-NEXT:    ;;#ASMSTART
3936 ; GFX900-NEXT:    ; def s[4:5]
3937 ; GFX900-NEXT:    ;;#ASMEND
3938 ; GFX900-NEXT:    s_mov_b32 s8, s5
3939 ; GFX900-NEXT:    s_mov_b32 s9, s11
3940 ; GFX900-NEXT:    s_mov_b32 s11, s10
3941 ; GFX900-NEXT:    ;;#ASMSTART
3942 ; GFX900-NEXT:    ; use s[8:11]
3943 ; GFX900-NEXT:    ;;#ASMEND
3944 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3946 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_1_0_0:
3947 ; GFX90A:       ; %bb.0:
3948 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3949 ; GFX90A-NEXT:    ;;#ASMSTART
3950 ; GFX90A-NEXT:    ; def s[10:11]
3951 ; GFX90A-NEXT:    ;;#ASMEND
3952 ; GFX90A-NEXT:    ;;#ASMSTART
3953 ; GFX90A-NEXT:    ; def s[4:5]
3954 ; GFX90A-NEXT:    ;;#ASMEND
3955 ; GFX90A-NEXT:    s_mov_b32 s8, s5
3956 ; GFX90A-NEXT:    s_mov_b32 s9, s11
3957 ; GFX90A-NEXT:    s_mov_b32 s11, s10
3958 ; GFX90A-NEXT:    ;;#ASMSTART
3959 ; GFX90A-NEXT:    ; use s[8:11]
3960 ; GFX90A-NEXT:    ;;#ASMEND
3961 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3963 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_1_0_0:
3964 ; GFX940:       ; %bb.0:
3965 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3966 ; GFX940-NEXT:    ;;#ASMSTART
3967 ; GFX940-NEXT:    ; def s[10:11]
3968 ; GFX940-NEXT:    ;;#ASMEND
3969 ; GFX940-NEXT:    ;;#ASMSTART
3970 ; GFX940-NEXT:    ; def s[0:1]
3971 ; GFX940-NEXT:    ;;#ASMEND
3972 ; GFX940-NEXT:    s_mov_b32 s8, s1
3973 ; GFX940-NEXT:    s_mov_b32 s9, s11
3974 ; GFX940-NEXT:    s_mov_b32 s11, s10
3975 ; GFX940-NEXT:    ;;#ASMSTART
3976 ; GFX940-NEXT:    ; use s[8:11]
3977 ; GFX940-NEXT:    ;;#ASMEND
3978 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3979   %vec0 = call <2 x float> asm "; def $0", "=s"()
3980   %vec1 = call <2 x float> asm "; def $0", "=s"()
3981   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 0, i32 0>
3982   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
3983   ret void
3986 define void @s_shuffle_v4f32_v2f32__3_2_0_0() {
3987 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_2_0_0:
3988 ; GFX900:       ; %bb.0:
3989 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3990 ; GFX900-NEXT:    ;;#ASMSTART
3991 ; GFX900-NEXT:    ; def s[10:11]
3992 ; GFX900-NEXT:    ;;#ASMEND
3993 ; GFX900-NEXT:    ;;#ASMSTART
3994 ; GFX900-NEXT:    ; def s[4:5]
3995 ; GFX900-NEXT:    ;;#ASMEND
3996 ; GFX900-NEXT:    s_mov_b32 s8, s5
3997 ; GFX900-NEXT:    s_mov_b32 s9, s4
3998 ; GFX900-NEXT:    s_mov_b32 s11, s10
3999 ; GFX900-NEXT:    ;;#ASMSTART
4000 ; GFX900-NEXT:    ; use s[8:11]
4001 ; GFX900-NEXT:    ;;#ASMEND
4002 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4004 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_2_0_0:
4005 ; GFX90A:       ; %bb.0:
4006 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4007 ; GFX90A-NEXT:    ;;#ASMSTART
4008 ; GFX90A-NEXT:    ; def s[10:11]
4009 ; GFX90A-NEXT:    ;;#ASMEND
4010 ; GFX90A-NEXT:    ;;#ASMSTART
4011 ; GFX90A-NEXT:    ; def s[4:5]
4012 ; GFX90A-NEXT:    ;;#ASMEND
4013 ; GFX90A-NEXT:    s_mov_b32 s8, s5
4014 ; GFX90A-NEXT:    s_mov_b32 s9, s4
4015 ; GFX90A-NEXT:    s_mov_b32 s11, s10
4016 ; GFX90A-NEXT:    ;;#ASMSTART
4017 ; GFX90A-NEXT:    ; use s[8:11]
4018 ; GFX90A-NEXT:    ;;#ASMEND
4019 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4021 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_2_0_0:
4022 ; GFX940:       ; %bb.0:
4023 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4024 ; GFX940-NEXT:    ;;#ASMSTART
4025 ; GFX940-NEXT:    ; def s[10:11]
4026 ; GFX940-NEXT:    ;;#ASMEND
4027 ; GFX940-NEXT:    ;;#ASMSTART
4028 ; GFX940-NEXT:    ; def s[0:1]
4029 ; GFX940-NEXT:    ;;#ASMEND
4030 ; GFX940-NEXT:    s_mov_b32 s8, s1
4031 ; GFX940-NEXT:    s_mov_b32 s9, s0
4032 ; GFX940-NEXT:    s_mov_b32 s11, s10
4033 ; GFX940-NEXT:    ;;#ASMSTART
4034 ; GFX940-NEXT:    ; use s[8:11]
4035 ; GFX940-NEXT:    ;;#ASMEND
4036 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4037   %vec0 = call <2 x float> asm "; def $0", "=s"()
4038   %vec1 = call <2 x float> asm "; def $0", "=s"()
4039   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 0, i32 0>
4040   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4041   ret void
4044 define void @s_shuffle_v4f32_v2f32__3_3_0_0() {
4045 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_0_0:
4046 ; GFX9:       ; %bb.0:
4047 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4048 ; GFX9-NEXT:    ;;#ASMSTART
4049 ; GFX9-NEXT:    ; def s[10:11]
4050 ; GFX9-NEXT:    ;;#ASMEND
4051 ; GFX9-NEXT:    ;;#ASMSTART
4052 ; GFX9-NEXT:    ; def s[8:9]
4053 ; GFX9-NEXT:    ;;#ASMEND
4054 ; GFX9-NEXT:    s_mov_b32 s8, s9
4055 ; GFX9-NEXT:    s_mov_b32 s11, s10
4056 ; GFX9-NEXT:    ;;#ASMSTART
4057 ; GFX9-NEXT:    ; use s[8:11]
4058 ; GFX9-NEXT:    ;;#ASMEND
4059 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4060   %vec0 = call <2 x float> asm "; def $0", "=s"()
4061   %vec1 = call <2 x float> asm "; def $0", "=s"()
4062   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 0>
4063   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4064   ret void
4067 define void @s_shuffle_v4f32_v2f32__3_3_u_0() {
4068 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_u_0:
4069 ; GFX900:       ; %bb.0:
4070 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4071 ; GFX900-NEXT:    ;;#ASMSTART
4072 ; GFX900-NEXT:    ; def s[8:9]
4073 ; GFX900-NEXT:    ;;#ASMEND
4074 ; GFX900-NEXT:    ;;#ASMSTART
4075 ; GFX900-NEXT:    ; def s[4:5]
4076 ; GFX900-NEXT:    ;;#ASMEND
4077 ; GFX900-NEXT:    s_mov_b32 s8, s9
4078 ; GFX900-NEXT:    s_mov_b32 s11, s4
4079 ; GFX900-NEXT:    ;;#ASMSTART
4080 ; GFX900-NEXT:    ; use s[8:11]
4081 ; GFX900-NEXT:    ;;#ASMEND
4082 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4084 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_u_0:
4085 ; GFX90A:       ; %bb.0:
4086 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4087 ; GFX90A-NEXT:    ;;#ASMSTART
4088 ; GFX90A-NEXT:    ; def s[8:9]
4089 ; GFX90A-NEXT:    ;;#ASMEND
4090 ; GFX90A-NEXT:    ;;#ASMSTART
4091 ; GFX90A-NEXT:    ; def s[4:5]
4092 ; GFX90A-NEXT:    ;;#ASMEND
4093 ; GFX90A-NEXT:    s_mov_b32 s8, s9
4094 ; GFX90A-NEXT:    s_mov_b32 s11, s4
4095 ; GFX90A-NEXT:    ;;#ASMSTART
4096 ; GFX90A-NEXT:    ; use s[8:11]
4097 ; GFX90A-NEXT:    ;;#ASMEND
4098 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4100 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_3_u_0:
4101 ; GFX940:       ; %bb.0:
4102 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4103 ; GFX940-NEXT:    ;;#ASMSTART
4104 ; GFX940-NEXT:    ; def s[8:9]
4105 ; GFX940-NEXT:    ;;#ASMEND
4106 ; GFX940-NEXT:    ;;#ASMSTART
4107 ; GFX940-NEXT:    ; def s[0:1]
4108 ; GFX940-NEXT:    ;;#ASMEND
4109 ; GFX940-NEXT:    s_mov_b32 s8, s9
4110 ; GFX940-NEXT:    s_mov_b32 s11, s0
4111 ; GFX940-NEXT:    ;;#ASMSTART
4112 ; GFX940-NEXT:    ; use s[8:11]
4113 ; GFX940-NEXT:    ;;#ASMEND
4114 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4115   %vec0 = call <2 x float> asm "; def $0", "=s"()
4116   %vec1 = call <2 x float> asm "; def $0", "=s"()
4117   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 0>
4118   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4119   ret void
4122 define void @s_shuffle_v4f32_v2f32__3_3_1_0() {
4123 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_1_0:
4124 ; GFX900:       ; %bb.0:
4125 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4126 ; GFX900-NEXT:    ;;#ASMSTART
4127 ; GFX900-NEXT:    ; def s[8:9]
4128 ; GFX900-NEXT:    ;;#ASMEND
4129 ; GFX900-NEXT:    ;;#ASMSTART
4130 ; GFX900-NEXT:    ; def s[4:5]
4131 ; GFX900-NEXT:    ;;#ASMEND
4132 ; GFX900-NEXT:    s_mov_b32 s8, s9
4133 ; GFX900-NEXT:    s_mov_b32 s10, s5
4134 ; GFX900-NEXT:    s_mov_b32 s11, s4
4135 ; GFX900-NEXT:    ;;#ASMSTART
4136 ; GFX900-NEXT:    ; use s[8:11]
4137 ; GFX900-NEXT:    ;;#ASMEND
4138 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4140 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_1_0:
4141 ; GFX90A:       ; %bb.0:
4142 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4143 ; GFX90A-NEXT:    ;;#ASMSTART
4144 ; GFX90A-NEXT:    ; def s[8:9]
4145 ; GFX90A-NEXT:    ;;#ASMEND
4146 ; GFX90A-NEXT:    ;;#ASMSTART
4147 ; GFX90A-NEXT:    ; def s[4:5]
4148 ; GFX90A-NEXT:    ;;#ASMEND
4149 ; GFX90A-NEXT:    s_mov_b32 s8, s9
4150 ; GFX90A-NEXT:    s_mov_b32 s10, s5
4151 ; GFX90A-NEXT:    s_mov_b32 s11, s4
4152 ; GFX90A-NEXT:    ;;#ASMSTART
4153 ; GFX90A-NEXT:    ; use s[8:11]
4154 ; GFX90A-NEXT:    ;;#ASMEND
4155 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4157 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_3_1_0:
4158 ; GFX940:       ; %bb.0:
4159 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4160 ; GFX940-NEXT:    ;;#ASMSTART
4161 ; GFX940-NEXT:    ; def s[8:9]
4162 ; GFX940-NEXT:    ;;#ASMEND
4163 ; GFX940-NEXT:    ;;#ASMSTART
4164 ; GFX940-NEXT:    ; def s[0:1]
4165 ; GFX940-NEXT:    ;;#ASMEND
4166 ; GFX940-NEXT:    s_mov_b32 s8, s9
4167 ; GFX940-NEXT:    s_mov_b32 s10, s1
4168 ; GFX940-NEXT:    s_mov_b32 s11, s0
4169 ; GFX940-NEXT:    ;;#ASMSTART
4170 ; GFX940-NEXT:    ; use s[8:11]
4171 ; GFX940-NEXT:    ;;#ASMEND
4172 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4173   %vec0 = call <2 x float> asm "; def $0", "=s"()
4174   %vec1 = call <2 x float> asm "; def $0", "=s"()
4175   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 0>
4176   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4177   ret void
4180 define void @s_shuffle_v4f32_v2f32__3_3_2_0() {
4181 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_2_0:
4182 ; GFX900:       ; %bb.0:
4183 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4184 ; GFX900-NEXT:    ;;#ASMSTART
4185 ; GFX900-NEXT:    ; def s[10:11]
4186 ; GFX900-NEXT:    ;;#ASMEND
4187 ; GFX900-NEXT:    ;;#ASMSTART
4188 ; GFX900-NEXT:    ; def s[4:5]
4189 ; GFX900-NEXT:    ;;#ASMEND
4190 ; GFX900-NEXT:    s_mov_b32 s8, s11
4191 ; GFX900-NEXT:    s_mov_b32 s9, s11
4192 ; GFX900-NEXT:    s_mov_b32 s11, s4
4193 ; GFX900-NEXT:    ;;#ASMSTART
4194 ; GFX900-NEXT:    ; use s[8:11]
4195 ; GFX900-NEXT:    ;;#ASMEND
4196 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4198 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_2_0:
4199 ; GFX90A:       ; %bb.0:
4200 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4201 ; GFX90A-NEXT:    ;;#ASMSTART
4202 ; GFX90A-NEXT:    ; def s[10:11]
4203 ; GFX90A-NEXT:    ;;#ASMEND
4204 ; GFX90A-NEXT:    ;;#ASMSTART
4205 ; GFX90A-NEXT:    ; def s[4:5]
4206 ; GFX90A-NEXT:    ;;#ASMEND
4207 ; GFX90A-NEXT:    s_mov_b32 s8, s11
4208 ; GFX90A-NEXT:    s_mov_b32 s9, s11
4209 ; GFX90A-NEXT:    s_mov_b32 s11, s4
4210 ; GFX90A-NEXT:    ;;#ASMSTART
4211 ; GFX90A-NEXT:    ; use s[8:11]
4212 ; GFX90A-NEXT:    ;;#ASMEND
4213 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4215 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_3_2_0:
4216 ; GFX940:       ; %bb.0:
4217 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4218 ; GFX940-NEXT:    ;;#ASMSTART
4219 ; GFX940-NEXT:    ; def s[10:11]
4220 ; GFX940-NEXT:    ;;#ASMEND
4221 ; GFX940-NEXT:    ;;#ASMSTART
4222 ; GFX940-NEXT:    ; def s[0:1]
4223 ; GFX940-NEXT:    ;;#ASMEND
4224 ; GFX940-NEXT:    s_mov_b32 s8, s11
4225 ; GFX940-NEXT:    s_mov_b32 s9, s11
4226 ; GFX940-NEXT:    s_mov_b32 s11, s0
4227 ; GFX940-NEXT:    ;;#ASMSTART
4228 ; GFX940-NEXT:    ; use s[8:11]
4229 ; GFX940-NEXT:    ;;#ASMEND
4230 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4231   %vec0 = call <2 x float> asm "; def $0", "=s"()
4232   %vec1 = call <2 x float> asm "; def $0", "=s"()
4233   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 0>
4234   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4235   ret void
4238 define void @s_shuffle_v4f32_v2f32__u_1_1_1() {
4239 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__u_1_1_1:
4240 ; GFX9:       ; %bb.0:
4241 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4242 ; GFX9-NEXT:    ;;#ASMSTART
4243 ; GFX9-NEXT:    ; def s[8:9]
4244 ; GFX9-NEXT:    ;;#ASMEND
4245 ; GFX9-NEXT:    s_mov_b32 s10, s9
4246 ; GFX9-NEXT:    s_mov_b32 s11, s9
4247 ; GFX9-NEXT:    ;;#ASMSTART
4248 ; GFX9-NEXT:    ; use s[8:11]
4249 ; GFX9-NEXT:    ;;#ASMEND
4250 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4251   %vec0 = call <2 x float> asm "; def $0", "=s"()
4252   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 1, i32 1, i32 1>
4253   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4254   ret void
4257 define void @s_shuffle_v4f32_v2f32__0_1_1_1() {
4258 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__0_1_1_1:
4259 ; GFX9:       ; %bb.0:
4260 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4261 ; GFX9-NEXT:    ;;#ASMSTART
4262 ; GFX9-NEXT:    ; def s[8:9]
4263 ; GFX9-NEXT:    ;;#ASMEND
4264 ; GFX9-NEXT:    s_mov_b32 s10, s9
4265 ; GFX9-NEXT:    s_mov_b32 s11, s9
4266 ; GFX9-NEXT:    ;;#ASMSTART
4267 ; GFX9-NEXT:    ; use s[8:11]
4268 ; GFX9-NEXT:    ;;#ASMEND
4269 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4270   %vec0 = call <2 x float> asm "; def $0", "=s"()
4271   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 1, i32 1>
4272   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4273   ret void
4276 define void @s_shuffle_v4f32_v2f32__1_1_1_1() {
4277 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__1_1_1_1:
4278 ; GFX9:       ; %bb.0:
4279 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4280 ; GFX9-NEXT:    ;;#ASMSTART
4281 ; GFX9-NEXT:    ; def s[8:9]
4282 ; GFX9-NEXT:    ;;#ASMEND
4283 ; GFX9-NEXT:    s_mov_b32 s8, s9
4284 ; GFX9-NEXT:    s_mov_b32 s10, s9
4285 ; GFX9-NEXT:    s_mov_b32 s11, s9
4286 ; GFX9-NEXT:    ;;#ASMSTART
4287 ; GFX9-NEXT:    ; use s[8:11]
4288 ; GFX9-NEXT:    ;;#ASMEND
4289 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4290   %vec0 = call <2 x float> asm "; def $0", "=s"()
4291   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 1, i32 1, i32 1>
4292   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4293   ret void
4296 define void @s_shuffle_v4f32_v2f32__2_1_1_1() {
4297 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__2_1_1_1:
4298 ; GFX9:       ; %bb.0:
4299 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4300 ; GFX9-NEXT:    ;;#ASMSTART
4301 ; GFX9-NEXT:    ; def s[8:9]
4302 ; GFX9-NEXT:    ;;#ASMEND
4303 ; GFX9-NEXT:    s_mov_b32 s10, s9
4304 ; GFX9-NEXT:    s_mov_b32 s11, s9
4305 ; GFX9-NEXT:    ;;#ASMSTART
4306 ; GFX9-NEXT:    ; use s[8:11]
4307 ; GFX9-NEXT:    ;;#ASMEND
4308 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4309   %vec0 = call <2 x float> asm "; def $0", "=s"()
4310   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 1, i32 1, i32 1>
4311   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4312   ret void
4315 define void @s_shuffle_v4f32_v2f32__3_1_1_1() {
4316 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_1_1_1:
4317 ; GFX900:       ; %bb.0:
4318 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4319 ; GFX900-NEXT:    ;;#ASMSTART
4320 ; GFX900-NEXT:    ; def s[8:9]
4321 ; GFX900-NEXT:    ;;#ASMEND
4322 ; GFX900-NEXT:    ;;#ASMSTART
4323 ; GFX900-NEXT:    ; def s[4:5]
4324 ; GFX900-NEXT:    ;;#ASMEND
4325 ; GFX900-NEXT:    s_mov_b32 s8, s5
4326 ; GFX900-NEXT:    s_mov_b32 s10, s9
4327 ; GFX900-NEXT:    s_mov_b32 s11, s9
4328 ; GFX900-NEXT:    ;;#ASMSTART
4329 ; GFX900-NEXT:    ; use s[8:11]
4330 ; GFX900-NEXT:    ;;#ASMEND
4331 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4333 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_1_1_1:
4334 ; GFX90A:       ; %bb.0:
4335 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4336 ; GFX90A-NEXT:    ;;#ASMSTART
4337 ; GFX90A-NEXT:    ; def s[8:9]
4338 ; GFX90A-NEXT:    ;;#ASMEND
4339 ; GFX90A-NEXT:    ;;#ASMSTART
4340 ; GFX90A-NEXT:    ; def s[4:5]
4341 ; GFX90A-NEXT:    ;;#ASMEND
4342 ; GFX90A-NEXT:    s_mov_b32 s8, s5
4343 ; GFX90A-NEXT:    s_mov_b32 s10, s9
4344 ; GFX90A-NEXT:    s_mov_b32 s11, s9
4345 ; GFX90A-NEXT:    ;;#ASMSTART
4346 ; GFX90A-NEXT:    ; use s[8:11]
4347 ; GFX90A-NEXT:    ;;#ASMEND
4348 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4350 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_1_1_1:
4351 ; GFX940:       ; %bb.0:
4352 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4353 ; GFX940-NEXT:    ;;#ASMSTART
4354 ; GFX940-NEXT:    ; def s[8:9]
4355 ; GFX940-NEXT:    ;;#ASMEND
4356 ; GFX940-NEXT:    ;;#ASMSTART
4357 ; GFX940-NEXT:    ; def s[0:1]
4358 ; GFX940-NEXT:    ;;#ASMEND
4359 ; GFX940-NEXT:    s_mov_b32 s8, s1
4360 ; GFX940-NEXT:    s_mov_b32 s10, s9
4361 ; GFX940-NEXT:    s_mov_b32 s11, s9
4362 ; GFX940-NEXT:    ;;#ASMSTART
4363 ; GFX940-NEXT:    ; use s[8:11]
4364 ; GFX940-NEXT:    ;;#ASMEND
4365 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4366   %vec0 = call <2 x float> asm "; def $0", "=s"()
4367   %vec1 = call <2 x float> asm "; def $0", "=s"()
4368   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 1, i32 1>
4369   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4370   ret void
4373 define void @s_shuffle_v4f32_v2f32__3_u_1_1() {
4374 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_u_1_1:
4375 ; GFX900:       ; %bb.0:
4376 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4377 ; GFX900-NEXT:    ;;#ASMSTART
4378 ; GFX900-NEXT:    ; def s[10:11]
4379 ; GFX900-NEXT:    ;;#ASMEND
4380 ; GFX900-NEXT:    ;;#ASMSTART
4381 ; GFX900-NEXT:    ; def s[4:5]
4382 ; GFX900-NEXT:    ;;#ASMEND
4383 ; GFX900-NEXT:    s_mov_b32 s8, s5
4384 ; GFX900-NEXT:    s_mov_b32 s10, s11
4385 ; GFX900-NEXT:    ;;#ASMSTART
4386 ; GFX900-NEXT:    ; use s[8:11]
4387 ; GFX900-NEXT:    ;;#ASMEND
4388 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4390 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_u_1_1:
4391 ; GFX90A:       ; %bb.0:
4392 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4393 ; GFX90A-NEXT:    ;;#ASMSTART
4394 ; GFX90A-NEXT:    ; def s[10:11]
4395 ; GFX90A-NEXT:    ;;#ASMEND
4396 ; GFX90A-NEXT:    ;;#ASMSTART
4397 ; GFX90A-NEXT:    ; def s[4:5]
4398 ; GFX90A-NEXT:    ;;#ASMEND
4399 ; GFX90A-NEXT:    s_mov_b32 s8, s5
4400 ; GFX90A-NEXT:    s_mov_b32 s10, s11
4401 ; GFX90A-NEXT:    ;;#ASMSTART
4402 ; GFX90A-NEXT:    ; use s[8:11]
4403 ; GFX90A-NEXT:    ;;#ASMEND
4404 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4406 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_u_1_1:
4407 ; GFX940:       ; %bb.0:
4408 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4409 ; GFX940-NEXT:    ;;#ASMSTART
4410 ; GFX940-NEXT:    ; def s[10:11]
4411 ; GFX940-NEXT:    ;;#ASMEND
4412 ; GFX940-NEXT:    ;;#ASMSTART
4413 ; GFX940-NEXT:    ; def s[0:1]
4414 ; GFX940-NEXT:    ;;#ASMEND
4415 ; GFX940-NEXT:    s_mov_b32 s8, s1
4416 ; GFX940-NEXT:    s_mov_b32 s10, s11
4417 ; GFX940-NEXT:    ;;#ASMSTART
4418 ; GFX940-NEXT:    ; use s[8:11]
4419 ; GFX940-NEXT:    ;;#ASMEND
4420 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4421   %vec0 = call <2 x float> asm "; def $0", "=s"()
4422   %vec1 = call <2 x float> asm "; def $0", "=s"()
4423   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 1, i32 1>
4424   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4425   ret void
4428 define void @s_shuffle_v4f32_v2f32__3_0_1_1() {
4429 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_0_1_1:
4430 ; GFX900:       ; %bb.0:
4431 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4432 ; GFX900-NEXT:    ;;#ASMSTART
4433 ; GFX900-NEXT:    ; def s[10:11]
4434 ; GFX900-NEXT:    ;;#ASMEND
4435 ; GFX900-NEXT:    ;;#ASMSTART
4436 ; GFX900-NEXT:    ; def s[4:5]
4437 ; GFX900-NEXT:    ;;#ASMEND
4438 ; GFX900-NEXT:    s_mov_b32 s8, s5
4439 ; GFX900-NEXT:    s_mov_b32 s9, s10
4440 ; GFX900-NEXT:    s_mov_b32 s10, s11
4441 ; GFX900-NEXT:    ;;#ASMSTART
4442 ; GFX900-NEXT:    ; use s[8:11]
4443 ; GFX900-NEXT:    ;;#ASMEND
4444 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4446 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_0_1_1:
4447 ; GFX90A:       ; %bb.0:
4448 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4449 ; GFX90A-NEXT:    ;;#ASMSTART
4450 ; GFX90A-NEXT:    ; def s[10:11]
4451 ; GFX90A-NEXT:    ;;#ASMEND
4452 ; GFX90A-NEXT:    ;;#ASMSTART
4453 ; GFX90A-NEXT:    ; def s[4:5]
4454 ; GFX90A-NEXT:    ;;#ASMEND
4455 ; GFX90A-NEXT:    s_mov_b32 s8, s5
4456 ; GFX90A-NEXT:    s_mov_b32 s9, s10
4457 ; GFX90A-NEXT:    s_mov_b32 s10, s11
4458 ; GFX90A-NEXT:    ;;#ASMSTART
4459 ; GFX90A-NEXT:    ; use s[8:11]
4460 ; GFX90A-NEXT:    ;;#ASMEND
4461 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4463 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_0_1_1:
4464 ; GFX940:       ; %bb.0:
4465 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4466 ; GFX940-NEXT:    ;;#ASMSTART
4467 ; GFX940-NEXT:    ; def s[10:11]
4468 ; GFX940-NEXT:    ;;#ASMEND
4469 ; GFX940-NEXT:    ;;#ASMSTART
4470 ; GFX940-NEXT:    ; def s[0:1]
4471 ; GFX940-NEXT:    ;;#ASMEND
4472 ; GFX940-NEXT:    s_mov_b32 s8, s1
4473 ; GFX940-NEXT:    s_mov_b32 s9, s10
4474 ; GFX940-NEXT:    s_mov_b32 s10, s11
4475 ; GFX940-NEXT:    ;;#ASMSTART
4476 ; GFX940-NEXT:    ; use s[8:11]
4477 ; GFX940-NEXT:    ;;#ASMEND
4478 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4479   %vec0 = call <2 x float> asm "; def $0", "=s"()
4480   %vec1 = call <2 x float> asm "; def $0", "=s"()
4481   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 1, i32 1>
4482   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4483   ret void
4486 define void @s_shuffle_v4f32_v2f32__3_2_1_1() {
4487 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_2_1_1:
4488 ; GFX900:       ; %bb.0:
4489 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4490 ; GFX900-NEXT:    ;;#ASMSTART
4491 ; GFX900-NEXT:    ; def s[10:11]
4492 ; GFX900-NEXT:    ;;#ASMEND
4493 ; GFX900-NEXT:    ;;#ASMSTART
4494 ; GFX900-NEXT:    ; def s[4:5]
4495 ; GFX900-NEXT:    ;;#ASMEND
4496 ; GFX900-NEXT:    s_mov_b32 s8, s5
4497 ; GFX900-NEXT:    s_mov_b32 s9, s4
4498 ; GFX900-NEXT:    s_mov_b32 s10, s11
4499 ; GFX900-NEXT:    ;;#ASMSTART
4500 ; GFX900-NEXT:    ; use s[8:11]
4501 ; GFX900-NEXT:    ;;#ASMEND
4502 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4504 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_2_1_1:
4505 ; GFX90A:       ; %bb.0:
4506 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4507 ; GFX90A-NEXT:    ;;#ASMSTART
4508 ; GFX90A-NEXT:    ; def s[10:11]
4509 ; GFX90A-NEXT:    ;;#ASMEND
4510 ; GFX90A-NEXT:    ;;#ASMSTART
4511 ; GFX90A-NEXT:    ; def s[4:5]
4512 ; GFX90A-NEXT:    ;;#ASMEND
4513 ; GFX90A-NEXT:    s_mov_b32 s8, s5
4514 ; GFX90A-NEXT:    s_mov_b32 s9, s4
4515 ; GFX90A-NEXT:    s_mov_b32 s10, s11
4516 ; GFX90A-NEXT:    ;;#ASMSTART
4517 ; GFX90A-NEXT:    ; use s[8:11]
4518 ; GFX90A-NEXT:    ;;#ASMEND
4519 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4521 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_2_1_1:
4522 ; GFX940:       ; %bb.0:
4523 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4524 ; GFX940-NEXT:    ;;#ASMSTART
4525 ; GFX940-NEXT:    ; def s[10:11]
4526 ; GFX940-NEXT:    ;;#ASMEND
4527 ; GFX940-NEXT:    ;;#ASMSTART
4528 ; GFX940-NEXT:    ; def s[0:1]
4529 ; GFX940-NEXT:    ;;#ASMEND
4530 ; GFX940-NEXT:    s_mov_b32 s8, s1
4531 ; GFX940-NEXT:    s_mov_b32 s9, s0
4532 ; GFX940-NEXT:    s_mov_b32 s10, s11
4533 ; GFX940-NEXT:    ;;#ASMSTART
4534 ; GFX940-NEXT:    ; use s[8:11]
4535 ; GFX940-NEXT:    ;;#ASMEND
4536 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4537   %vec0 = call <2 x float> asm "; def $0", "=s"()
4538   %vec1 = call <2 x float> asm "; def $0", "=s"()
4539   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 1, i32 1>
4540   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4541   ret void
4544 define void @s_shuffle_v4f32_v2f32__3_3_1_1() {
4545 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_1_1:
4546 ; GFX9:       ; %bb.0:
4547 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4548 ; GFX9-NEXT:    ;;#ASMSTART
4549 ; GFX9-NEXT:    ; def s[10:11]
4550 ; GFX9-NEXT:    ;;#ASMEND
4551 ; GFX9-NEXT:    ;;#ASMSTART
4552 ; GFX9-NEXT:    ; def s[8:9]
4553 ; GFX9-NEXT:    ;;#ASMEND
4554 ; GFX9-NEXT:    s_mov_b32 s8, s9
4555 ; GFX9-NEXT:    s_mov_b32 s10, s11
4556 ; GFX9-NEXT:    ;;#ASMSTART
4557 ; GFX9-NEXT:    ; use s[8:11]
4558 ; GFX9-NEXT:    ;;#ASMEND
4559 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4560   %vec0 = call <2 x float> asm "; def $0", "=s"()
4561   %vec1 = call <2 x float> asm "; def $0", "=s"()
4562   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 1>
4563   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4564   ret void
4567 define void @s_shuffle_v4f32_v2f32__3_3_u_1() {
4568 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_u_1:
4569 ; GFX9:       ; %bb.0:
4570 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4571 ; GFX9-NEXT:    ;;#ASMSTART
4572 ; GFX9-NEXT:    ; def s[8:9]
4573 ; GFX9-NEXT:    ;;#ASMEND
4574 ; GFX9-NEXT:    ;;#ASMSTART
4575 ; GFX9-NEXT:    ; def s[10:11]
4576 ; GFX9-NEXT:    ;;#ASMEND
4577 ; GFX9-NEXT:    s_mov_b32 s8, s9
4578 ; GFX9-NEXT:    ;;#ASMSTART
4579 ; GFX9-NEXT:    ; use s[8:11]
4580 ; GFX9-NEXT:    ;;#ASMEND
4581 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4582   %vec0 = call <2 x float> asm "; def $0", "=s"()
4583   %vec1 = call <2 x float> asm "; def $0", "=s"()
4584   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 1>
4585   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4586   ret void
4589 define void @s_shuffle_v4f32_v2f32__3_3_0_1() {
4590 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_0_1:
4591 ; GFX9:       ; %bb.0:
4592 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4593 ; GFX9-NEXT:    ;;#ASMSTART
4594 ; GFX9-NEXT:    ; def s[8:9]
4595 ; GFX9-NEXT:    ;;#ASMEND
4596 ; GFX9-NEXT:    ;;#ASMSTART
4597 ; GFX9-NEXT:    ; def s[10:11]
4598 ; GFX9-NEXT:    ;;#ASMEND
4599 ; GFX9-NEXT:    s_mov_b32 s8, s9
4600 ; GFX9-NEXT:    ;;#ASMSTART
4601 ; GFX9-NEXT:    ; use s[8:11]
4602 ; GFX9-NEXT:    ;;#ASMEND
4603 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4604   %vec0 = call <2 x float> asm "; def $0", "=s"()
4605   %vec1 = call <2 x float> asm "; def $0", "=s"()
4606   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 1>
4607   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4608   ret void
4611 define void @s_shuffle_v4f32_v2f32__3_3_2_1() {
4612 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_2_1:
4613 ; GFX900:       ; %bb.0:
4614 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4615 ; GFX900-NEXT:    ;;#ASMSTART
4616 ; GFX900-NEXT:    ; def s[10:11]
4617 ; GFX900-NEXT:    ;;#ASMEND
4618 ; GFX900-NEXT:    ;;#ASMSTART
4619 ; GFX900-NEXT:    ; def s[4:5]
4620 ; GFX900-NEXT:    ;;#ASMEND
4621 ; GFX900-NEXT:    s_mov_b32 s8, s11
4622 ; GFX900-NEXT:    s_mov_b32 s9, s11
4623 ; GFX900-NEXT:    s_mov_b32 s11, s5
4624 ; GFX900-NEXT:    ;;#ASMSTART
4625 ; GFX900-NEXT:    ; use s[8:11]
4626 ; GFX900-NEXT:    ;;#ASMEND
4627 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4629 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_2_1:
4630 ; GFX90A:       ; %bb.0:
4631 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4632 ; GFX90A-NEXT:    ;;#ASMSTART
4633 ; GFX90A-NEXT:    ; def s[10:11]
4634 ; GFX90A-NEXT:    ;;#ASMEND
4635 ; GFX90A-NEXT:    ;;#ASMSTART
4636 ; GFX90A-NEXT:    ; def s[4:5]
4637 ; GFX90A-NEXT:    ;;#ASMEND
4638 ; GFX90A-NEXT:    s_mov_b32 s8, s11
4639 ; GFX90A-NEXT:    s_mov_b32 s9, s11
4640 ; GFX90A-NEXT:    s_mov_b32 s11, s5
4641 ; GFX90A-NEXT:    ;;#ASMSTART
4642 ; GFX90A-NEXT:    ; use s[8:11]
4643 ; GFX90A-NEXT:    ;;#ASMEND
4644 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4646 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_3_2_1:
4647 ; GFX940:       ; %bb.0:
4648 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4649 ; GFX940-NEXT:    ;;#ASMSTART
4650 ; GFX940-NEXT:    ; def s[10:11]
4651 ; GFX940-NEXT:    ;;#ASMEND
4652 ; GFX940-NEXT:    ;;#ASMSTART
4653 ; GFX940-NEXT:    ; def s[0:1]
4654 ; GFX940-NEXT:    ;;#ASMEND
4655 ; GFX940-NEXT:    s_mov_b32 s8, s11
4656 ; GFX940-NEXT:    s_mov_b32 s9, s11
4657 ; GFX940-NEXT:    s_mov_b32 s11, s1
4658 ; GFX940-NEXT:    ;;#ASMSTART
4659 ; GFX940-NEXT:    ; use s[8:11]
4660 ; GFX940-NEXT:    ;;#ASMEND
4661 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4662   %vec0 = call <2 x float> asm "; def $0", "=s"()
4663   %vec1 = call <2 x float> asm "; def $0", "=s"()
4664   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 1>
4665   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4666   ret void
4669 define void @s_shuffle_v4f32_v2f32__u_2_2_2() {
4670 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__u_2_2_2:
4671 ; GFX9:       ; %bb.0:
4672 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4673 ; GFX9-NEXT:    ;;#ASMSTART
4674 ; GFX9-NEXT:    ; use s[8:11]
4675 ; GFX9-NEXT:    ;;#ASMEND
4676 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4677   %vec0 = call <2 x float> asm "; def $0", "=s"()
4678   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 poison, i32 2, i32 2, i32 2>
4679   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4680   ret void
4683 define void @s_shuffle_v4f32_v2f32__0_2_2_2() {
4684 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__0_2_2_2:
4685 ; GFX900:       ; %bb.0:
4686 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4687 ; GFX900-NEXT:    ;;#ASMSTART
4688 ; GFX900-NEXT:    ; def s[8:9]
4689 ; GFX900-NEXT:    ;;#ASMEND
4690 ; GFX900-NEXT:    ;;#ASMSTART
4691 ; GFX900-NEXT:    ; use s[8:11]
4692 ; GFX900-NEXT:    ;;#ASMEND
4693 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4695 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__0_2_2_2:
4696 ; GFX90A:       ; %bb.0:
4697 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4698 ; GFX90A-NEXT:    ;;#ASMSTART
4699 ; GFX90A-NEXT:    ; def s[8:9]
4700 ; GFX90A-NEXT:    ;;#ASMEND
4701 ; GFX90A-NEXT:    ;;#ASMSTART
4702 ; GFX90A-NEXT:    ; use s[8:11]
4703 ; GFX90A-NEXT:    ;;#ASMEND
4704 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4706 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__0_2_2_2:
4707 ; GFX940:       ; %bb.0:
4708 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4709 ; GFX940-NEXT:    ;;#ASMSTART
4710 ; GFX940-NEXT:    ; def s[8:9]
4711 ; GFX940-NEXT:    ;;#ASMEND
4712 ; GFX940-NEXT:    s_nop 0
4713 ; GFX940-NEXT:    ;;#ASMSTART
4714 ; GFX940-NEXT:    ; use s[8:11]
4715 ; GFX940-NEXT:    ;;#ASMEND
4716 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4717   %vec0 = call <2 x float> asm "; def $0", "=s"()
4718   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>
4719   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4720   ret void
4723 define void @s_shuffle_v4f32_v2f32__1_2_2_2() {
4724 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__1_2_2_2:
4725 ; GFX900:       ; %bb.0:
4726 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4727 ; GFX900-NEXT:    ;;#ASMSTART
4728 ; GFX900-NEXT:    ; def s[4:5]
4729 ; GFX900-NEXT:    ;;#ASMEND
4730 ; GFX900-NEXT:    s_mov_b32 s8, s5
4731 ; GFX900-NEXT:    ;;#ASMSTART
4732 ; GFX900-NEXT:    ; use s[8:11]
4733 ; GFX900-NEXT:    ;;#ASMEND
4734 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4736 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__1_2_2_2:
4737 ; GFX90A:       ; %bb.0:
4738 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4739 ; GFX90A-NEXT:    ;;#ASMSTART
4740 ; GFX90A-NEXT:    ; def s[4:5]
4741 ; GFX90A-NEXT:    ;;#ASMEND
4742 ; GFX90A-NEXT:    s_mov_b32 s8, s5
4743 ; GFX90A-NEXT:    ;;#ASMSTART
4744 ; GFX90A-NEXT:    ; use s[8:11]
4745 ; GFX90A-NEXT:    ;;#ASMEND
4746 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4748 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__1_2_2_2:
4749 ; GFX940:       ; %bb.0:
4750 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4751 ; GFX940-NEXT:    ;;#ASMSTART
4752 ; GFX940-NEXT:    ; def s[0:1]
4753 ; GFX940-NEXT:    ;;#ASMEND
4754 ; GFX940-NEXT:    s_mov_b32 s8, s1
4755 ; GFX940-NEXT:    ;;#ASMSTART
4756 ; GFX940-NEXT:    ; use s[8:11]
4757 ; GFX940-NEXT:    ;;#ASMEND
4758 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4759   %vec0 = call <2 x float> asm "; def $0", "=s"()
4760   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 1, i32 2, i32 2, i32 2>
4761   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4762   ret void
4765 define void @s_shuffle_v4f32_v2f32__2_2_2_2() {
4766 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__2_2_2_2:
4767 ; GFX9:       ; %bb.0:
4768 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4769 ; GFX9-NEXT:    ;;#ASMSTART
4770 ; GFX9-NEXT:    ; use s[8:11]
4771 ; GFX9-NEXT:    ;;#ASMEND
4772 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4773   %vec0 = call <2 x float> asm "; def $0", "=s"()
4774   %shuf = shufflevector <2 x float> %vec0, <2 x float> poison, <4 x i32> <i32 2, i32 2, i32 2, i32 2>
4775   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4776   ret void
4779 define void @s_shuffle_v4f32_v2f32__3_2_2_2() {
4780 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_2_2_2:
4781 ; GFX9:       ; %bb.0:
4782 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4783 ; GFX9-NEXT:    ;;#ASMSTART
4784 ; GFX9-NEXT:    ; def s[10:11]
4785 ; GFX9-NEXT:    ;;#ASMEND
4786 ; GFX9-NEXT:    s_mov_b32 s8, s11
4787 ; GFX9-NEXT:    s_mov_b32 s9, s10
4788 ; GFX9-NEXT:    s_mov_b32 s11, s10
4789 ; GFX9-NEXT:    ;;#ASMSTART
4790 ; GFX9-NEXT:    ; use s[8:11]
4791 ; GFX9-NEXT:    ;;#ASMEND
4792 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4793   %vec0 = call <2 x float> asm "; def $0", "=s"()
4794   %vec1 = call <2 x float> asm "; def $0", "=s"()
4795   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 2, i32 2>
4796   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4797   ret void
4800 define void @s_shuffle_v4f32_v2f32__3_u_2_2() {
4801 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_u_2_2:
4802 ; GFX9:       ; %bb.0:
4803 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4804 ; GFX9-NEXT:    ;;#ASMSTART
4805 ; GFX9-NEXT:    ; def s[10:11]
4806 ; GFX9-NEXT:    ;;#ASMEND
4807 ; GFX9-NEXT:    s_mov_b32 s8, s11
4808 ; GFX9-NEXT:    s_mov_b32 s11, s10
4809 ; GFX9-NEXT:    ;;#ASMSTART
4810 ; GFX9-NEXT:    ; use s[8:11]
4811 ; GFX9-NEXT:    ;;#ASMEND
4812 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4813   %vec0 = call <2 x float> asm "; def $0", "=s"()
4814   %vec1 = call <2 x float> asm "; def $0", "=s"()
4815   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 2, i32 2>
4816   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4817   ret void
4820 define void @s_shuffle_v4f32_v2f32__3_0_2_2() {
4821 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_0_2_2:
4822 ; GFX900:       ; %bb.0:
4823 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4824 ; GFX900-NEXT:    ;;#ASMSTART
4825 ; GFX900-NEXT:    ; def s[10:11]
4826 ; GFX900-NEXT:    ;;#ASMEND
4827 ; GFX900-NEXT:    ;;#ASMSTART
4828 ; GFX900-NEXT:    ; def s[4:5]
4829 ; GFX900-NEXT:    ;;#ASMEND
4830 ; GFX900-NEXT:    s_mov_b32 s8, s11
4831 ; GFX900-NEXT:    s_mov_b32 s9, s4
4832 ; GFX900-NEXT:    s_mov_b32 s11, s10
4833 ; GFX900-NEXT:    ;;#ASMSTART
4834 ; GFX900-NEXT:    ; use s[8:11]
4835 ; GFX900-NEXT:    ;;#ASMEND
4836 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4838 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_0_2_2:
4839 ; GFX90A:       ; %bb.0:
4840 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4841 ; GFX90A-NEXT:    ;;#ASMSTART
4842 ; GFX90A-NEXT:    ; def s[10:11]
4843 ; GFX90A-NEXT:    ;;#ASMEND
4844 ; GFX90A-NEXT:    ;;#ASMSTART
4845 ; GFX90A-NEXT:    ; def s[4:5]
4846 ; GFX90A-NEXT:    ;;#ASMEND
4847 ; GFX90A-NEXT:    s_mov_b32 s8, s11
4848 ; GFX90A-NEXT:    s_mov_b32 s9, s4
4849 ; GFX90A-NEXT:    s_mov_b32 s11, s10
4850 ; GFX90A-NEXT:    ;;#ASMSTART
4851 ; GFX90A-NEXT:    ; use s[8:11]
4852 ; GFX90A-NEXT:    ;;#ASMEND
4853 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4855 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_0_2_2:
4856 ; GFX940:       ; %bb.0:
4857 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4858 ; GFX940-NEXT:    ;;#ASMSTART
4859 ; GFX940-NEXT:    ; def s[10:11]
4860 ; GFX940-NEXT:    ;;#ASMEND
4861 ; GFX940-NEXT:    ;;#ASMSTART
4862 ; GFX940-NEXT:    ; def s[0:1]
4863 ; GFX940-NEXT:    ;;#ASMEND
4864 ; GFX940-NEXT:    s_mov_b32 s8, s11
4865 ; GFX940-NEXT:    s_mov_b32 s9, s0
4866 ; GFX940-NEXT:    s_mov_b32 s11, s10
4867 ; GFX940-NEXT:    ;;#ASMSTART
4868 ; GFX940-NEXT:    ; use s[8:11]
4869 ; GFX940-NEXT:    ;;#ASMEND
4870 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4871   %vec0 = call <2 x float> asm "; def $0", "=s"()
4872   %vec1 = call <2 x float> asm "; def $0", "=s"()
4873   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 2, i32 2>
4874   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4875   ret void
4878 define void @s_shuffle_v4f32_v2f32__3_1_2_2() {
4879 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_1_2_2:
4880 ; GFX9:       ; %bb.0:
4881 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4882 ; GFX9-NEXT:    ;;#ASMSTART
4883 ; GFX9-NEXT:    ; def s[8:9]
4884 ; GFX9-NEXT:    ;;#ASMEND
4885 ; GFX9-NEXT:    ;;#ASMSTART
4886 ; GFX9-NEXT:    ; def s[10:11]
4887 ; GFX9-NEXT:    ;;#ASMEND
4888 ; GFX9-NEXT:    s_mov_b32 s8, s11
4889 ; GFX9-NEXT:    s_mov_b32 s11, s10
4890 ; GFX9-NEXT:    ;;#ASMSTART
4891 ; GFX9-NEXT:    ; use s[8:11]
4892 ; GFX9-NEXT:    ;;#ASMEND
4893 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4894   %vec0 = call <2 x float> asm "; def $0", "=s"()
4895   %vec1 = call <2 x float> asm "; def $0", "=s"()
4896   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 2, i32 2>
4897   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4898   ret void
4901 define void @s_shuffle_v4f32_v2f32__3_3_2_2() {
4902 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_2_2:
4903 ; GFX9:       ; %bb.0:
4904 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4905 ; GFX9-NEXT:    ;;#ASMSTART
4906 ; GFX9-NEXT:    ; def s[10:11]
4907 ; GFX9-NEXT:    ;;#ASMEND
4908 ; GFX9-NEXT:    s_mov_b32 s8, s11
4909 ; GFX9-NEXT:    s_mov_b32 s9, s11
4910 ; GFX9-NEXT:    s_mov_b32 s11, s10
4911 ; GFX9-NEXT:    ;;#ASMSTART
4912 ; GFX9-NEXT:    ; use s[8:11]
4913 ; GFX9-NEXT:    ;;#ASMEND
4914 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4915   %vec0 = call <2 x float> asm "; def $0", "=s"()
4916   %vec1 = call <2 x float> asm "; def $0", "=s"()
4917   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 2>
4918   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4919   ret void
4922 define void @s_shuffle_v4f32_v2f32__3_3_u_2() {
4923 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_u_2:
4924 ; GFX900:       ; %bb.0:
4925 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4926 ; GFX900-NEXT:    ;;#ASMSTART
4927 ; GFX900-NEXT:    ; def s[4:5]
4928 ; GFX900-NEXT:    ;;#ASMEND
4929 ; GFX900-NEXT:    s_mov_b32 s8, s5
4930 ; GFX900-NEXT:    s_mov_b32 s9, s5
4931 ; GFX900-NEXT:    s_mov_b32 s11, s4
4932 ; GFX900-NEXT:    ;;#ASMSTART
4933 ; GFX900-NEXT:    ; use s[8:11]
4934 ; GFX900-NEXT:    ;;#ASMEND
4935 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4937 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_u_2:
4938 ; GFX90A:       ; %bb.0:
4939 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4940 ; GFX90A-NEXT:    ;;#ASMSTART
4941 ; GFX90A-NEXT:    ; def s[4:5]
4942 ; GFX90A-NEXT:    ;;#ASMEND
4943 ; GFX90A-NEXT:    s_mov_b32 s8, s5
4944 ; GFX90A-NEXT:    s_mov_b32 s9, s5
4945 ; GFX90A-NEXT:    s_mov_b32 s11, s4
4946 ; GFX90A-NEXT:    ;;#ASMSTART
4947 ; GFX90A-NEXT:    ; use s[8:11]
4948 ; GFX90A-NEXT:    ;;#ASMEND
4949 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4951 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_3_u_2:
4952 ; GFX940:       ; %bb.0:
4953 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4954 ; GFX940-NEXT:    ;;#ASMSTART
4955 ; GFX940-NEXT:    ; def s[0:1]
4956 ; GFX940-NEXT:    ;;#ASMEND
4957 ; GFX940-NEXT:    s_mov_b32 s8, s1
4958 ; GFX940-NEXT:    s_mov_b32 s9, s1
4959 ; GFX940-NEXT:    s_mov_b32 s11, s0
4960 ; GFX940-NEXT:    ;;#ASMSTART
4961 ; GFX940-NEXT:    ; use s[8:11]
4962 ; GFX940-NEXT:    ;;#ASMEND
4963 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4964   %vec0 = call <2 x float> asm "; def $0", "=s"()
4965   %vec1 = call <2 x float> asm "; def $0", "=s"()
4966   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 2>
4967   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
4968   ret void
4971 define void @s_shuffle_v4f32_v2f32__3_3_0_2() {
4972 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_0_2:
4973 ; GFX900:       ; %bb.0:
4974 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4975 ; GFX900-NEXT:    ;;#ASMSTART
4976 ; GFX900-NEXT:    ; def s[10:11]
4977 ; GFX900-NEXT:    ;;#ASMEND
4978 ; GFX900-NEXT:    ;;#ASMSTART
4979 ; GFX900-NEXT:    ; def s[4:5]
4980 ; GFX900-NEXT:    ;;#ASMEND
4981 ; GFX900-NEXT:    s_mov_b32 s8, s5
4982 ; GFX900-NEXT:    s_mov_b32 s9, s5
4983 ; GFX900-NEXT:    s_mov_b32 s11, s4
4984 ; GFX900-NEXT:    ;;#ASMSTART
4985 ; GFX900-NEXT:    ; use s[8:11]
4986 ; GFX900-NEXT:    ;;#ASMEND
4987 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4989 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_0_2:
4990 ; GFX90A:       ; %bb.0:
4991 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4992 ; GFX90A-NEXT:    ;;#ASMSTART
4993 ; GFX90A-NEXT:    ; def s[10:11]
4994 ; GFX90A-NEXT:    ;;#ASMEND
4995 ; GFX90A-NEXT:    ;;#ASMSTART
4996 ; GFX90A-NEXT:    ; def s[4:5]
4997 ; GFX90A-NEXT:    ;;#ASMEND
4998 ; GFX90A-NEXT:    s_mov_b32 s8, s5
4999 ; GFX90A-NEXT:    s_mov_b32 s9, s5
5000 ; GFX90A-NEXT:    s_mov_b32 s11, s4
5001 ; GFX90A-NEXT:    ;;#ASMSTART
5002 ; GFX90A-NEXT:    ; use s[8:11]
5003 ; GFX90A-NEXT:    ;;#ASMEND
5004 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5006 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_3_0_2:
5007 ; GFX940:       ; %bb.0:
5008 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5009 ; GFX940-NEXT:    ;;#ASMSTART
5010 ; GFX940-NEXT:    ; def s[10:11]
5011 ; GFX940-NEXT:    ;;#ASMEND
5012 ; GFX940-NEXT:    ;;#ASMSTART
5013 ; GFX940-NEXT:    ; def s[0:1]
5014 ; GFX940-NEXT:    ;;#ASMEND
5015 ; GFX940-NEXT:    s_mov_b32 s8, s1
5016 ; GFX940-NEXT:    s_mov_b32 s9, s1
5017 ; GFX940-NEXT:    s_mov_b32 s11, s0
5018 ; GFX940-NEXT:    ;;#ASMSTART
5019 ; GFX940-NEXT:    ; use s[8:11]
5020 ; GFX940-NEXT:    ;;#ASMEND
5021 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
5022   %vec0 = call <2 x float> asm "; def $0", "=s"()
5023   %vec1 = call <2 x float> asm "; def $0", "=s"()
5024   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 2>
5025   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5026   ret void
5029 define void @s_shuffle_v4f32_v2f32__3_3_1_2() {
5030 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_1_2:
5031 ; GFX900:       ; %bb.0:
5032 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5033 ; GFX900-NEXT:    ;;#ASMSTART
5034 ; GFX900-NEXT:    ; def s[4:5]
5035 ; GFX900-NEXT:    ;;#ASMEND
5036 ; GFX900-NEXT:    ;;#ASMSTART
5037 ; GFX900-NEXT:    ; def s[6:7]
5038 ; GFX900-NEXT:    ;;#ASMEND
5039 ; GFX900-NEXT:    s_mov_b32 s8, s7
5040 ; GFX900-NEXT:    s_mov_b32 s9, s7
5041 ; GFX900-NEXT:    s_mov_b32 s10, s5
5042 ; GFX900-NEXT:    s_mov_b32 s11, s6
5043 ; GFX900-NEXT:    ;;#ASMSTART
5044 ; GFX900-NEXT:    ; use s[8:11]
5045 ; GFX900-NEXT:    ;;#ASMEND
5046 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
5048 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_1_2:
5049 ; GFX90A:       ; %bb.0:
5050 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5051 ; GFX90A-NEXT:    ;;#ASMSTART
5052 ; GFX90A-NEXT:    ; def s[4:5]
5053 ; GFX90A-NEXT:    ;;#ASMEND
5054 ; GFX90A-NEXT:    ;;#ASMSTART
5055 ; GFX90A-NEXT:    ; def s[6:7]
5056 ; GFX90A-NEXT:    ;;#ASMEND
5057 ; GFX90A-NEXT:    s_mov_b32 s8, s7
5058 ; GFX90A-NEXT:    s_mov_b32 s9, s7
5059 ; GFX90A-NEXT:    s_mov_b32 s10, s5
5060 ; GFX90A-NEXT:    s_mov_b32 s11, s6
5061 ; GFX90A-NEXT:    ;;#ASMSTART
5062 ; GFX90A-NEXT:    ; use s[8:11]
5063 ; GFX90A-NEXT:    ;;#ASMEND
5064 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5066 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_3_1_2:
5067 ; GFX940:       ; %bb.0:
5068 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5069 ; GFX940-NEXT:    ;;#ASMSTART
5070 ; GFX940-NEXT:    ; def s[0:1]
5071 ; GFX940-NEXT:    ;;#ASMEND
5072 ; GFX940-NEXT:    ;;#ASMSTART
5073 ; GFX940-NEXT:    ; def s[2:3]
5074 ; GFX940-NEXT:    ;;#ASMEND
5075 ; GFX940-NEXT:    s_mov_b32 s8, s3
5076 ; GFX940-NEXT:    s_mov_b32 s9, s3
5077 ; GFX940-NEXT:    s_mov_b32 s10, s1
5078 ; GFX940-NEXT:    s_mov_b32 s11, s2
5079 ; GFX940-NEXT:    ;;#ASMSTART
5080 ; GFX940-NEXT:    ; use s[8:11]
5081 ; GFX940-NEXT:    ;;#ASMEND
5082 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
5083   %vec0 = call <2 x float> asm "; def $0", "=s"()
5084   %vec1 = call <2 x float> asm "; def $0", "=s"()
5085   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 2>
5086   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5087   ret void
5090 define void @s_shuffle_v4f32_v2f32__u_3_3_3() {
5091 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__u_3_3_3:
5092 ; GFX9:       ; %bb.0:
5093 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5094 ; GFX9-NEXT:    ;;#ASMSTART
5095 ; GFX9-NEXT:    ; def s[8:9]
5096 ; GFX9-NEXT:    ;;#ASMEND
5097 ; GFX9-NEXT:    s_mov_b32 s10, s9
5098 ; GFX9-NEXT:    s_mov_b32 s11, s9
5099 ; GFX9-NEXT:    ;;#ASMSTART
5100 ; GFX9-NEXT:    ; use s[8:11]
5101 ; GFX9-NEXT:    ;;#ASMEND
5102 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5103   %vec0 = call <2 x float> asm "; def $0", "=s"()
5104   %vec1 = call <2 x float> asm "; def $0", "=s"()
5105   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 poison, i32 3, i32 3, i32 3>
5106   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5107   ret void
5110 define void @s_shuffle_v4f32_v2f32__0_3_3_3() {
5111 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__0_3_3_3:
5112 ; GFX9:       ; %bb.0:
5113 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5114 ; GFX9-NEXT:    ;;#ASMSTART
5115 ; GFX9-NEXT:    ; def s[8:9]
5116 ; GFX9-NEXT:    ;;#ASMEND
5117 ; GFX9-NEXT:    ;;#ASMSTART
5118 ; GFX9-NEXT:    ; def s[10:11]
5119 ; GFX9-NEXT:    ;;#ASMEND
5120 ; GFX9-NEXT:    s_mov_b32 s9, s11
5121 ; GFX9-NEXT:    s_mov_b32 s10, s11
5122 ; GFX9-NEXT:    ;;#ASMSTART
5123 ; GFX9-NEXT:    ; use s[8:11]
5124 ; GFX9-NEXT:    ;;#ASMEND
5125 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5126   %vec0 = call <2 x float> asm "; def $0", "=s"()
5127   %vec1 = call <2 x float> asm "; def $0", "=s"()
5128   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 0, i32 3, i32 3, i32 3>
5129   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5130   ret void
5133 define void @s_shuffle_v4f32_v2f32__1_3_3_3() {
5134 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__1_3_3_3:
5135 ; GFX900:       ; %bb.0:
5136 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5137 ; GFX900-NEXT:    ;;#ASMSTART
5138 ; GFX900-NEXT:    ; def s[8:9]
5139 ; GFX900-NEXT:    ;;#ASMEND
5140 ; GFX900-NEXT:    ;;#ASMSTART
5141 ; GFX900-NEXT:    ; def s[4:5]
5142 ; GFX900-NEXT:    ;;#ASMEND
5143 ; GFX900-NEXT:    s_mov_b32 s8, s5
5144 ; GFX900-NEXT:    s_mov_b32 s10, s9
5145 ; GFX900-NEXT:    s_mov_b32 s11, s9
5146 ; GFX900-NEXT:    ;;#ASMSTART
5147 ; GFX900-NEXT:    ; use s[8:11]
5148 ; GFX900-NEXT:    ;;#ASMEND
5149 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
5151 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__1_3_3_3:
5152 ; GFX90A:       ; %bb.0:
5153 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5154 ; GFX90A-NEXT:    ;;#ASMSTART
5155 ; GFX90A-NEXT:    ; def s[8:9]
5156 ; GFX90A-NEXT:    ;;#ASMEND
5157 ; GFX90A-NEXT:    ;;#ASMSTART
5158 ; GFX90A-NEXT:    ; def s[4:5]
5159 ; GFX90A-NEXT:    ;;#ASMEND
5160 ; GFX90A-NEXT:    s_mov_b32 s8, s5
5161 ; GFX90A-NEXT:    s_mov_b32 s10, s9
5162 ; GFX90A-NEXT:    s_mov_b32 s11, s9
5163 ; GFX90A-NEXT:    ;;#ASMSTART
5164 ; GFX90A-NEXT:    ; use s[8:11]
5165 ; GFX90A-NEXT:    ;;#ASMEND
5166 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5168 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__1_3_3_3:
5169 ; GFX940:       ; %bb.0:
5170 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5171 ; GFX940-NEXT:    ;;#ASMSTART
5172 ; GFX940-NEXT:    ; def s[8:9]
5173 ; GFX940-NEXT:    ;;#ASMEND
5174 ; GFX940-NEXT:    ;;#ASMSTART
5175 ; GFX940-NEXT:    ; def s[0:1]
5176 ; GFX940-NEXT:    ;;#ASMEND
5177 ; GFX940-NEXT:    s_mov_b32 s8, s1
5178 ; GFX940-NEXT:    s_mov_b32 s10, s9
5179 ; GFX940-NEXT:    s_mov_b32 s11, s9
5180 ; GFX940-NEXT:    ;;#ASMSTART
5181 ; GFX940-NEXT:    ; use s[8:11]
5182 ; GFX940-NEXT:    ;;#ASMEND
5183 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
5184   %vec0 = call <2 x float> asm "; def $0", "=s"()
5185   %vec1 = call <2 x float> asm "; def $0", "=s"()
5186   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 1, i32 3, i32 3, i32 3>
5187   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5188   ret void
5191 define void @s_shuffle_v4f32_v2f32__2_3_3_3() {
5192 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__2_3_3_3:
5193 ; GFX9:       ; %bb.0:
5194 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5195 ; GFX9-NEXT:    ;;#ASMSTART
5196 ; GFX9-NEXT:    ; def s[8:9]
5197 ; GFX9-NEXT:    ;;#ASMEND
5198 ; GFX9-NEXT:    s_mov_b32 s10, s9
5199 ; GFX9-NEXT:    s_mov_b32 s11, s9
5200 ; GFX9-NEXT:    ;;#ASMSTART
5201 ; GFX9-NEXT:    ; use s[8:11]
5202 ; GFX9-NEXT:    ;;#ASMEND
5203 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5204   %vec0 = call <2 x float> asm "; def $0", "=s"()
5205   %vec1 = call <2 x float> asm "; def $0", "=s"()
5206   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 2, i32 3, i32 3, i32 3>
5207   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5208   ret void
5211 define void @s_shuffle_v4f32_v2f32__3_u_3_3() {
5212 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_u_3_3:
5213 ; GFX9:       ; %bb.0:
5214 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5215 ; GFX9-NEXT:    ;;#ASMSTART
5216 ; GFX9-NEXT:    ; def s[10:11]
5217 ; GFX9-NEXT:    ;;#ASMEND
5218 ; GFX9-NEXT:    s_mov_b32 s8, s11
5219 ; GFX9-NEXT:    s_mov_b32 s10, s11
5220 ; GFX9-NEXT:    ;;#ASMSTART
5221 ; GFX9-NEXT:    ; use s[8:11]
5222 ; GFX9-NEXT:    ;;#ASMEND
5223 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5224   %vec0 = call <2 x float> asm "; def $0", "=s"()
5225   %vec1 = call <2 x float> asm "; def $0", "=s"()
5226   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 poison, i32 3, i32 3>
5227   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5228   ret void
5231 define void @s_shuffle_v4f32_v2f32__3_0_3_3() {
5232 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_0_3_3:
5233 ; GFX900:       ; %bb.0:
5234 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5235 ; GFX900-NEXT:    ;;#ASMSTART
5236 ; GFX900-NEXT:    ; def s[10:11]
5237 ; GFX900-NEXT:    ;;#ASMEND
5238 ; GFX900-NEXT:    ;;#ASMSTART
5239 ; GFX900-NEXT:    ; def s[4:5]
5240 ; GFX900-NEXT:    ;;#ASMEND
5241 ; GFX900-NEXT:    s_mov_b32 s8, s11
5242 ; GFX900-NEXT:    s_mov_b32 s9, s4
5243 ; GFX900-NEXT:    s_mov_b32 s10, s11
5244 ; GFX900-NEXT:    ;;#ASMSTART
5245 ; GFX900-NEXT:    ; use s[8:11]
5246 ; GFX900-NEXT:    ;;#ASMEND
5247 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
5249 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_0_3_3:
5250 ; GFX90A:       ; %bb.0:
5251 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5252 ; GFX90A-NEXT:    ;;#ASMSTART
5253 ; GFX90A-NEXT:    ; def s[10:11]
5254 ; GFX90A-NEXT:    ;;#ASMEND
5255 ; GFX90A-NEXT:    ;;#ASMSTART
5256 ; GFX90A-NEXT:    ; def s[4:5]
5257 ; GFX90A-NEXT:    ;;#ASMEND
5258 ; GFX90A-NEXT:    s_mov_b32 s8, s11
5259 ; GFX90A-NEXT:    s_mov_b32 s9, s4
5260 ; GFX90A-NEXT:    s_mov_b32 s10, s11
5261 ; GFX90A-NEXT:    ;;#ASMSTART
5262 ; GFX90A-NEXT:    ; use s[8:11]
5263 ; GFX90A-NEXT:    ;;#ASMEND
5264 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5266 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_0_3_3:
5267 ; GFX940:       ; %bb.0:
5268 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5269 ; GFX940-NEXT:    ;;#ASMSTART
5270 ; GFX940-NEXT:    ; def s[10:11]
5271 ; GFX940-NEXT:    ;;#ASMEND
5272 ; GFX940-NEXT:    ;;#ASMSTART
5273 ; GFX940-NEXT:    ; def s[0:1]
5274 ; GFX940-NEXT:    ;;#ASMEND
5275 ; GFX940-NEXT:    s_mov_b32 s8, s11
5276 ; GFX940-NEXT:    s_mov_b32 s9, s0
5277 ; GFX940-NEXT:    s_mov_b32 s10, s11
5278 ; GFX940-NEXT:    ;;#ASMSTART
5279 ; GFX940-NEXT:    ; use s[8:11]
5280 ; GFX940-NEXT:    ;;#ASMEND
5281 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
5282   %vec0 = call <2 x float> asm "; def $0", "=s"()
5283   %vec1 = call <2 x float> asm "; def $0", "=s"()
5284   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 0, i32 3, i32 3>
5285   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5286   ret void
5289 define void @s_shuffle_v4f32_v2f32__3_1_3_3() {
5290 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_1_3_3:
5291 ; GFX9:       ; %bb.0:
5292 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5293 ; GFX9-NEXT:    ;;#ASMSTART
5294 ; GFX9-NEXT:    ; def s[8:9]
5295 ; GFX9-NEXT:    ;;#ASMEND
5296 ; GFX9-NEXT:    ;;#ASMSTART
5297 ; GFX9-NEXT:    ; def s[10:11]
5298 ; GFX9-NEXT:    ;;#ASMEND
5299 ; GFX9-NEXT:    s_mov_b32 s8, s11
5300 ; GFX9-NEXT:    s_mov_b32 s10, s11
5301 ; GFX9-NEXT:    ;;#ASMSTART
5302 ; GFX9-NEXT:    ; use s[8:11]
5303 ; GFX9-NEXT:    ;;#ASMEND
5304 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5305   %vec0 = call <2 x float> asm "; def $0", "=s"()
5306   %vec1 = call <2 x float> asm "; def $0", "=s"()
5307   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 1, i32 3, i32 3>
5308   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5309   ret void
5312 define void @s_shuffle_v4f32_v2f32__3_2_3_3() {
5313 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_2_3_3:
5314 ; GFX9:       ; %bb.0:
5315 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5316 ; GFX9-NEXT:    ;;#ASMSTART
5317 ; GFX9-NEXT:    ; def s[10:11]
5318 ; GFX9-NEXT:    ;;#ASMEND
5319 ; GFX9-NEXT:    s_mov_b32 s8, s11
5320 ; GFX9-NEXT:    s_mov_b32 s9, s10
5321 ; GFX9-NEXT:    s_mov_b32 s10, s11
5322 ; GFX9-NEXT:    ;;#ASMSTART
5323 ; GFX9-NEXT:    ; use s[8:11]
5324 ; GFX9-NEXT:    ;;#ASMEND
5325 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5326   %vec0 = call <2 x float> asm "; def $0", "=s"()
5327   %vec1 = call <2 x float> asm "; def $0", "=s"()
5328   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 2, i32 3, i32 3>
5329   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5330   ret void
5333 define void @s_shuffle_v4f32_v2f32__3_3_u_3() {
5334 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_u_3:
5335 ; GFX9:       ; %bb.0:
5336 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5337 ; GFX9-NEXT:    ;;#ASMSTART
5338 ; GFX9-NEXT:    ; def s[8:9]
5339 ; GFX9-NEXT:    ;;#ASMEND
5340 ; GFX9-NEXT:    s_mov_b32 s8, s9
5341 ; GFX9-NEXT:    s_mov_b32 s11, s9
5342 ; GFX9-NEXT:    ;;#ASMSTART
5343 ; GFX9-NEXT:    ; use s[8:11]
5344 ; GFX9-NEXT:    ;;#ASMEND
5345 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5346   %vec0 = call <2 x float> asm "; def $0", "=s"()
5347   %vec1 = call <2 x float> asm "; def $0", "=s"()
5348   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 poison, i32 3>
5349   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5350   ret void
5353 define void @s_shuffle_v4f32_v2f32__3_3_0_3() {
5354 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_0_3:
5355 ; GFX9:       ; %bb.0:
5356 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5357 ; GFX9-NEXT:    ;;#ASMSTART
5358 ; GFX9-NEXT:    ; def s[10:11]
5359 ; GFX9-NEXT:    ;;#ASMEND
5360 ; GFX9-NEXT:    ;;#ASMSTART
5361 ; GFX9-NEXT:    ; def s[8:9]
5362 ; GFX9-NEXT:    ;;#ASMEND
5363 ; GFX9-NEXT:    s_mov_b32 s8, s9
5364 ; GFX9-NEXT:    s_mov_b32 s11, s9
5365 ; GFX9-NEXT:    ;;#ASMSTART
5366 ; GFX9-NEXT:    ; use s[8:11]
5367 ; GFX9-NEXT:    ;;#ASMEND
5368 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5369   %vec0 = call <2 x float> asm "; def $0", "=s"()
5370   %vec1 = call <2 x float> asm "; def $0", "=s"()
5371   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 0, i32 3>
5372   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5373   ret void
5376 define void @s_shuffle_v4f32_v2f32__3_3_1_3() {
5377 ; GFX900-LABEL: s_shuffle_v4f32_v2f32__3_3_1_3:
5378 ; GFX900:       ; %bb.0:
5379 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5380 ; GFX900-NEXT:    ;;#ASMSTART
5381 ; GFX900-NEXT:    ; def s[8:9]
5382 ; GFX900-NEXT:    ;;#ASMEND
5383 ; GFX900-NEXT:    ;;#ASMSTART
5384 ; GFX900-NEXT:    ; def s[4:5]
5385 ; GFX900-NEXT:    ;;#ASMEND
5386 ; GFX900-NEXT:    s_mov_b32 s8, s9
5387 ; GFX900-NEXT:    s_mov_b32 s10, s5
5388 ; GFX900-NEXT:    s_mov_b32 s11, s9
5389 ; GFX900-NEXT:    ;;#ASMSTART
5390 ; GFX900-NEXT:    ; use s[8:11]
5391 ; GFX900-NEXT:    ;;#ASMEND
5392 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
5394 ; GFX90A-LABEL: s_shuffle_v4f32_v2f32__3_3_1_3:
5395 ; GFX90A:       ; %bb.0:
5396 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5397 ; GFX90A-NEXT:    ;;#ASMSTART
5398 ; GFX90A-NEXT:    ; def s[8:9]
5399 ; GFX90A-NEXT:    ;;#ASMEND
5400 ; GFX90A-NEXT:    ;;#ASMSTART
5401 ; GFX90A-NEXT:    ; def s[4:5]
5402 ; GFX90A-NEXT:    ;;#ASMEND
5403 ; GFX90A-NEXT:    s_mov_b32 s8, s9
5404 ; GFX90A-NEXT:    s_mov_b32 s10, s5
5405 ; GFX90A-NEXT:    s_mov_b32 s11, s9
5406 ; GFX90A-NEXT:    ;;#ASMSTART
5407 ; GFX90A-NEXT:    ; use s[8:11]
5408 ; GFX90A-NEXT:    ;;#ASMEND
5409 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
5411 ; GFX940-LABEL: s_shuffle_v4f32_v2f32__3_3_1_3:
5412 ; GFX940:       ; %bb.0:
5413 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5414 ; GFX940-NEXT:    ;;#ASMSTART
5415 ; GFX940-NEXT:    ; def s[8:9]
5416 ; GFX940-NEXT:    ;;#ASMEND
5417 ; GFX940-NEXT:    ;;#ASMSTART
5418 ; GFX940-NEXT:    ; def s[0:1]
5419 ; GFX940-NEXT:    ;;#ASMEND
5420 ; GFX940-NEXT:    s_mov_b32 s8, s9
5421 ; GFX940-NEXT:    s_mov_b32 s10, s1
5422 ; GFX940-NEXT:    s_mov_b32 s11, s9
5423 ; GFX940-NEXT:    ;;#ASMSTART
5424 ; GFX940-NEXT:    ; use s[8:11]
5425 ; GFX940-NEXT:    ;;#ASMEND
5426 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
5427   %vec0 = call <2 x float> asm "; def $0", "=s"()
5428   %vec1 = call <2 x float> asm "; def $0", "=s"()
5429   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 1, i32 3>
5430   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5431   ret void
5434 define void @s_shuffle_v4f32_v2f32__3_3_2_3() {
5435 ; GFX9-LABEL: s_shuffle_v4f32_v2f32__3_3_2_3:
5436 ; GFX9:       ; %bb.0:
5437 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
5438 ; GFX9-NEXT:    ;;#ASMSTART
5439 ; GFX9-NEXT:    ; def s[10:11]
5440 ; GFX9-NEXT:    ;;#ASMEND
5441 ; GFX9-NEXT:    s_mov_b32 s8, s11
5442 ; GFX9-NEXT:    s_mov_b32 s9, s11
5443 ; GFX9-NEXT:    ;;#ASMSTART
5444 ; GFX9-NEXT:    ; use s[8:11]
5445 ; GFX9-NEXT:    ;;#ASMEND
5446 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
5447   %vec0 = call <2 x float> asm "; def $0", "=s"()
5448   %vec1 = call <2 x float> asm "; def $0", "=s"()
5449   %shuf = shufflevector <2 x float> %vec0, <2 x float> %vec1, <4 x i32> <i32 3, i32 3, i32 2, i32 3>
5450   call void asm sideeffect "; use $0", "{s[8:11]}"(<4 x float> %shuf)
5451   ret void
5453 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
5454 ; GFX90APLUS: {{.*}}