[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / shufflevector.v3p0.v2p0.ll
blob3075bfab1dc85f9e98d5b5135448d35d94d90512
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_v3p0_v2p0__u_u_u(ptr addrspace(1) inreg %ptr) {
8 ; GFX9-LABEL: v_shuffle_v3p0_v2p0__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 ptr> asm "; def $0", "=v"()
13   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> poison
14   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
15   ret void
18 define void @v_shuffle_v3p0_v2p0__0_u_u(ptr addrspace(1) inreg %ptr) {
19 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__0_u_u:
20 ; GFX900:       ; %bb.0:
21 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
22 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
23 ; GFX900-NEXT:    ;;#ASMSTART
24 ; GFX900-NEXT:    ; def v[0:3]
25 ; GFX900-NEXT:    ;;#ASMEND
26 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
27 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
28 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
30 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__0_u_u:
31 ; GFX90A:       ; %bb.0:
32 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
33 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
34 ; GFX90A-NEXT:    ;;#ASMSTART
35 ; GFX90A-NEXT:    ; def v[0:3]
36 ; GFX90A-NEXT:    ;;#ASMEND
37 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
38 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
39 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
41 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__0_u_u:
42 ; GFX940:       ; %bb.0:
43 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
44 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
45 ; GFX940-NEXT:    ;;#ASMSTART
46 ; GFX940-NEXT:    ; def v[0:3]
47 ; GFX940-NEXT:    ;;#ASMEND
48 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
49 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
50 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
51   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
52   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 poison, i32 poison>
53   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
54   ret void
57 define void @v_shuffle_v3p0_v2p0__1_u_u(ptr addrspace(1) inreg %ptr) {
58 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__1_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:3]
63 ; GFX900-NEXT:    ;;#ASMEND
64 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
65 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
66 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
67 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
68 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
69 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
71 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__1_u_u:
72 ; GFX90A:       ; %bb.0:
73 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
74 ; GFX90A-NEXT:    ;;#ASMSTART
75 ; GFX90A-NEXT:    ; def v[0:3]
76 ; GFX90A-NEXT:    ;;#ASMEND
77 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
78 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
79 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
80 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
81 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
82 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
84 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__1_u_u:
85 ; GFX940:       ; %bb.0:
86 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
87 ; GFX940-NEXT:    ;;#ASMSTART
88 ; GFX940-NEXT:    ; def v[0:3]
89 ; GFX940-NEXT:    ;;#ASMEND
90 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
91 ; GFX940-NEXT:    v_mov_b32_e32 v0, v2
92 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
93 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
94 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
95 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
96   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
97   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 poison, i32 poison>
98   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
99   ret void
102 define void @v_shuffle_v3p0_v2p0__2_u_u(ptr addrspace(1) inreg %ptr) {
103 ; GFX9-LABEL: v_shuffle_v3p0_v2p0__2_u_u:
104 ; GFX9:       ; %bb.0:
105 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
106 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
107   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
108   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 poison, i32 poison>
109   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
110   ret void
113 define void @v_shuffle_v3p0_v2p0__3_u_u(ptr addrspace(1) inreg %ptr) {
114 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_u_u:
115 ; GFX900:       ; %bb.0:
116 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
117 ; GFX900-NEXT:    ;;#ASMSTART
118 ; GFX900-NEXT:    ; def v[0:3]
119 ; GFX900-NEXT:    ;;#ASMEND
120 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
121 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
122 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
123 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
124 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
125 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
127 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_u_u:
128 ; GFX90A:       ; %bb.0:
129 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
130 ; GFX90A-NEXT:    ;;#ASMSTART
131 ; GFX90A-NEXT:    ; def v[0:3]
132 ; GFX90A-NEXT:    ;;#ASMEND
133 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
134 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
135 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
136 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
137 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
138 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
140 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_u_u:
141 ; GFX940:       ; %bb.0:
142 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
143 ; GFX940-NEXT:    ;;#ASMSTART
144 ; GFX940-NEXT:    ; def v[0:3]
145 ; GFX940-NEXT:    ;;#ASMEND
146 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
147 ; GFX940-NEXT:    v_mov_b32_e32 v0, v2
148 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
149 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
150 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
151 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
152   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
153   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
154   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 poison>
155   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
156   ret void
159 define void @v_shuffle_v3p0_v2p0__3_0_u(ptr addrspace(1) inreg %ptr) {
160 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_0_u:
161 ; GFX900:       ; %bb.0:
162 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
163 ; GFX900-NEXT:    ;;#ASMSTART
164 ; GFX900-NEXT:    ; def v[0:3]
165 ; GFX900-NEXT:    ;;#ASMEND
166 ; GFX900-NEXT:    ;;#ASMSTART
167 ; GFX900-NEXT:    ; def v[2:5]
168 ; GFX900-NEXT:    ;;#ASMEND
169 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
170 ; GFX900-NEXT:    v_mov_b32_e32 v2, v4
171 ; GFX900-NEXT:    v_mov_b32_e32 v3, v5
172 ; GFX900-NEXT:    v_mov_b32_e32 v4, v0
173 ; GFX900-NEXT:    v_mov_b32_e32 v5, v1
174 ; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
175 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
176 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
178 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_0_u:
179 ; GFX90A:       ; %bb.0:
180 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
181 ; GFX90A-NEXT:    ;;#ASMSTART
182 ; GFX90A-NEXT:    ; def v[0:3]
183 ; GFX90A-NEXT:    ;;#ASMEND
184 ; GFX90A-NEXT:    ;;#ASMSTART
185 ; GFX90A-NEXT:    ; def v[2:5]
186 ; GFX90A-NEXT:    ;;#ASMEND
187 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
188 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v4
189 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v5
190 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
191 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
192 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
193 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
194 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
196 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_0_u:
197 ; GFX940:       ; %bb.0:
198 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
199 ; GFX940-NEXT:    ;;#ASMSTART
200 ; GFX940-NEXT:    ; def v[0:3]
201 ; GFX940-NEXT:    ;;#ASMEND
202 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
203 ; GFX940-NEXT:    ;;#ASMSTART
204 ; GFX940-NEXT:    ; def v[2:5]
205 ; GFX940-NEXT:    ;;#ASMEND
206 ; GFX940-NEXT:    s_nop 0
207 ; GFX940-NEXT:    v_mov_b32_e32 v2, v4
208 ; GFX940-NEXT:    v_mov_b32_e32 v3, v5
209 ; GFX940-NEXT:    v_mov_b32_e32 v4, v0
210 ; GFX940-NEXT:    v_mov_b32_e32 v5, v1
211 ; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
212 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
213 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
214   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
215   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
216   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 poison>
217   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
218   ret void
221 define void @v_shuffle_v3p0_v2p0__3_1_u(ptr addrspace(1) inreg %ptr) {
222 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_1_u:
223 ; GFX900:       ; %bb.0:
224 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
225 ; GFX900-NEXT:    ;;#ASMSTART
226 ; GFX900-NEXT:    ; def v[0:3]
227 ; GFX900-NEXT:    ;;#ASMEND
228 ; GFX900-NEXT:    v_mov_b32_e32 v8, 0
229 ; GFX900-NEXT:    ;;#ASMSTART
230 ; GFX900-NEXT:    ; def v[4:7]
231 ; GFX900-NEXT:    ;;#ASMEND
232 ; GFX900-NEXT:    v_mov_b32_e32 v0, v6
233 ; GFX900-NEXT:    v_mov_b32_e32 v1, v7
234 ; GFX900-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
235 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
236 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
238 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_1_u:
239 ; GFX90A:       ; %bb.0:
240 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
241 ; GFX90A-NEXT:    ;;#ASMSTART
242 ; GFX90A-NEXT:    ; def v[0:3]
243 ; GFX90A-NEXT:    ;;#ASMEND
244 ; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
245 ; GFX90A-NEXT:    ;;#ASMSTART
246 ; GFX90A-NEXT:    ; def v[4:7]
247 ; GFX90A-NEXT:    ;;#ASMEND
248 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v6
249 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v7
250 ; GFX90A-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
251 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
252 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
254 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_1_u:
255 ; GFX940:       ; %bb.0:
256 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
257 ; GFX940-NEXT:    ;;#ASMSTART
258 ; GFX940-NEXT:    ; def v[0:3]
259 ; GFX940-NEXT:    ;;#ASMEND
260 ; GFX940-NEXT:    v_mov_b32_e32 v8, 0
261 ; GFX940-NEXT:    ;;#ASMSTART
262 ; GFX940-NEXT:    ; def v[4:7]
263 ; GFX940-NEXT:    ;;#ASMEND
264 ; GFX940-NEXT:    s_nop 0
265 ; GFX940-NEXT:    v_mov_b32_e32 v0, v6
266 ; GFX940-NEXT:    v_mov_b32_e32 v1, v7
267 ; GFX940-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1] sc0 sc1
268 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
269 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
270   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
271   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
272   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 poison>
273   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
274   ret void
277 define void @v_shuffle_v3p0_v2p0__3_2_u(ptr addrspace(1) inreg %ptr) {
278 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_2_u:
279 ; GFX900:       ; %bb.0:
280 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
281 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
282 ; GFX900-NEXT:    ;;#ASMSTART
283 ; GFX900-NEXT:    ; def v[0:3]
284 ; GFX900-NEXT:    ;;#ASMEND
285 ; GFX900-NEXT:    v_mov_b32_e32 v4, v0
286 ; GFX900-NEXT:    v_mov_b32_e32 v5, v1
287 ; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
288 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
289 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
291 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_2_u:
292 ; GFX90A:       ; %bb.0:
293 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
294 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
295 ; GFX90A-NEXT:    ;;#ASMSTART
296 ; GFX90A-NEXT:    ; def v[0:3]
297 ; GFX90A-NEXT:    ;;#ASMEND
298 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
299 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
300 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
301 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
302 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
304 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_2_u:
305 ; GFX940:       ; %bb.0:
306 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
307 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
308 ; GFX940-NEXT:    ;;#ASMSTART
309 ; GFX940-NEXT:    ; def v[0:3]
310 ; GFX940-NEXT:    ;;#ASMEND
311 ; GFX940-NEXT:    s_nop 0
312 ; GFX940-NEXT:    v_mov_b32_e32 v4, v0
313 ; GFX940-NEXT:    v_mov_b32_e32 v5, v1
314 ; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
315 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
316 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
317   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
318   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
319   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 poison>
320   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
321   ret void
324 define void @v_shuffle_v3p0_v2p0__3_3_u(ptr addrspace(1) inreg %ptr) {
325 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_3_u:
326 ; GFX900:       ; %bb.0:
327 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
328 ; GFX900-NEXT:    ;;#ASMSTART
329 ; GFX900-NEXT:    ; def v[0:3]
330 ; GFX900-NEXT:    ;;#ASMEND
331 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
332 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
333 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
334 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
335 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
336 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
338 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_3_u:
339 ; GFX90A:       ; %bb.0:
340 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
341 ; GFX90A-NEXT:    ;;#ASMSTART
342 ; GFX90A-NEXT:    ; def v[0:3]
343 ; GFX90A-NEXT:    ;;#ASMEND
344 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
345 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
346 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
347 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
348 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
349 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
351 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_3_u:
352 ; GFX940:       ; %bb.0:
353 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
354 ; GFX940-NEXT:    ;;#ASMSTART
355 ; GFX940-NEXT:    ; def v[0:3]
356 ; GFX940-NEXT:    ;;#ASMEND
357 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
358 ; GFX940-NEXT:    v_mov_b32_e32 v0, v2
359 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
360 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
361 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
362 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
363   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
364   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
365   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>
366   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
367   ret void
370 define void @v_shuffle_v3p0_v2p0__3_3_0(ptr addrspace(1) inreg %ptr) {
371 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_3_0:
372 ; GFX900:       ; %bb.0:
373 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
374 ; GFX900-NEXT:    ;;#ASMSTART
375 ; GFX900-NEXT:    ; def v[0:3]
376 ; GFX900-NEXT:    ;;#ASMEND
377 ; GFX900-NEXT:    ;;#ASMSTART
378 ; GFX900-NEXT:    ; def v[2:5]
379 ; GFX900-NEXT:    ;;#ASMEND
380 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
381 ; GFX900-NEXT:    v_mov_b32_e32 v2, v4
382 ; GFX900-NEXT:    v_mov_b32_e32 v3, v5
383 ; GFX900-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
384 ; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
385 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
386 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
388 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_3_0:
389 ; GFX90A:       ; %bb.0:
390 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
391 ; GFX90A-NEXT:    ;;#ASMSTART
392 ; GFX90A-NEXT:    ; def v[0:3]
393 ; GFX90A-NEXT:    ;;#ASMEND
394 ; GFX90A-NEXT:    ;;#ASMSTART
395 ; GFX90A-NEXT:    ; def v[2:5]
396 ; GFX90A-NEXT:    ;;#ASMEND
397 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
398 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v4
399 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v5
400 ; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
401 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
402 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
403 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
405 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_3_0:
406 ; GFX940:       ; %bb.0:
407 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
408 ; GFX940-NEXT:    ;;#ASMSTART
409 ; GFX940-NEXT:    ; def v[0:3]
410 ; GFX940-NEXT:    ;;#ASMEND
411 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
412 ; GFX940-NEXT:    ;;#ASMSTART
413 ; GFX940-NEXT:    ; def v[2:5]
414 ; GFX940-NEXT:    ;;#ASMEND
415 ; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] offset:16 sc0 sc1
416 ; GFX940-NEXT:    v_mov_b32_e32 v2, v4
417 ; GFX940-NEXT:    v_mov_b32_e32 v3, v5
418 ; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
419 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
420 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
421   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
422   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
423   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 0>
424   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
425   ret void
428 define void @v_shuffle_v3p0_v2p0__3_3_1(ptr addrspace(1) inreg %ptr) {
429 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_3_1:
430 ; GFX900:       ; %bb.0:
431 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
432 ; GFX900-NEXT:    ;;#ASMSTART
433 ; GFX900-NEXT:    ; def v[4:7]
434 ; GFX900-NEXT:    ;;#ASMEND
435 ; GFX900-NEXT:    v_mov_b32_e32 v8, 0
436 ; GFX900-NEXT:    v_mov_b32_e32 v4, v6
437 ; GFX900-NEXT:    v_mov_b32_e32 v5, v7
438 ; GFX900-NEXT:    ;;#ASMSTART
439 ; GFX900-NEXT:    ; def v[0:3]
440 ; GFX900-NEXT:    ;;#ASMEND
441 ; GFX900-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17] offset:16
442 ; GFX900-NEXT:    global_store_dwordx4 v8, v[4:7], s[16:17]
443 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
444 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
446 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_3_1:
447 ; GFX90A:       ; %bb.0:
448 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
449 ; GFX90A-NEXT:    ;;#ASMSTART
450 ; GFX90A-NEXT:    ; def v[4:7]
451 ; GFX90A-NEXT:    ;;#ASMEND
452 ; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
453 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v6
454 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v7
455 ; GFX90A-NEXT:    ;;#ASMSTART
456 ; GFX90A-NEXT:    ; def v[0:3]
457 ; GFX90A-NEXT:    ;;#ASMEND
458 ; GFX90A-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17] offset:16
459 ; GFX90A-NEXT:    global_store_dwordx4 v8, v[4:7], s[16:17]
460 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
461 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
463 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_3_1:
464 ; GFX940:       ; %bb.0:
465 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
466 ; GFX940-NEXT:    ;;#ASMSTART
467 ; GFX940-NEXT:    ; def v[4:7]
468 ; GFX940-NEXT:    ;;#ASMEND
469 ; GFX940-NEXT:    v_mov_b32_e32 v8, 0
470 ; GFX940-NEXT:    v_mov_b32_e32 v4, v6
471 ; GFX940-NEXT:    v_mov_b32_e32 v5, v7
472 ; GFX940-NEXT:    ;;#ASMSTART
473 ; GFX940-NEXT:    ; def v[0:3]
474 ; GFX940-NEXT:    ;;#ASMEND
475 ; GFX940-NEXT:    global_store_dwordx2 v8, v[2:3], s[0:1] offset:16 sc0 sc1
476 ; GFX940-NEXT:    global_store_dwordx4 v8, v[4:7], s[0:1] sc0 sc1
477 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
478 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
479   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
480   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
481   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 1>
482   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
483   ret void
486 define void @v_shuffle_v3p0_v2p0__3_3_2(ptr addrspace(1) inreg %ptr) {
487 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_3_2:
488 ; GFX900:       ; %bb.0:
489 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
490 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
491 ; GFX900-NEXT:    ;;#ASMSTART
492 ; GFX900-NEXT:    ; def v[0:3]
493 ; GFX900-NEXT:    ;;#ASMEND
494 ; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17] offset:16
495 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
496 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
497 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
498 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
499 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
501 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_3_2:
502 ; GFX90A:       ; %bb.0:
503 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
504 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
505 ; GFX90A-NEXT:    ;;#ASMSTART
506 ; GFX90A-NEXT:    ; def v[0:3]
507 ; GFX90A-NEXT:    ;;#ASMEND
508 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17] offset:16
509 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
510 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
511 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
512 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
513 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
515 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_3_2:
516 ; GFX940:       ; %bb.0:
517 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
518 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
519 ; GFX940-NEXT:    ;;#ASMSTART
520 ; GFX940-NEXT:    ; def v[0:3]
521 ; GFX940-NEXT:    ;;#ASMEND
522 ; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] offset:16 sc0 sc1
523 ; GFX940-NEXT:    v_mov_b32_e32 v0, v2
524 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
525 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
526 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
527 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
528   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
529   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
530   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 2>
531   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
532   ret void
535 define void @v_shuffle_v3p0_v2p0__3_3_3(ptr addrspace(1) inreg %ptr) {
536 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_3_3:
537 ; GFX900:       ; %bb.0:
538 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
539 ; GFX900-NEXT:    ;;#ASMSTART
540 ; GFX900-NEXT:    ; def v[0:3]
541 ; GFX900-NEXT:    ;;#ASMEND
542 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
543 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
544 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
545 ; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
546 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
547 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
548 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
550 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_3_3:
551 ; GFX90A:       ; %bb.0:
552 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
553 ; GFX90A-NEXT:    ;;#ASMSTART
554 ; GFX90A-NEXT:    ; def v[0:3]
555 ; GFX90A-NEXT:    ;;#ASMEND
556 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
557 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
558 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
559 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
560 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
561 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
562 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
564 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_3_3:
565 ; GFX940:       ; %bb.0:
566 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
567 ; GFX940-NEXT:    ;;#ASMSTART
568 ; GFX940-NEXT:    ; def v[0:3]
569 ; GFX940-NEXT:    ;;#ASMEND
570 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
571 ; GFX940-NEXT:    v_mov_b32_e32 v0, v2
572 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
573 ; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] offset:16 sc0 sc1
574 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
575 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
576 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
577   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
578   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
579   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 3>
580   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
581   ret void
584 define void @v_shuffle_v3p0_v2p0__u_0_0(ptr addrspace(1) inreg %ptr) {
585 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__u_0_0:
586 ; GFX900:       ; %bb.0:
587 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
588 ; GFX900-NEXT:    ;;#ASMSTART
589 ; GFX900-NEXT:    ; def v[0:3]
590 ; GFX900-NEXT:    ;;#ASMEND
591 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
592 ; GFX900-NEXT:    v_mov_b32_e32 v2, v0
593 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
594 ; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17] offset:16
595 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
596 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
597 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
599 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__u_0_0:
600 ; GFX90A:       ; %bb.0:
601 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
602 ; GFX90A-NEXT:    ;;#ASMSTART
603 ; GFX90A-NEXT:    ; def v[0:3]
604 ; GFX90A-NEXT:    ;;#ASMEND
605 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
606 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
607 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
608 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17] offset:16
609 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
610 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
611 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
613 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__u_0_0:
614 ; GFX940:       ; %bb.0:
615 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
616 ; GFX940-NEXT:    ;;#ASMSTART
617 ; GFX940-NEXT:    ; def v[0:3]
618 ; GFX940-NEXT:    ;;#ASMEND
619 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
620 ; GFX940-NEXT:    v_mov_b32_e32 v2, v0
621 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
622 ; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] offset:16 sc0 sc1
623 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
624 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
625 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
626   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
627   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 0, i32 0>
628   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
629   ret void
632 define void @v_shuffle_v3p0_v2p0__0_0_0(ptr addrspace(1) inreg %ptr) {
633 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__0_0_0:
634 ; GFX900:       ; %bb.0:
635 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
636 ; GFX900-NEXT:    ;;#ASMSTART
637 ; GFX900-NEXT:    ; def v[0:3]
638 ; GFX900-NEXT:    ;;#ASMEND
639 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
640 ; GFX900-NEXT:    v_mov_b32_e32 v2, v0
641 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
642 ; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17] offset:16
643 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
644 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
645 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
647 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__0_0_0:
648 ; GFX90A:       ; %bb.0:
649 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
650 ; GFX90A-NEXT:    ;;#ASMSTART
651 ; GFX90A-NEXT:    ; def v[0:3]
652 ; GFX90A-NEXT:    ;;#ASMEND
653 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
654 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
655 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
656 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17] offset:16
657 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
658 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
659 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
661 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__0_0_0:
662 ; GFX940:       ; %bb.0:
663 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
664 ; GFX940-NEXT:    ;;#ASMSTART
665 ; GFX940-NEXT:    ; def v[0:3]
666 ; GFX940-NEXT:    ;;#ASMEND
667 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
668 ; GFX940-NEXT:    v_mov_b32_e32 v2, v0
669 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
670 ; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] offset:16 sc0 sc1
671 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
672 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
673 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
674   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
675   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> zeroinitializer
676   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
677   ret void
680 define void @v_shuffle_v3p0_v2p0__1_0_0(ptr addrspace(1) inreg %ptr) {
681 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__1_0_0:
682 ; GFX900:       ; %bb.0:
683 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
684 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
685 ; GFX900-NEXT:    ;;#ASMSTART
686 ; GFX900-NEXT:    ; def v[0:3]
687 ; GFX900-NEXT:    ;;#ASMEND
688 ; GFX900-NEXT:    v_mov_b32_e32 v4, v0
689 ; GFX900-NEXT:    v_mov_b32_e32 v5, v1
690 ; GFX900-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
691 ; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
692 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
693 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
695 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__1_0_0:
696 ; GFX90A:       ; %bb.0:
697 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
698 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
699 ; GFX90A-NEXT:    ;;#ASMSTART
700 ; GFX90A-NEXT:    ; def v[0:3]
701 ; GFX90A-NEXT:    ;;#ASMEND
702 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
703 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
704 ; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
705 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
706 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
707 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
709 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__1_0_0:
710 ; GFX940:       ; %bb.0:
711 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
712 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
713 ; GFX940-NEXT:    ;;#ASMSTART
714 ; GFX940-NEXT:    ; def v[0:3]
715 ; GFX940-NEXT:    ;;#ASMEND
716 ; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] offset:16 sc0 sc1
717 ; GFX940-NEXT:    v_mov_b32_e32 v4, v0
718 ; GFX940-NEXT:    v_mov_b32_e32 v5, v1
719 ; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
720 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
721 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
722   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
723   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 0, i32 0>
724   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
725   ret void
728 define void @v_shuffle_v3p0_v2p0__2_0_0(ptr addrspace(1) inreg %ptr) {
729 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__2_0_0:
730 ; GFX900:       ; %bb.0:
731 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
732 ; GFX900-NEXT:    ;;#ASMSTART
733 ; GFX900-NEXT:    ; def v[0:3]
734 ; GFX900-NEXT:    ;;#ASMEND
735 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
736 ; GFX900-NEXT:    v_mov_b32_e32 v2, v0
737 ; GFX900-NEXT:    v_mov_b32_e32 v3, v1
738 ; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17] offset:16
739 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
740 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
741 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
743 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__2_0_0:
744 ; GFX90A:       ; %bb.0:
745 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
746 ; GFX90A-NEXT:    ;;#ASMSTART
747 ; GFX90A-NEXT:    ; def v[0:3]
748 ; GFX90A-NEXT:    ;;#ASMEND
749 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
750 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v0
751 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v1
752 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17] offset:16
753 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
754 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
755 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
757 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__2_0_0:
758 ; GFX940:       ; %bb.0:
759 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
760 ; GFX940-NEXT:    ;;#ASMSTART
761 ; GFX940-NEXT:    ; def v[0:3]
762 ; GFX940-NEXT:    ;;#ASMEND
763 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
764 ; GFX940-NEXT:    v_mov_b32_e32 v2, v0
765 ; GFX940-NEXT:    v_mov_b32_e32 v3, v1
766 ; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] offset:16 sc0 sc1
767 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
768 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
769 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
770   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
771   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 0, i32 0>
772   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
773   ret void
776 define void @v_shuffle_v3p0_v2p0__3_0_0(ptr addrspace(1) inreg %ptr) {
777 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_0_0:
778 ; GFX900:       ; %bb.0:
779 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
780 ; GFX900-NEXT:    ;;#ASMSTART
781 ; GFX900-NEXT:    ; def v[0:3]
782 ; GFX900-NEXT:    ;;#ASMEND
783 ; GFX900-NEXT:    ;;#ASMSTART
784 ; GFX900-NEXT:    ; def v[2:5]
785 ; GFX900-NEXT:    ;;#ASMEND
786 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
787 ; GFX900-NEXT:    v_mov_b32_e32 v2, v4
788 ; GFX900-NEXT:    v_mov_b32_e32 v3, v5
789 ; GFX900-NEXT:    v_mov_b32_e32 v4, v0
790 ; GFX900-NEXT:    v_mov_b32_e32 v5, v1
791 ; GFX900-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
792 ; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
793 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
794 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
796 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_0_0:
797 ; GFX90A:       ; %bb.0:
798 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
799 ; GFX90A-NEXT:    ;;#ASMSTART
800 ; GFX90A-NEXT:    ; def v[0:3]
801 ; GFX90A-NEXT:    ;;#ASMEND
802 ; GFX90A-NEXT:    ;;#ASMSTART
803 ; GFX90A-NEXT:    ; def v[2:5]
804 ; GFX90A-NEXT:    ;;#ASMEND
805 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
806 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v4
807 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v5
808 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
809 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
810 ; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
811 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
812 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
813 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
815 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_0_0:
816 ; GFX940:       ; %bb.0:
817 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
818 ; GFX940-NEXT:    ;;#ASMSTART
819 ; GFX940-NEXT:    ; def v[0:3]
820 ; GFX940-NEXT:    ;;#ASMEND
821 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
822 ; GFX940-NEXT:    ;;#ASMSTART
823 ; GFX940-NEXT:    ; def v[2:5]
824 ; GFX940-NEXT:    ;;#ASMEND
825 ; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] offset:16 sc0 sc1
826 ; GFX940-NEXT:    v_mov_b32_e32 v2, v4
827 ; GFX940-NEXT:    v_mov_b32_e32 v3, v5
828 ; GFX940-NEXT:    v_mov_b32_e32 v4, v0
829 ; GFX940-NEXT:    v_mov_b32_e32 v5, v1
830 ; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
831 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
832 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
833   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
834   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
835   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 0>
836   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
837   ret void
840 define void @v_shuffle_v3p0_v2p0__3_u_0(ptr addrspace(1) inreg %ptr) {
841 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_u_0:
842 ; GFX900:       ; %bb.0:
843 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
844 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
845 ; GFX900-NEXT:    ;;#ASMSTART
846 ; GFX900-NEXT:    ; def v[0:3]
847 ; GFX900-NEXT:    ;;#ASMEND
848 ; GFX900-NEXT:    ;;#ASMSTART
849 ; GFX900-NEXT:    ; def v[2:5]
850 ; GFX900-NEXT:    ;;#ASMEND
851 ; GFX900-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
852 ; GFX900-NEXT:    v_mov_b32_e32 v0, v4
853 ; GFX900-NEXT:    v_mov_b32_e32 v1, v5
854 ; GFX900-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
855 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
856 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
858 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_u_0:
859 ; GFX90A:       ; %bb.0:
860 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
861 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
862 ; GFX90A-NEXT:    ;;#ASMSTART
863 ; GFX90A-NEXT:    ; def v[0:3]
864 ; GFX90A-NEXT:    ;;#ASMEND
865 ; GFX90A-NEXT:    ;;#ASMSTART
866 ; GFX90A-NEXT:    ; def v[2:5]
867 ; GFX90A-NEXT:    ;;#ASMEND
868 ; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
869 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v4
870 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v5
871 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
872 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
873 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
875 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_u_0:
876 ; GFX940:       ; %bb.0:
877 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
878 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
879 ; GFX940-NEXT:    ;;#ASMSTART
880 ; GFX940-NEXT:    ; def v[0:3]
881 ; GFX940-NEXT:    ;;#ASMEND
882 ; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] offset:16 sc0 sc1
883 ; GFX940-NEXT:    ;;#ASMSTART
884 ; GFX940-NEXT:    ; def v[2:5]
885 ; GFX940-NEXT:    ;;#ASMEND
886 ; GFX940-NEXT:    s_nop 0
887 ; GFX940-NEXT:    v_mov_b32_e32 v0, v4
888 ; GFX940-NEXT:    v_mov_b32_e32 v1, v5
889 ; GFX940-NEXT:    global_store_dwordx4 v6, v[0:3], s[0:1] sc0 sc1
890 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
891 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
892   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
893   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
894   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 0>
895   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
896   ret void
899 define void @v_shuffle_v3p0_v2p0__3_1_0(ptr addrspace(1) inreg %ptr) {
900 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_1_0:
901 ; GFX900:       ; %bb.0:
902 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
903 ; GFX900-NEXT:    v_mov_b32_e32 v8, 0
904 ; GFX900-NEXT:    ;;#ASMSTART
905 ; GFX900-NEXT:    ; def v[0:3]
906 ; GFX900-NEXT:    ;;#ASMEND
907 ; GFX900-NEXT:    ;;#ASMSTART
908 ; GFX900-NEXT:    ; def v[4:7]
909 ; GFX900-NEXT:    ;;#ASMEND
910 ; GFX900-NEXT:    global_store_dwordx2 v8, v[0:1], s[16:17] offset:16
911 ; GFX900-NEXT:    v_mov_b32_e32 v0, v6
912 ; GFX900-NEXT:    v_mov_b32_e32 v1, v7
913 ; GFX900-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
914 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
915 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
917 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_1_0:
918 ; GFX90A:       ; %bb.0:
919 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
920 ; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
921 ; GFX90A-NEXT:    ;;#ASMSTART
922 ; GFX90A-NEXT:    ; def v[0:3]
923 ; GFX90A-NEXT:    ;;#ASMEND
924 ; GFX90A-NEXT:    ;;#ASMSTART
925 ; GFX90A-NEXT:    ; def v[4:7]
926 ; GFX90A-NEXT:    ;;#ASMEND
927 ; GFX90A-NEXT:    global_store_dwordx2 v8, v[0:1], s[16:17] offset:16
928 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v6
929 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v7
930 ; GFX90A-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
931 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
932 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
934 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_1_0:
935 ; GFX940:       ; %bb.0:
936 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
937 ; GFX940-NEXT:    v_mov_b32_e32 v8, 0
938 ; GFX940-NEXT:    ;;#ASMSTART
939 ; GFX940-NEXT:    ; def v[0:3]
940 ; GFX940-NEXT:    ;;#ASMEND
941 ; GFX940-NEXT:    ;;#ASMSTART
942 ; GFX940-NEXT:    ; def v[4:7]
943 ; GFX940-NEXT:    ;;#ASMEND
944 ; GFX940-NEXT:    global_store_dwordx2 v8, v[0:1], s[0:1] offset:16 sc0 sc1
945 ; GFX940-NEXT:    v_mov_b32_e32 v0, v6
946 ; GFX940-NEXT:    v_mov_b32_e32 v1, v7
947 ; GFX940-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1] sc0 sc1
948 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
949 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
950   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
951   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
952   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 0>
953   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
954   ret void
957 define void @v_shuffle_v3p0_v2p0__3_2_0(ptr addrspace(1) inreg %ptr) {
958 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_2_0:
959 ; GFX900:       ; %bb.0:
960 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
961 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
962 ; GFX900-NEXT:    ;;#ASMSTART
963 ; GFX900-NEXT:    ; def v[0:3]
964 ; GFX900-NEXT:    ;;#ASMEND
965 ; GFX900-NEXT:    ;;#ASMSTART
966 ; GFX900-NEXT:    ; def v[2:5]
967 ; GFX900-NEXT:    ;;#ASMEND
968 ; GFX900-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
969 ; GFX900-NEXT:    v_mov_b32_e32 v0, v4
970 ; GFX900-NEXT:    v_mov_b32_e32 v1, v5
971 ; GFX900-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
972 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
973 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
975 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_2_0:
976 ; GFX90A:       ; %bb.0:
977 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
978 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
979 ; GFX90A-NEXT:    ;;#ASMSTART
980 ; GFX90A-NEXT:    ; def v[0:3]
981 ; GFX90A-NEXT:    ;;#ASMEND
982 ; GFX90A-NEXT:    ;;#ASMSTART
983 ; GFX90A-NEXT:    ; def v[2:5]
984 ; GFX90A-NEXT:    ;;#ASMEND
985 ; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
986 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v4
987 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v5
988 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
989 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
990 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
992 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_2_0:
993 ; GFX940:       ; %bb.0:
994 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
995 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
996 ; GFX940-NEXT:    ;;#ASMSTART
997 ; GFX940-NEXT:    ; def v[0:3]
998 ; GFX940-NEXT:    ;;#ASMEND
999 ; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] offset:16 sc0 sc1
1000 ; GFX940-NEXT:    ;;#ASMSTART
1001 ; GFX940-NEXT:    ; def v[2:5]
1002 ; GFX940-NEXT:    ;;#ASMEND
1003 ; GFX940-NEXT:    s_nop 0
1004 ; GFX940-NEXT:    v_mov_b32_e32 v0, v4
1005 ; GFX940-NEXT:    v_mov_b32_e32 v1, v5
1006 ; GFX940-NEXT:    global_store_dwordx4 v6, v[0:3], s[0:1] sc0 sc1
1007 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1008 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1009   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1010   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1011   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 0>
1012   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1013   ret void
1016 define void @v_shuffle_v3p0_v2p0__u_1_1(ptr addrspace(1) inreg %ptr) {
1017 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__u_1_1:
1018 ; GFX900:       ; %bb.0:
1019 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1020 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1021 ; GFX900-NEXT:    ;;#ASMSTART
1022 ; GFX900-NEXT:    ; def v[0:3]
1023 ; GFX900-NEXT:    ;;#ASMEND
1024 ; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1025 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1026 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1027 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1029 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__u_1_1:
1030 ; GFX90A:       ; %bb.0:
1031 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1032 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1033 ; GFX90A-NEXT:    ;;#ASMSTART
1034 ; GFX90A-NEXT:    ; def v[0:3]
1035 ; GFX90A-NEXT:    ;;#ASMEND
1036 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1037 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1038 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1039 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1041 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__u_1_1:
1042 ; GFX940:       ; %bb.0:
1043 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1044 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1045 ; GFX940-NEXT:    ;;#ASMSTART
1046 ; GFX940-NEXT:    ; def v[0:3]
1047 ; GFX940-NEXT:    ;;#ASMEND
1048 ; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] offset:16 sc0 sc1
1049 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1050 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1051 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1052   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1053   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 1, i32 1>
1054   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1055   ret void
1058 define void @v_shuffle_v3p0_v2p0__0_1_1(ptr addrspace(1) inreg %ptr) {
1059 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__0_1_1:
1060 ; GFX900:       ; %bb.0:
1061 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1062 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1063 ; GFX900-NEXT:    ;;#ASMSTART
1064 ; GFX900-NEXT:    ; def v[0:3]
1065 ; GFX900-NEXT:    ;;#ASMEND
1066 ; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1067 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1068 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1069 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1071 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__0_1_1:
1072 ; GFX90A:       ; %bb.0:
1073 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1074 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1075 ; GFX90A-NEXT:    ;;#ASMSTART
1076 ; GFX90A-NEXT:    ; def v[0:3]
1077 ; GFX90A-NEXT:    ;;#ASMEND
1078 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
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_v3p0_v2p0__0_1_1:
1084 ; GFX940:       ; %bb.0:
1085 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1086 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1087 ; GFX940-NEXT:    ;;#ASMSTART
1088 ; GFX940-NEXT:    ; def v[0:3]
1089 ; GFX940-NEXT:    ;;#ASMEND
1090 ; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] offset:16 sc0 sc1
1091 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1092 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1093 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1094   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1095   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 1, i32 1>
1096   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1097   ret void
1100 define void @v_shuffle_v3p0_v2p0__1_1_1(ptr addrspace(1) inreg %ptr) {
1101 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__1_1_1:
1102 ; GFX900:       ; %bb.0:
1103 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1104 ; GFX900-NEXT:    ;;#ASMSTART
1105 ; GFX900-NEXT:    ; def v[0:3]
1106 ; GFX900-NEXT:    ;;#ASMEND
1107 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1108 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
1109 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
1110 ; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1111 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1112 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1113 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1115 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__1_1_1:
1116 ; GFX90A:       ; %bb.0:
1117 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1118 ; GFX90A-NEXT:    ;;#ASMSTART
1119 ; GFX90A-NEXT:    ; def v[0:3]
1120 ; GFX90A-NEXT:    ;;#ASMEND
1121 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1122 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
1123 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
1124 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1125 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1126 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1127 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1129 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__1_1_1:
1130 ; GFX940:       ; %bb.0:
1131 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1132 ; GFX940-NEXT:    ;;#ASMSTART
1133 ; GFX940-NEXT:    ; def v[0:3]
1134 ; GFX940-NEXT:    ;;#ASMEND
1135 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1136 ; GFX940-NEXT:    v_mov_b32_e32 v0, v2
1137 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
1138 ; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] offset:16 sc0 sc1
1139 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1140 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1141 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1142   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1143   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 1, i32 1>
1144   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1145   ret void
1148 define void @v_shuffle_v3p0_v2p0__2_1_1(ptr addrspace(1) inreg %ptr) {
1149 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__2_1_1:
1150 ; GFX900:       ; %bb.0:
1151 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1152 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1153 ; GFX900-NEXT:    ;;#ASMSTART
1154 ; GFX900-NEXT:    ; def v[0:3]
1155 ; GFX900-NEXT:    ;;#ASMEND
1156 ; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1157 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1158 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1159 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1161 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__2_1_1:
1162 ; GFX90A:       ; %bb.0:
1163 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1164 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1165 ; GFX90A-NEXT:    ;;#ASMSTART
1166 ; GFX90A-NEXT:    ; def v[0:3]
1167 ; GFX90A-NEXT:    ;;#ASMEND
1168 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1169 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1170 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1171 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1173 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__2_1_1:
1174 ; GFX940:       ; %bb.0:
1175 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1176 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1177 ; GFX940-NEXT:    ;;#ASMSTART
1178 ; GFX940-NEXT:    ; def v[0:3]
1179 ; GFX940-NEXT:    ;;#ASMEND
1180 ; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] offset:16 sc0 sc1
1181 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1182 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1183 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1184   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1185   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 1, i32 1>
1186   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1187   ret void
1190 define void @v_shuffle_v3p0_v2p0__3_1_1(ptr addrspace(1) inreg %ptr) {
1191 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_1_1:
1192 ; GFX900:       ; %bb.0:
1193 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1194 ; GFX900-NEXT:    ;;#ASMSTART
1195 ; GFX900-NEXT:    ; def v[0:3]
1196 ; GFX900-NEXT:    ;;#ASMEND
1197 ; GFX900-NEXT:    v_mov_b32_e32 v8, 0
1198 ; GFX900-NEXT:    ;;#ASMSTART
1199 ; GFX900-NEXT:    ; def v[4:7]
1200 ; GFX900-NEXT:    ;;#ASMEND
1201 ; GFX900-NEXT:    v_mov_b32_e32 v0, v6
1202 ; GFX900-NEXT:    v_mov_b32_e32 v1, v7
1203 ; GFX900-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17] offset:16
1204 ; GFX900-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
1205 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1206 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1208 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_1_1:
1209 ; GFX90A:       ; %bb.0:
1210 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1211 ; GFX90A-NEXT:    ;;#ASMSTART
1212 ; GFX90A-NEXT:    ; def v[0:3]
1213 ; GFX90A-NEXT:    ;;#ASMEND
1214 ; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
1215 ; GFX90A-NEXT:    ;;#ASMSTART
1216 ; GFX90A-NEXT:    ; def v[4:7]
1217 ; GFX90A-NEXT:    ;;#ASMEND
1218 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v6
1219 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v7
1220 ; GFX90A-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17] offset:16
1221 ; GFX90A-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
1222 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1223 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1225 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_1_1:
1226 ; GFX940:       ; %bb.0:
1227 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1228 ; GFX940-NEXT:    ;;#ASMSTART
1229 ; GFX940-NEXT:    ; def v[0:3]
1230 ; GFX940-NEXT:    ;;#ASMEND
1231 ; GFX940-NEXT:    v_mov_b32_e32 v8, 0
1232 ; GFX940-NEXT:    ;;#ASMSTART
1233 ; GFX940-NEXT:    ; def v[4:7]
1234 ; GFX940-NEXT:    ;;#ASMEND
1235 ; GFX940-NEXT:    global_store_dwordx2 v8, v[2:3], s[0:1] offset:16 sc0 sc1
1236 ; GFX940-NEXT:    v_mov_b32_e32 v0, v6
1237 ; GFX940-NEXT:    v_mov_b32_e32 v1, v7
1238 ; GFX940-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1] sc0 sc1
1239 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1240 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1241   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1242   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1243   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 1>
1244   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1245   ret void
1248 define void @v_shuffle_v3p0_v2p0__3_u_1(ptr addrspace(1) inreg %ptr) {
1249 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_u_1:
1250 ; GFX900:       ; %bb.0:
1251 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1252 ; GFX900-NEXT:    ;;#ASMSTART
1253 ; GFX900-NEXT:    ; def v[0:3]
1254 ; GFX900-NEXT:    ;;#ASMEND
1255 ; GFX900-NEXT:    v_mov_b32_e32 v8, 0
1256 ; GFX900-NEXT:    ;;#ASMSTART
1257 ; GFX900-NEXT:    ; def v[4:7]
1258 ; GFX900-NEXT:    ;;#ASMEND
1259 ; GFX900-NEXT:    v_mov_b32_e32 v0, v6
1260 ; GFX900-NEXT:    v_mov_b32_e32 v1, v7
1261 ; GFX900-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17] offset:16
1262 ; GFX900-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
1263 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1264 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1266 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_u_1:
1267 ; GFX90A:       ; %bb.0:
1268 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1269 ; GFX90A-NEXT:    ;;#ASMSTART
1270 ; GFX90A-NEXT:    ; def v[0:3]
1271 ; GFX90A-NEXT:    ;;#ASMEND
1272 ; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
1273 ; GFX90A-NEXT:    ;;#ASMSTART
1274 ; GFX90A-NEXT:    ; def v[4:7]
1275 ; GFX90A-NEXT:    ;;#ASMEND
1276 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v6
1277 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v7
1278 ; GFX90A-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17] offset:16
1279 ; GFX90A-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
1280 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1281 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1283 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_u_1:
1284 ; GFX940:       ; %bb.0:
1285 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1286 ; GFX940-NEXT:    ;;#ASMSTART
1287 ; GFX940-NEXT:    ; def v[0:3]
1288 ; GFX940-NEXT:    ;;#ASMEND
1289 ; GFX940-NEXT:    v_mov_b32_e32 v8, 0
1290 ; GFX940-NEXT:    ;;#ASMSTART
1291 ; GFX940-NEXT:    ; def v[4:7]
1292 ; GFX940-NEXT:    ;;#ASMEND
1293 ; GFX940-NEXT:    global_store_dwordx2 v8, v[2:3], s[0:1] offset:16 sc0 sc1
1294 ; GFX940-NEXT:    v_mov_b32_e32 v0, v6
1295 ; GFX940-NEXT:    v_mov_b32_e32 v1, v7
1296 ; GFX940-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1] sc0 sc1
1297 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1298 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1299   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1300   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1301   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 1>
1302   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1303   ret void
1306 define void @v_shuffle_v3p0_v2p0__3_0_1(ptr addrspace(1) inreg %ptr) {
1307 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_0_1:
1308 ; GFX900:       ; %bb.0:
1309 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1310 ; GFX900-NEXT:    v_mov_b32_e32 v8, 0
1311 ; GFX900-NEXT:    ;;#ASMSTART
1312 ; GFX900-NEXT:    ; def v[0:3]
1313 ; GFX900-NEXT:    ;;#ASMEND
1314 ; GFX900-NEXT:    ;;#ASMSTART
1315 ; GFX900-NEXT:    ; def v[4:7]
1316 ; GFX900-NEXT:    ;;#ASMEND
1317 ; GFX900-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17] offset:16
1318 ; GFX900-NEXT:    v_mov_b32_e32 v2, v6
1319 ; GFX900-NEXT:    v_mov_b32_e32 v3, v7
1320 ; GFX900-NEXT:    v_mov_b32_e32 v4, v0
1321 ; GFX900-NEXT:    v_mov_b32_e32 v5, v1
1322 ; GFX900-NEXT:    global_store_dwordx4 v8, v[2:5], s[16:17]
1323 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1324 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1326 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_0_1:
1327 ; GFX90A:       ; %bb.0:
1328 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1329 ; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
1330 ; GFX90A-NEXT:    ;;#ASMSTART
1331 ; GFX90A-NEXT:    ; def v[0:3]
1332 ; GFX90A-NEXT:    ;;#ASMEND
1333 ; GFX90A-NEXT:    ;;#ASMSTART
1334 ; GFX90A-NEXT:    ; def v[4:7]
1335 ; GFX90A-NEXT:    ;;#ASMEND
1336 ; GFX90A-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17] offset:16
1337 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v6
1338 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v7
1339 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
1340 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
1341 ; GFX90A-NEXT:    global_store_dwordx4 v8, v[2:5], s[16:17]
1342 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1343 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1345 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_0_1:
1346 ; GFX940:       ; %bb.0:
1347 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1348 ; GFX940-NEXT:    v_mov_b32_e32 v8, 0
1349 ; GFX940-NEXT:    ;;#ASMSTART
1350 ; GFX940-NEXT:    ; def v[0:3]
1351 ; GFX940-NEXT:    ;;#ASMEND
1352 ; GFX940-NEXT:    ;;#ASMSTART
1353 ; GFX940-NEXT:    ; def v[4:7]
1354 ; GFX940-NEXT:    ;;#ASMEND
1355 ; GFX940-NEXT:    global_store_dwordx2 v8, v[2:3], s[0:1] offset:16 sc0 sc1
1356 ; GFX940-NEXT:    v_mov_b32_e32 v2, v6
1357 ; GFX940-NEXT:    v_mov_b32_e32 v3, v7
1358 ; GFX940-NEXT:    v_mov_b32_e32 v4, v0
1359 ; GFX940-NEXT:    v_mov_b32_e32 v5, v1
1360 ; GFX940-NEXT:    global_store_dwordx4 v8, v[2:5], s[0:1] sc0 sc1
1361 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1362 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1363   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1364   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1365   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 1>
1366   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1367   ret void
1370 define void @v_shuffle_v3p0_v2p0__3_2_1(ptr addrspace(1) inreg %ptr) {
1371 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_2_1:
1372 ; GFX900:       ; %bb.0:
1373 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1374 ; GFX900-NEXT:    v_mov_b32_e32 v8, 0
1375 ; GFX900-NEXT:    ;;#ASMSTART
1376 ; GFX900-NEXT:    ; def v[0:3]
1377 ; GFX900-NEXT:    ;;#ASMEND
1378 ; GFX900-NEXT:    ;;#ASMSTART
1379 ; GFX900-NEXT:    ; def v[4:7]
1380 ; GFX900-NEXT:    ;;#ASMEND
1381 ; GFX900-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17] offset:16
1382 ; GFX900-NEXT:    v_mov_b32_e32 v0, v6
1383 ; GFX900-NEXT:    v_mov_b32_e32 v1, v7
1384 ; GFX900-NEXT:    v_mov_b32_e32 v2, v4
1385 ; GFX900-NEXT:    v_mov_b32_e32 v3, v5
1386 ; GFX900-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
1387 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1388 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1390 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_2_1:
1391 ; GFX90A:       ; %bb.0:
1392 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1393 ; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
1394 ; GFX90A-NEXT:    ;;#ASMSTART
1395 ; GFX90A-NEXT:    ; def v[0:3]
1396 ; GFX90A-NEXT:    ;;#ASMEND
1397 ; GFX90A-NEXT:    ;;#ASMSTART
1398 ; GFX90A-NEXT:    ; def v[4:7]
1399 ; GFX90A-NEXT:    ;;#ASMEND
1400 ; GFX90A-NEXT:    global_store_dwordx2 v8, v[2:3], s[16:17] offset:16
1401 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v6
1402 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v7
1403 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v4
1404 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v5
1405 ; GFX90A-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
1406 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1407 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1409 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_2_1:
1410 ; GFX940:       ; %bb.0:
1411 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1412 ; GFX940-NEXT:    v_mov_b32_e32 v8, 0
1413 ; GFX940-NEXT:    ;;#ASMSTART
1414 ; GFX940-NEXT:    ; def v[0:3]
1415 ; GFX940-NEXT:    ;;#ASMEND
1416 ; GFX940-NEXT:    ;;#ASMSTART
1417 ; GFX940-NEXT:    ; def v[4:7]
1418 ; GFX940-NEXT:    ;;#ASMEND
1419 ; GFX940-NEXT:    global_store_dwordx2 v8, v[2:3], s[0:1] offset:16 sc0 sc1
1420 ; GFX940-NEXT:    v_mov_b32_e32 v0, v6
1421 ; GFX940-NEXT:    v_mov_b32_e32 v1, v7
1422 ; GFX940-NEXT:    v_mov_b32_e32 v2, v4
1423 ; GFX940-NEXT:    v_mov_b32_e32 v3, v5
1424 ; GFX940-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1] sc0 sc1
1425 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1426 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1427   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1428   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1429   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 1>
1430   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1431   ret void
1434 define void @v_shuffle_v3p0_v2p0__u_2_2(ptr addrspace(1) inreg %ptr) {
1435 ; GFX9-LABEL: v_shuffle_v3p0_v2p0__u_2_2:
1436 ; GFX9:       ; %bb.0:
1437 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1438 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1439   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1440   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 2, i32 2>
1441   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1442   ret void
1445 define void @v_shuffle_v3p0_v2p0__0_2_2(ptr addrspace(1) inreg %ptr) {
1446 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__0_2_2:
1447 ; GFX900:       ; %bb.0:
1448 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1449 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1450 ; GFX900-NEXT:    ;;#ASMSTART
1451 ; GFX900-NEXT:    ; def v[0:3]
1452 ; GFX900-NEXT:    ;;#ASMEND
1453 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1454 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1455 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1457 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__0_2_2:
1458 ; GFX90A:       ; %bb.0:
1459 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1460 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1461 ; GFX90A-NEXT:    ;;#ASMSTART
1462 ; GFX90A-NEXT:    ; def v[0:3]
1463 ; GFX90A-NEXT:    ;;#ASMEND
1464 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1465 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1466 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1468 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__0_2_2:
1469 ; GFX940:       ; %bb.0:
1470 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1471 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1472 ; GFX940-NEXT:    ;;#ASMSTART
1473 ; GFX940-NEXT:    ; def v[0:3]
1474 ; GFX940-NEXT:    ;;#ASMEND
1475 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1476 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1477 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1478   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1479   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 2, i32 2>
1480   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1481   ret void
1484 define void @v_shuffle_v3p0_v2p0__1_2_2(ptr addrspace(1) inreg %ptr) {
1485 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__1_2_2:
1486 ; GFX900:       ; %bb.0:
1487 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1488 ; GFX900-NEXT:    ;;#ASMSTART
1489 ; GFX900-NEXT:    ; def v[0:3]
1490 ; GFX900-NEXT:    ;;#ASMEND
1491 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1492 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
1493 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
1494 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1495 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1496 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1498 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__1_2_2:
1499 ; GFX90A:       ; %bb.0:
1500 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1501 ; GFX90A-NEXT:    ;;#ASMSTART
1502 ; GFX90A-NEXT:    ; def v[0:3]
1503 ; GFX90A-NEXT:    ;;#ASMEND
1504 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1505 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
1506 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
1507 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1508 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1509 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1511 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__1_2_2:
1512 ; GFX940:       ; %bb.0:
1513 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1514 ; GFX940-NEXT:    ;;#ASMSTART
1515 ; GFX940-NEXT:    ; def v[0:3]
1516 ; GFX940-NEXT:    ;;#ASMEND
1517 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1518 ; GFX940-NEXT:    v_mov_b32_e32 v0, v2
1519 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
1520 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1521 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1522 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1523   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1524   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 2, i32 2>
1525   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1526   ret void
1529 define void @v_shuffle_v3p0_v2p0__2_2_2(ptr addrspace(1) inreg %ptr) {
1530 ; GFX9-LABEL: v_shuffle_v3p0_v2p0__2_2_2:
1531 ; GFX9:       ; %bb.0:
1532 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1533 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1534   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1535   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 2, i32 2>
1536   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1537   ret void
1540 define void @v_shuffle_v3p0_v2p0__3_2_2(ptr addrspace(1) inreg %ptr) {
1541 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_2_2:
1542 ; GFX900:       ; %bb.0:
1543 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1544 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
1545 ; GFX900-NEXT:    ;;#ASMSTART
1546 ; GFX900-NEXT:    ; def v[0:3]
1547 ; GFX900-NEXT:    ;;#ASMEND
1548 ; GFX900-NEXT:    v_mov_b32_e32 v4, v0
1549 ; GFX900-NEXT:    v_mov_b32_e32 v5, v1
1550 ; GFX900-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
1551 ; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
1552 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1553 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1555 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_2_2:
1556 ; GFX90A:       ; %bb.0:
1557 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1558 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
1559 ; GFX90A-NEXT:    ;;#ASMSTART
1560 ; GFX90A-NEXT:    ; def v[0:3]
1561 ; GFX90A-NEXT:    ;;#ASMEND
1562 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
1563 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
1564 ; GFX90A-NEXT:    global_store_dwordx2 v6, v[0:1], s[16:17] offset:16
1565 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
1566 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1567 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1569 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_2_2:
1570 ; GFX940:       ; %bb.0:
1571 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1572 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
1573 ; GFX940-NEXT:    ;;#ASMSTART
1574 ; GFX940-NEXT:    ; def v[0:3]
1575 ; GFX940-NEXT:    ;;#ASMEND
1576 ; GFX940-NEXT:    global_store_dwordx2 v6, v[0:1], s[0:1] offset:16 sc0 sc1
1577 ; GFX940-NEXT:    v_mov_b32_e32 v4, v0
1578 ; GFX940-NEXT:    v_mov_b32_e32 v5, v1
1579 ; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
1580 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1581 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1582   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1583   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1584   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 2>
1585   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1586   ret void
1589 define void @v_shuffle_v3p0_v2p0__3_u_2(ptr addrspace(1) inreg %ptr) {
1590 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_u_2:
1591 ; GFX900:       ; %bb.0:
1592 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1593 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1594 ; GFX900-NEXT:    ;;#ASMSTART
1595 ; GFX900-NEXT:    ; def v[0:3]
1596 ; GFX900-NEXT:    ;;#ASMEND
1597 ; GFX900-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17] offset:16
1598 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
1599 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
1600 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1601 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1602 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1604 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_u_2:
1605 ; GFX90A:       ; %bb.0:
1606 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1607 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1608 ; GFX90A-NEXT:    ;;#ASMSTART
1609 ; GFX90A-NEXT:    ; def v[0:3]
1610 ; GFX90A-NEXT:    ;;#ASMEND
1611 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[0:1], s[16:17] offset:16
1612 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
1613 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
1614 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1615 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1616 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1618 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_u_2:
1619 ; GFX940:       ; %bb.0:
1620 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1621 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1622 ; GFX940-NEXT:    ;;#ASMSTART
1623 ; GFX940-NEXT:    ; def v[0:3]
1624 ; GFX940-NEXT:    ;;#ASMEND
1625 ; GFX940-NEXT:    global_store_dwordx2 v4, v[0:1], s[0:1] offset:16 sc0 sc1
1626 ; GFX940-NEXT:    v_mov_b32_e32 v0, v2
1627 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
1628 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1629 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1630 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1631   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1632   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1633   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>
1634   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1635   ret void
1638 define void @v_shuffle_v3p0_v2p0__3_0_2(ptr addrspace(1) inreg %ptr) {
1639 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_0_2:
1640 ; GFX900:       ; %bb.0:
1641 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1642 ; GFX900-NEXT:    ;;#ASMSTART
1643 ; GFX900-NEXT:    ; def v[0:3]
1644 ; GFX900-NEXT:    ;;#ASMEND
1645 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
1646 ; GFX900-NEXT:    ;;#ASMSTART
1647 ; GFX900-NEXT:    ; def v[2:5]
1648 ; GFX900-NEXT:    ;;#ASMEND
1649 ; GFX900-NEXT:    global_store_dwordx2 v6, v[2:3], s[16:17] offset:16
1650 ; GFX900-NEXT:    v_mov_b32_e32 v2, v4
1651 ; GFX900-NEXT:    v_mov_b32_e32 v3, v5
1652 ; GFX900-NEXT:    v_mov_b32_e32 v4, v0
1653 ; GFX900-NEXT:    v_mov_b32_e32 v5, v1
1654 ; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
1655 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1656 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1658 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_0_2:
1659 ; GFX90A:       ; %bb.0:
1660 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1661 ; GFX90A-NEXT:    ;;#ASMSTART
1662 ; GFX90A-NEXT:    ; def v[0:3]
1663 ; GFX90A-NEXT:    ;;#ASMEND
1664 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
1665 ; GFX90A-NEXT:    ;;#ASMSTART
1666 ; GFX90A-NEXT:    ; def v[2:5]
1667 ; GFX90A-NEXT:    ;;#ASMEND
1668 ; GFX90A-NEXT:    global_store_dwordx2 v6, v[2:3], s[16:17] offset:16
1669 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v4
1670 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v5
1671 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
1672 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
1673 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
1674 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1675 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1677 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_0_2:
1678 ; GFX940:       ; %bb.0:
1679 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1680 ; GFX940-NEXT:    ;;#ASMSTART
1681 ; GFX940-NEXT:    ; def v[0:3]
1682 ; GFX940-NEXT:    ;;#ASMEND
1683 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
1684 ; GFX940-NEXT:    ;;#ASMSTART
1685 ; GFX940-NEXT:    ; def v[2:5]
1686 ; GFX940-NEXT:    ;;#ASMEND
1687 ; GFX940-NEXT:    global_store_dwordx2 v6, v[2:3], s[0:1] offset:16 sc0 sc1
1688 ; GFX940-NEXT:    v_mov_b32_e32 v2, v4
1689 ; GFX940-NEXT:    v_mov_b32_e32 v3, v5
1690 ; GFX940-NEXT:    v_mov_b32_e32 v4, v0
1691 ; GFX940-NEXT:    v_mov_b32_e32 v5, v1
1692 ; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
1693 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1694 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1695   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1696   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1697   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 2>
1698   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1699   ret void
1702 define void @v_shuffle_v3p0_v2p0__3_1_2(ptr addrspace(1) inreg %ptr) {
1703 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_1_2:
1704 ; GFX900:       ; %bb.0:
1705 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1706 ; GFX900-NEXT:    ;;#ASMSTART
1707 ; GFX900-NEXT:    ; def v[0:3]
1708 ; GFX900-NEXT:    ;;#ASMEND
1709 ; GFX900-NEXT:    v_mov_b32_e32 v8, 0
1710 ; GFX900-NEXT:    ;;#ASMSTART
1711 ; GFX900-NEXT:    ; def v[4:7]
1712 ; GFX900-NEXT:    ;;#ASMEND
1713 ; GFX900-NEXT:    v_mov_b32_e32 v0, v6
1714 ; GFX900-NEXT:    v_mov_b32_e32 v1, v7
1715 ; GFX900-NEXT:    global_store_dwordx2 v8, v[4:5], s[16:17] offset:16
1716 ; GFX900-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
1717 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1718 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1720 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_1_2:
1721 ; GFX90A:       ; %bb.0:
1722 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1723 ; GFX90A-NEXT:    ;;#ASMSTART
1724 ; GFX90A-NEXT:    ; def v[0:3]
1725 ; GFX90A-NEXT:    ;;#ASMEND
1726 ; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
1727 ; GFX90A-NEXT:    ;;#ASMSTART
1728 ; GFX90A-NEXT:    ; def v[4:7]
1729 ; GFX90A-NEXT:    ;;#ASMEND
1730 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v6
1731 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v7
1732 ; GFX90A-NEXT:    global_store_dwordx2 v8, v[4:5], s[16:17] offset:16
1733 ; GFX90A-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
1734 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1735 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1737 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_1_2:
1738 ; GFX940:       ; %bb.0:
1739 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1740 ; GFX940-NEXT:    ;;#ASMSTART
1741 ; GFX940-NEXT:    ; def v[0:3]
1742 ; GFX940-NEXT:    ;;#ASMEND
1743 ; GFX940-NEXT:    v_mov_b32_e32 v8, 0
1744 ; GFX940-NEXT:    ;;#ASMSTART
1745 ; GFX940-NEXT:    ; def v[4:7]
1746 ; GFX940-NEXT:    ;;#ASMEND
1747 ; GFX940-NEXT:    global_store_dwordx2 v8, v[4:5], s[0:1] offset:16 sc0 sc1
1748 ; GFX940-NEXT:    v_mov_b32_e32 v0, v6
1749 ; GFX940-NEXT:    v_mov_b32_e32 v1, v7
1750 ; GFX940-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1] sc0 sc1
1751 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1752 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1753   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1754   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1755   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 2>
1756   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1757   ret void
1760 define void @v_shuffle_v3p0_v2p0__u_3_3(ptr addrspace(1) inreg %ptr) {
1761 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__u_3_3:
1762 ; GFX900:       ; %bb.0:
1763 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1764 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1765 ; GFX900-NEXT:    ;;#ASMSTART
1766 ; GFX900-NEXT:    ; def v[0:3]
1767 ; GFX900-NEXT:    ;;#ASMEND
1768 ; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1769 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1770 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1771 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1773 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__u_3_3:
1774 ; GFX90A:       ; %bb.0:
1775 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1776 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1777 ; GFX90A-NEXT:    ;;#ASMSTART
1778 ; GFX90A-NEXT:    ; def v[0:3]
1779 ; GFX90A-NEXT:    ;;#ASMEND
1780 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1781 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1782 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1783 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1785 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__u_3_3:
1786 ; GFX940:       ; %bb.0:
1787 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1788 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1789 ; GFX940-NEXT:    ;;#ASMSTART
1790 ; GFX940-NEXT:    ; def v[0:3]
1791 ; GFX940-NEXT:    ;;#ASMEND
1792 ; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] offset:16 sc0 sc1
1793 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1794 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1795 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1796   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1797   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1798   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>
1799   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1800   ret void
1803 define void @v_shuffle_v3p0_v2p0__0_3_3(ptr addrspace(1) inreg %ptr) {
1804 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__0_3_3:
1805 ; GFX900:       ; %bb.0:
1806 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1807 ; GFX900-NEXT:    ;;#ASMSTART
1808 ; GFX900-NEXT:    ; def v[0:3]
1809 ; GFX900-NEXT:    ;;#ASMEND
1810 ; GFX900-NEXT:    ;;#ASMSTART
1811 ; GFX900-NEXT:    ; def v[2:5]
1812 ; GFX900-NEXT:    ;;#ASMEND
1813 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
1814 ; GFX900-NEXT:    v_mov_b32_e32 v2, v4
1815 ; GFX900-NEXT:    v_mov_b32_e32 v3, v5
1816 ; GFX900-NEXT:    global_store_dwordx2 v6, v[4:5], s[16:17] offset:16
1817 ; GFX900-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
1818 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1819 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1821 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__0_3_3:
1822 ; GFX90A:       ; %bb.0:
1823 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1824 ; GFX90A-NEXT:    ;;#ASMSTART
1825 ; GFX90A-NEXT:    ; def v[0:3]
1826 ; GFX90A-NEXT:    ;;#ASMEND
1827 ; GFX90A-NEXT:    ;;#ASMSTART
1828 ; GFX90A-NEXT:    ; def v[2:5]
1829 ; GFX90A-NEXT:    ;;#ASMEND
1830 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
1831 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v4
1832 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v5
1833 ; GFX90A-NEXT:    global_store_dwordx2 v6, v[4:5], s[16:17] offset:16
1834 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[0:3], s[16:17]
1835 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1836 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1838 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__0_3_3:
1839 ; GFX940:       ; %bb.0:
1840 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1841 ; GFX940-NEXT:    ;;#ASMSTART
1842 ; GFX940-NEXT:    ; def v[0:3]
1843 ; GFX940-NEXT:    ;;#ASMEND
1844 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
1845 ; GFX940-NEXT:    ;;#ASMSTART
1846 ; GFX940-NEXT:    ; def v[2:5]
1847 ; GFX940-NEXT:    ;;#ASMEND
1848 ; GFX940-NEXT:    global_store_dwordx2 v6, v[4:5], s[0:1] offset:16 sc0 sc1
1849 ; GFX940-NEXT:    v_mov_b32_e32 v2, v4
1850 ; GFX940-NEXT:    v_mov_b32_e32 v3, v5
1851 ; GFX940-NEXT:    global_store_dwordx4 v6, v[0:3], s[0:1] sc0 sc1
1852 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1853 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1854   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1855   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1856   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 0, i32 3, i32 3>
1857   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1858   ret void
1861 define void @v_shuffle_v3p0_v2p0__1_3_3(ptr addrspace(1) inreg %ptr) {
1862 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__1_3_3:
1863 ; GFX900:       ; %bb.0:
1864 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1865 ; GFX900-NEXT:    ;;#ASMSTART
1866 ; GFX900-NEXT:    ; def v[4:7]
1867 ; GFX900-NEXT:    ;;#ASMEND
1868 ; GFX900-NEXT:    v_mov_b32_e32 v8, 0
1869 ; GFX900-NEXT:    ;;#ASMSTART
1870 ; GFX900-NEXT:    ; def v[0:3]
1871 ; GFX900-NEXT:    ;;#ASMEND
1872 ; GFX900-NEXT:    v_mov_b32_e32 v4, v2
1873 ; GFX900-NEXT:    v_mov_b32_e32 v5, v3
1874 ; GFX900-NEXT:    global_store_dwordx2 v8, v[6:7], s[16:17] offset:16
1875 ; GFX900-NEXT:    global_store_dwordx4 v8, v[4:7], s[16:17]
1876 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1877 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1879 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__1_3_3:
1880 ; GFX90A:       ; %bb.0:
1881 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1882 ; GFX90A-NEXT:    ;;#ASMSTART
1883 ; GFX90A-NEXT:    ; def v[4:7]
1884 ; GFX90A-NEXT:    ;;#ASMEND
1885 ; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
1886 ; GFX90A-NEXT:    ;;#ASMSTART
1887 ; GFX90A-NEXT:    ; def v[0:3]
1888 ; GFX90A-NEXT:    ;;#ASMEND
1889 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v2
1890 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v3
1891 ; GFX90A-NEXT:    global_store_dwordx2 v8, v[6:7], s[16:17] offset:16
1892 ; GFX90A-NEXT:    global_store_dwordx4 v8, v[4:7], s[16:17]
1893 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1894 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1896 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__1_3_3:
1897 ; GFX940:       ; %bb.0:
1898 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1899 ; GFX940-NEXT:    ;;#ASMSTART
1900 ; GFX940-NEXT:    ; def v[4:7]
1901 ; GFX940-NEXT:    ;;#ASMEND
1902 ; GFX940-NEXT:    v_mov_b32_e32 v8, 0
1903 ; GFX940-NEXT:    ;;#ASMSTART
1904 ; GFX940-NEXT:    ; def v[0:3]
1905 ; GFX940-NEXT:    ;;#ASMEND
1906 ; GFX940-NEXT:    global_store_dwordx2 v8, v[6:7], s[0:1] offset:16 sc0 sc1
1907 ; GFX940-NEXT:    v_mov_b32_e32 v4, v2
1908 ; GFX940-NEXT:    v_mov_b32_e32 v5, v3
1909 ; GFX940-NEXT:    global_store_dwordx4 v8, v[4:7], s[0:1] sc0 sc1
1910 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1911 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1912   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1913   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1914   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 1, i32 3, i32 3>
1915   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1916   ret void
1919 define void @v_shuffle_v3p0_v2p0__2_3_3(ptr addrspace(1) inreg %ptr) {
1920 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__2_3_3:
1921 ; GFX900:       ; %bb.0:
1922 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1923 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1924 ; GFX900-NEXT:    ;;#ASMSTART
1925 ; GFX900-NEXT:    ; def v[0:3]
1926 ; GFX900-NEXT:    ;;#ASMEND
1927 ; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1928 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1929 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1930 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1932 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__2_3_3:
1933 ; GFX90A:       ; %bb.0:
1934 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1935 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1936 ; GFX90A-NEXT:    ;;#ASMSTART
1937 ; GFX90A-NEXT:    ; def v[0:3]
1938 ; GFX90A-NEXT:    ;;#ASMEND
1939 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1940 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1941 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1942 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1944 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__2_3_3:
1945 ; GFX940:       ; %bb.0:
1946 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1947 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1948 ; GFX940-NEXT:    ;;#ASMSTART
1949 ; GFX940-NEXT:    ; def v[0:3]
1950 ; GFX940-NEXT:    ;;#ASMEND
1951 ; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] offset:16 sc0 sc1
1952 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
1953 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1954 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1955   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
1956   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
1957   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 2, i32 3, i32 3>
1958   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
1959   ret void
1962 define void @v_shuffle_v3p0_v2p0__3_u_3(ptr addrspace(1) inreg %ptr) {
1963 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_u_3:
1964 ; GFX900:       ; %bb.0:
1965 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1966 ; GFX900-NEXT:    ;;#ASMSTART
1967 ; GFX900-NEXT:    ; def v[0:3]
1968 ; GFX900-NEXT:    ;;#ASMEND
1969 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1970 ; GFX900-NEXT:    v_mov_b32_e32 v0, v2
1971 ; GFX900-NEXT:    v_mov_b32_e32 v1, v3
1972 ; GFX900-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1973 ; GFX900-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1974 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1975 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1977 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_u_3:
1978 ; GFX90A:       ; %bb.0:
1979 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1980 ; GFX90A-NEXT:    ;;#ASMSTART
1981 ; GFX90A-NEXT:    ; def v[0:3]
1982 ; GFX90A-NEXT:    ;;#ASMEND
1983 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1984 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v2
1985 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v3
1986 ; GFX90A-NEXT:    global_store_dwordx2 v4, v[2:3], s[16:17] offset:16
1987 ; GFX90A-NEXT:    global_store_dwordx4 v4, v[0:3], s[16:17]
1988 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1989 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1991 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_u_3:
1992 ; GFX940:       ; %bb.0:
1993 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1994 ; GFX940-NEXT:    ;;#ASMSTART
1995 ; GFX940-NEXT:    ; def v[0:3]
1996 ; GFX940-NEXT:    ;;#ASMEND
1997 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1998 ; GFX940-NEXT:    v_mov_b32_e32 v0, v2
1999 ; GFX940-NEXT:    v_mov_b32_e32 v1, v3
2000 ; GFX940-NEXT:    global_store_dwordx2 v4, v[2:3], s[0:1] offset:16 sc0 sc1
2001 ; GFX940-NEXT:    global_store_dwordx4 v4, v[0:3], s[0:1] sc0 sc1
2002 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2003 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2004   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
2005   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
2006   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 3>
2007   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
2008   ret void
2011 define void @v_shuffle_v3p0_v2p0__3_0_3(ptr addrspace(1) inreg %ptr) {
2012 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_0_3:
2013 ; GFX900:       ; %bb.0:
2014 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2015 ; GFX900-NEXT:    ;;#ASMSTART
2016 ; GFX900-NEXT:    ; def v[0:3]
2017 ; GFX900-NEXT:    ;;#ASMEND
2018 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
2019 ; GFX900-NEXT:    ;;#ASMSTART
2020 ; GFX900-NEXT:    ; def v[2:5]
2021 ; GFX900-NEXT:    ;;#ASMEND
2022 ; GFX900-NEXT:    global_store_dwordx2 v6, v[4:5], s[16:17] offset:16
2023 ; GFX900-NEXT:    v_mov_b32_e32 v2, v4
2024 ; GFX900-NEXT:    v_mov_b32_e32 v3, v5
2025 ; GFX900-NEXT:    v_mov_b32_e32 v4, v0
2026 ; GFX900-NEXT:    v_mov_b32_e32 v5, v1
2027 ; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
2028 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2029 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2031 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_0_3:
2032 ; GFX90A:       ; %bb.0:
2033 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2034 ; GFX90A-NEXT:    ;;#ASMSTART
2035 ; GFX90A-NEXT:    ; def v[0:3]
2036 ; GFX90A-NEXT:    ;;#ASMEND
2037 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
2038 ; GFX90A-NEXT:    ;;#ASMSTART
2039 ; GFX90A-NEXT:    ; def v[2:5]
2040 ; GFX90A-NEXT:    ;;#ASMEND
2041 ; GFX90A-NEXT:    global_store_dwordx2 v6, v[4:5], s[16:17] offset:16
2042 ; GFX90A-NEXT:    v_mov_b32_e32 v2, v4
2043 ; GFX90A-NEXT:    v_mov_b32_e32 v3, v5
2044 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
2045 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
2046 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
2047 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2048 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2050 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_0_3:
2051 ; GFX940:       ; %bb.0:
2052 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2053 ; GFX940-NEXT:    ;;#ASMSTART
2054 ; GFX940-NEXT:    ; def v[0:3]
2055 ; GFX940-NEXT:    ;;#ASMEND
2056 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
2057 ; GFX940-NEXT:    ;;#ASMSTART
2058 ; GFX940-NEXT:    ; def v[2:5]
2059 ; GFX940-NEXT:    ;;#ASMEND
2060 ; GFX940-NEXT:    global_store_dwordx2 v6, v[4:5], s[0:1] offset:16 sc0 sc1
2061 ; GFX940-NEXT:    v_mov_b32_e32 v2, v4
2062 ; GFX940-NEXT:    v_mov_b32_e32 v3, v5
2063 ; GFX940-NEXT:    v_mov_b32_e32 v4, v0
2064 ; GFX940-NEXT:    v_mov_b32_e32 v5, v1
2065 ; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
2066 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2067 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2068   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
2069   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
2070   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 3>
2071   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
2072   ret void
2075 define void @v_shuffle_v3p0_v2p0__3_1_3(ptr addrspace(1) inreg %ptr) {
2076 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_1_3:
2077 ; GFX900:       ; %bb.0:
2078 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2079 ; GFX900-NEXT:    ;;#ASMSTART
2080 ; GFX900-NEXT:    ; def v[0:3]
2081 ; GFX900-NEXT:    ;;#ASMEND
2082 ; GFX900-NEXT:    v_mov_b32_e32 v8, 0
2083 ; GFX900-NEXT:    ;;#ASMSTART
2084 ; GFX900-NEXT:    ; def v[4:7]
2085 ; GFX900-NEXT:    ;;#ASMEND
2086 ; GFX900-NEXT:    v_mov_b32_e32 v0, v6
2087 ; GFX900-NEXT:    v_mov_b32_e32 v1, v7
2088 ; GFX900-NEXT:    global_store_dwordx2 v8, v[6:7], s[16:17] offset:16
2089 ; GFX900-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
2090 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2091 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2093 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_1_3:
2094 ; GFX90A:       ; %bb.0:
2095 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2096 ; GFX90A-NEXT:    ;;#ASMSTART
2097 ; GFX90A-NEXT:    ; def v[0:3]
2098 ; GFX90A-NEXT:    ;;#ASMEND
2099 ; GFX90A-NEXT:    v_mov_b32_e32 v8, 0
2100 ; GFX90A-NEXT:    ;;#ASMSTART
2101 ; GFX90A-NEXT:    ; def v[4:7]
2102 ; GFX90A-NEXT:    ;;#ASMEND
2103 ; GFX90A-NEXT:    v_mov_b32_e32 v0, v6
2104 ; GFX90A-NEXT:    v_mov_b32_e32 v1, v7
2105 ; GFX90A-NEXT:    global_store_dwordx2 v8, v[6:7], s[16:17] offset:16
2106 ; GFX90A-NEXT:    global_store_dwordx4 v8, v[0:3], s[16:17]
2107 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2108 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2110 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_1_3:
2111 ; GFX940:       ; %bb.0:
2112 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2113 ; GFX940-NEXT:    ;;#ASMSTART
2114 ; GFX940-NEXT:    ; def v[0:3]
2115 ; GFX940-NEXT:    ;;#ASMEND
2116 ; GFX940-NEXT:    v_mov_b32_e32 v8, 0
2117 ; GFX940-NEXT:    ;;#ASMSTART
2118 ; GFX940-NEXT:    ; def v[4:7]
2119 ; GFX940-NEXT:    ;;#ASMEND
2120 ; GFX940-NEXT:    global_store_dwordx2 v8, v[6:7], s[0:1] offset:16 sc0 sc1
2121 ; GFX940-NEXT:    v_mov_b32_e32 v0, v6
2122 ; GFX940-NEXT:    v_mov_b32_e32 v1, v7
2123 ; GFX940-NEXT:    global_store_dwordx4 v8, v[0:3], s[0:1] sc0 sc1
2124 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2125 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2126   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
2127   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
2128   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 3>
2129   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
2130   ret void
2133 define void @v_shuffle_v3p0_v2p0__3_2_3(ptr addrspace(1) inreg %ptr) {
2134 ; GFX900-LABEL: v_shuffle_v3p0_v2p0__3_2_3:
2135 ; GFX900:       ; %bb.0:
2136 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2137 ; GFX900-NEXT:    v_mov_b32_e32 v6, 0
2138 ; GFX900-NEXT:    ;;#ASMSTART
2139 ; GFX900-NEXT:    ; def v[0:3]
2140 ; GFX900-NEXT:    ;;#ASMEND
2141 ; GFX900-NEXT:    v_mov_b32_e32 v4, v0
2142 ; GFX900-NEXT:    v_mov_b32_e32 v5, v1
2143 ; GFX900-NEXT:    global_store_dwordx2 v6, v[2:3], s[16:17] offset:16
2144 ; GFX900-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
2145 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2146 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2148 ; GFX90A-LABEL: v_shuffle_v3p0_v2p0__3_2_3:
2149 ; GFX90A:       ; %bb.0:
2150 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2151 ; GFX90A-NEXT:    v_mov_b32_e32 v6, 0
2152 ; GFX90A-NEXT:    ;;#ASMSTART
2153 ; GFX90A-NEXT:    ; def v[0:3]
2154 ; GFX90A-NEXT:    ;;#ASMEND
2155 ; GFX90A-NEXT:    v_mov_b32_e32 v4, v0
2156 ; GFX90A-NEXT:    v_mov_b32_e32 v5, v1
2157 ; GFX90A-NEXT:    global_store_dwordx2 v6, v[2:3], s[16:17] offset:16
2158 ; GFX90A-NEXT:    global_store_dwordx4 v6, v[2:5], s[16:17]
2159 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2160 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2162 ; GFX940-LABEL: v_shuffle_v3p0_v2p0__3_2_3:
2163 ; GFX940:       ; %bb.0:
2164 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2165 ; GFX940-NEXT:    v_mov_b32_e32 v6, 0
2166 ; GFX940-NEXT:    ;;#ASMSTART
2167 ; GFX940-NEXT:    ; def v[0:3]
2168 ; GFX940-NEXT:    ;;#ASMEND
2169 ; GFX940-NEXT:    global_store_dwordx2 v6, v[2:3], s[0:1] offset:16 sc0 sc1
2170 ; GFX940-NEXT:    v_mov_b32_e32 v4, v0
2171 ; GFX940-NEXT:    v_mov_b32_e32 v5, v1
2172 ; GFX940-NEXT:    global_store_dwordx4 v6, v[2:5], s[0:1] sc0 sc1
2173 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2174 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2175   %vec0 = call <2 x ptr> asm "; def $0", "=v"()
2176   %vec1 = call <2 x ptr> asm "; def $0", "=v"()
2177   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 3>
2178   store <3 x ptr> %shuf, ptr addrspace(1) %ptr, align 32
2179   ret void
2182 define void @s_shuffle_v3p0_v2p0__u_u_u() {
2183 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_u_u:
2184 ; GFX9:       ; %bb.0:
2185 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2186 ; GFX9-NEXT:    ;;#ASMSTART
2187 ; GFX9-NEXT:    ; use s[8:13]
2188 ; GFX9-NEXT:    ;;#ASMEND
2189 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2190   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2191   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> poison
2192   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2193   ret void
2196 define void @s_shuffle_v3p0_v2p0__0_u_u() {
2197 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__0_u_u:
2198 ; GFX900:       ; %bb.0:
2199 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2200 ; GFX900-NEXT:    ;;#ASMSTART
2201 ; GFX900-NEXT:    ; def s[8:11]
2202 ; GFX900-NEXT:    ;;#ASMEND
2203 ; GFX900-NEXT:    ;;#ASMSTART
2204 ; GFX900-NEXT:    ; use s[8:13]
2205 ; GFX900-NEXT:    ;;#ASMEND
2206 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2208 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__0_u_u:
2209 ; GFX90A:       ; %bb.0:
2210 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2211 ; GFX90A-NEXT:    ;;#ASMSTART
2212 ; GFX90A-NEXT:    ; def s[8:11]
2213 ; GFX90A-NEXT:    ;;#ASMEND
2214 ; GFX90A-NEXT:    ;;#ASMSTART
2215 ; GFX90A-NEXT:    ; use s[8:13]
2216 ; GFX90A-NEXT:    ;;#ASMEND
2217 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2219 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__0_u_u:
2220 ; GFX940:       ; %bb.0:
2221 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2222 ; GFX940-NEXT:    ;;#ASMSTART
2223 ; GFX940-NEXT:    ; def s[8:11]
2224 ; GFX940-NEXT:    ;;#ASMEND
2225 ; GFX940-NEXT:    s_nop 0
2226 ; GFX940-NEXT:    ;;#ASMSTART
2227 ; GFX940-NEXT:    ; use s[8:13]
2228 ; GFX940-NEXT:    ;;#ASMEND
2229 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2230   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2231   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 poison, i32 poison>
2232   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2233   ret void
2236 define void @s_shuffle_v3p0_v2p0__1_u_u() {
2237 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__1_u_u:
2238 ; GFX900:       ; %bb.0:
2239 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2240 ; GFX900-NEXT:    ;;#ASMSTART
2241 ; GFX900-NEXT:    ; def s[4:7]
2242 ; GFX900-NEXT:    ;;#ASMEND
2243 ; GFX900-NEXT:    s_mov_b32 s8, s6
2244 ; GFX900-NEXT:    s_mov_b32 s9, s7
2245 ; GFX900-NEXT:    ;;#ASMSTART
2246 ; GFX900-NEXT:    ; use s[8:13]
2247 ; GFX900-NEXT:    ;;#ASMEND
2248 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2250 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__1_u_u:
2251 ; GFX90A:       ; %bb.0:
2252 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2253 ; GFX90A-NEXT:    ;;#ASMSTART
2254 ; GFX90A-NEXT:    ; def s[4:7]
2255 ; GFX90A-NEXT:    ;;#ASMEND
2256 ; GFX90A-NEXT:    s_mov_b32 s8, s6
2257 ; GFX90A-NEXT:    s_mov_b32 s9, s7
2258 ; GFX90A-NEXT:    ;;#ASMSTART
2259 ; GFX90A-NEXT:    ; use s[8:13]
2260 ; GFX90A-NEXT:    ;;#ASMEND
2261 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2263 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__1_u_u:
2264 ; GFX940:       ; %bb.0:
2265 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2266 ; GFX940-NEXT:    ;;#ASMSTART
2267 ; GFX940-NEXT:    ; def s[0:3]
2268 ; GFX940-NEXT:    ;;#ASMEND
2269 ; GFX940-NEXT:    s_mov_b32 s8, s2
2270 ; GFX940-NEXT:    s_mov_b32 s9, s3
2271 ; GFX940-NEXT:    ;;#ASMSTART
2272 ; GFX940-NEXT:    ; use s[8:13]
2273 ; GFX940-NEXT:    ;;#ASMEND
2274 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2275   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2276   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 poison, i32 poison>
2277   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2278   ret void
2281 define void @s_shuffle_v3p0_v2p0__2_u_u() {
2282 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_u_u:
2283 ; GFX9:       ; %bb.0:
2284 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2285 ; GFX9-NEXT:    ;;#ASMSTART
2286 ; GFX9-NEXT:    ; use s[8:13]
2287 ; GFX9-NEXT:    ;;#ASMEND
2288 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2289   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2290   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 poison, i32 poison>
2291   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2292   ret void
2295 define void @s_shuffle_v3p0_v2p0__3_u_u() {
2296 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_u_u:
2297 ; GFX900:       ; %bb.0:
2298 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2299 ; GFX900-NEXT:    ;;#ASMSTART
2300 ; GFX900-NEXT:    ; def s[4:7]
2301 ; GFX900-NEXT:    ;;#ASMEND
2302 ; GFX900-NEXT:    s_mov_b32 s8, s6
2303 ; GFX900-NEXT:    s_mov_b32 s9, s7
2304 ; GFX900-NEXT:    ;;#ASMSTART
2305 ; GFX900-NEXT:    ; use s[8:13]
2306 ; GFX900-NEXT:    ;;#ASMEND
2307 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2309 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_u_u:
2310 ; GFX90A:       ; %bb.0:
2311 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2312 ; GFX90A-NEXT:    ;;#ASMSTART
2313 ; GFX90A-NEXT:    ; def s[4:7]
2314 ; GFX90A-NEXT:    ;;#ASMEND
2315 ; GFX90A-NEXT:    s_mov_b32 s8, s6
2316 ; GFX90A-NEXT:    s_mov_b32 s9, s7
2317 ; GFX90A-NEXT:    ;;#ASMSTART
2318 ; GFX90A-NEXT:    ; use s[8:13]
2319 ; GFX90A-NEXT:    ;;#ASMEND
2320 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2322 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_u_u:
2323 ; GFX940:       ; %bb.0:
2324 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2325 ; GFX940-NEXT:    ;;#ASMSTART
2326 ; GFX940-NEXT:    ; def s[0:3]
2327 ; GFX940-NEXT:    ;;#ASMEND
2328 ; GFX940-NEXT:    s_mov_b32 s8, s2
2329 ; GFX940-NEXT:    s_mov_b32 s9, s3
2330 ; GFX940-NEXT:    ;;#ASMSTART
2331 ; GFX940-NEXT:    ; use s[8:13]
2332 ; GFX940-NEXT:    ;;#ASMEND
2333 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2334   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2335   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
2336   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 poison>
2337   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2338   ret void
2341 define void @s_shuffle_v3p0_v2p0__3_0_u() {
2342 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_0_u:
2343 ; GFX900:       ; %bb.0:
2344 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2345 ; GFX900-NEXT:    ;;#ASMSTART
2346 ; GFX900-NEXT:    ; def s[8:11]
2347 ; GFX900-NEXT:    ;;#ASMEND
2348 ; GFX900-NEXT:    ;;#ASMSTART
2349 ; GFX900-NEXT:    ; def s[4:7]
2350 ; GFX900-NEXT:    ;;#ASMEND
2351 ; GFX900-NEXT:    s_mov_b32 s8, s10
2352 ; GFX900-NEXT:    s_mov_b32 s9, s11
2353 ; GFX900-NEXT:    s_mov_b32 s10, s4
2354 ; GFX900-NEXT:    s_mov_b32 s11, s5
2355 ; GFX900-NEXT:    ;;#ASMSTART
2356 ; GFX900-NEXT:    ; use s[8:13]
2357 ; GFX900-NEXT:    ;;#ASMEND
2358 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2360 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_0_u:
2361 ; GFX90A:       ; %bb.0:
2362 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2363 ; GFX90A-NEXT:    ;;#ASMSTART
2364 ; GFX90A-NEXT:    ; def s[8:11]
2365 ; GFX90A-NEXT:    ;;#ASMEND
2366 ; GFX90A-NEXT:    ;;#ASMSTART
2367 ; GFX90A-NEXT:    ; def s[4:7]
2368 ; GFX90A-NEXT:    ;;#ASMEND
2369 ; GFX90A-NEXT:    s_mov_b32 s8, s10
2370 ; GFX90A-NEXT:    s_mov_b32 s9, s11
2371 ; GFX90A-NEXT:    s_mov_b32 s10, s4
2372 ; GFX90A-NEXT:    s_mov_b32 s11, s5
2373 ; GFX90A-NEXT:    ;;#ASMSTART
2374 ; GFX90A-NEXT:    ; use s[8:13]
2375 ; GFX90A-NEXT:    ;;#ASMEND
2376 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2378 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_0_u:
2379 ; GFX940:       ; %bb.0:
2380 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2381 ; GFX940-NEXT:    ;;#ASMSTART
2382 ; GFX940-NEXT:    ; def s[0:3]
2383 ; GFX940-NEXT:    ;;#ASMEND
2384 ; GFX940-NEXT:    ;;#ASMSTART
2385 ; GFX940-NEXT:    ; def s[4:7]
2386 ; GFX940-NEXT:    ;;#ASMEND
2387 ; GFX940-NEXT:    s_mov_b32 s8, s6
2388 ; GFX940-NEXT:    s_mov_b32 s9, s7
2389 ; GFX940-NEXT:    s_mov_b32 s10, s0
2390 ; GFX940-NEXT:    s_mov_b32 s11, s1
2391 ; GFX940-NEXT:    ;;#ASMSTART
2392 ; GFX940-NEXT:    ; use s[8:13]
2393 ; GFX940-NEXT:    ;;#ASMEND
2394 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2395   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2396   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
2397   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 poison>
2398   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2399   ret void
2402 define void @s_shuffle_v3p0_v2p0__3_1_u() {
2403 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_1_u:
2404 ; GFX900:       ; %bb.0:
2405 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2406 ; GFX900-NEXT:    ;;#ASMSTART
2407 ; GFX900-NEXT:    ; def s[8:11]
2408 ; GFX900-NEXT:    ;;#ASMEND
2409 ; GFX900-NEXT:    ;;#ASMSTART
2410 ; GFX900-NEXT:    ; def s[4:7]
2411 ; GFX900-NEXT:    ;;#ASMEND
2412 ; GFX900-NEXT:    s_mov_b32 s8, s6
2413 ; GFX900-NEXT:    s_mov_b32 s9, s7
2414 ; GFX900-NEXT:    ;;#ASMSTART
2415 ; GFX900-NEXT:    ; use s[8:13]
2416 ; GFX900-NEXT:    ;;#ASMEND
2417 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2419 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_1_u:
2420 ; GFX90A:       ; %bb.0:
2421 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2422 ; GFX90A-NEXT:    ;;#ASMSTART
2423 ; GFX90A-NEXT:    ; def s[8:11]
2424 ; GFX90A-NEXT:    ;;#ASMEND
2425 ; GFX90A-NEXT:    ;;#ASMSTART
2426 ; GFX90A-NEXT:    ; def s[4:7]
2427 ; GFX90A-NEXT:    ;;#ASMEND
2428 ; GFX90A-NEXT:    s_mov_b32 s8, s6
2429 ; GFX90A-NEXT:    s_mov_b32 s9, s7
2430 ; GFX90A-NEXT:    ;;#ASMSTART
2431 ; GFX90A-NEXT:    ; use s[8:13]
2432 ; GFX90A-NEXT:    ;;#ASMEND
2433 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2435 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_1_u:
2436 ; GFX940:       ; %bb.0:
2437 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2438 ; GFX940-NEXT:    ;;#ASMSTART
2439 ; GFX940-NEXT:    ; def s[8:11]
2440 ; GFX940-NEXT:    ;;#ASMEND
2441 ; GFX940-NEXT:    ;;#ASMSTART
2442 ; GFX940-NEXT:    ; def s[0:3]
2443 ; GFX940-NEXT:    ;;#ASMEND
2444 ; GFX940-NEXT:    s_mov_b32 s8, s2
2445 ; GFX940-NEXT:    s_mov_b32 s9, s3
2446 ; GFX940-NEXT:    ;;#ASMSTART
2447 ; GFX940-NEXT:    ; use s[8:13]
2448 ; GFX940-NEXT:    ;;#ASMEND
2449 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2450   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2451   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
2452   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 poison>
2453   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2454   ret void
2457 define void @s_shuffle_v3p0_v2p0__3_2_u() {
2458 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_2_u:
2459 ; GFX900:       ; %bb.0:
2460 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2461 ; GFX900-NEXT:    ;;#ASMSTART
2462 ; GFX900-NEXT:    ; def s[4:7]
2463 ; GFX900-NEXT:    ;;#ASMEND
2464 ; GFX900-NEXT:    s_mov_b32 s8, s6
2465 ; GFX900-NEXT:    s_mov_b32 s9, s7
2466 ; GFX900-NEXT:    s_mov_b32 s10, s4
2467 ; GFX900-NEXT:    s_mov_b32 s11, s5
2468 ; GFX900-NEXT:    ;;#ASMSTART
2469 ; GFX900-NEXT:    ; use s[8:13]
2470 ; GFX900-NEXT:    ;;#ASMEND
2471 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2473 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_2_u:
2474 ; GFX90A:       ; %bb.0:
2475 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2476 ; GFX90A-NEXT:    ;;#ASMSTART
2477 ; GFX90A-NEXT:    ; def s[4:7]
2478 ; GFX90A-NEXT:    ;;#ASMEND
2479 ; GFX90A-NEXT:    s_mov_b32 s8, s6
2480 ; GFX90A-NEXT:    s_mov_b32 s9, s7
2481 ; GFX90A-NEXT:    s_mov_b32 s10, s4
2482 ; GFX90A-NEXT:    s_mov_b32 s11, s5
2483 ; GFX90A-NEXT:    ;;#ASMSTART
2484 ; GFX90A-NEXT:    ; use s[8:13]
2485 ; GFX90A-NEXT:    ;;#ASMEND
2486 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2488 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_2_u:
2489 ; GFX940:       ; %bb.0:
2490 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2491 ; GFX940-NEXT:    ;;#ASMSTART
2492 ; GFX940-NEXT:    ; def s[0:3]
2493 ; GFX940-NEXT:    ;;#ASMEND
2494 ; GFX940-NEXT:    s_mov_b32 s8, s2
2495 ; GFX940-NEXT:    s_mov_b32 s9, s3
2496 ; GFX940-NEXT:    s_mov_b32 s10, s0
2497 ; GFX940-NEXT:    s_mov_b32 s11, s1
2498 ; GFX940-NEXT:    ;;#ASMSTART
2499 ; GFX940-NEXT:    ; use s[8:13]
2500 ; GFX940-NEXT:    ;;#ASMEND
2501 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2502   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2503   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
2504   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 poison>
2505   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2506   ret void
2509 define void @s_shuffle_v3p0_v2p0__3_3_u() {
2510 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_3_u:
2511 ; GFX9:       ; %bb.0:
2512 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2513 ; GFX9-NEXT:    ;;#ASMSTART
2514 ; GFX9-NEXT:    ; def s[8:11]
2515 ; GFX9-NEXT:    ;;#ASMEND
2516 ; GFX9-NEXT:    s_mov_b32 s8, s10
2517 ; GFX9-NEXT:    s_mov_b32 s9, s11
2518 ; GFX9-NEXT:    ;;#ASMSTART
2519 ; GFX9-NEXT:    ; use s[8:13]
2520 ; GFX9-NEXT:    ;;#ASMEND
2521 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2522   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2523   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
2524   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>
2525   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2526   ret void
2529 define void @s_shuffle_v3p0_v2p0__3_3_0() {
2530 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_3_0:
2531 ; GFX900:       ; %bb.0:
2532 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2533 ; GFX900-NEXT:    ;;#ASMSTART
2534 ; GFX900-NEXT:    ; def s[8:11]
2535 ; GFX900-NEXT:    ;;#ASMEND
2536 ; GFX900-NEXT:    ;;#ASMSTART
2537 ; GFX900-NEXT:    ; def s[4:7]
2538 ; GFX900-NEXT:    ;;#ASMEND
2539 ; GFX900-NEXT:    s_mov_b32 s8, s10
2540 ; GFX900-NEXT:    s_mov_b32 s9, s11
2541 ; GFX900-NEXT:    s_mov_b32 s12, s4
2542 ; GFX900-NEXT:    s_mov_b32 s13, s5
2543 ; GFX900-NEXT:    ;;#ASMSTART
2544 ; GFX900-NEXT:    ; use s[8:13]
2545 ; GFX900-NEXT:    ;;#ASMEND
2546 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2548 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_3_0:
2549 ; GFX90A:       ; %bb.0:
2550 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2551 ; GFX90A-NEXT:    ;;#ASMSTART
2552 ; GFX90A-NEXT:    ; def s[8:11]
2553 ; GFX90A-NEXT:    ;;#ASMEND
2554 ; GFX90A-NEXT:    ;;#ASMSTART
2555 ; GFX90A-NEXT:    ; def s[4:7]
2556 ; GFX90A-NEXT:    ;;#ASMEND
2557 ; GFX90A-NEXT:    s_mov_b32 s8, s10
2558 ; GFX90A-NEXT:    s_mov_b32 s9, s11
2559 ; GFX90A-NEXT:    s_mov_b32 s12, s4
2560 ; GFX90A-NEXT:    s_mov_b32 s13, s5
2561 ; GFX90A-NEXT:    ;;#ASMSTART
2562 ; GFX90A-NEXT:    ; use s[8:13]
2563 ; GFX90A-NEXT:    ;;#ASMEND
2564 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2566 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_3_0:
2567 ; GFX940:       ; %bb.0:
2568 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2569 ; GFX940-NEXT:    ;;#ASMSTART
2570 ; GFX940-NEXT:    ; def s[8:11]
2571 ; GFX940-NEXT:    ;;#ASMEND
2572 ; GFX940-NEXT:    ;;#ASMSTART
2573 ; GFX940-NEXT:    ; def s[0:3]
2574 ; GFX940-NEXT:    ;;#ASMEND
2575 ; GFX940-NEXT:    s_mov_b32 s8, s10
2576 ; GFX940-NEXT:    s_mov_b32 s9, s11
2577 ; GFX940-NEXT:    s_mov_b32 s12, s0
2578 ; GFX940-NEXT:    s_mov_b32 s13, s1
2579 ; GFX940-NEXT:    ;;#ASMSTART
2580 ; GFX940-NEXT:    ; use s[8:13]
2581 ; GFX940-NEXT:    ;;#ASMEND
2582 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2583   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2584   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
2585   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 0>
2586   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2587   ret void
2590 define void @s_shuffle_v3p0_v2p0__3_3_1() {
2591 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_3_1:
2592 ; GFX900:       ; %bb.0:
2593 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2594 ; GFX900-NEXT:    ;;#ASMSTART
2595 ; GFX900-NEXT:    ; def s[8:11]
2596 ; GFX900-NEXT:    ;;#ASMEND
2597 ; GFX900-NEXT:    ;;#ASMSTART
2598 ; GFX900-NEXT:    ; def s[4:7]
2599 ; GFX900-NEXT:    ;;#ASMEND
2600 ; GFX900-NEXT:    s_mov_b32 s8, s10
2601 ; GFX900-NEXT:    s_mov_b32 s9, s11
2602 ; GFX900-NEXT:    s_mov_b32 s12, s6
2603 ; GFX900-NEXT:    s_mov_b32 s13, s7
2604 ; GFX900-NEXT:    ;;#ASMSTART
2605 ; GFX900-NEXT:    ; use s[8:13]
2606 ; GFX900-NEXT:    ;;#ASMEND
2607 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2609 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_3_1:
2610 ; GFX90A:       ; %bb.0:
2611 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2612 ; GFX90A-NEXT:    ;;#ASMSTART
2613 ; GFX90A-NEXT:    ; def s[8:11]
2614 ; GFX90A-NEXT:    ;;#ASMEND
2615 ; GFX90A-NEXT:    ;;#ASMSTART
2616 ; GFX90A-NEXT:    ; def s[4:7]
2617 ; GFX90A-NEXT:    ;;#ASMEND
2618 ; GFX90A-NEXT:    s_mov_b32 s8, s10
2619 ; GFX90A-NEXT:    s_mov_b32 s9, s11
2620 ; GFX90A-NEXT:    s_mov_b32 s12, s6
2621 ; GFX90A-NEXT:    s_mov_b32 s13, s7
2622 ; GFX90A-NEXT:    ;;#ASMSTART
2623 ; GFX90A-NEXT:    ; use s[8:13]
2624 ; GFX90A-NEXT:    ;;#ASMEND
2625 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2627 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_3_1:
2628 ; GFX940:       ; %bb.0:
2629 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2630 ; GFX940-NEXT:    ;;#ASMSTART
2631 ; GFX940-NEXT:    ; def s[8:11]
2632 ; GFX940-NEXT:    ;;#ASMEND
2633 ; GFX940-NEXT:    ;;#ASMSTART
2634 ; GFX940-NEXT:    ; def s[0:3]
2635 ; GFX940-NEXT:    ;;#ASMEND
2636 ; GFX940-NEXT:    s_mov_b32 s8, s10
2637 ; GFX940-NEXT:    s_mov_b32 s9, s11
2638 ; GFX940-NEXT:    s_mov_b32 s12, s2
2639 ; GFX940-NEXT:    s_mov_b32 s13, s3
2640 ; GFX940-NEXT:    ;;#ASMSTART
2641 ; GFX940-NEXT:    ; use s[8:13]
2642 ; GFX940-NEXT:    ;;#ASMEND
2643 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2644   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2645   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
2646   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 1>
2647   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2648   ret void
2651 define void @s_shuffle_v3p0_v2p0__3_3_2() {
2652 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_3_2:
2653 ; GFX900:       ; %bb.0:
2654 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2655 ; GFX900-NEXT:    ;;#ASMSTART
2656 ; GFX900-NEXT:    ; def s[4:7]
2657 ; GFX900-NEXT:    ;;#ASMEND
2658 ; GFX900-NEXT:    s_mov_b32 s8, s6
2659 ; GFX900-NEXT:    s_mov_b32 s9, s7
2660 ; GFX900-NEXT:    s_mov_b32 s10, s6
2661 ; GFX900-NEXT:    s_mov_b32 s11, s7
2662 ; GFX900-NEXT:    s_mov_b32 s12, s4
2663 ; GFX900-NEXT:    s_mov_b32 s13, s5
2664 ; GFX900-NEXT:    ;;#ASMSTART
2665 ; GFX900-NEXT:    ; use s[8:13]
2666 ; GFX900-NEXT:    ;;#ASMEND
2667 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2669 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_3_2:
2670 ; GFX90A:       ; %bb.0:
2671 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2672 ; GFX90A-NEXT:    ;;#ASMSTART
2673 ; GFX90A-NEXT:    ; def s[4:7]
2674 ; GFX90A-NEXT:    ;;#ASMEND
2675 ; GFX90A-NEXT:    s_mov_b32 s8, s6
2676 ; GFX90A-NEXT:    s_mov_b32 s9, s7
2677 ; GFX90A-NEXT:    s_mov_b32 s10, s6
2678 ; GFX90A-NEXT:    s_mov_b32 s11, s7
2679 ; GFX90A-NEXT:    s_mov_b32 s12, s4
2680 ; GFX90A-NEXT:    s_mov_b32 s13, s5
2681 ; GFX90A-NEXT:    ;;#ASMSTART
2682 ; GFX90A-NEXT:    ; use s[8:13]
2683 ; GFX90A-NEXT:    ;;#ASMEND
2684 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2686 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_3_2:
2687 ; GFX940:       ; %bb.0:
2688 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2689 ; GFX940-NEXT:    ;;#ASMSTART
2690 ; GFX940-NEXT:    ; def s[0:3]
2691 ; GFX940-NEXT:    ;;#ASMEND
2692 ; GFX940-NEXT:    s_mov_b32 s8, s2
2693 ; GFX940-NEXT:    s_mov_b32 s9, s3
2694 ; GFX940-NEXT:    s_mov_b32 s10, s2
2695 ; GFX940-NEXT:    s_mov_b32 s11, s3
2696 ; GFX940-NEXT:    s_mov_b32 s12, s0
2697 ; GFX940-NEXT:    s_mov_b32 s13, s1
2698 ; GFX940-NEXT:    ;;#ASMSTART
2699 ; GFX940-NEXT:    ; use s[8:13]
2700 ; GFX940-NEXT:    ;;#ASMEND
2701 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2702   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2703   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
2704   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 2>
2705   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2706   ret void
2709 define void @s_shuffle_v3p0_v2p0__3_3_3() {
2710 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__3_3_3:
2711 ; GFX9:       ; %bb.0:
2712 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2713 ; GFX9-NEXT:    ;;#ASMSTART
2714 ; GFX9-NEXT:    ; def s[8:11]
2715 ; GFX9-NEXT:    ;;#ASMEND
2716 ; GFX9-NEXT:    s_mov_b32 s8, s10
2717 ; GFX9-NEXT:    s_mov_b32 s9, s11
2718 ; GFX9-NEXT:    s_mov_b32 s12, s10
2719 ; GFX9-NEXT:    s_mov_b32 s13, s11
2720 ; GFX9-NEXT:    ;;#ASMSTART
2721 ; GFX9-NEXT:    ; use s[8:13]
2722 ; GFX9-NEXT:    ;;#ASMEND
2723 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2724   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2725   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
2726   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 3, i32 3>
2727   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2728   ret void
2731 define void @s_shuffle_v3p0_v2p0__u_0_0() {
2732 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__u_0_0:
2733 ; GFX900:       ; %bb.0:
2734 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2735 ; GFX900-NEXT:    ;;#ASMSTART
2736 ; GFX900-NEXT:    ; def s[4:7]
2737 ; GFX900-NEXT:    ;;#ASMEND
2738 ; GFX900-NEXT:    s_mov_b32 s10, s4
2739 ; GFX900-NEXT:    s_mov_b32 s11, s5
2740 ; GFX900-NEXT:    s_mov_b32 s12, s4
2741 ; GFX900-NEXT:    s_mov_b32 s13, s5
2742 ; GFX900-NEXT:    ;;#ASMSTART
2743 ; GFX900-NEXT:    ; use s[8:13]
2744 ; GFX900-NEXT:    ;;#ASMEND
2745 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2747 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__u_0_0:
2748 ; GFX90A:       ; %bb.0:
2749 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2750 ; GFX90A-NEXT:    ;;#ASMSTART
2751 ; GFX90A-NEXT:    ; def s[4:7]
2752 ; GFX90A-NEXT:    ;;#ASMEND
2753 ; GFX90A-NEXT:    s_mov_b32 s10, s4
2754 ; GFX90A-NEXT:    s_mov_b32 s11, s5
2755 ; GFX90A-NEXT:    s_mov_b32 s12, s4
2756 ; GFX90A-NEXT:    s_mov_b32 s13, s5
2757 ; GFX90A-NEXT:    ;;#ASMSTART
2758 ; GFX90A-NEXT:    ; use s[8:13]
2759 ; GFX90A-NEXT:    ;;#ASMEND
2760 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2762 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__u_0_0:
2763 ; GFX940:       ; %bb.0:
2764 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2765 ; GFX940-NEXT:    ;;#ASMSTART
2766 ; GFX940-NEXT:    ; def s[0:3]
2767 ; GFX940-NEXT:    ;;#ASMEND
2768 ; GFX940-NEXT:    s_mov_b32 s10, s0
2769 ; GFX940-NEXT:    s_mov_b32 s11, s1
2770 ; GFX940-NEXT:    s_mov_b32 s12, s0
2771 ; GFX940-NEXT:    s_mov_b32 s13, s1
2772 ; GFX940-NEXT:    ;;#ASMSTART
2773 ; GFX940-NEXT:    ; use s[8:13]
2774 ; GFX940-NEXT:    ;;#ASMEND
2775 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2776   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2777   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 0, i32 0>
2778   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2779   ret void
2782 define void @s_shuffle_v3p0_v2p0__0_0_0() {
2783 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__0_0_0:
2784 ; GFX9:       ; %bb.0:
2785 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2786 ; GFX9-NEXT:    ;;#ASMSTART
2787 ; GFX9-NEXT:    ; def s[8:11]
2788 ; GFX9-NEXT:    ;;#ASMEND
2789 ; GFX9-NEXT:    s_mov_b32 s10, s8
2790 ; GFX9-NEXT:    s_mov_b32 s11, s9
2791 ; GFX9-NEXT:    s_mov_b32 s12, s8
2792 ; GFX9-NEXT:    s_mov_b32 s13, s9
2793 ; GFX9-NEXT:    ;;#ASMSTART
2794 ; GFX9-NEXT:    ; use s[8:13]
2795 ; GFX9-NEXT:    ;;#ASMEND
2796 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2797   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2798   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> zeroinitializer
2799   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2800   ret void
2803 define void @s_shuffle_v3p0_v2p0__1_0_0() {
2804 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__1_0_0:
2805 ; GFX900:       ; %bb.0:
2806 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2807 ; GFX900-NEXT:    ;;#ASMSTART
2808 ; GFX900-NEXT:    ; def s[4:7]
2809 ; GFX900-NEXT:    ;;#ASMEND
2810 ; GFX900-NEXT:    s_mov_b32 s8, s6
2811 ; GFX900-NEXT:    s_mov_b32 s9, s7
2812 ; GFX900-NEXT:    s_mov_b32 s10, s4
2813 ; GFX900-NEXT:    s_mov_b32 s11, s5
2814 ; GFX900-NEXT:    s_mov_b32 s12, s4
2815 ; GFX900-NEXT:    s_mov_b32 s13, s5
2816 ; GFX900-NEXT:    ;;#ASMSTART
2817 ; GFX900-NEXT:    ; use s[8:13]
2818 ; GFX900-NEXT:    ;;#ASMEND
2819 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2821 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__1_0_0:
2822 ; GFX90A:       ; %bb.0:
2823 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2824 ; GFX90A-NEXT:    ;;#ASMSTART
2825 ; GFX90A-NEXT:    ; def s[4:7]
2826 ; GFX90A-NEXT:    ;;#ASMEND
2827 ; GFX90A-NEXT:    s_mov_b32 s8, s6
2828 ; GFX90A-NEXT:    s_mov_b32 s9, s7
2829 ; GFX90A-NEXT:    s_mov_b32 s10, s4
2830 ; GFX90A-NEXT:    s_mov_b32 s11, s5
2831 ; GFX90A-NEXT:    s_mov_b32 s12, s4
2832 ; GFX90A-NEXT:    s_mov_b32 s13, s5
2833 ; GFX90A-NEXT:    ;;#ASMSTART
2834 ; GFX90A-NEXT:    ; use s[8:13]
2835 ; GFX90A-NEXT:    ;;#ASMEND
2836 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2838 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__1_0_0:
2839 ; GFX940:       ; %bb.0:
2840 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2841 ; GFX940-NEXT:    ;;#ASMSTART
2842 ; GFX940-NEXT:    ; def s[0:3]
2843 ; GFX940-NEXT:    ;;#ASMEND
2844 ; GFX940-NEXT:    s_mov_b32 s8, s2
2845 ; GFX940-NEXT:    s_mov_b32 s9, s3
2846 ; GFX940-NEXT:    s_mov_b32 s10, s0
2847 ; GFX940-NEXT:    s_mov_b32 s11, s1
2848 ; GFX940-NEXT:    s_mov_b32 s12, s0
2849 ; GFX940-NEXT:    s_mov_b32 s13, s1
2850 ; GFX940-NEXT:    ;;#ASMSTART
2851 ; GFX940-NEXT:    ; use s[8:13]
2852 ; GFX940-NEXT:    ;;#ASMEND
2853 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2854   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2855   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 0, i32 0>
2856   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2857   ret void
2860 define void @s_shuffle_v3p0_v2p0__2_0_0() {
2861 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__2_0_0:
2862 ; GFX900:       ; %bb.0:
2863 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2864 ; GFX900-NEXT:    ;;#ASMSTART
2865 ; GFX900-NEXT:    ; def s[4:7]
2866 ; GFX900-NEXT:    ;;#ASMEND
2867 ; GFX900-NEXT:    s_mov_b32 s10, s4
2868 ; GFX900-NEXT:    s_mov_b32 s11, s5
2869 ; GFX900-NEXT:    s_mov_b32 s12, s4
2870 ; GFX900-NEXT:    s_mov_b32 s13, s5
2871 ; GFX900-NEXT:    ;;#ASMSTART
2872 ; GFX900-NEXT:    ; use s[8:13]
2873 ; GFX900-NEXT:    ;;#ASMEND
2874 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2876 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__2_0_0:
2877 ; GFX90A:       ; %bb.0:
2878 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2879 ; GFX90A-NEXT:    ;;#ASMSTART
2880 ; GFX90A-NEXT:    ; def s[4:7]
2881 ; GFX90A-NEXT:    ;;#ASMEND
2882 ; GFX90A-NEXT:    s_mov_b32 s10, s4
2883 ; GFX90A-NEXT:    s_mov_b32 s11, s5
2884 ; GFX90A-NEXT:    s_mov_b32 s12, s4
2885 ; GFX90A-NEXT:    s_mov_b32 s13, s5
2886 ; GFX90A-NEXT:    ;;#ASMSTART
2887 ; GFX90A-NEXT:    ; use s[8:13]
2888 ; GFX90A-NEXT:    ;;#ASMEND
2889 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2891 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__2_0_0:
2892 ; GFX940:       ; %bb.0:
2893 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2894 ; GFX940-NEXT:    ;;#ASMSTART
2895 ; GFX940-NEXT:    ; def s[0:3]
2896 ; GFX940-NEXT:    ;;#ASMEND
2897 ; GFX940-NEXT:    s_mov_b32 s10, s0
2898 ; GFX940-NEXT:    s_mov_b32 s11, s1
2899 ; GFX940-NEXT:    s_mov_b32 s12, s0
2900 ; GFX940-NEXT:    s_mov_b32 s13, s1
2901 ; GFX940-NEXT:    ;;#ASMSTART
2902 ; GFX940-NEXT:    ; use s[8:13]
2903 ; GFX940-NEXT:    ;;#ASMEND
2904 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2905   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2906   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 0, i32 0>
2907   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2908   ret void
2911 define void @s_shuffle_v3p0_v2p0__3_0_0() {
2912 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_0_0:
2913 ; GFX900:       ; %bb.0:
2914 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2915 ; GFX900-NEXT:    ;;#ASMSTART
2916 ; GFX900-NEXT:    ; def s[8:11]
2917 ; GFX900-NEXT:    ;;#ASMEND
2918 ; GFX900-NEXT:    ;;#ASMSTART
2919 ; GFX900-NEXT:    ; def s[4:7]
2920 ; GFX900-NEXT:    ;;#ASMEND
2921 ; GFX900-NEXT:    s_mov_b32 s8, s10
2922 ; GFX900-NEXT:    s_mov_b32 s9, s11
2923 ; GFX900-NEXT:    s_mov_b32 s10, s4
2924 ; GFX900-NEXT:    s_mov_b32 s11, s5
2925 ; GFX900-NEXT:    s_mov_b32 s12, s4
2926 ; GFX900-NEXT:    s_mov_b32 s13, s5
2927 ; GFX900-NEXT:    ;;#ASMSTART
2928 ; GFX900-NEXT:    ; use s[8:13]
2929 ; GFX900-NEXT:    ;;#ASMEND
2930 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2932 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_0_0:
2933 ; GFX90A:       ; %bb.0:
2934 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2935 ; GFX90A-NEXT:    ;;#ASMSTART
2936 ; GFX90A-NEXT:    ; def s[8:11]
2937 ; GFX90A-NEXT:    ;;#ASMEND
2938 ; GFX90A-NEXT:    ;;#ASMSTART
2939 ; GFX90A-NEXT:    ; def s[4:7]
2940 ; GFX90A-NEXT:    ;;#ASMEND
2941 ; GFX90A-NEXT:    s_mov_b32 s8, s10
2942 ; GFX90A-NEXT:    s_mov_b32 s9, s11
2943 ; GFX90A-NEXT:    s_mov_b32 s10, s4
2944 ; GFX90A-NEXT:    s_mov_b32 s11, s5
2945 ; GFX90A-NEXT:    s_mov_b32 s12, s4
2946 ; GFX90A-NEXT:    s_mov_b32 s13, s5
2947 ; GFX90A-NEXT:    ;;#ASMSTART
2948 ; GFX90A-NEXT:    ; use s[8:13]
2949 ; GFX90A-NEXT:    ;;#ASMEND
2950 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2952 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_0_0:
2953 ; GFX940:       ; %bb.0:
2954 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2955 ; GFX940-NEXT:    ;;#ASMSTART
2956 ; GFX940-NEXT:    ; def s[0:3]
2957 ; GFX940-NEXT:    ;;#ASMEND
2958 ; GFX940-NEXT:    ;;#ASMSTART
2959 ; GFX940-NEXT:    ; def s[4:7]
2960 ; GFX940-NEXT:    ;;#ASMEND
2961 ; GFX940-NEXT:    s_mov_b32 s8, s6
2962 ; GFX940-NEXT:    s_mov_b32 s9, s7
2963 ; GFX940-NEXT:    s_mov_b32 s10, s0
2964 ; GFX940-NEXT:    s_mov_b32 s11, s1
2965 ; GFX940-NEXT:    s_mov_b32 s12, s0
2966 ; GFX940-NEXT:    s_mov_b32 s13, s1
2967 ; GFX940-NEXT:    ;;#ASMSTART
2968 ; GFX940-NEXT:    ; use s[8:13]
2969 ; GFX940-NEXT:    ;;#ASMEND
2970 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2971   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
2972   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
2973   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 0>
2974   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
2975   ret void
2978 define void @s_shuffle_v3p0_v2p0__3_u_0() {
2979 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_u_0:
2980 ; GFX900:       ; %bb.0:
2981 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2982 ; GFX900-NEXT:    ;;#ASMSTART
2983 ; GFX900-NEXT:    ; def s[8:11]
2984 ; GFX900-NEXT:    ;;#ASMEND
2985 ; GFX900-NEXT:    ;;#ASMSTART
2986 ; GFX900-NEXT:    ; def s[4:7]
2987 ; GFX900-NEXT:    ;;#ASMEND
2988 ; GFX900-NEXT:    s_mov_b32 s8, s10
2989 ; GFX900-NEXT:    s_mov_b32 s9, s11
2990 ; GFX900-NEXT:    s_mov_b32 s12, s4
2991 ; GFX900-NEXT:    s_mov_b32 s13, s5
2992 ; GFX900-NEXT:    ;;#ASMSTART
2993 ; GFX900-NEXT:    ; use s[8:13]
2994 ; GFX900-NEXT:    ;;#ASMEND
2995 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2997 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_u_0:
2998 ; GFX90A:       ; %bb.0:
2999 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3000 ; GFX90A-NEXT:    ;;#ASMSTART
3001 ; GFX90A-NEXT:    ; def s[8:11]
3002 ; GFX90A-NEXT:    ;;#ASMEND
3003 ; GFX90A-NEXT:    ;;#ASMSTART
3004 ; GFX90A-NEXT:    ; def s[4:7]
3005 ; GFX90A-NEXT:    ;;#ASMEND
3006 ; GFX90A-NEXT:    s_mov_b32 s8, s10
3007 ; GFX90A-NEXT:    s_mov_b32 s9, s11
3008 ; GFX90A-NEXT:    s_mov_b32 s12, s4
3009 ; GFX90A-NEXT:    s_mov_b32 s13, s5
3010 ; GFX90A-NEXT:    ;;#ASMSTART
3011 ; GFX90A-NEXT:    ; use s[8:13]
3012 ; GFX90A-NEXT:    ;;#ASMEND
3013 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3015 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_u_0:
3016 ; GFX940:       ; %bb.0:
3017 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3018 ; GFX940-NEXT:    ;;#ASMSTART
3019 ; GFX940-NEXT:    ; def s[0:3]
3020 ; GFX940-NEXT:    ;;#ASMEND
3021 ; GFX940-NEXT:    ;;#ASMSTART
3022 ; GFX940-NEXT:    ; def s[4:7]
3023 ; GFX940-NEXT:    ;;#ASMEND
3024 ; GFX940-NEXT:    s_mov_b32 s8, s6
3025 ; GFX940-NEXT:    s_mov_b32 s9, s7
3026 ; GFX940-NEXT:    s_mov_b32 s12, s0
3027 ; GFX940-NEXT:    s_mov_b32 s13, s1
3028 ; GFX940-NEXT:    ;;#ASMSTART
3029 ; GFX940-NEXT:    ; use s[8:13]
3030 ; GFX940-NEXT:    ;;#ASMEND
3031 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3032   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3033   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3034   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 0>
3035   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3036   ret void
3039 define void @s_shuffle_v3p0_v2p0__3_1_0() {
3040 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_1_0:
3041 ; GFX900:       ; %bb.0:
3042 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3043 ; GFX900-NEXT:    ;;#ASMSTART
3044 ; GFX900-NEXT:    ; def s[8:11]
3045 ; GFX900-NEXT:    ;;#ASMEND
3046 ; GFX900-NEXT:    ;;#ASMSTART
3047 ; GFX900-NEXT:    ; def s[4:7]
3048 ; GFX900-NEXT:    ;;#ASMEND
3049 ; GFX900-NEXT:    s_mov_b32 s8, s10
3050 ; GFX900-NEXT:    s_mov_b32 s9, s11
3051 ; GFX900-NEXT:    s_mov_b32 s10, s6
3052 ; GFX900-NEXT:    s_mov_b32 s11, s7
3053 ; GFX900-NEXT:    s_mov_b32 s12, s4
3054 ; GFX900-NEXT:    s_mov_b32 s13, s5
3055 ; GFX900-NEXT:    ;;#ASMSTART
3056 ; GFX900-NEXT:    ; use s[8:13]
3057 ; GFX900-NEXT:    ;;#ASMEND
3058 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3060 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_1_0:
3061 ; GFX90A:       ; %bb.0:
3062 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3063 ; GFX90A-NEXT:    ;;#ASMSTART
3064 ; GFX90A-NEXT:    ; def s[8:11]
3065 ; GFX90A-NEXT:    ;;#ASMEND
3066 ; GFX90A-NEXT:    ;;#ASMSTART
3067 ; GFX90A-NEXT:    ; def s[4:7]
3068 ; GFX90A-NEXT:    ;;#ASMEND
3069 ; GFX90A-NEXT:    s_mov_b32 s8, s10
3070 ; GFX90A-NEXT:    s_mov_b32 s9, s11
3071 ; GFX90A-NEXT:    s_mov_b32 s10, s6
3072 ; GFX90A-NEXT:    s_mov_b32 s11, s7
3073 ; GFX90A-NEXT:    s_mov_b32 s12, s4
3074 ; GFX90A-NEXT:    s_mov_b32 s13, s5
3075 ; GFX90A-NEXT:    ;;#ASMSTART
3076 ; GFX90A-NEXT:    ; use s[8:13]
3077 ; GFX90A-NEXT:    ;;#ASMEND
3078 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3080 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_1_0:
3081 ; GFX940:       ; %bb.0:
3082 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3083 ; GFX940-NEXT:    ;;#ASMSTART
3084 ; GFX940-NEXT:    ; def s[0:3]
3085 ; GFX940-NEXT:    ;;#ASMEND
3086 ; GFX940-NEXT:    ;;#ASMSTART
3087 ; GFX940-NEXT:    ; def s[4:7]
3088 ; GFX940-NEXT:    ;;#ASMEND
3089 ; GFX940-NEXT:    s_mov_b32 s8, s6
3090 ; GFX940-NEXT:    s_mov_b32 s9, s7
3091 ; GFX940-NEXT:    s_mov_b32 s10, s2
3092 ; GFX940-NEXT:    s_mov_b32 s11, s3
3093 ; GFX940-NEXT:    s_mov_b32 s12, s0
3094 ; GFX940-NEXT:    s_mov_b32 s13, s1
3095 ; GFX940-NEXT:    ;;#ASMSTART
3096 ; GFX940-NEXT:    ; use s[8:13]
3097 ; GFX940-NEXT:    ;;#ASMEND
3098 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3099   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3100   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3101   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 0>
3102   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3103   ret void
3106 define void @s_shuffle_v3p0_v2p0__3_2_0() {
3107 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_2_0:
3108 ; GFX900:       ; %bb.0:
3109 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3110 ; GFX900-NEXT:    ;;#ASMSTART
3111 ; GFX900-NEXT:    ; def s[12:15]
3112 ; GFX900-NEXT:    ;;#ASMEND
3113 ; GFX900-NEXT:    ;;#ASMSTART
3114 ; GFX900-NEXT:    ; def s[4:7]
3115 ; GFX900-NEXT:    ;;#ASMEND
3116 ; GFX900-NEXT:    s_mov_b32 s8, s14
3117 ; GFX900-NEXT:    s_mov_b32 s9, s15
3118 ; GFX900-NEXT:    s_mov_b32 s10, s12
3119 ; GFX900-NEXT:    s_mov_b32 s11, s13
3120 ; GFX900-NEXT:    s_mov_b32 s12, s4
3121 ; GFX900-NEXT:    s_mov_b32 s13, s5
3122 ; GFX900-NEXT:    ;;#ASMSTART
3123 ; GFX900-NEXT:    ; use s[8:13]
3124 ; GFX900-NEXT:    ;;#ASMEND
3125 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3127 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_2_0:
3128 ; GFX90A:       ; %bb.0:
3129 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3130 ; GFX90A-NEXT:    ;;#ASMSTART
3131 ; GFX90A-NEXT:    ; def s[12:15]
3132 ; GFX90A-NEXT:    ;;#ASMEND
3133 ; GFX90A-NEXT:    ;;#ASMSTART
3134 ; GFX90A-NEXT:    ; def s[4:7]
3135 ; GFX90A-NEXT:    ;;#ASMEND
3136 ; GFX90A-NEXT:    s_mov_b32 s8, s14
3137 ; GFX90A-NEXT:    s_mov_b32 s9, s15
3138 ; GFX90A-NEXT:    s_mov_b32 s10, s12
3139 ; GFX90A-NEXT:    s_mov_b32 s11, s13
3140 ; GFX90A-NEXT:    s_mov_b32 s12, s4
3141 ; GFX90A-NEXT:    s_mov_b32 s13, s5
3142 ; GFX90A-NEXT:    ;;#ASMSTART
3143 ; GFX90A-NEXT:    ; use s[8:13]
3144 ; GFX90A-NEXT:    ;;#ASMEND
3145 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3147 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_2_0:
3148 ; GFX940:       ; %bb.0:
3149 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3150 ; GFX940-NEXT:    ;;#ASMSTART
3151 ; GFX940-NEXT:    ; def s[0:3]
3152 ; GFX940-NEXT:    ;;#ASMEND
3153 ; GFX940-NEXT:    ;;#ASMSTART
3154 ; GFX940-NEXT:    ; def s[4:7]
3155 ; GFX940-NEXT:    ;;#ASMEND
3156 ; GFX940-NEXT:    s_mov_b32 s8, s6
3157 ; GFX940-NEXT:    s_mov_b32 s9, s7
3158 ; GFX940-NEXT:    s_mov_b32 s10, s4
3159 ; GFX940-NEXT:    s_mov_b32 s11, s5
3160 ; GFX940-NEXT:    s_mov_b32 s12, s0
3161 ; GFX940-NEXT:    s_mov_b32 s13, s1
3162 ; GFX940-NEXT:    ;;#ASMSTART
3163 ; GFX940-NEXT:    ; use s[8:13]
3164 ; GFX940-NEXT:    ;;#ASMEND
3165 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3166   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3167   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3168   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 0>
3169   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3170   ret void
3173 define void @s_shuffle_v3p0_v2p0__u_1_1() {
3174 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_1_1:
3175 ; GFX9:       ; %bb.0:
3176 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3177 ; GFX9-NEXT:    ;;#ASMSTART
3178 ; GFX9-NEXT:    ; def s[8:11]
3179 ; GFX9-NEXT:    ;;#ASMEND
3180 ; GFX9-NEXT:    s_mov_b32 s12, s10
3181 ; GFX9-NEXT:    s_mov_b32 s13, s11
3182 ; GFX9-NEXT:    ;;#ASMSTART
3183 ; GFX9-NEXT:    ; use s[8:13]
3184 ; GFX9-NEXT:    ;;#ASMEND
3185 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3186   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3187   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 1, i32 1>
3188   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3189   ret void
3192 define void @s_shuffle_v3p0_v2p0__0_1_1() {
3193 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__0_1_1:
3194 ; GFX9:       ; %bb.0:
3195 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3196 ; GFX9-NEXT:    ;;#ASMSTART
3197 ; GFX9-NEXT:    ; def s[8:11]
3198 ; GFX9-NEXT:    ;;#ASMEND
3199 ; GFX9-NEXT:    s_mov_b32 s12, s10
3200 ; GFX9-NEXT:    s_mov_b32 s13, s11
3201 ; GFX9-NEXT:    ;;#ASMSTART
3202 ; GFX9-NEXT:    ; use s[8:13]
3203 ; GFX9-NEXT:    ;;#ASMEND
3204 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3205   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3206   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 1, i32 1>
3207   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3208   ret void
3211 define void @s_shuffle_v3p0_v2p0__1_1_1() {
3212 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__1_1_1:
3213 ; GFX9:       ; %bb.0:
3214 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3215 ; GFX9-NEXT:    ;;#ASMSTART
3216 ; GFX9-NEXT:    ; def s[8:11]
3217 ; GFX9-NEXT:    ;;#ASMEND
3218 ; GFX9-NEXT:    s_mov_b32 s8, s10
3219 ; GFX9-NEXT:    s_mov_b32 s9, s11
3220 ; GFX9-NEXT:    s_mov_b32 s12, s10
3221 ; GFX9-NEXT:    s_mov_b32 s13, s11
3222 ; GFX9-NEXT:    ;;#ASMSTART
3223 ; GFX9-NEXT:    ; use s[8:13]
3224 ; GFX9-NEXT:    ;;#ASMEND
3225 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3226   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3227   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 1, i32 1>
3228   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3229   ret void
3232 define void @s_shuffle_v3p0_v2p0__2_1_1() {
3233 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_1_1:
3234 ; GFX9:       ; %bb.0:
3235 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3236 ; GFX9-NEXT:    ;;#ASMSTART
3237 ; GFX9-NEXT:    ; def s[8:11]
3238 ; GFX9-NEXT:    ;;#ASMEND
3239 ; GFX9-NEXT:    s_mov_b32 s12, s10
3240 ; GFX9-NEXT:    s_mov_b32 s13, s11
3241 ; GFX9-NEXT:    ;;#ASMSTART
3242 ; GFX9-NEXT:    ; use s[8:13]
3243 ; GFX9-NEXT:    ;;#ASMEND
3244 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3245   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3246   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 1, i32 1>
3247   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3248   ret void
3251 define void @s_shuffle_v3p0_v2p0__3_1_1() {
3252 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_1_1:
3253 ; GFX900:       ; %bb.0:
3254 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3255 ; GFX900-NEXT:    ;;#ASMSTART
3256 ; GFX900-NEXT:    ; def s[8:11]
3257 ; GFX900-NEXT:    ;;#ASMEND
3258 ; GFX900-NEXT:    ;;#ASMSTART
3259 ; GFX900-NEXT:    ; def s[4:7]
3260 ; GFX900-NEXT:    ;;#ASMEND
3261 ; GFX900-NEXT:    s_mov_b32 s8, s6
3262 ; GFX900-NEXT:    s_mov_b32 s9, s7
3263 ; GFX900-NEXT:    s_mov_b32 s12, s10
3264 ; GFX900-NEXT:    s_mov_b32 s13, s11
3265 ; GFX900-NEXT:    ;;#ASMSTART
3266 ; GFX900-NEXT:    ; use s[8:13]
3267 ; GFX900-NEXT:    ;;#ASMEND
3268 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3270 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_1_1:
3271 ; GFX90A:       ; %bb.0:
3272 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3273 ; GFX90A-NEXT:    ;;#ASMSTART
3274 ; GFX90A-NEXT:    ; def s[8:11]
3275 ; GFX90A-NEXT:    ;;#ASMEND
3276 ; GFX90A-NEXT:    ;;#ASMSTART
3277 ; GFX90A-NEXT:    ; def s[4:7]
3278 ; GFX90A-NEXT:    ;;#ASMEND
3279 ; GFX90A-NEXT:    s_mov_b32 s8, s6
3280 ; GFX90A-NEXT:    s_mov_b32 s9, s7
3281 ; GFX90A-NEXT:    s_mov_b32 s12, s10
3282 ; GFX90A-NEXT:    s_mov_b32 s13, s11
3283 ; GFX90A-NEXT:    ;;#ASMSTART
3284 ; GFX90A-NEXT:    ; use s[8:13]
3285 ; GFX90A-NEXT:    ;;#ASMEND
3286 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3288 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_1_1:
3289 ; GFX940:       ; %bb.0:
3290 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3291 ; GFX940-NEXT:    ;;#ASMSTART
3292 ; GFX940-NEXT:    ; def s[8:11]
3293 ; GFX940-NEXT:    ;;#ASMEND
3294 ; GFX940-NEXT:    ;;#ASMSTART
3295 ; GFX940-NEXT:    ; def s[0:3]
3296 ; GFX940-NEXT:    ;;#ASMEND
3297 ; GFX940-NEXT:    s_mov_b32 s8, s2
3298 ; GFX940-NEXT:    s_mov_b32 s9, s3
3299 ; GFX940-NEXT:    s_mov_b32 s12, s10
3300 ; GFX940-NEXT:    s_mov_b32 s13, s11
3301 ; GFX940-NEXT:    ;;#ASMSTART
3302 ; GFX940-NEXT:    ; use s[8:13]
3303 ; GFX940-NEXT:    ;;#ASMEND
3304 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3305   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3306   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3307   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 1>
3308   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3309   ret void
3312 define void @s_shuffle_v3p0_v2p0__3_u_1() {
3313 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_u_1:
3314 ; GFX900:       ; %bb.0:
3315 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3316 ; GFX900-NEXT:    ;;#ASMSTART
3317 ; GFX900-NEXT:    ; def s[8:11]
3318 ; GFX900-NEXT:    ;;#ASMEND
3319 ; GFX900-NEXT:    ;;#ASMSTART
3320 ; GFX900-NEXT:    ; def s[4:7]
3321 ; GFX900-NEXT:    ;;#ASMEND
3322 ; GFX900-NEXT:    s_mov_b32 s8, s10
3323 ; GFX900-NEXT:    s_mov_b32 s9, s11
3324 ; GFX900-NEXT:    s_mov_b32 s12, s6
3325 ; GFX900-NEXT:    s_mov_b32 s13, s7
3326 ; GFX900-NEXT:    ;;#ASMSTART
3327 ; GFX900-NEXT:    ; use s[8:13]
3328 ; GFX900-NEXT:    ;;#ASMEND
3329 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3331 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_u_1:
3332 ; GFX90A:       ; %bb.0:
3333 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3334 ; GFX90A-NEXT:    ;;#ASMSTART
3335 ; GFX90A-NEXT:    ; def s[8:11]
3336 ; GFX90A-NEXT:    ;;#ASMEND
3337 ; GFX90A-NEXT:    ;;#ASMSTART
3338 ; GFX90A-NEXT:    ; def s[4:7]
3339 ; GFX90A-NEXT:    ;;#ASMEND
3340 ; GFX90A-NEXT:    s_mov_b32 s8, s10
3341 ; GFX90A-NEXT:    s_mov_b32 s9, s11
3342 ; GFX90A-NEXT:    s_mov_b32 s12, s6
3343 ; GFX90A-NEXT:    s_mov_b32 s13, s7
3344 ; GFX90A-NEXT:    ;;#ASMSTART
3345 ; GFX90A-NEXT:    ; use s[8:13]
3346 ; GFX90A-NEXT:    ;;#ASMEND
3347 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3349 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_u_1:
3350 ; GFX940:       ; %bb.0:
3351 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3352 ; GFX940-NEXT:    ;;#ASMSTART
3353 ; GFX940-NEXT:    ; def s[0:3]
3354 ; GFX940-NEXT:    ;;#ASMEND
3355 ; GFX940-NEXT:    ;;#ASMSTART
3356 ; GFX940-NEXT:    ; def s[4:7]
3357 ; GFX940-NEXT:    ;;#ASMEND
3358 ; GFX940-NEXT:    s_mov_b32 s8, s6
3359 ; GFX940-NEXT:    s_mov_b32 s9, s7
3360 ; GFX940-NEXT:    s_mov_b32 s12, s2
3361 ; GFX940-NEXT:    s_mov_b32 s13, s3
3362 ; GFX940-NEXT:    ;;#ASMSTART
3363 ; GFX940-NEXT:    ; use s[8:13]
3364 ; GFX940-NEXT:    ;;#ASMEND
3365 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3366   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3367   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3368   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 1>
3369   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3370   ret void
3373 define void @s_shuffle_v3p0_v2p0__3_0_1() {
3374 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_0_1:
3375 ; GFX900:       ; %bb.0:
3376 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3377 ; GFX900-NEXT:    ;;#ASMSTART
3378 ; GFX900-NEXT:    ; def s[8:11]
3379 ; GFX900-NEXT:    ;;#ASMEND
3380 ; GFX900-NEXT:    ;;#ASMSTART
3381 ; GFX900-NEXT:    ; def s[4:7]
3382 ; GFX900-NEXT:    ;;#ASMEND
3383 ; GFX900-NEXT:    s_mov_b32 s8, s10
3384 ; GFX900-NEXT:    s_mov_b32 s9, s11
3385 ; GFX900-NEXT:    s_mov_b32 s10, s4
3386 ; GFX900-NEXT:    s_mov_b32 s11, s5
3387 ; GFX900-NEXT:    s_mov_b32 s12, s6
3388 ; GFX900-NEXT:    s_mov_b32 s13, s7
3389 ; GFX900-NEXT:    ;;#ASMSTART
3390 ; GFX900-NEXT:    ; use s[8:13]
3391 ; GFX900-NEXT:    ;;#ASMEND
3392 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3394 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_0_1:
3395 ; GFX90A:       ; %bb.0:
3396 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3397 ; GFX90A-NEXT:    ;;#ASMSTART
3398 ; GFX90A-NEXT:    ; def s[8:11]
3399 ; GFX90A-NEXT:    ;;#ASMEND
3400 ; GFX90A-NEXT:    ;;#ASMSTART
3401 ; GFX90A-NEXT:    ; def s[4:7]
3402 ; GFX90A-NEXT:    ;;#ASMEND
3403 ; GFX90A-NEXT:    s_mov_b32 s8, s10
3404 ; GFX90A-NEXT:    s_mov_b32 s9, s11
3405 ; GFX90A-NEXT:    s_mov_b32 s10, s4
3406 ; GFX90A-NEXT:    s_mov_b32 s11, s5
3407 ; GFX90A-NEXT:    s_mov_b32 s12, s6
3408 ; GFX90A-NEXT:    s_mov_b32 s13, s7
3409 ; GFX90A-NEXT:    ;;#ASMSTART
3410 ; GFX90A-NEXT:    ; use s[8:13]
3411 ; GFX90A-NEXT:    ;;#ASMEND
3412 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3414 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_0_1:
3415 ; GFX940:       ; %bb.0:
3416 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3417 ; GFX940-NEXT:    ;;#ASMSTART
3418 ; GFX940-NEXT:    ; def s[0:3]
3419 ; GFX940-NEXT:    ;;#ASMEND
3420 ; GFX940-NEXT:    ;;#ASMSTART
3421 ; GFX940-NEXT:    ; def s[4:7]
3422 ; GFX940-NEXT:    ;;#ASMEND
3423 ; GFX940-NEXT:    s_mov_b32 s8, s6
3424 ; GFX940-NEXT:    s_mov_b32 s9, s7
3425 ; GFX940-NEXT:    s_mov_b32 s10, s0
3426 ; GFX940-NEXT:    s_mov_b32 s11, s1
3427 ; GFX940-NEXT:    s_mov_b32 s12, s2
3428 ; GFX940-NEXT:    s_mov_b32 s13, s3
3429 ; GFX940-NEXT:    ;;#ASMSTART
3430 ; GFX940-NEXT:    ; use s[8:13]
3431 ; GFX940-NEXT:    ;;#ASMEND
3432 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3433   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3434   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3435   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 1>
3436   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3437   ret void
3440 define void @s_shuffle_v3p0_v2p0__3_2_1() {
3441 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_2_1:
3442 ; GFX900:       ; %bb.0:
3443 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3444 ; GFX900-NEXT:    ;;#ASMSTART
3445 ; GFX900-NEXT:    ; def s[12:15]
3446 ; GFX900-NEXT:    ;;#ASMEND
3447 ; GFX900-NEXT:    ;;#ASMSTART
3448 ; GFX900-NEXT:    ; def s[4:7]
3449 ; GFX900-NEXT:    ;;#ASMEND
3450 ; GFX900-NEXT:    s_mov_b32 s8, s14
3451 ; GFX900-NEXT:    s_mov_b32 s9, s15
3452 ; GFX900-NEXT:    s_mov_b32 s10, s12
3453 ; GFX900-NEXT:    s_mov_b32 s11, s13
3454 ; GFX900-NEXT:    s_mov_b32 s12, s6
3455 ; GFX900-NEXT:    s_mov_b32 s13, s7
3456 ; GFX900-NEXT:    ;;#ASMSTART
3457 ; GFX900-NEXT:    ; use s[8:13]
3458 ; GFX900-NEXT:    ;;#ASMEND
3459 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3461 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_2_1:
3462 ; GFX90A:       ; %bb.0:
3463 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3464 ; GFX90A-NEXT:    ;;#ASMSTART
3465 ; GFX90A-NEXT:    ; def s[12:15]
3466 ; GFX90A-NEXT:    ;;#ASMEND
3467 ; GFX90A-NEXT:    ;;#ASMSTART
3468 ; GFX90A-NEXT:    ; def s[4:7]
3469 ; GFX90A-NEXT:    ;;#ASMEND
3470 ; GFX90A-NEXT:    s_mov_b32 s8, s14
3471 ; GFX90A-NEXT:    s_mov_b32 s9, s15
3472 ; GFX90A-NEXT:    s_mov_b32 s10, s12
3473 ; GFX90A-NEXT:    s_mov_b32 s11, s13
3474 ; GFX90A-NEXT:    s_mov_b32 s12, s6
3475 ; GFX90A-NEXT:    s_mov_b32 s13, s7
3476 ; GFX90A-NEXT:    ;;#ASMSTART
3477 ; GFX90A-NEXT:    ; use s[8:13]
3478 ; GFX90A-NEXT:    ;;#ASMEND
3479 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3481 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_2_1:
3482 ; GFX940:       ; %bb.0:
3483 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3484 ; GFX940-NEXT:    ;;#ASMSTART
3485 ; GFX940-NEXT:    ; def s[0:3]
3486 ; GFX940-NEXT:    ;;#ASMEND
3487 ; GFX940-NEXT:    ;;#ASMSTART
3488 ; GFX940-NEXT:    ; def s[4:7]
3489 ; GFX940-NEXT:    ;;#ASMEND
3490 ; GFX940-NEXT:    s_mov_b32 s8, s6
3491 ; GFX940-NEXT:    s_mov_b32 s9, s7
3492 ; GFX940-NEXT:    s_mov_b32 s10, s4
3493 ; GFX940-NEXT:    s_mov_b32 s11, s5
3494 ; GFX940-NEXT:    s_mov_b32 s12, s2
3495 ; GFX940-NEXT:    s_mov_b32 s13, s3
3496 ; GFX940-NEXT:    ;;#ASMSTART
3497 ; GFX940-NEXT:    ; use s[8:13]
3498 ; GFX940-NEXT:    ;;#ASMEND
3499 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3500   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3501   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3502   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 1>
3503   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3504   ret void
3507 define void @s_shuffle_v3p0_v2p0__u_2_2() {
3508 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_2_2:
3509 ; GFX9:       ; %bb.0:
3510 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3511 ; GFX9-NEXT:    ;;#ASMSTART
3512 ; GFX9-NEXT:    ; use s[8:13]
3513 ; GFX9-NEXT:    ;;#ASMEND
3514 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3515   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3516   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 poison, i32 2, i32 2>
3517   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3518   ret void
3521 define void @s_shuffle_v3p0_v2p0__0_2_2() {
3522 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__0_2_2:
3523 ; GFX900:       ; %bb.0:
3524 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3525 ; GFX900-NEXT:    ;;#ASMSTART
3526 ; GFX900-NEXT:    ; def s[8:11]
3527 ; GFX900-NEXT:    ;;#ASMEND
3528 ; GFX900-NEXT:    ;;#ASMSTART
3529 ; GFX900-NEXT:    ; use s[8:13]
3530 ; GFX900-NEXT:    ;;#ASMEND
3531 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3533 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__0_2_2:
3534 ; GFX90A:       ; %bb.0:
3535 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3536 ; GFX90A-NEXT:    ;;#ASMSTART
3537 ; GFX90A-NEXT:    ; def s[8:11]
3538 ; GFX90A-NEXT:    ;;#ASMEND
3539 ; GFX90A-NEXT:    ;;#ASMSTART
3540 ; GFX90A-NEXT:    ; use s[8:13]
3541 ; GFX90A-NEXT:    ;;#ASMEND
3542 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3544 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__0_2_2:
3545 ; GFX940:       ; %bb.0:
3546 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3547 ; GFX940-NEXT:    ;;#ASMSTART
3548 ; GFX940-NEXT:    ; def s[8:11]
3549 ; GFX940-NEXT:    ;;#ASMEND
3550 ; GFX940-NEXT:    s_nop 0
3551 ; GFX940-NEXT:    ;;#ASMSTART
3552 ; GFX940-NEXT:    ; use s[8:13]
3553 ; GFX940-NEXT:    ;;#ASMEND
3554 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3555   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3556   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 0, i32 2, i32 2>
3557   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3558   ret void
3561 define void @s_shuffle_v3p0_v2p0__1_2_2() {
3562 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__1_2_2:
3563 ; GFX900:       ; %bb.0:
3564 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3565 ; GFX900-NEXT:    ;;#ASMSTART
3566 ; GFX900-NEXT:    ; def s[4:7]
3567 ; GFX900-NEXT:    ;;#ASMEND
3568 ; GFX900-NEXT:    s_mov_b32 s8, s6
3569 ; GFX900-NEXT:    s_mov_b32 s9, s7
3570 ; GFX900-NEXT:    ;;#ASMSTART
3571 ; GFX900-NEXT:    ; use s[8:13]
3572 ; GFX900-NEXT:    ;;#ASMEND
3573 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3575 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__1_2_2:
3576 ; GFX90A:       ; %bb.0:
3577 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3578 ; GFX90A-NEXT:    ;;#ASMSTART
3579 ; GFX90A-NEXT:    ; def s[4:7]
3580 ; GFX90A-NEXT:    ;;#ASMEND
3581 ; GFX90A-NEXT:    s_mov_b32 s8, s6
3582 ; GFX90A-NEXT:    s_mov_b32 s9, s7
3583 ; GFX90A-NEXT:    ;;#ASMSTART
3584 ; GFX90A-NEXT:    ; use s[8:13]
3585 ; GFX90A-NEXT:    ;;#ASMEND
3586 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3588 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__1_2_2:
3589 ; GFX940:       ; %bb.0:
3590 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3591 ; GFX940-NEXT:    ;;#ASMSTART
3592 ; GFX940-NEXT:    ; def s[0:3]
3593 ; GFX940-NEXT:    ;;#ASMEND
3594 ; GFX940-NEXT:    s_mov_b32 s8, s2
3595 ; GFX940-NEXT:    s_mov_b32 s9, s3
3596 ; GFX940-NEXT:    ;;#ASMSTART
3597 ; GFX940-NEXT:    ; use s[8:13]
3598 ; GFX940-NEXT:    ;;#ASMEND
3599 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3600   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3601   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 1, i32 2, i32 2>
3602   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3603   ret void
3606 define void @s_shuffle_v3p0_v2p0__2_2_2() {
3607 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_2_2:
3608 ; GFX9:       ; %bb.0:
3609 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3610 ; GFX9-NEXT:    ;;#ASMSTART
3611 ; GFX9-NEXT:    ; use s[8:13]
3612 ; GFX9-NEXT:    ;;#ASMEND
3613 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3614   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3615   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> poison, <3 x i32> <i32 2, i32 2, i32 2>
3616   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3617   ret void
3620 define void @s_shuffle_v3p0_v2p0__3_2_2() {
3621 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_2_2:
3622 ; GFX900:       ; %bb.0:
3623 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3624 ; GFX900-NEXT:    ;;#ASMSTART
3625 ; GFX900-NEXT:    ; def s[4:7]
3626 ; GFX900-NEXT:    ;;#ASMEND
3627 ; GFX900-NEXT:    s_mov_b32 s8, s6
3628 ; GFX900-NEXT:    s_mov_b32 s9, s7
3629 ; GFX900-NEXT:    s_mov_b32 s10, s4
3630 ; GFX900-NEXT:    s_mov_b32 s11, s5
3631 ; GFX900-NEXT:    s_mov_b32 s12, s4
3632 ; GFX900-NEXT:    s_mov_b32 s13, s5
3633 ; GFX900-NEXT:    ;;#ASMSTART
3634 ; GFX900-NEXT:    ; use s[8:13]
3635 ; GFX900-NEXT:    ;;#ASMEND
3636 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3638 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_2_2:
3639 ; GFX90A:       ; %bb.0:
3640 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3641 ; GFX90A-NEXT:    ;;#ASMSTART
3642 ; GFX90A-NEXT:    ; def s[4:7]
3643 ; GFX90A-NEXT:    ;;#ASMEND
3644 ; GFX90A-NEXT:    s_mov_b32 s8, s6
3645 ; GFX90A-NEXT:    s_mov_b32 s9, s7
3646 ; GFX90A-NEXT:    s_mov_b32 s10, s4
3647 ; GFX90A-NEXT:    s_mov_b32 s11, s5
3648 ; GFX90A-NEXT:    s_mov_b32 s12, s4
3649 ; GFX90A-NEXT:    s_mov_b32 s13, s5
3650 ; GFX90A-NEXT:    ;;#ASMSTART
3651 ; GFX90A-NEXT:    ; use s[8:13]
3652 ; GFX90A-NEXT:    ;;#ASMEND
3653 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3655 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_2_2:
3656 ; GFX940:       ; %bb.0:
3657 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3658 ; GFX940-NEXT:    ;;#ASMSTART
3659 ; GFX940-NEXT:    ; def s[0:3]
3660 ; GFX940-NEXT:    ;;#ASMEND
3661 ; GFX940-NEXT:    s_mov_b32 s8, s2
3662 ; GFX940-NEXT:    s_mov_b32 s9, s3
3663 ; GFX940-NEXT:    s_mov_b32 s10, s0
3664 ; GFX940-NEXT:    s_mov_b32 s11, s1
3665 ; GFX940-NEXT:    s_mov_b32 s12, s0
3666 ; GFX940-NEXT:    s_mov_b32 s13, s1
3667 ; GFX940-NEXT:    ;;#ASMSTART
3668 ; GFX940-NEXT:    ; use s[8:13]
3669 ; GFX940-NEXT:    ;;#ASMEND
3670 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3671   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3672   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3673   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 2>
3674   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3675   ret void
3678 define void @s_shuffle_v3p0_v2p0__3_u_2() {
3679 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_u_2:
3680 ; GFX900:       ; %bb.0:
3681 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3682 ; GFX900-NEXT:    ;;#ASMSTART
3683 ; GFX900-NEXT:    ; def s[4:7]
3684 ; GFX900-NEXT:    ;;#ASMEND
3685 ; GFX900-NEXT:    s_mov_b32 s8, s6
3686 ; GFX900-NEXT:    s_mov_b32 s9, s7
3687 ; GFX900-NEXT:    s_mov_b32 s12, s4
3688 ; GFX900-NEXT:    s_mov_b32 s13, s5
3689 ; GFX900-NEXT:    ;;#ASMSTART
3690 ; GFX900-NEXT:    ; use s[8:13]
3691 ; GFX900-NEXT:    ;;#ASMEND
3692 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3694 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_u_2:
3695 ; GFX90A:       ; %bb.0:
3696 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3697 ; GFX90A-NEXT:    ;;#ASMSTART
3698 ; GFX90A-NEXT:    ; def s[4:7]
3699 ; GFX90A-NEXT:    ;;#ASMEND
3700 ; GFX90A-NEXT:    s_mov_b32 s8, s6
3701 ; GFX90A-NEXT:    s_mov_b32 s9, s7
3702 ; GFX90A-NEXT:    s_mov_b32 s12, s4
3703 ; GFX90A-NEXT:    s_mov_b32 s13, s5
3704 ; GFX90A-NEXT:    ;;#ASMSTART
3705 ; GFX90A-NEXT:    ; use s[8:13]
3706 ; GFX90A-NEXT:    ;;#ASMEND
3707 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3709 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_u_2:
3710 ; GFX940:       ; %bb.0:
3711 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3712 ; GFX940-NEXT:    ;;#ASMSTART
3713 ; GFX940-NEXT:    ; def s[0:3]
3714 ; GFX940-NEXT:    ;;#ASMEND
3715 ; GFX940-NEXT:    s_mov_b32 s8, s2
3716 ; GFX940-NEXT:    s_mov_b32 s9, s3
3717 ; GFX940-NEXT:    s_mov_b32 s12, s0
3718 ; GFX940-NEXT:    s_mov_b32 s13, s1
3719 ; GFX940-NEXT:    ;;#ASMSTART
3720 ; GFX940-NEXT:    ; use s[8:13]
3721 ; GFX940-NEXT:    ;;#ASMEND
3722 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3723   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3724   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3725   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>
3726   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3727   ret void
3730 define void @s_shuffle_v3p0_v2p0__3_0_2() {
3731 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_0_2:
3732 ; GFX900:       ; %bb.0:
3733 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3734 ; GFX900-NEXT:    ;;#ASMSTART
3735 ; GFX900-NEXT:    ; def s[4:7]
3736 ; GFX900-NEXT:    ;;#ASMEND
3737 ; GFX900-NEXT:    ;;#ASMSTART
3738 ; GFX900-NEXT:    ; def s[12:15]
3739 ; GFX900-NEXT:    ;;#ASMEND
3740 ; GFX900-NEXT:    s_mov_b32 s8, s14
3741 ; GFX900-NEXT:    s_mov_b32 s9, s15
3742 ; GFX900-NEXT:    s_mov_b32 s10, s4
3743 ; GFX900-NEXT:    s_mov_b32 s11, s5
3744 ; GFX900-NEXT:    ;;#ASMSTART
3745 ; GFX900-NEXT:    ; use s[8:13]
3746 ; GFX900-NEXT:    ;;#ASMEND
3747 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3749 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_0_2:
3750 ; GFX90A:       ; %bb.0:
3751 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3752 ; GFX90A-NEXT:    ;;#ASMSTART
3753 ; GFX90A-NEXT:    ; def s[4:7]
3754 ; GFX90A-NEXT:    ;;#ASMEND
3755 ; GFX90A-NEXT:    ;;#ASMSTART
3756 ; GFX90A-NEXT:    ; def s[12:15]
3757 ; GFX90A-NEXT:    ;;#ASMEND
3758 ; GFX90A-NEXT:    s_mov_b32 s8, s14
3759 ; GFX90A-NEXT:    s_mov_b32 s9, s15
3760 ; GFX90A-NEXT:    s_mov_b32 s10, s4
3761 ; GFX90A-NEXT:    s_mov_b32 s11, s5
3762 ; GFX90A-NEXT:    ;;#ASMSTART
3763 ; GFX90A-NEXT:    ; use s[8:13]
3764 ; GFX90A-NEXT:    ;;#ASMEND
3765 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3767 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_0_2:
3768 ; GFX940:       ; %bb.0:
3769 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3770 ; GFX940-NEXT:    ;;#ASMSTART
3771 ; GFX940-NEXT:    ; def s[0:3]
3772 ; GFX940-NEXT:    ;;#ASMEND
3773 ; GFX940-NEXT:    ;;#ASMSTART
3774 ; GFX940-NEXT:    ; def s[4:7]
3775 ; GFX940-NEXT:    ;;#ASMEND
3776 ; GFX940-NEXT:    s_mov_b32 s8, s6
3777 ; GFX940-NEXT:    s_mov_b32 s9, s7
3778 ; GFX940-NEXT:    s_mov_b32 s10, s0
3779 ; GFX940-NEXT:    s_mov_b32 s11, s1
3780 ; GFX940-NEXT:    s_mov_b32 s12, s4
3781 ; GFX940-NEXT:    s_mov_b32 s13, s5
3782 ; GFX940-NEXT:    ;;#ASMSTART
3783 ; GFX940-NEXT:    ; use s[8:13]
3784 ; GFX940-NEXT:    ;;#ASMEND
3785 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3786   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3787   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3788   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 2>
3789   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3790   ret void
3793 define void @s_shuffle_v3p0_v2p0__3_1_2() {
3794 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_1_2:
3795 ; GFX900:       ; %bb.0:
3796 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3797 ; GFX900-NEXT:    ;;#ASMSTART
3798 ; GFX900-NEXT:    ; def s[8:11]
3799 ; GFX900-NEXT:    ;;#ASMEND
3800 ; GFX900-NEXT:    ;;#ASMSTART
3801 ; GFX900-NEXT:    ; def s[4:7]
3802 ; GFX900-NEXT:    ;;#ASMEND
3803 ; GFX900-NEXT:    s_mov_b32 s8, s6
3804 ; GFX900-NEXT:    s_mov_b32 s9, s7
3805 ; GFX900-NEXT:    s_mov_b32 s12, s4
3806 ; GFX900-NEXT:    s_mov_b32 s13, s5
3807 ; GFX900-NEXT:    ;;#ASMSTART
3808 ; GFX900-NEXT:    ; use s[8:13]
3809 ; GFX900-NEXT:    ;;#ASMEND
3810 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3812 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_1_2:
3813 ; GFX90A:       ; %bb.0:
3814 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3815 ; GFX90A-NEXT:    ;;#ASMSTART
3816 ; GFX90A-NEXT:    ; def s[8:11]
3817 ; GFX90A-NEXT:    ;;#ASMEND
3818 ; GFX90A-NEXT:    ;;#ASMSTART
3819 ; GFX90A-NEXT:    ; def s[4:7]
3820 ; GFX90A-NEXT:    ;;#ASMEND
3821 ; GFX90A-NEXT:    s_mov_b32 s8, s6
3822 ; GFX90A-NEXT:    s_mov_b32 s9, s7
3823 ; GFX90A-NEXT:    s_mov_b32 s12, s4
3824 ; GFX90A-NEXT:    s_mov_b32 s13, s5
3825 ; GFX90A-NEXT:    ;;#ASMSTART
3826 ; GFX90A-NEXT:    ; use s[8:13]
3827 ; GFX90A-NEXT:    ;;#ASMEND
3828 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3830 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_1_2:
3831 ; GFX940:       ; %bb.0:
3832 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3833 ; GFX940-NEXT:    ;;#ASMSTART
3834 ; GFX940-NEXT:    ; def s[8:11]
3835 ; GFX940-NEXT:    ;;#ASMEND
3836 ; GFX940-NEXT:    ;;#ASMSTART
3837 ; GFX940-NEXT:    ; def s[0:3]
3838 ; GFX940-NEXT:    ;;#ASMEND
3839 ; GFX940-NEXT:    s_mov_b32 s8, s2
3840 ; GFX940-NEXT:    s_mov_b32 s9, s3
3841 ; GFX940-NEXT:    s_mov_b32 s12, s0
3842 ; GFX940-NEXT:    s_mov_b32 s13, s1
3843 ; GFX940-NEXT:    ;;#ASMSTART
3844 ; GFX940-NEXT:    ; use s[8:13]
3845 ; GFX940-NEXT:    ;;#ASMEND
3846 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3847   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3848   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3849   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 2>
3850   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3851   ret void
3854 define void @s_shuffle_v3p0_v2p0__u_3_3() {
3855 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__u_3_3:
3856 ; GFX9:       ; %bb.0:
3857 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3858 ; GFX9-NEXT:    ;;#ASMSTART
3859 ; GFX9-NEXT:    ; def s[8:11]
3860 ; GFX9-NEXT:    ;;#ASMEND
3861 ; GFX9-NEXT:    s_mov_b32 s12, s10
3862 ; GFX9-NEXT:    s_mov_b32 s13, s11
3863 ; GFX9-NEXT:    ;;#ASMSTART
3864 ; GFX9-NEXT:    ; use s[8:13]
3865 ; GFX9-NEXT:    ;;#ASMEND
3866 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3867   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3868   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3869   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>
3870   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3871   ret void
3874 define void @s_shuffle_v3p0_v2p0__0_3_3() {
3875 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__0_3_3:
3876 ; GFX900:       ; %bb.0:
3877 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3878 ; GFX900-NEXT:    ;;#ASMSTART
3879 ; GFX900-NEXT:    ; def s[8:11]
3880 ; GFX900-NEXT:    ;;#ASMEND
3881 ; GFX900-NEXT:    ;;#ASMSTART
3882 ; GFX900-NEXT:    ; def s[4:7]
3883 ; GFX900-NEXT:    ;;#ASMEND
3884 ; GFX900-NEXT:    s_mov_b32 s10, s6
3885 ; GFX900-NEXT:    s_mov_b32 s11, s7
3886 ; GFX900-NEXT:    s_mov_b32 s12, s6
3887 ; GFX900-NEXT:    s_mov_b32 s13, s7
3888 ; GFX900-NEXT:    ;;#ASMSTART
3889 ; GFX900-NEXT:    ; use s[8:13]
3890 ; GFX900-NEXT:    ;;#ASMEND
3891 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3893 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__0_3_3:
3894 ; GFX90A:       ; %bb.0:
3895 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3896 ; GFX90A-NEXT:    ;;#ASMSTART
3897 ; GFX90A-NEXT:    ; def s[8:11]
3898 ; GFX90A-NEXT:    ;;#ASMEND
3899 ; GFX90A-NEXT:    ;;#ASMSTART
3900 ; GFX90A-NEXT:    ; def s[4:7]
3901 ; GFX90A-NEXT:    ;;#ASMEND
3902 ; GFX90A-NEXT:    s_mov_b32 s10, s6
3903 ; GFX90A-NEXT:    s_mov_b32 s11, s7
3904 ; GFX90A-NEXT:    s_mov_b32 s12, s6
3905 ; GFX90A-NEXT:    s_mov_b32 s13, s7
3906 ; GFX90A-NEXT:    ;;#ASMSTART
3907 ; GFX90A-NEXT:    ; use s[8:13]
3908 ; GFX90A-NEXT:    ;;#ASMEND
3909 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3911 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__0_3_3:
3912 ; GFX940:       ; %bb.0:
3913 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3914 ; GFX940-NEXT:    ;;#ASMSTART
3915 ; GFX940-NEXT:    ; def s[8:11]
3916 ; GFX940-NEXT:    ;;#ASMEND
3917 ; GFX940-NEXT:    ;;#ASMSTART
3918 ; GFX940-NEXT:    ; def s[0:3]
3919 ; GFX940-NEXT:    ;;#ASMEND
3920 ; GFX940-NEXT:    s_mov_b32 s10, s2
3921 ; GFX940-NEXT:    s_mov_b32 s11, s3
3922 ; GFX940-NEXT:    s_mov_b32 s12, s2
3923 ; GFX940-NEXT:    s_mov_b32 s13, s3
3924 ; GFX940-NEXT:    ;;#ASMSTART
3925 ; GFX940-NEXT:    ; use s[8:13]
3926 ; GFX940-NEXT:    ;;#ASMEND
3927 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3928   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3929   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3930   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 0, i32 3, i32 3>
3931   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3932   ret void
3935 define void @s_shuffle_v3p0_v2p0__1_3_3() {
3936 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__1_3_3:
3937 ; GFX900:       ; %bb.0:
3938 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3939 ; GFX900-NEXT:    ;;#ASMSTART
3940 ; GFX900-NEXT:    ; def s[8:11]
3941 ; GFX900-NEXT:    ;;#ASMEND
3942 ; GFX900-NEXT:    ;;#ASMSTART
3943 ; GFX900-NEXT:    ; def s[4:7]
3944 ; GFX900-NEXT:    ;;#ASMEND
3945 ; GFX900-NEXT:    s_mov_b32 s8, s6
3946 ; GFX900-NEXT:    s_mov_b32 s9, s7
3947 ; GFX900-NEXT:    s_mov_b32 s12, s10
3948 ; GFX900-NEXT:    s_mov_b32 s13, s11
3949 ; GFX900-NEXT:    ;;#ASMSTART
3950 ; GFX900-NEXT:    ; use s[8:13]
3951 ; GFX900-NEXT:    ;;#ASMEND
3952 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3954 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__1_3_3:
3955 ; GFX90A:       ; %bb.0:
3956 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3957 ; GFX90A-NEXT:    ;;#ASMSTART
3958 ; GFX90A-NEXT:    ; def s[8:11]
3959 ; GFX90A-NEXT:    ;;#ASMEND
3960 ; GFX90A-NEXT:    ;;#ASMSTART
3961 ; GFX90A-NEXT:    ; def s[4:7]
3962 ; GFX90A-NEXT:    ;;#ASMEND
3963 ; GFX90A-NEXT:    s_mov_b32 s8, s6
3964 ; GFX90A-NEXT:    s_mov_b32 s9, s7
3965 ; GFX90A-NEXT:    s_mov_b32 s12, s10
3966 ; GFX90A-NEXT:    s_mov_b32 s13, s11
3967 ; GFX90A-NEXT:    ;;#ASMSTART
3968 ; GFX90A-NEXT:    ; use s[8:13]
3969 ; GFX90A-NEXT:    ;;#ASMEND
3970 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3972 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__1_3_3:
3973 ; GFX940:       ; %bb.0:
3974 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3975 ; GFX940-NEXT:    ;;#ASMSTART
3976 ; GFX940-NEXT:    ; def s[8:11]
3977 ; GFX940-NEXT:    ;;#ASMEND
3978 ; GFX940-NEXT:    ;;#ASMSTART
3979 ; GFX940-NEXT:    ; def s[0:3]
3980 ; GFX940-NEXT:    ;;#ASMEND
3981 ; GFX940-NEXT:    s_mov_b32 s8, s2
3982 ; GFX940-NEXT:    s_mov_b32 s9, s3
3983 ; GFX940-NEXT:    s_mov_b32 s12, s10
3984 ; GFX940-NEXT:    s_mov_b32 s13, s11
3985 ; GFX940-NEXT:    ;;#ASMSTART
3986 ; GFX940-NEXT:    ; use s[8:13]
3987 ; GFX940-NEXT:    ;;#ASMEND
3988 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3989   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
3990   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
3991   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 1, i32 3, i32 3>
3992   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
3993   ret void
3996 define void @s_shuffle_v3p0_v2p0__2_3_3() {
3997 ; GFX9-LABEL: s_shuffle_v3p0_v2p0__2_3_3:
3998 ; GFX9:       ; %bb.0:
3999 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4000 ; GFX9-NEXT:    ;;#ASMSTART
4001 ; GFX9-NEXT:    ; def s[8:11]
4002 ; GFX9-NEXT:    ;;#ASMEND
4003 ; GFX9-NEXT:    s_mov_b32 s12, s10
4004 ; GFX9-NEXT:    s_mov_b32 s13, s11
4005 ; GFX9-NEXT:    ;;#ASMSTART
4006 ; GFX9-NEXT:    ; use s[8:13]
4007 ; GFX9-NEXT:    ;;#ASMEND
4008 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
4009   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
4010   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
4011   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 2, i32 3, i32 3>
4012   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
4013   ret void
4016 define void @s_shuffle_v3p0_v2p0__3_u_3() {
4017 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_u_3:
4018 ; GFX900:       ; %bb.0:
4019 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4020 ; GFX900-NEXT:    ;;#ASMSTART
4021 ; GFX900-NEXT:    ; def s[4:7]
4022 ; GFX900-NEXT:    ;;#ASMEND
4023 ; GFX900-NEXT:    s_mov_b32 s8, s6
4024 ; GFX900-NEXT:    s_mov_b32 s9, s7
4025 ; GFX900-NEXT:    s_mov_b32 s12, s6
4026 ; GFX900-NEXT:    s_mov_b32 s13, s7
4027 ; GFX900-NEXT:    ;;#ASMSTART
4028 ; GFX900-NEXT:    ; use s[8:13]
4029 ; GFX900-NEXT:    ;;#ASMEND
4030 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4032 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_u_3:
4033 ; GFX90A:       ; %bb.0:
4034 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4035 ; GFX90A-NEXT:    ;;#ASMSTART
4036 ; GFX90A-NEXT:    ; def s[4:7]
4037 ; GFX90A-NEXT:    ;;#ASMEND
4038 ; GFX90A-NEXT:    s_mov_b32 s8, s6
4039 ; GFX90A-NEXT:    s_mov_b32 s9, s7
4040 ; GFX90A-NEXT:    s_mov_b32 s12, s6
4041 ; GFX90A-NEXT:    s_mov_b32 s13, s7
4042 ; GFX90A-NEXT:    ;;#ASMSTART
4043 ; GFX90A-NEXT:    ; use s[8:13]
4044 ; GFX90A-NEXT:    ;;#ASMEND
4045 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4047 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_u_3:
4048 ; GFX940:       ; %bb.0:
4049 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4050 ; GFX940-NEXT:    ;;#ASMSTART
4051 ; GFX940-NEXT:    ; def s[0:3]
4052 ; GFX940-NEXT:    ;;#ASMEND
4053 ; GFX940-NEXT:    s_mov_b32 s8, s2
4054 ; GFX940-NEXT:    s_mov_b32 s9, s3
4055 ; GFX940-NEXT:    s_mov_b32 s12, s2
4056 ; GFX940-NEXT:    s_mov_b32 s13, s3
4057 ; GFX940-NEXT:    ;;#ASMSTART
4058 ; GFX940-NEXT:    ; use s[8:13]
4059 ; GFX940-NEXT:    ;;#ASMEND
4060 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4061   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
4062   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
4063   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 poison, i32 3>
4064   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
4065   ret void
4068 define void @s_shuffle_v3p0_v2p0__3_0_3() {
4069 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_0_3:
4070 ; GFX900:       ; %bb.0:
4071 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4072 ; GFX900-NEXT:    ;;#ASMSTART
4073 ; GFX900-NEXT:    ; def s[12:15]
4074 ; GFX900-NEXT:    ;;#ASMEND
4075 ; GFX900-NEXT:    ;;#ASMSTART
4076 ; GFX900-NEXT:    ; def s[4:7]
4077 ; GFX900-NEXT:    ;;#ASMEND
4078 ; GFX900-NEXT:    s_mov_b32 s8, s14
4079 ; GFX900-NEXT:    s_mov_b32 s9, s15
4080 ; GFX900-NEXT:    s_mov_b32 s10, s4
4081 ; GFX900-NEXT:    s_mov_b32 s11, s5
4082 ; GFX900-NEXT:    s_mov_b32 s12, s14
4083 ; GFX900-NEXT:    s_mov_b32 s13, s15
4084 ; GFX900-NEXT:    ;;#ASMSTART
4085 ; GFX900-NEXT:    ; use s[8:13]
4086 ; GFX900-NEXT:    ;;#ASMEND
4087 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4089 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_0_3:
4090 ; GFX90A:       ; %bb.0:
4091 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4092 ; GFX90A-NEXT:    ;;#ASMSTART
4093 ; GFX90A-NEXT:    ; def s[12:15]
4094 ; GFX90A-NEXT:    ;;#ASMEND
4095 ; GFX90A-NEXT:    ;;#ASMSTART
4096 ; GFX90A-NEXT:    ; def s[4:7]
4097 ; GFX90A-NEXT:    ;;#ASMEND
4098 ; GFX90A-NEXT:    s_mov_b32 s8, s14
4099 ; GFX90A-NEXT:    s_mov_b32 s9, s15
4100 ; GFX90A-NEXT:    s_mov_b32 s10, s4
4101 ; GFX90A-NEXT:    s_mov_b32 s11, s5
4102 ; GFX90A-NEXT:    s_mov_b32 s12, s14
4103 ; GFX90A-NEXT:    s_mov_b32 s13, s15
4104 ; GFX90A-NEXT:    ;;#ASMSTART
4105 ; GFX90A-NEXT:    ; use s[8:13]
4106 ; GFX90A-NEXT:    ;;#ASMEND
4107 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4109 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_0_3:
4110 ; GFX940:       ; %bb.0:
4111 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4112 ; GFX940-NEXT:    ;;#ASMSTART
4113 ; GFX940-NEXT:    ; def s[0:3]
4114 ; GFX940-NEXT:    ;;#ASMEND
4115 ; GFX940-NEXT:    ;;#ASMSTART
4116 ; GFX940-NEXT:    ; def s[4:7]
4117 ; GFX940-NEXT:    ;;#ASMEND
4118 ; GFX940-NEXT:    s_mov_b32 s8, s6
4119 ; GFX940-NEXT:    s_mov_b32 s9, s7
4120 ; GFX940-NEXT:    s_mov_b32 s10, s0
4121 ; GFX940-NEXT:    s_mov_b32 s11, s1
4122 ; GFX940-NEXT:    s_mov_b32 s12, s6
4123 ; GFX940-NEXT:    s_mov_b32 s13, s7
4124 ; GFX940-NEXT:    ;;#ASMSTART
4125 ; GFX940-NEXT:    ; use s[8:13]
4126 ; GFX940-NEXT:    ;;#ASMEND
4127 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4128   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
4129   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
4130   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 0, i32 3>
4131   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
4132   ret void
4135 define void @s_shuffle_v3p0_v2p0__3_1_3() {
4136 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_1_3:
4137 ; GFX900:       ; %bb.0:
4138 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4139 ; GFX900-NEXT:    ;;#ASMSTART
4140 ; GFX900-NEXT:    ; def s[8:11]
4141 ; GFX900-NEXT:    ;;#ASMEND
4142 ; GFX900-NEXT:    ;;#ASMSTART
4143 ; GFX900-NEXT:    ; def s[4:7]
4144 ; GFX900-NEXT:    ;;#ASMEND
4145 ; GFX900-NEXT:    s_mov_b32 s8, s6
4146 ; GFX900-NEXT:    s_mov_b32 s9, s7
4147 ; GFX900-NEXT:    s_mov_b32 s12, s6
4148 ; GFX900-NEXT:    s_mov_b32 s13, s7
4149 ; GFX900-NEXT:    ;;#ASMSTART
4150 ; GFX900-NEXT:    ; use s[8:13]
4151 ; GFX900-NEXT:    ;;#ASMEND
4152 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4154 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_1_3:
4155 ; GFX90A:       ; %bb.0:
4156 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4157 ; GFX90A-NEXT:    ;;#ASMSTART
4158 ; GFX90A-NEXT:    ; def s[8:11]
4159 ; GFX90A-NEXT:    ;;#ASMEND
4160 ; GFX90A-NEXT:    ;;#ASMSTART
4161 ; GFX90A-NEXT:    ; def s[4:7]
4162 ; GFX90A-NEXT:    ;;#ASMEND
4163 ; GFX90A-NEXT:    s_mov_b32 s8, s6
4164 ; GFX90A-NEXT:    s_mov_b32 s9, s7
4165 ; GFX90A-NEXT:    s_mov_b32 s12, s6
4166 ; GFX90A-NEXT:    s_mov_b32 s13, s7
4167 ; GFX90A-NEXT:    ;;#ASMSTART
4168 ; GFX90A-NEXT:    ; use s[8:13]
4169 ; GFX90A-NEXT:    ;;#ASMEND
4170 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4172 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_1_3:
4173 ; GFX940:       ; %bb.0:
4174 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4175 ; GFX940-NEXT:    ;;#ASMSTART
4176 ; GFX940-NEXT:    ; def s[8:11]
4177 ; GFX940-NEXT:    ;;#ASMEND
4178 ; GFX940-NEXT:    ;;#ASMSTART
4179 ; GFX940-NEXT:    ; def s[0:3]
4180 ; GFX940-NEXT:    ;;#ASMEND
4181 ; GFX940-NEXT:    s_mov_b32 s8, s2
4182 ; GFX940-NEXT:    s_mov_b32 s9, s3
4183 ; GFX940-NEXT:    s_mov_b32 s12, s2
4184 ; GFX940-NEXT:    s_mov_b32 s13, s3
4185 ; GFX940-NEXT:    ;;#ASMSTART
4186 ; GFX940-NEXT:    ; use s[8:13]
4187 ; GFX940-NEXT:    ;;#ASMEND
4188 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4189   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
4190   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
4191   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 1, i32 3>
4192   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
4193   ret void
4196 define void @s_shuffle_v3p0_v2p0__3_2_3() {
4197 ; GFX900-LABEL: s_shuffle_v3p0_v2p0__3_2_3:
4198 ; GFX900:       ; %bb.0:
4199 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4200 ; GFX900-NEXT:    ;;#ASMSTART
4201 ; GFX900-NEXT:    ; def s[4:7]
4202 ; GFX900-NEXT:    ;;#ASMEND
4203 ; GFX900-NEXT:    s_mov_b32 s8, s6
4204 ; GFX900-NEXT:    s_mov_b32 s9, s7
4205 ; GFX900-NEXT:    s_mov_b32 s10, s4
4206 ; GFX900-NEXT:    s_mov_b32 s11, s5
4207 ; GFX900-NEXT:    s_mov_b32 s12, s6
4208 ; GFX900-NEXT:    s_mov_b32 s13, s7
4209 ; GFX900-NEXT:    ;;#ASMSTART
4210 ; GFX900-NEXT:    ; use s[8:13]
4211 ; GFX900-NEXT:    ;;#ASMEND
4212 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4214 ; GFX90A-LABEL: s_shuffle_v3p0_v2p0__3_2_3:
4215 ; GFX90A:       ; %bb.0:
4216 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4217 ; GFX90A-NEXT:    ;;#ASMSTART
4218 ; GFX90A-NEXT:    ; def s[4:7]
4219 ; GFX90A-NEXT:    ;;#ASMEND
4220 ; GFX90A-NEXT:    s_mov_b32 s8, s6
4221 ; GFX90A-NEXT:    s_mov_b32 s9, s7
4222 ; GFX90A-NEXT:    s_mov_b32 s10, s4
4223 ; GFX90A-NEXT:    s_mov_b32 s11, s5
4224 ; GFX90A-NEXT:    s_mov_b32 s12, s6
4225 ; GFX90A-NEXT:    s_mov_b32 s13, s7
4226 ; GFX90A-NEXT:    ;;#ASMSTART
4227 ; GFX90A-NEXT:    ; use s[8:13]
4228 ; GFX90A-NEXT:    ;;#ASMEND
4229 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4231 ; GFX940-LABEL: s_shuffle_v3p0_v2p0__3_2_3:
4232 ; GFX940:       ; %bb.0:
4233 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4234 ; GFX940-NEXT:    ;;#ASMSTART
4235 ; GFX940-NEXT:    ; def s[0:3]
4236 ; GFX940-NEXT:    ;;#ASMEND
4237 ; GFX940-NEXT:    s_mov_b32 s8, s2
4238 ; GFX940-NEXT:    s_mov_b32 s9, s3
4239 ; GFX940-NEXT:    s_mov_b32 s10, s0
4240 ; GFX940-NEXT:    s_mov_b32 s11, s1
4241 ; GFX940-NEXT:    s_mov_b32 s12, s2
4242 ; GFX940-NEXT:    s_mov_b32 s13, s3
4243 ; GFX940-NEXT:    ;;#ASMSTART
4244 ; GFX940-NEXT:    ; use s[8:13]
4245 ; GFX940-NEXT:    ;;#ASMEND
4246 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4247   %vec0 = call <2 x ptr> asm "; def $0", "=s"()
4248   %vec1 = call <2 x ptr> asm "; def $0", "=s"()
4249   %shuf = shufflevector <2 x ptr> %vec0, <2 x ptr> %vec1, <3 x i32> <i32 3, i32 2, i32 3>
4250   call void asm sideeffect "; use $0", "{s[8:13]}"(<3 x ptr> %shuf)
4251   ret void
4253 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
4254 ; GFX90APLUS: {{.*}}