[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / shufflevector.v3i16.v2i16.ll
blob803637cb2dd36c838118da74dd9d0acec734b18b
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_v3i16_v2i16__u_u_u(ptr addrspace(1) inreg %ptr) {
8 ; GFX9-LABEL: v_shuffle_v3i16_v2i16__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 i16> asm "; def $0", "=v"()
13   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> poison
14   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
15   ret void
18 define void @v_shuffle_v3i16_v2i16__0_u_u(ptr addrspace(1) inreg %ptr) {
19 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__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 v0, 0
23 ; GFX900-NEXT:    ;;#ASMSTART
24 ; GFX900-NEXT:    ; def v1
25 ; GFX900-NEXT:    ;;#ASMEND
26 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
27 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
28 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
30 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__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 v0, 0
34 ; GFX90A-NEXT:    ;;#ASMSTART
35 ; GFX90A-NEXT:    ; def v1
36 ; GFX90A-NEXT:    ;;#ASMEND
37 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
38 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
39 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
41 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__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 v0, 0
45 ; GFX940-NEXT:    ;;#ASMSTART
46 ; GFX940-NEXT:    ; def v1
47 ; GFX940-NEXT:    ;;#ASMEND
48 ; GFX940-NEXT:    global_store_dword v0, v1, 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 i16> asm "; def $0", "=v"()
52   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 poison, i32 poison>
53   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
54   ret void
57 define void @v_shuffle_v3i16_v2i16__1_u_u(ptr addrspace(1) inreg %ptr) {
58 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__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 v1
63 ; GFX900-NEXT:    ;;#ASMEND
64 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
65 ; GFX900-NEXT:    v_alignbit_b32 v1, s4, v1, 16
66 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
67 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
68 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
70 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__1_u_u:
71 ; GFX90A:       ; %bb.0:
72 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
73 ; GFX90A-NEXT:    ;;#ASMSTART
74 ; GFX90A-NEXT:    ; def v1
75 ; GFX90A-NEXT:    ;;#ASMEND
76 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
77 ; GFX90A-NEXT:    v_alignbit_b32 v1, s4, v1, 16
78 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
79 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
80 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
82 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__1_u_u:
83 ; GFX940:       ; %bb.0:
84 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
85 ; GFX940-NEXT:    ;;#ASMSTART
86 ; GFX940-NEXT:    ; def v1
87 ; GFX940-NEXT:    ;;#ASMEND
88 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
89 ; GFX940-NEXT:    v_alignbit_b32 v1, s0, v1, 16
90 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
91 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
92 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
93   %vec0 = call <2 x i16> asm "; def $0", "=v"()
94   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 poison, i32 poison>
95   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
96   ret void
99 define void @v_shuffle_v3i16_v2i16__2_u_u(ptr addrspace(1) inreg %ptr) {
100 ; GFX9-LABEL: v_shuffle_v3i16_v2i16__2_u_u:
101 ; GFX9:       ; %bb.0:
102 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
103 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
104   %vec0 = call <2 x i16> asm "; def $0", "=v"()
105   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 poison, i32 poison>
106   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
107   ret void
110 define void @v_shuffle_v3i16_v2i16__3_u_u(ptr addrspace(1) inreg %ptr) {
111 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_u_u:
112 ; GFX900:       ; %bb.0:
113 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
114 ; GFX900-NEXT:    ;;#ASMSTART
115 ; GFX900-NEXT:    ; def v1
116 ; GFX900-NEXT:    ;;#ASMEND
117 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
118 ; GFX900-NEXT:    v_alignbit_b32 v1, s4, v1, 16
119 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
120 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
121 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
123 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_u_u:
124 ; GFX90A:       ; %bb.0:
125 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
126 ; GFX90A-NEXT:    ;;#ASMSTART
127 ; GFX90A-NEXT:    ; def v1
128 ; GFX90A-NEXT:    ;;#ASMEND
129 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
130 ; GFX90A-NEXT:    v_alignbit_b32 v1, s4, v1, 16
131 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
132 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
133 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
135 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_u_u:
136 ; GFX940:       ; %bb.0:
137 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
138 ; GFX940-NEXT:    ;;#ASMSTART
139 ; GFX940-NEXT:    ; def v1
140 ; GFX940-NEXT:    ;;#ASMEND
141 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
142 ; GFX940-NEXT:    v_alignbit_b32 v1, s0, v1, 16
143 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
144 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
145 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
146   %vec0 = call <2 x i16> asm "; def $0", "=v"()
147   %vec1 = call <2 x i16> asm "; def $0", "=v"()
148   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 poison>
149   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
150   ret void
153 define void @v_shuffle_v3i16_v2i16__3_0_u(ptr addrspace(1) inreg %ptr) {
154 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_0_u:
155 ; GFX900:       ; %bb.0:
156 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
157 ; GFX900-NEXT:    ;;#ASMSTART
158 ; GFX900-NEXT:    ; def v1
159 ; GFX900-NEXT:    ;;#ASMEND
160 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
161 ; GFX900-NEXT:    ;;#ASMSTART
162 ; GFX900-NEXT:    ; def v2
163 ; GFX900-NEXT:    ;;#ASMEND
164 ; GFX900-NEXT:    v_alignbit_b32 v1, v1, v2, 16
165 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
166 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
167 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
169 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_0_u:
170 ; GFX90A:       ; %bb.0:
171 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
172 ; GFX90A-NEXT:    ;;#ASMSTART
173 ; GFX90A-NEXT:    ; def v1
174 ; GFX90A-NEXT:    ;;#ASMEND
175 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
176 ; GFX90A-NEXT:    ;;#ASMSTART
177 ; GFX90A-NEXT:    ; def v2
178 ; GFX90A-NEXT:    ;;#ASMEND
179 ; GFX90A-NEXT:    v_alignbit_b32 v1, v1, v2, 16
180 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
181 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
182 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
184 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_0_u:
185 ; GFX940:       ; %bb.0:
186 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
187 ; GFX940-NEXT:    ;;#ASMSTART
188 ; GFX940-NEXT:    ; def v1
189 ; GFX940-NEXT:    ;;#ASMEND
190 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
191 ; GFX940-NEXT:    ;;#ASMSTART
192 ; GFX940-NEXT:    ; def v2
193 ; GFX940-NEXT:    ;;#ASMEND
194 ; GFX940-NEXT:    s_nop 0
195 ; GFX940-NEXT:    v_alignbit_b32 v1, v1, v2, 16
196 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
197 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
198 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
199   %vec0 = call <2 x i16> asm "; def $0", "=v"()
200   %vec1 = call <2 x i16> asm "; def $0", "=v"()
201   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 poison>
202   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
203   ret void
206 define void @v_shuffle_v3i16_v2i16__3_1_u(ptr addrspace(1) inreg %ptr) {
207 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_1_u:
208 ; GFX900:       ; %bb.0:
209 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
210 ; GFX900-NEXT:    ;;#ASMSTART
211 ; GFX900-NEXT:    ; def v1
212 ; GFX900-NEXT:    ;;#ASMEND
213 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
214 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
215 ; GFX900-NEXT:    ;;#ASMSTART
216 ; GFX900-NEXT:    ; def v2
217 ; GFX900-NEXT:    ;;#ASMEND
218 ; GFX900-NEXT:    v_perm_b32 v1, v1, v2, s4
219 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
220 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
221 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
223 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_1_u:
224 ; GFX90A:       ; %bb.0:
225 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
226 ; GFX90A-NEXT:    ;;#ASMSTART
227 ; GFX90A-NEXT:    ; def v1
228 ; GFX90A-NEXT:    ;;#ASMEND
229 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
230 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
231 ; GFX90A-NEXT:    ;;#ASMSTART
232 ; GFX90A-NEXT:    ; def v2
233 ; GFX90A-NEXT:    ;;#ASMEND
234 ; GFX90A-NEXT:    v_perm_b32 v1, v1, v2, s4
235 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
236 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
237 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
239 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_1_u:
240 ; GFX940:       ; %bb.0:
241 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
242 ; GFX940-NEXT:    ;;#ASMSTART
243 ; GFX940-NEXT:    ; def v1
244 ; GFX940-NEXT:    ;;#ASMEND
245 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
246 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
247 ; GFX940-NEXT:    ;;#ASMSTART
248 ; GFX940-NEXT:    ; def v2
249 ; GFX940-NEXT:    ;;#ASMEND
250 ; GFX940-NEXT:    s_nop 0
251 ; GFX940-NEXT:    v_perm_b32 v1, v1, v2, s2
252 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
253 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
254 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
255   %vec0 = call <2 x i16> asm "; def $0", "=v"()
256   %vec1 = call <2 x i16> asm "; def $0", "=v"()
257   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 poison>
258   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
259   ret void
262 define void @v_shuffle_v3i16_v2i16__3_2_u(ptr addrspace(1) inreg %ptr) {
263 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_2_u:
264 ; GFX900:       ; %bb.0:
265 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
266 ; GFX900-NEXT:    ;;#ASMSTART
267 ; GFX900-NEXT:    ; def v1
268 ; GFX900-NEXT:    ;;#ASMEND
269 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
270 ; GFX900-NEXT:    v_alignbit_b32 v1, v1, v1, 16
271 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
272 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
273 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
275 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_2_u:
276 ; GFX90A:       ; %bb.0:
277 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
278 ; GFX90A-NEXT:    ;;#ASMSTART
279 ; GFX90A-NEXT:    ; def v1
280 ; GFX90A-NEXT:    ;;#ASMEND
281 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
282 ; GFX90A-NEXT:    v_alignbit_b32 v1, v1, v1, 16
283 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
284 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
285 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
287 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_2_u:
288 ; GFX940:       ; %bb.0:
289 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
290 ; GFX940-NEXT:    ;;#ASMSTART
291 ; GFX940-NEXT:    ; def v1
292 ; GFX940-NEXT:    ;;#ASMEND
293 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
294 ; GFX940-NEXT:    v_alignbit_b32 v1, v1, v1, 16
295 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
296 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
297 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
298   %vec0 = call <2 x i16> asm "; def $0", "=v"()
299   %vec1 = call <2 x i16> asm "; def $0", "=v"()
300   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 poison>
301   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
302   ret void
305 define void @v_shuffle_v3i16_v2i16__3_3_u(ptr addrspace(1) inreg %ptr) {
306 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_3_u:
307 ; GFX900:       ; %bb.0:
308 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
309 ; GFX900-NEXT:    ;;#ASMSTART
310 ; GFX900-NEXT:    ; def v1
311 ; GFX900-NEXT:    ;;#ASMEND
312 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
313 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
314 ; GFX900-NEXT:    v_perm_b32 v1, v1, v1, s4
315 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
316 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
317 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
319 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_3_u:
320 ; GFX90A:       ; %bb.0:
321 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
322 ; GFX90A-NEXT:    ;;#ASMSTART
323 ; GFX90A-NEXT:    ; def v1
324 ; GFX90A-NEXT:    ;;#ASMEND
325 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
326 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
327 ; GFX90A-NEXT:    v_perm_b32 v1, v1, v1, s4
328 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
329 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
330 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
332 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_3_u:
333 ; GFX940:       ; %bb.0:
334 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
335 ; GFX940-NEXT:    ;;#ASMSTART
336 ; GFX940-NEXT:    ; def v1
337 ; GFX940-NEXT:    ;;#ASMEND
338 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
339 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
340 ; GFX940-NEXT:    v_perm_b32 v1, v1, v1, s2
341 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
342 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
343 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
344   %vec0 = call <2 x i16> asm "; def $0", "=v"()
345   %vec1 = call <2 x i16> asm "; def $0", "=v"()
346   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>
347   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
348   ret void
351 define void @v_shuffle_v3i16_v2i16__3_3_0(ptr addrspace(1) inreg %ptr) {
352 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_3_0:
353 ; GFX900:       ; %bb.0:
354 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
355 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
356 ; GFX900-NEXT:    ;;#ASMSTART
357 ; GFX900-NEXT:    ; def v1
358 ; GFX900-NEXT:    ;;#ASMEND
359 ; GFX900-NEXT:    ;;#ASMSTART
360 ; GFX900-NEXT:    ; def v2
361 ; GFX900-NEXT:    ;;#ASMEND
362 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
363 ; GFX900-NEXT:    v_perm_b32 v2, v2, v2, s4
364 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
365 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
366 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
367 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
369 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_3_0:
370 ; GFX90A:       ; %bb.0:
371 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
372 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
373 ; GFX90A-NEXT:    ;;#ASMSTART
374 ; GFX90A-NEXT:    ; def v1
375 ; GFX90A-NEXT:    ;;#ASMEND
376 ; GFX90A-NEXT:    ;;#ASMSTART
377 ; GFX90A-NEXT:    ; def v2
378 ; GFX90A-NEXT:    ;;#ASMEND
379 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
380 ; GFX90A-NEXT:    v_perm_b32 v2, v2, v2, s4
381 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
382 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
383 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
384 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
386 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_3_0:
387 ; GFX940:       ; %bb.0:
388 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
389 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
390 ; GFX940-NEXT:    ;;#ASMSTART
391 ; GFX940-NEXT:    ; def v1
392 ; GFX940-NEXT:    ;;#ASMEND
393 ; GFX940-NEXT:    ;;#ASMSTART
394 ; GFX940-NEXT:    ; def v2
395 ; GFX940-NEXT:    ;;#ASMEND
396 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
397 ; GFX940-NEXT:    v_perm_b32 v2, v2, v2, s2
398 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
399 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
400 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
401 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
402   %vec0 = call <2 x i16> asm "; def $0", "=v"()
403   %vec1 = call <2 x i16> asm "; def $0", "=v"()
404   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 0>
405   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
406   ret void
409 define void @v_shuffle_v3i16_v2i16__3_3_1(ptr addrspace(1) inreg %ptr) {
410 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_3_1:
411 ; GFX900:       ; %bb.0:
412 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
413 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
414 ; GFX900-NEXT:    ;;#ASMSTART
415 ; GFX900-NEXT:    ; def v1
416 ; GFX900-NEXT:    ;;#ASMEND
417 ; GFX900-NEXT:    ;;#ASMSTART
418 ; GFX900-NEXT:    ; def v2
419 ; GFX900-NEXT:    ;;#ASMEND
420 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
421 ; GFX900-NEXT:    v_perm_b32 v2, v2, v2, s4
422 ; GFX900-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
423 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
424 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
425 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
427 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_3_1:
428 ; GFX90A:       ; %bb.0:
429 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
430 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
431 ; GFX90A-NEXT:    ;;#ASMSTART
432 ; GFX90A-NEXT:    ; def v1
433 ; GFX90A-NEXT:    ;;#ASMEND
434 ; GFX90A-NEXT:    ;;#ASMSTART
435 ; GFX90A-NEXT:    ; def v2
436 ; GFX90A-NEXT:    ;;#ASMEND
437 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
438 ; GFX90A-NEXT:    v_perm_b32 v2, v2, v2, s4
439 ; GFX90A-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
440 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
441 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
442 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
444 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_3_1:
445 ; GFX940:       ; %bb.0:
446 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
447 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
448 ; GFX940-NEXT:    ;;#ASMSTART
449 ; GFX940-NEXT:    ; def v1
450 ; GFX940-NEXT:    ;;#ASMEND
451 ; GFX940-NEXT:    ;;#ASMSTART
452 ; GFX940-NEXT:    ; def v2
453 ; GFX940-NEXT:    ;;#ASMEND
454 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
455 ; GFX940-NEXT:    v_perm_b32 v2, v2, v2, s2
456 ; GFX940-NEXT:    global_store_short_d16_hi v0, v1, s[0:1] offset:4 sc0 sc1
457 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
458 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
459 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
460   %vec0 = call <2 x i16> asm "; def $0", "=v"()
461   %vec1 = call <2 x i16> asm "; def $0", "=v"()
462   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 1>
463   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
464   ret void
467 define void @v_shuffle_v3i16_v2i16__3_3_2(ptr addrspace(1) inreg %ptr) {
468 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_3_2:
469 ; GFX900:       ; %bb.0:
470 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
471 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
472 ; GFX900-NEXT:    ;;#ASMSTART
473 ; GFX900-NEXT:    ; def v1
474 ; GFX900-NEXT:    ;;#ASMEND
475 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
476 ; GFX900-NEXT:    v_perm_b32 v2, v1, v1, s4
477 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
478 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
479 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
480 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
482 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_3_2:
483 ; GFX90A:       ; %bb.0:
484 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
485 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
486 ; GFX90A-NEXT:    ;;#ASMSTART
487 ; GFX90A-NEXT:    ; def v1
488 ; GFX90A-NEXT:    ;;#ASMEND
489 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
490 ; GFX90A-NEXT:    v_perm_b32 v2, v1, v1, s4
491 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
492 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
493 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
494 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
496 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_3_2:
497 ; GFX940:       ; %bb.0:
498 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
499 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
500 ; GFX940-NEXT:    ;;#ASMSTART
501 ; GFX940-NEXT:    ; def v1
502 ; GFX940-NEXT:    ;;#ASMEND
503 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
504 ; GFX940-NEXT:    v_perm_b32 v2, v1, v1, s2
505 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
506 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
507 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
508 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
509   %vec0 = call <2 x i16> asm "; def $0", "=v"()
510   %vec1 = call <2 x i16> asm "; def $0", "=v"()
511   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 2>
512   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
513   ret void
516 define void @v_shuffle_v3i16_v2i16__3_3_3(ptr addrspace(1) inreg %ptr) {
517 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_3_3:
518 ; GFX900:       ; %bb.0:
519 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
520 ; GFX900-NEXT:    ;;#ASMSTART
521 ; GFX900-NEXT:    ; def v1
522 ; GFX900-NEXT:    ;;#ASMEND
523 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
524 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
525 ; GFX900-NEXT:    v_perm_b32 v2, v1, v1, s4
526 ; GFX900-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
527 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
528 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
529 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
530 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
532 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_3_3:
533 ; GFX90A:       ; %bb.0:
534 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
535 ; GFX90A-NEXT:    ;;#ASMSTART
536 ; GFX90A-NEXT:    ; def v1
537 ; GFX90A-NEXT:    ;;#ASMEND
538 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
539 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
540 ; GFX90A-NEXT:    v_perm_b32 v2, v1, v1, s4
541 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
542 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
543 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
544 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
545 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
547 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_3_3:
548 ; GFX940:       ; %bb.0:
549 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
550 ; GFX940-NEXT:    ;;#ASMSTART
551 ; GFX940-NEXT:    ; def v1
552 ; GFX940-NEXT:    ;;#ASMEND
553 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
554 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
555 ; GFX940-NEXT:    v_perm_b32 v2, v1, v1, s2
556 ; GFX940-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
557 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
558 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
559 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
560 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
561   %vec0 = call <2 x i16> asm "; def $0", "=v"()
562   %vec1 = call <2 x i16> asm "; def $0", "=v"()
563   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 3>
564   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
565   ret void
568 define void @v_shuffle_v3i16_v2i16__u_0_0(ptr addrspace(1) inreg %ptr) {
569 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__u_0_0:
570 ; GFX900:       ; %bb.0:
571 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
572 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
573 ; GFX900-NEXT:    ;;#ASMSTART
574 ; GFX900-NEXT:    ; def v1
575 ; GFX900-NEXT:    ;;#ASMEND
576 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
577 ; GFX900-NEXT:    v_perm_b32 v2, v1, v1, s4
578 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
579 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
580 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
581 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
583 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__u_0_0:
584 ; GFX90A:       ; %bb.0:
585 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
586 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
587 ; GFX90A-NEXT:    ;;#ASMSTART
588 ; GFX90A-NEXT:    ; def v1
589 ; GFX90A-NEXT:    ;;#ASMEND
590 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
591 ; GFX90A-NEXT:    v_perm_b32 v2, v1, v1, s4
592 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
593 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
594 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
595 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
597 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__u_0_0:
598 ; GFX940:       ; %bb.0:
599 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
600 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
601 ; GFX940-NEXT:    ;;#ASMSTART
602 ; GFX940-NEXT:    ; def v1
603 ; GFX940-NEXT:    ;;#ASMEND
604 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
605 ; GFX940-NEXT:    v_perm_b32 v2, v1, v1, s2
606 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
607 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
608 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
609 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
610   %vec0 = call <2 x i16> asm "; def $0", "=v"()
611   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 0, i32 0>
612   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
613   ret void
616 define void @v_shuffle_v3i16_v2i16__0_0_0(ptr addrspace(1) inreg %ptr) {
617 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__0_0_0:
618 ; GFX900:       ; %bb.0:
619 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
620 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
621 ; GFX900-NEXT:    ;;#ASMSTART
622 ; GFX900-NEXT:    ; def v1
623 ; GFX900-NEXT:    ;;#ASMEND
624 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
625 ; GFX900-NEXT:    v_perm_b32 v2, v1, v1, s4
626 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
627 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
628 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
629 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
631 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__0_0_0:
632 ; GFX90A:       ; %bb.0:
633 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
634 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
635 ; GFX90A-NEXT:    ;;#ASMSTART
636 ; GFX90A-NEXT:    ; def v1
637 ; GFX90A-NEXT:    ;;#ASMEND
638 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
639 ; GFX90A-NEXT:    v_perm_b32 v2, v1, v1, s4
640 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
641 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
642 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
643 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
645 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__0_0_0:
646 ; GFX940:       ; %bb.0:
647 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
648 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
649 ; GFX940-NEXT:    ;;#ASMSTART
650 ; GFX940-NEXT:    ; def v1
651 ; GFX940-NEXT:    ;;#ASMEND
652 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
653 ; GFX940-NEXT:    v_perm_b32 v2, v1, v1, s2
654 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
655 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
656 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
657 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
658   %vec0 = call <2 x i16> asm "; def $0", "=v"()
659   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> zeroinitializer
660   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
661   ret void
664 define void @v_shuffle_v3i16_v2i16__1_0_0(ptr addrspace(1) inreg %ptr) {
665 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__1_0_0:
666 ; GFX900:       ; %bb.0:
667 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
668 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
669 ; GFX900-NEXT:    ;;#ASMSTART
670 ; GFX900-NEXT:    ; def v1
671 ; GFX900-NEXT:    ;;#ASMEND
672 ; GFX900-NEXT:    v_alignbit_b32 v2, v1, v1, 16
673 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
674 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
675 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
676 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
678 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__1_0_0:
679 ; GFX90A:       ; %bb.0:
680 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
681 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
682 ; GFX90A-NEXT:    ;;#ASMSTART
683 ; GFX90A-NEXT:    ; def v1
684 ; GFX90A-NEXT:    ;;#ASMEND
685 ; GFX90A-NEXT:    v_alignbit_b32 v2, v1, v1, 16
686 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
687 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
688 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
689 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
691 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__1_0_0:
692 ; GFX940:       ; %bb.0:
693 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
694 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
695 ; GFX940-NEXT:    ;;#ASMSTART
696 ; GFX940-NEXT:    ; def v1
697 ; GFX940-NEXT:    ;;#ASMEND
698 ; GFX940-NEXT:    s_nop 0
699 ; GFX940-NEXT:    v_alignbit_b32 v2, v1, v1, 16
700 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
701 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
702 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
703 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
704   %vec0 = call <2 x i16> asm "; def $0", "=v"()
705   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 0, i32 0>
706   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
707   ret void
710 define void @v_shuffle_v3i16_v2i16__2_0_0(ptr addrspace(1) inreg %ptr) {
711 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__2_0_0:
712 ; GFX900:       ; %bb.0:
713 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
714 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
715 ; GFX900-NEXT:    ;;#ASMSTART
716 ; GFX900-NEXT:    ; def v1
717 ; GFX900-NEXT:    ;;#ASMEND
718 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
719 ; GFX900-NEXT:    v_perm_b32 v2, v1, v1, s4
720 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
721 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
722 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
723 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
725 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__2_0_0:
726 ; GFX90A:       ; %bb.0:
727 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
728 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
729 ; GFX90A-NEXT:    ;;#ASMSTART
730 ; GFX90A-NEXT:    ; def v1
731 ; GFX90A-NEXT:    ;;#ASMEND
732 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
733 ; GFX90A-NEXT:    v_perm_b32 v2, v1, v1, s4
734 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
735 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
736 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
737 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
739 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__2_0_0:
740 ; GFX940:       ; %bb.0:
741 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
742 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
743 ; GFX940-NEXT:    ;;#ASMSTART
744 ; GFX940-NEXT:    ; def v1
745 ; GFX940-NEXT:    ;;#ASMEND
746 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
747 ; GFX940-NEXT:    v_perm_b32 v2, v1, v1, s2
748 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
749 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
750 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
751 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
752   %vec0 = call <2 x i16> asm "; def $0", "=v"()
753   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 0, i32 0>
754   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
755   ret void
758 define void @v_shuffle_v3i16_v2i16__3_0_0(ptr addrspace(1) inreg %ptr) {
759 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_0_0:
760 ; GFX900:       ; %bb.0:
761 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
762 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
763 ; GFX900-NEXT:    ;;#ASMSTART
764 ; GFX900-NEXT:    ; def v1
765 ; GFX900-NEXT:    ;;#ASMEND
766 ; GFX900-NEXT:    ;;#ASMSTART
767 ; GFX900-NEXT:    ; def v2
768 ; GFX900-NEXT:    ;;#ASMEND
769 ; GFX900-NEXT:    v_alignbit_b32 v2, v1, v2, 16
770 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
771 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
772 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
773 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
775 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_0_0:
776 ; GFX90A:       ; %bb.0:
777 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
778 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
779 ; GFX90A-NEXT:    ;;#ASMSTART
780 ; GFX90A-NEXT:    ; def v1
781 ; GFX90A-NEXT:    ;;#ASMEND
782 ; GFX90A-NEXT:    ;;#ASMSTART
783 ; GFX90A-NEXT:    ; def v2
784 ; GFX90A-NEXT:    ;;#ASMEND
785 ; GFX90A-NEXT:    v_alignbit_b32 v2, v1, v2, 16
786 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
787 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
788 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
789 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
791 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_0_0:
792 ; GFX940:       ; %bb.0:
793 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
794 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
795 ; GFX940-NEXT:    ;;#ASMSTART
796 ; GFX940-NEXT:    ; def v1
797 ; GFX940-NEXT:    ;;#ASMEND
798 ; GFX940-NEXT:    ;;#ASMSTART
799 ; GFX940-NEXT:    ; def v2
800 ; GFX940-NEXT:    ;;#ASMEND
801 ; GFX940-NEXT:    s_nop 0
802 ; GFX940-NEXT:    v_alignbit_b32 v2, v1, v2, 16
803 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
804 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
805 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
806 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
807   %vec0 = call <2 x i16> asm "; def $0", "=v"()
808   %vec1 = call <2 x i16> asm "; def $0", "=v"()
809   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 0>
810   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
811   ret void
814 define void @v_shuffle_v3i16_v2i16__3_u_0(ptr addrspace(1) inreg %ptr) {
815 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_u_0:
816 ; GFX900:       ; %bb.0:
817 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
818 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
819 ; GFX900-NEXT:    ;;#ASMSTART
820 ; GFX900-NEXT:    ; def v1
821 ; GFX900-NEXT:    ;;#ASMEND
822 ; GFX900-NEXT:    ;;#ASMSTART
823 ; GFX900-NEXT:    ; def v2
824 ; GFX900-NEXT:    ;;#ASMEND
825 ; GFX900-NEXT:    v_alignbit_b32 v2, s4, v2, 16
826 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
827 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
828 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
829 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
831 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_u_0:
832 ; GFX90A:       ; %bb.0:
833 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
834 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
835 ; GFX90A-NEXT:    ;;#ASMSTART
836 ; GFX90A-NEXT:    ; def v1
837 ; GFX90A-NEXT:    ;;#ASMEND
838 ; GFX90A-NEXT:    ;;#ASMSTART
839 ; GFX90A-NEXT:    ; def v2
840 ; GFX90A-NEXT:    ;;#ASMEND
841 ; GFX90A-NEXT:    v_alignbit_b32 v2, s4, v2, 16
842 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
843 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
844 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
845 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
847 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_u_0:
848 ; GFX940:       ; %bb.0:
849 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
850 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
851 ; GFX940-NEXT:    ;;#ASMSTART
852 ; GFX940-NEXT:    ; def v1
853 ; GFX940-NEXT:    ;;#ASMEND
854 ; GFX940-NEXT:    ;;#ASMSTART
855 ; GFX940-NEXT:    ; def v2
856 ; GFX940-NEXT:    ;;#ASMEND
857 ; GFX940-NEXT:    s_nop 0
858 ; GFX940-NEXT:    v_alignbit_b32 v2, s0, v2, 16
859 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
860 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
861 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
862 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
863   %vec0 = call <2 x i16> asm "; def $0", "=v"()
864   %vec1 = call <2 x i16> asm "; def $0", "=v"()
865   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 0>
866   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
867   ret void
870 define void @v_shuffle_v3i16_v2i16__3_1_0(ptr addrspace(1) inreg %ptr) {
871 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_1_0:
872 ; GFX900:       ; %bb.0:
873 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
874 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
875 ; GFX900-NEXT:    ;;#ASMSTART
876 ; GFX900-NEXT:    ; def v1
877 ; GFX900-NEXT:    ;;#ASMEND
878 ; GFX900-NEXT:    ;;#ASMSTART
879 ; GFX900-NEXT:    ; def v2
880 ; GFX900-NEXT:    ;;#ASMEND
881 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
882 ; GFX900-NEXT:    v_perm_b32 v2, v1, v2, s4
883 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
884 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
885 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
886 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
888 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_1_0:
889 ; GFX90A:       ; %bb.0:
890 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
891 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
892 ; GFX90A-NEXT:    ;;#ASMSTART
893 ; GFX90A-NEXT:    ; def v1
894 ; GFX90A-NEXT:    ;;#ASMEND
895 ; GFX90A-NEXT:    ;;#ASMSTART
896 ; GFX90A-NEXT:    ; def v2
897 ; GFX90A-NEXT:    ;;#ASMEND
898 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
899 ; GFX90A-NEXT:    v_perm_b32 v2, v1, v2, s4
900 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
901 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
902 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
903 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
905 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_1_0:
906 ; GFX940:       ; %bb.0:
907 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
908 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
909 ; GFX940-NEXT:    ;;#ASMSTART
910 ; GFX940-NEXT:    ; def v1
911 ; GFX940-NEXT:    ;;#ASMEND
912 ; GFX940-NEXT:    ;;#ASMSTART
913 ; GFX940-NEXT:    ; def v2
914 ; GFX940-NEXT:    ;;#ASMEND
915 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
916 ; GFX940-NEXT:    v_perm_b32 v2, v1, v2, s2
917 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
918 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
919 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
920 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
921   %vec0 = call <2 x i16> asm "; def $0", "=v"()
922   %vec1 = call <2 x i16> asm "; def $0", "=v"()
923   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 0>
924   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
925   ret void
928 define void @v_shuffle_v3i16_v2i16__3_2_0(ptr addrspace(1) inreg %ptr) {
929 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_2_0:
930 ; GFX900:       ; %bb.0:
931 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
932 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
933 ; GFX900-NEXT:    ;;#ASMSTART
934 ; GFX900-NEXT:    ; def v1
935 ; GFX900-NEXT:    ;;#ASMEND
936 ; GFX900-NEXT:    ;;#ASMSTART
937 ; GFX900-NEXT:    ; def v2
938 ; GFX900-NEXT:    ;;#ASMEND
939 ; GFX900-NEXT:    v_alignbit_b32 v2, v2, v2, 16
940 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
941 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
942 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
943 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
945 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_2_0:
946 ; GFX90A:       ; %bb.0:
947 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
948 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
949 ; GFX90A-NEXT:    ;;#ASMSTART
950 ; GFX90A-NEXT:    ; def v1
951 ; GFX90A-NEXT:    ;;#ASMEND
952 ; GFX90A-NEXT:    ;;#ASMSTART
953 ; GFX90A-NEXT:    ; def v2
954 ; GFX90A-NEXT:    ;;#ASMEND
955 ; GFX90A-NEXT:    v_alignbit_b32 v2, v2, v2, 16
956 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
957 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
958 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
959 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
961 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_2_0:
962 ; GFX940:       ; %bb.0:
963 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
964 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
965 ; GFX940-NEXT:    ;;#ASMSTART
966 ; GFX940-NEXT:    ; def v1
967 ; GFX940-NEXT:    ;;#ASMEND
968 ; GFX940-NEXT:    ;;#ASMSTART
969 ; GFX940-NEXT:    ; def v2
970 ; GFX940-NEXT:    ;;#ASMEND
971 ; GFX940-NEXT:    s_nop 0
972 ; GFX940-NEXT:    v_alignbit_b32 v2, v2, v2, 16
973 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
974 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
975 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
976 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
977   %vec0 = call <2 x i16> asm "; def $0", "=v"()
978   %vec1 = call <2 x i16> asm "; def $0", "=v"()
979   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 0>
980   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
981   ret void
984 define void @v_shuffle_v3i16_v2i16__u_1_1(ptr addrspace(1) inreg %ptr) {
985 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__u_1_1:
986 ; GFX900:       ; %bb.0:
987 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
988 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
989 ; GFX900-NEXT:    ;;#ASMSTART
990 ; GFX900-NEXT:    ; def v1
991 ; GFX900-NEXT:    ;;#ASMEND
992 ; GFX900-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
993 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
994 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
995 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
997 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__u_1_1:
998 ; GFX90A:       ; %bb.0:
999 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1000 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1001 ; GFX90A-NEXT:    ;;#ASMSTART
1002 ; GFX90A-NEXT:    ; def v1
1003 ; GFX90A-NEXT:    ;;#ASMEND
1004 ; GFX90A-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1005 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1006 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1007 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1009 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__u_1_1:
1010 ; GFX940:       ; %bb.0:
1011 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1012 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1013 ; GFX940-NEXT:    ;;#ASMSTART
1014 ; GFX940-NEXT:    ; def v1
1015 ; GFX940-NEXT:    ;;#ASMEND
1016 ; GFX940-NEXT:    global_store_short_d16_hi v0, v1, s[0:1] offset:4 sc0 sc1
1017 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
1018 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1019 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1020   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1021   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 1, i32 1>
1022   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1023   ret void
1026 define void @v_shuffle_v3i16_v2i16__0_1_1(ptr addrspace(1) inreg %ptr) {
1027 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__0_1_1:
1028 ; GFX900:       ; %bb.0:
1029 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1030 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1031 ; GFX900-NEXT:    ;;#ASMSTART
1032 ; GFX900-NEXT:    ; def v1
1033 ; GFX900-NEXT:    ;;#ASMEND
1034 ; GFX900-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1035 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
1036 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1037 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1039 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__0_1_1:
1040 ; GFX90A:       ; %bb.0:
1041 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1042 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1043 ; GFX90A-NEXT:    ;;#ASMSTART
1044 ; GFX90A-NEXT:    ; def v1
1045 ; GFX90A-NEXT:    ;;#ASMEND
1046 ; GFX90A-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1047 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1048 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1049 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1051 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__0_1_1:
1052 ; GFX940:       ; %bb.0:
1053 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1054 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1055 ; GFX940-NEXT:    ;;#ASMSTART
1056 ; GFX940-NEXT:    ; def v1
1057 ; GFX940-NEXT:    ;;#ASMEND
1058 ; GFX940-NEXT:    global_store_short_d16_hi v0, v1, s[0:1] offset:4 sc0 sc1
1059 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
1060 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1061 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1062   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1063   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 1, i32 1>
1064   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1065   ret void
1068 define void @v_shuffle_v3i16_v2i16__1_1_1(ptr addrspace(1) inreg %ptr) {
1069 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__1_1_1:
1070 ; GFX900:       ; %bb.0:
1071 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1072 ; GFX900-NEXT:    ;;#ASMSTART
1073 ; GFX900-NEXT:    ; def v1
1074 ; GFX900-NEXT:    ;;#ASMEND
1075 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
1076 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1077 ; GFX900-NEXT:    v_perm_b32 v2, v1, v1, s4
1078 ; GFX900-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1079 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
1080 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1081 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1082 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1084 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__1_1_1:
1085 ; GFX90A:       ; %bb.0:
1086 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1087 ; GFX90A-NEXT:    ;;#ASMSTART
1088 ; GFX90A-NEXT:    ; def v1
1089 ; GFX90A-NEXT:    ;;#ASMEND
1090 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
1091 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1092 ; GFX90A-NEXT:    v_perm_b32 v2, v1, v1, s4
1093 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1094 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
1095 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1096 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1097 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1099 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__1_1_1:
1100 ; GFX940:       ; %bb.0:
1101 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1102 ; GFX940-NEXT:    ;;#ASMSTART
1103 ; GFX940-NEXT:    ; def v1
1104 ; GFX940-NEXT:    ;;#ASMEND
1105 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
1106 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1107 ; GFX940-NEXT:    v_perm_b32 v2, v1, v1, s2
1108 ; GFX940-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1109 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
1110 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
1111 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1112 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1113   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1114   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 1, i32 1>
1115   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1116   ret void
1119 define void @v_shuffle_v3i16_v2i16__2_1_1(ptr addrspace(1) inreg %ptr) {
1120 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__2_1_1:
1121 ; GFX900:       ; %bb.0:
1122 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1123 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1124 ; GFX900-NEXT:    ;;#ASMSTART
1125 ; GFX900-NEXT:    ; def v1
1126 ; GFX900-NEXT:    ;;#ASMEND
1127 ; GFX900-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1128 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
1129 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1130 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1132 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__2_1_1:
1133 ; GFX90A:       ; %bb.0:
1134 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1135 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1136 ; GFX90A-NEXT:    ;;#ASMSTART
1137 ; GFX90A-NEXT:    ; def v1
1138 ; GFX90A-NEXT:    ;;#ASMEND
1139 ; GFX90A-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1140 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1141 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1142 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1144 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__2_1_1:
1145 ; GFX940:       ; %bb.0:
1146 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1147 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1148 ; GFX940-NEXT:    ;;#ASMSTART
1149 ; GFX940-NEXT:    ; def v1
1150 ; GFX940-NEXT:    ;;#ASMEND
1151 ; GFX940-NEXT:    global_store_short_d16_hi v0, v1, s[0:1] offset:4 sc0 sc1
1152 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
1153 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1154 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1155   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1156   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 1, i32 1>
1157   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1158   ret void
1161 define void @v_shuffle_v3i16_v2i16__3_1_1(ptr addrspace(1) inreg %ptr) {
1162 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_1_1:
1163 ; GFX900:       ; %bb.0:
1164 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1165 ; GFX900-NEXT:    ;;#ASMSTART
1166 ; GFX900-NEXT:    ; def v1
1167 ; GFX900-NEXT:    ;;#ASMEND
1168 ; GFX900-NEXT:    ;;#ASMSTART
1169 ; GFX900-NEXT:    ; def v2
1170 ; GFX900-NEXT:    ;;#ASMEND
1171 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
1172 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1173 ; GFX900-NEXT:    v_perm_b32 v2, v1, v2, s4
1174 ; GFX900-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1175 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
1176 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1177 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1178 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1180 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_1_1:
1181 ; GFX90A:       ; %bb.0:
1182 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1183 ; GFX90A-NEXT:    ;;#ASMSTART
1184 ; GFX90A-NEXT:    ; def v1
1185 ; GFX90A-NEXT:    ;;#ASMEND
1186 ; GFX90A-NEXT:    ;;#ASMSTART
1187 ; GFX90A-NEXT:    ; def v2
1188 ; GFX90A-NEXT:    ;;#ASMEND
1189 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
1190 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1191 ; GFX90A-NEXT:    v_perm_b32 v2, v1, v2, s4
1192 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1193 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
1194 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1195 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1196 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1198 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_1_1:
1199 ; GFX940:       ; %bb.0:
1200 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1201 ; GFX940-NEXT:    ;;#ASMSTART
1202 ; GFX940-NEXT:    ; def v1
1203 ; GFX940-NEXT:    ;;#ASMEND
1204 ; GFX940-NEXT:    ;;#ASMSTART
1205 ; GFX940-NEXT:    ; def v2
1206 ; GFX940-NEXT:    ;;#ASMEND
1207 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
1208 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1209 ; GFX940-NEXT:    v_perm_b32 v2, v1, v2, s2
1210 ; GFX940-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1211 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
1212 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
1213 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1214 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1215   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1216   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1217   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 1>
1218   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1219   ret void
1222 define void @v_shuffle_v3i16_v2i16__3_u_1(ptr addrspace(1) inreg %ptr) {
1223 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_u_1:
1224 ; GFX900:       ; %bb.0:
1225 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1226 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1227 ; GFX900-NEXT:    ;;#ASMSTART
1228 ; GFX900-NEXT:    ; def v1
1229 ; GFX900-NEXT:    ;;#ASMEND
1230 ; GFX900-NEXT:    ;;#ASMSTART
1231 ; GFX900-NEXT:    ; def v2
1232 ; GFX900-NEXT:    ;;#ASMEND
1233 ; GFX900-NEXT:    v_alignbit_b32 v2, s4, v2, 16
1234 ; GFX900-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1235 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
1236 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1237 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1239 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_u_1:
1240 ; GFX90A:       ; %bb.0:
1241 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1242 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1243 ; GFX90A-NEXT:    ;;#ASMSTART
1244 ; GFX90A-NEXT:    ; def v1
1245 ; GFX90A-NEXT:    ;;#ASMEND
1246 ; GFX90A-NEXT:    ;;#ASMSTART
1247 ; GFX90A-NEXT:    ; def v2
1248 ; GFX90A-NEXT:    ;;#ASMEND
1249 ; GFX90A-NEXT:    v_alignbit_b32 v2, s4, v2, 16
1250 ; GFX90A-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1251 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
1252 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1253 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1255 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_u_1:
1256 ; GFX940:       ; %bb.0:
1257 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1258 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1259 ; GFX940-NEXT:    ;;#ASMSTART
1260 ; GFX940-NEXT:    ; def v1
1261 ; GFX940-NEXT:    ;;#ASMEND
1262 ; GFX940-NEXT:    ;;#ASMSTART
1263 ; GFX940-NEXT:    ; def v2
1264 ; GFX940-NEXT:    ;;#ASMEND
1265 ; GFX940-NEXT:    s_nop 0
1266 ; GFX940-NEXT:    v_alignbit_b32 v2, s0, v2, 16
1267 ; GFX940-NEXT:    global_store_short_d16_hi v0, v1, s[0:1] offset:4 sc0 sc1
1268 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
1269 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1270 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1271   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1272   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1273   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 1>
1274   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1275   ret void
1278 define void @v_shuffle_v3i16_v2i16__3_0_1(ptr addrspace(1) inreg %ptr) {
1279 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_0_1:
1280 ; GFX900:       ; %bb.0:
1281 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1282 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1283 ; GFX900-NEXT:    ;;#ASMSTART
1284 ; GFX900-NEXT:    ; def v1
1285 ; GFX900-NEXT:    ;;#ASMEND
1286 ; GFX900-NEXT:    ;;#ASMSTART
1287 ; GFX900-NEXT:    ; def v2
1288 ; GFX900-NEXT:    ;;#ASMEND
1289 ; GFX900-NEXT:    v_alignbit_b32 v2, v1, v2, 16
1290 ; GFX900-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1291 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
1292 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1293 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1295 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_0_1:
1296 ; GFX90A:       ; %bb.0:
1297 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1298 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1299 ; GFX90A-NEXT:    ;;#ASMSTART
1300 ; GFX90A-NEXT:    ; def v1
1301 ; GFX90A-NEXT:    ;;#ASMEND
1302 ; GFX90A-NEXT:    ;;#ASMSTART
1303 ; GFX90A-NEXT:    ; def v2
1304 ; GFX90A-NEXT:    ;;#ASMEND
1305 ; GFX90A-NEXT:    v_alignbit_b32 v2, v1, v2, 16
1306 ; GFX90A-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1307 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
1308 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1309 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1311 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_0_1:
1312 ; GFX940:       ; %bb.0:
1313 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1314 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1315 ; GFX940-NEXT:    ;;#ASMSTART
1316 ; GFX940-NEXT:    ; def v1
1317 ; GFX940-NEXT:    ;;#ASMEND
1318 ; GFX940-NEXT:    ;;#ASMSTART
1319 ; GFX940-NEXT:    ; def v2
1320 ; GFX940-NEXT:    ;;#ASMEND
1321 ; GFX940-NEXT:    s_nop 0
1322 ; GFX940-NEXT:    v_alignbit_b32 v2, v1, v2, 16
1323 ; GFX940-NEXT:    global_store_short_d16_hi v0, v1, s[0:1] offset:4 sc0 sc1
1324 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
1325 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1326 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1327   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1328   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1329   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 1>
1330   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1331   ret void
1334 define void @v_shuffle_v3i16_v2i16__3_2_1(ptr addrspace(1) inreg %ptr) {
1335 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_2_1:
1336 ; GFX900:       ; %bb.0:
1337 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1338 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1339 ; GFX900-NEXT:    ;;#ASMSTART
1340 ; GFX900-NEXT:    ; def v1
1341 ; GFX900-NEXT:    ;;#ASMEND
1342 ; GFX900-NEXT:    ;;#ASMSTART
1343 ; GFX900-NEXT:    ; def v2
1344 ; GFX900-NEXT:    ;;#ASMEND
1345 ; GFX900-NEXT:    v_alignbit_b32 v2, v2, v2, 16
1346 ; GFX900-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1347 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
1348 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1349 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1351 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_2_1:
1352 ; GFX90A:       ; %bb.0:
1353 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1354 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1355 ; GFX90A-NEXT:    ;;#ASMSTART
1356 ; GFX90A-NEXT:    ; def v1
1357 ; GFX90A-NEXT:    ;;#ASMEND
1358 ; GFX90A-NEXT:    ;;#ASMSTART
1359 ; GFX90A-NEXT:    ; def v2
1360 ; GFX90A-NEXT:    ;;#ASMEND
1361 ; GFX90A-NEXT:    v_alignbit_b32 v2, v2, v2, 16
1362 ; GFX90A-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1363 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
1364 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1365 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1367 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_2_1:
1368 ; GFX940:       ; %bb.0:
1369 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1370 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1371 ; GFX940-NEXT:    ;;#ASMSTART
1372 ; GFX940-NEXT:    ; def v1
1373 ; GFX940-NEXT:    ;;#ASMEND
1374 ; GFX940-NEXT:    ;;#ASMSTART
1375 ; GFX940-NEXT:    ; def v2
1376 ; GFX940-NEXT:    ;;#ASMEND
1377 ; GFX940-NEXT:    s_nop 0
1378 ; GFX940-NEXT:    v_alignbit_b32 v2, v2, v2, 16
1379 ; GFX940-NEXT:    global_store_short_d16_hi v0, v1, s[0:1] offset:4 sc0 sc1
1380 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
1381 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1382 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1383   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1384   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1385   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 1>
1386   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1387   ret void
1390 define void @v_shuffle_v3i16_v2i16__u_2_2(ptr addrspace(1) inreg %ptr) {
1391 ; GFX9-LABEL: v_shuffle_v3i16_v2i16__u_2_2:
1392 ; GFX9:       ; %bb.0:
1393 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1394 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1395   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1396   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 2, i32 2>
1397   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1398   ret void
1401 define void @v_shuffle_v3i16_v2i16__0_2_2(ptr addrspace(1) inreg %ptr) {
1402 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__0_2_2:
1403 ; GFX900:       ; %bb.0:
1404 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1405 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1406 ; GFX900-NEXT:    ;;#ASMSTART
1407 ; GFX900-NEXT:    ; def v1
1408 ; GFX900-NEXT:    ;;#ASMEND
1409 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
1410 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1411 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1413 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__0_2_2:
1414 ; GFX90A:       ; %bb.0:
1415 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1416 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1417 ; GFX90A-NEXT:    ;;#ASMSTART
1418 ; GFX90A-NEXT:    ; def v1
1419 ; GFX90A-NEXT:    ;;#ASMEND
1420 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1421 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1422 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1424 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__0_2_2:
1425 ; GFX940:       ; %bb.0:
1426 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1427 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1428 ; GFX940-NEXT:    ;;#ASMSTART
1429 ; GFX940-NEXT:    ; def v1
1430 ; GFX940-NEXT:    ;;#ASMEND
1431 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
1432 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1433 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1434   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1435   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 2, i32 2>
1436   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1437   ret void
1440 define void @v_shuffle_v3i16_v2i16__1_2_2(ptr addrspace(1) inreg %ptr) {
1441 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__1_2_2:
1442 ; GFX900:       ; %bb.0:
1443 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1444 ; GFX900-NEXT:    ;;#ASMSTART
1445 ; GFX900-NEXT:    ; def v1
1446 ; GFX900-NEXT:    ;;#ASMEND
1447 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1448 ; GFX900-NEXT:    v_alignbit_b32 v1, s4, v1, 16
1449 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
1450 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1451 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1453 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__1_2_2:
1454 ; GFX90A:       ; %bb.0:
1455 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1456 ; GFX90A-NEXT:    ;;#ASMSTART
1457 ; GFX90A-NEXT:    ; def v1
1458 ; GFX90A-NEXT:    ;;#ASMEND
1459 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1460 ; GFX90A-NEXT:    v_alignbit_b32 v1, s4, v1, 16
1461 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1462 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1463 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1465 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__1_2_2:
1466 ; GFX940:       ; %bb.0:
1467 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1468 ; GFX940-NEXT:    ;;#ASMSTART
1469 ; GFX940-NEXT:    ; def v1
1470 ; GFX940-NEXT:    ;;#ASMEND
1471 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1472 ; GFX940-NEXT:    v_alignbit_b32 v1, s0, v1, 16
1473 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
1474 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1475 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1476   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1477   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 2, i32 2>
1478   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1479   ret void
1482 define void @v_shuffle_v3i16_v2i16__2_2_2(ptr addrspace(1) inreg %ptr) {
1483 ; GFX9-LABEL: v_shuffle_v3i16_v2i16__2_2_2:
1484 ; GFX9:       ; %bb.0:
1485 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1486 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1487   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1488   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 2, i32 2>
1489   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1490   ret void
1493 define void @v_shuffle_v3i16_v2i16__3_2_2(ptr addrspace(1) inreg %ptr) {
1494 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_2_2:
1495 ; GFX900:       ; %bb.0:
1496 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1497 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1498 ; GFX900-NEXT:    ;;#ASMSTART
1499 ; GFX900-NEXT:    ; def v1
1500 ; GFX900-NEXT:    ;;#ASMEND
1501 ; GFX900-NEXT:    v_alignbit_b32 v2, v1, v1, 16
1502 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1503 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
1504 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1505 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1507 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_2_2:
1508 ; GFX90A:       ; %bb.0:
1509 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1510 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1511 ; GFX90A-NEXT:    ;;#ASMSTART
1512 ; GFX90A-NEXT:    ; def v1
1513 ; GFX90A-NEXT:    ;;#ASMEND
1514 ; GFX90A-NEXT:    v_alignbit_b32 v2, v1, v1, 16
1515 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1516 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
1517 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1518 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1520 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_2_2:
1521 ; GFX940:       ; %bb.0:
1522 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1523 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1524 ; GFX940-NEXT:    ;;#ASMSTART
1525 ; GFX940-NEXT:    ; def v1
1526 ; GFX940-NEXT:    ;;#ASMEND
1527 ; GFX940-NEXT:    s_nop 0
1528 ; GFX940-NEXT:    v_alignbit_b32 v2, v1, v1, 16
1529 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
1530 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
1531 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1532 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1533   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1534   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1535   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 2>
1536   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1537   ret void
1540 define void @v_shuffle_v3i16_v2i16__3_u_2(ptr addrspace(1) inreg %ptr) {
1541 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_u_2:
1542 ; GFX900:       ; %bb.0:
1543 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1544 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1545 ; GFX900-NEXT:    ;;#ASMSTART
1546 ; GFX900-NEXT:    ; def v1
1547 ; GFX900-NEXT:    ;;#ASMEND
1548 ; GFX900-NEXT:    v_alignbit_b32 v2, s4, v1, 16
1549 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1550 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
1551 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1552 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1554 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_u_2:
1555 ; GFX90A:       ; %bb.0:
1556 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1557 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1558 ; GFX90A-NEXT:    ;;#ASMSTART
1559 ; GFX90A-NEXT:    ; def v1
1560 ; GFX90A-NEXT:    ;;#ASMEND
1561 ; GFX90A-NEXT:    v_alignbit_b32 v2, s4, v1, 16
1562 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1563 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
1564 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1565 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1567 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_u_2:
1568 ; GFX940:       ; %bb.0:
1569 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1570 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1571 ; GFX940-NEXT:    ;;#ASMSTART
1572 ; GFX940-NEXT:    ; def v1
1573 ; GFX940-NEXT:    ;;#ASMEND
1574 ; GFX940-NEXT:    s_nop 0
1575 ; GFX940-NEXT:    v_alignbit_b32 v2, s0, v1, 16
1576 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
1577 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
1578 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1579 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1580   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1581   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1582   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>
1583   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1584   ret void
1587 define void @v_shuffle_v3i16_v2i16__3_0_2(ptr addrspace(1) inreg %ptr) {
1588 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_0_2:
1589 ; GFX900:       ; %bb.0:
1590 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1591 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1592 ; GFX900-NEXT:    ;;#ASMSTART
1593 ; GFX900-NEXT:    ; def v1
1594 ; GFX900-NEXT:    ;;#ASMEND
1595 ; GFX900-NEXT:    ;;#ASMSTART
1596 ; GFX900-NEXT:    ; def v2
1597 ; GFX900-NEXT:    ;;#ASMEND
1598 ; GFX900-NEXT:    v_alignbit_b32 v1, v1, v2, 16
1599 ; GFX900-NEXT:    global_store_short v0, v2, s[16:17] offset:4
1600 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
1601 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1602 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1604 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_0_2:
1605 ; GFX90A:       ; %bb.0:
1606 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1607 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1608 ; GFX90A-NEXT:    ;;#ASMSTART
1609 ; GFX90A-NEXT:    ; def v1
1610 ; GFX90A-NEXT:    ;;#ASMEND
1611 ; GFX90A-NEXT:    ;;#ASMSTART
1612 ; GFX90A-NEXT:    ; def v2
1613 ; GFX90A-NEXT:    ;;#ASMEND
1614 ; GFX90A-NEXT:    v_alignbit_b32 v1, v1, v2, 16
1615 ; GFX90A-NEXT:    global_store_short v0, v2, s[16:17] offset:4
1616 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1617 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1618 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1620 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_0_2:
1621 ; GFX940:       ; %bb.0:
1622 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1623 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1624 ; GFX940-NEXT:    ;;#ASMSTART
1625 ; GFX940-NEXT:    ; def v1
1626 ; GFX940-NEXT:    ;;#ASMEND
1627 ; GFX940-NEXT:    ;;#ASMSTART
1628 ; GFX940-NEXT:    ; def v2
1629 ; GFX940-NEXT:    ;;#ASMEND
1630 ; GFX940-NEXT:    s_nop 0
1631 ; GFX940-NEXT:    v_alignbit_b32 v1, v1, v2, 16
1632 ; GFX940-NEXT:    global_store_short v0, v2, s[0:1] offset:4 sc0 sc1
1633 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
1634 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1635 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1636   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1637   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1638   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 2>
1639   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1640   ret void
1643 define void @v_shuffle_v3i16_v2i16__3_1_2(ptr addrspace(1) inreg %ptr) {
1644 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_1_2:
1645 ; GFX900:       ; %bb.0:
1646 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1647 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1648 ; GFX900-NEXT:    ;;#ASMSTART
1649 ; GFX900-NEXT:    ; def v1
1650 ; GFX900-NEXT:    ;;#ASMEND
1651 ; GFX900-NEXT:    ;;#ASMSTART
1652 ; GFX900-NEXT:    ; def v2
1653 ; GFX900-NEXT:    ;;#ASMEND
1654 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
1655 ; GFX900-NEXT:    v_perm_b32 v1, v1, v2, s4
1656 ; GFX900-NEXT:    global_store_short v0, v2, s[16:17] offset:4
1657 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
1658 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1659 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1661 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_1_2:
1662 ; GFX90A:       ; %bb.0:
1663 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1664 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1665 ; GFX90A-NEXT:    ;;#ASMSTART
1666 ; GFX90A-NEXT:    ; def v1
1667 ; GFX90A-NEXT:    ;;#ASMEND
1668 ; GFX90A-NEXT:    ;;#ASMSTART
1669 ; GFX90A-NEXT:    ; def v2
1670 ; GFX90A-NEXT:    ;;#ASMEND
1671 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
1672 ; GFX90A-NEXT:    v_perm_b32 v1, v1, v2, s4
1673 ; GFX90A-NEXT:    global_store_short v0, v2, s[16:17] offset:4
1674 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1675 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1676 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1678 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_1_2:
1679 ; GFX940:       ; %bb.0:
1680 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1681 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1682 ; GFX940-NEXT:    ;;#ASMSTART
1683 ; GFX940-NEXT:    ; def v1
1684 ; GFX940-NEXT:    ;;#ASMEND
1685 ; GFX940-NEXT:    ;;#ASMSTART
1686 ; GFX940-NEXT:    ; def v2
1687 ; GFX940-NEXT:    ;;#ASMEND
1688 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
1689 ; GFX940-NEXT:    v_perm_b32 v1, v1, v2, s2
1690 ; GFX940-NEXT:    global_store_short v0, v2, s[0:1] offset:4 sc0 sc1
1691 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
1692 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1693 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1694   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1695   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1696   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 2>
1697   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1698   ret void
1701 define void @v_shuffle_v3i16_v2i16__u_3_3(ptr addrspace(1) inreg %ptr) {
1702 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__u_3_3:
1703 ; GFX900:       ; %bb.0:
1704 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1705 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1706 ; GFX900-NEXT:    ;;#ASMSTART
1707 ; GFX900-NEXT:    ; def v1
1708 ; GFX900-NEXT:    ;;#ASMEND
1709 ; GFX900-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1710 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
1711 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1712 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1714 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__u_3_3:
1715 ; GFX90A:       ; %bb.0:
1716 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1717 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1718 ; GFX90A-NEXT:    ;;#ASMSTART
1719 ; GFX90A-NEXT:    ; def v1
1720 ; GFX90A-NEXT:    ;;#ASMEND
1721 ; GFX90A-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1722 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1723 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1724 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1726 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__u_3_3:
1727 ; GFX940:       ; %bb.0:
1728 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1729 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1730 ; GFX940-NEXT:    ;;#ASMSTART
1731 ; GFX940-NEXT:    ; def v1
1732 ; GFX940-NEXT:    ;;#ASMEND
1733 ; GFX940-NEXT:    global_store_short_d16_hi v0, v1, s[0:1] offset:4 sc0 sc1
1734 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
1735 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1736 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1737   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1738   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1739   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>
1740   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1741   ret void
1744 define void @v_shuffle_v3i16_v2i16__0_3_3(ptr addrspace(1) inreg %ptr) {
1745 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__0_3_3:
1746 ; GFX900:       ; %bb.0:
1747 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1748 ; GFX900-NEXT:    ;;#ASMSTART
1749 ; GFX900-NEXT:    ; def v1
1750 ; GFX900-NEXT:    ;;#ASMEND
1751 ; GFX900-NEXT:    ;;#ASMSTART
1752 ; GFX900-NEXT:    ; def v2
1753 ; GFX900-NEXT:    ;;#ASMEND
1754 ; GFX900-NEXT:    s_mov_b32 s4, 0xffff
1755 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1756 ; GFX900-NEXT:    v_bfi_b32 v1, s4, v1, v2
1757 ; GFX900-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
1758 ; GFX900-NEXT:    global_store_short v0, v2, s[16:17] offset:4
1759 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
1760 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1761 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1763 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__0_3_3:
1764 ; GFX90A:       ; %bb.0:
1765 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1766 ; GFX90A-NEXT:    ;;#ASMSTART
1767 ; GFX90A-NEXT:    ; def v1
1768 ; GFX90A-NEXT:    ;;#ASMEND
1769 ; GFX90A-NEXT:    ;;#ASMSTART
1770 ; GFX90A-NEXT:    ; def v2
1771 ; GFX90A-NEXT:    ;;#ASMEND
1772 ; GFX90A-NEXT:    s_mov_b32 s4, 0xffff
1773 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1774 ; GFX90A-NEXT:    v_bfi_b32 v1, s4, v1, v2
1775 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
1776 ; GFX90A-NEXT:    global_store_short v0, v2, s[16:17] offset:4
1777 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1778 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1779 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1781 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__0_3_3:
1782 ; GFX940:       ; %bb.0:
1783 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1784 ; GFX940-NEXT:    ;;#ASMSTART
1785 ; GFX940-NEXT:    ; def v1
1786 ; GFX940-NEXT:    ;;#ASMEND
1787 ; GFX940-NEXT:    ;;#ASMSTART
1788 ; GFX940-NEXT:    ; def v2
1789 ; GFX940-NEXT:    ;;#ASMEND
1790 ; GFX940-NEXT:    s_mov_b32 s2, 0xffff
1791 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1792 ; GFX940-NEXT:    v_bfi_b32 v1, s2, v1, v2
1793 ; GFX940-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
1794 ; GFX940-NEXT:    global_store_short v0, v2, s[0:1] offset:4 sc0 sc1
1795 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
1796 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1797 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1798   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1799   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1800   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 0, i32 3, i32 3>
1801   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1802   ret void
1805 define void @v_shuffle_v3i16_v2i16__1_3_3(ptr addrspace(1) inreg %ptr) {
1806 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__1_3_3:
1807 ; GFX900:       ; %bb.0:
1808 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1809 ; GFX900-NEXT:    ;;#ASMSTART
1810 ; GFX900-NEXT:    ; def v1
1811 ; GFX900-NEXT:    ;;#ASMEND
1812 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
1813 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1814 ; GFX900-NEXT:    ;;#ASMSTART
1815 ; GFX900-NEXT:    ; def v2
1816 ; GFX900-NEXT:    ;;#ASMEND
1817 ; GFX900-NEXT:    v_perm_b32 v1, v2, v1, s4
1818 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
1819 ; GFX900-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
1820 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1821 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1822 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1824 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__1_3_3:
1825 ; GFX90A:       ; %bb.0:
1826 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1827 ; GFX90A-NEXT:    ;;#ASMSTART
1828 ; GFX90A-NEXT:    ; def v1
1829 ; GFX90A-NEXT:    ;;#ASMEND
1830 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
1831 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1832 ; GFX90A-NEXT:    ;;#ASMSTART
1833 ; GFX90A-NEXT:    ; def v2
1834 ; GFX90A-NEXT:    ;;#ASMEND
1835 ; GFX90A-NEXT:    v_perm_b32 v1, v2, v1, s4
1836 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1837 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
1838 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1839 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1840 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1842 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__1_3_3:
1843 ; GFX940:       ; %bb.0:
1844 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1845 ; GFX940-NEXT:    ;;#ASMSTART
1846 ; GFX940-NEXT:    ; def v1
1847 ; GFX940-NEXT:    ;;#ASMEND
1848 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
1849 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1850 ; GFX940-NEXT:    ;;#ASMSTART
1851 ; GFX940-NEXT:    ; def v2
1852 ; GFX940-NEXT:    ;;#ASMEND
1853 ; GFX940-NEXT:    s_nop 0
1854 ; GFX940-NEXT:    v_perm_b32 v1, v2, v1, s2
1855 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
1856 ; GFX940-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
1857 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
1858 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1859 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1860   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1861   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1862   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 1, i32 3, i32 3>
1863   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1864   ret void
1867 define void @v_shuffle_v3i16_v2i16__2_3_3(ptr addrspace(1) inreg %ptr) {
1868 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__2_3_3:
1869 ; GFX900:       ; %bb.0:
1870 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1871 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1872 ; GFX900-NEXT:    ;;#ASMSTART
1873 ; GFX900-NEXT:    ; def v1
1874 ; GFX900-NEXT:    ;;#ASMEND
1875 ; GFX900-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1876 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
1877 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1878 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1880 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__2_3_3:
1881 ; GFX90A:       ; %bb.0:
1882 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1883 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1884 ; GFX90A-NEXT:    ;;#ASMSTART
1885 ; GFX90A-NEXT:    ; def v1
1886 ; GFX90A-NEXT:    ;;#ASMEND
1887 ; GFX90A-NEXT:    global_store_short_d16_hi v0, v1, s[16:17] offset:4
1888 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1889 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1890 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1892 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__2_3_3:
1893 ; GFX940:       ; %bb.0:
1894 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1895 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1896 ; GFX940-NEXT:    ;;#ASMSTART
1897 ; GFX940-NEXT:    ; def v1
1898 ; GFX940-NEXT:    ;;#ASMEND
1899 ; GFX940-NEXT:    global_store_short_d16_hi v0, v1, s[0:1] offset:4 sc0 sc1
1900 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
1901 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1902 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1903   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1904   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1905   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 2, i32 3, i32 3>
1906   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1907   ret void
1910 define void @v_shuffle_v3i16_v2i16__3_u_3(ptr addrspace(1) inreg %ptr) {
1911 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_u_3:
1912 ; GFX900:       ; %bb.0:
1913 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1914 ; GFX900-NEXT:    ;;#ASMSTART
1915 ; GFX900-NEXT:    ; def v1
1916 ; GFX900-NEXT:    ;;#ASMEND
1917 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1918 ; GFX900-NEXT:    v_alignbit_b32 v2, s4, v1, 16
1919 ; GFX900-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1920 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
1921 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1922 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1923 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1925 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_u_3:
1926 ; GFX90A:       ; %bb.0:
1927 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1928 ; GFX90A-NEXT:    ;;#ASMSTART
1929 ; GFX90A-NEXT:    ; def v1
1930 ; GFX90A-NEXT:    ;;#ASMEND
1931 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1932 ; GFX90A-NEXT:    v_alignbit_b32 v2, s4, v1, 16
1933 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1934 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
1935 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
1936 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1937 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1939 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_u_3:
1940 ; GFX940:       ; %bb.0:
1941 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1942 ; GFX940-NEXT:    ;;#ASMSTART
1943 ; GFX940-NEXT:    ; def v1
1944 ; GFX940-NEXT:    ;;#ASMEND
1945 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
1946 ; GFX940-NEXT:    v_alignbit_b32 v2, s0, v1, 16
1947 ; GFX940-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
1948 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
1949 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
1950 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1951 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1952   %vec0 = call <2 x i16> asm "; def $0", "=v"()
1953   %vec1 = call <2 x i16> asm "; def $0", "=v"()
1954   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 3>
1955   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
1956   ret void
1959 define void @v_shuffle_v3i16_v2i16__3_0_3(ptr addrspace(1) inreg %ptr) {
1960 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_0_3:
1961 ; GFX900:       ; %bb.0:
1962 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1963 ; GFX900-NEXT:    ;;#ASMSTART
1964 ; GFX900-NEXT:    ; def v1
1965 ; GFX900-NEXT:    ;;#ASMEND
1966 ; GFX900-NEXT:    ;;#ASMSTART
1967 ; GFX900-NEXT:    ; def v2
1968 ; GFX900-NEXT:    ;;#ASMEND
1969 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
1970 ; GFX900-NEXT:    v_alignbit_b32 v1, v1, v2, 16
1971 ; GFX900-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
1972 ; GFX900-NEXT:    global_store_short v0, v2, s[16:17] offset:4
1973 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
1974 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1975 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1977 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_0_3:
1978 ; GFX90A:       ; %bb.0:
1979 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1980 ; GFX90A-NEXT:    ;;#ASMSTART
1981 ; GFX90A-NEXT:    ; def v1
1982 ; GFX90A-NEXT:    ;;#ASMEND
1983 ; GFX90A-NEXT:    ;;#ASMSTART
1984 ; GFX90A-NEXT:    ; def v2
1985 ; GFX90A-NEXT:    ;;#ASMEND
1986 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
1987 ; GFX90A-NEXT:    v_alignbit_b32 v1, v1, v2, 16
1988 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
1989 ; GFX90A-NEXT:    global_store_short v0, v2, s[16:17] offset:4
1990 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
1991 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1992 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1994 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_0_3:
1995 ; GFX940:       ; %bb.0:
1996 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1997 ; GFX940-NEXT:    ;;#ASMSTART
1998 ; GFX940-NEXT:    ; def v1
1999 ; GFX940-NEXT:    ;;#ASMEND
2000 ; GFX940-NEXT:    ;;#ASMSTART
2001 ; GFX940-NEXT:    ; def v2
2002 ; GFX940-NEXT:    ;;#ASMEND
2003 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
2004 ; GFX940-NEXT:    v_alignbit_b32 v1, v1, v2, 16
2005 ; GFX940-NEXT:    v_lshrrev_b32_e32 v2, 16, v2
2006 ; GFX940-NEXT:    global_store_short v0, v2, s[0:1] offset:4 sc0 sc1
2007 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
2008 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2009 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2010   %vec0 = call <2 x i16> asm "; def $0", "=v"()
2011   %vec1 = call <2 x i16> asm "; def $0", "=v"()
2012   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 3>
2013   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
2014   ret void
2017 define void @v_shuffle_v3i16_v2i16__3_1_3(ptr addrspace(1) inreg %ptr) {
2018 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_1_3:
2019 ; GFX900:       ; %bb.0:
2020 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2021 ; GFX900-NEXT:    ;;#ASMSTART
2022 ; GFX900-NEXT:    ; def v1
2023 ; GFX900-NEXT:    ;;#ASMEND
2024 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
2025 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
2026 ; GFX900-NEXT:    ;;#ASMSTART
2027 ; GFX900-NEXT:    ; def v2
2028 ; GFX900-NEXT:    ;;#ASMEND
2029 ; GFX900-NEXT:    v_perm_b32 v1, v1, v2, s4
2030 ; GFX900-NEXT:    global_store_dword v0, v1, s[16:17]
2031 ; GFX900-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
2032 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
2033 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2034 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2036 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_1_3:
2037 ; GFX90A:       ; %bb.0:
2038 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2039 ; GFX90A-NEXT:    ;;#ASMSTART
2040 ; GFX90A-NEXT:    ; def v1
2041 ; GFX90A-NEXT:    ;;#ASMEND
2042 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
2043 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
2044 ; GFX90A-NEXT:    ;;#ASMSTART
2045 ; GFX90A-NEXT:    ; def v2
2046 ; GFX90A-NEXT:    ;;#ASMEND
2047 ; GFX90A-NEXT:    v_perm_b32 v1, v1, v2, s4
2048 ; GFX90A-NEXT:    global_store_dword v0, v1, s[16:17]
2049 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
2050 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
2051 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2052 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2054 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_1_3:
2055 ; GFX940:       ; %bb.0:
2056 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2057 ; GFX940-NEXT:    ;;#ASMSTART
2058 ; GFX940-NEXT:    ; def v1
2059 ; GFX940-NEXT:    ;;#ASMEND
2060 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
2061 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
2062 ; GFX940-NEXT:    ;;#ASMSTART
2063 ; GFX940-NEXT:    ; def v2
2064 ; GFX940-NEXT:    ;;#ASMEND
2065 ; GFX940-NEXT:    s_nop 0
2066 ; GFX940-NEXT:    v_perm_b32 v1, v1, v2, s2
2067 ; GFX940-NEXT:    global_store_dword v0, v1, s[0:1] sc0 sc1
2068 ; GFX940-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
2069 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
2070 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2071 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2072   %vec0 = call <2 x i16> asm "; def $0", "=v"()
2073   %vec1 = call <2 x i16> asm "; def $0", "=v"()
2074   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 3>
2075   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
2076   ret void
2079 define void @v_shuffle_v3i16_v2i16__3_2_3(ptr addrspace(1) inreg %ptr) {
2080 ; GFX900-LABEL: v_shuffle_v3i16_v2i16__3_2_3:
2081 ; GFX900:       ; %bb.0:
2082 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2083 ; GFX900-NEXT:    ;;#ASMSTART
2084 ; GFX900-NEXT:    ; def v1
2085 ; GFX900-NEXT:    ;;#ASMEND
2086 ; GFX900-NEXT:    v_mov_b32_e32 v0, 0
2087 ; GFX900-NEXT:    v_alignbit_b32 v2, v1, v1, 16
2088 ; GFX900-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2089 ; GFX900-NEXT:    global_store_short v0, v1, s[16:17] offset:4
2090 ; GFX900-NEXT:    global_store_dword v0, v2, s[16:17]
2091 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2092 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2094 ; GFX90A-LABEL: v_shuffle_v3i16_v2i16__3_2_3:
2095 ; GFX90A:       ; %bb.0:
2096 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2097 ; GFX90A-NEXT:    ;;#ASMSTART
2098 ; GFX90A-NEXT:    ; def v1
2099 ; GFX90A-NEXT:    ;;#ASMEND
2100 ; GFX90A-NEXT:    v_mov_b32_e32 v0, 0
2101 ; GFX90A-NEXT:    v_alignbit_b32 v2, v1, v1, 16
2102 ; GFX90A-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2103 ; GFX90A-NEXT:    global_store_short v0, v1, s[16:17] offset:4
2104 ; GFX90A-NEXT:    global_store_dword v0, v2, s[16:17]
2105 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2106 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2108 ; GFX940-LABEL: v_shuffle_v3i16_v2i16__3_2_3:
2109 ; GFX940:       ; %bb.0:
2110 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2111 ; GFX940-NEXT:    ;;#ASMSTART
2112 ; GFX940-NEXT:    ; def v1
2113 ; GFX940-NEXT:    ;;#ASMEND
2114 ; GFX940-NEXT:    v_mov_b32_e32 v0, 0
2115 ; GFX940-NEXT:    v_alignbit_b32 v2, v1, v1, 16
2116 ; GFX940-NEXT:    v_lshrrev_b32_e32 v1, 16, v1
2117 ; GFX940-NEXT:    global_store_short v0, v1, s[0:1] offset:4 sc0 sc1
2118 ; GFX940-NEXT:    global_store_dword v0, v2, s[0:1] sc0 sc1
2119 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2120 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2121   %vec0 = call <2 x i16> asm "; def $0", "=v"()
2122   %vec1 = call <2 x i16> asm "; def $0", "=v"()
2123   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 3>
2124   store <3 x i16> %shuf, ptr addrspace(1) %ptr, align 8
2125   ret void
2128 define void @s_shuffle_v3i16_v2i16__u_u_u() {
2129 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__u_u_u:
2130 ; GFX9:       ; %bb.0:
2131 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2132 ; GFX9-NEXT:    ;;#ASMSTART
2133 ; GFX9-NEXT:    ; use s[8:9]
2134 ; GFX9-NEXT:    ;;#ASMEND
2135 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2136   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2137   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> poison
2138   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2139   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2140   ret void
2143 define void @s_shuffle_v3i16_v2i16__0_u_u() {
2144 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__0_u_u:
2145 ; GFX900:       ; %bb.0:
2146 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2147 ; GFX900-NEXT:    ;;#ASMSTART
2148 ; GFX900-NEXT:    ; def s8
2149 ; GFX900-NEXT:    ;;#ASMEND
2150 ; GFX900-NEXT:    ;;#ASMSTART
2151 ; GFX900-NEXT:    ; use s[8:9]
2152 ; GFX900-NEXT:    ;;#ASMEND
2153 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2155 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__0_u_u:
2156 ; GFX90A:       ; %bb.0:
2157 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2158 ; GFX90A-NEXT:    ;;#ASMSTART
2159 ; GFX90A-NEXT:    ; def s8
2160 ; GFX90A-NEXT:    ;;#ASMEND
2161 ; GFX90A-NEXT:    ;;#ASMSTART
2162 ; GFX90A-NEXT:    ; use s[8:9]
2163 ; GFX90A-NEXT:    ;;#ASMEND
2164 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2166 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__0_u_u:
2167 ; GFX940:       ; %bb.0:
2168 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2169 ; GFX940-NEXT:    ;;#ASMSTART
2170 ; GFX940-NEXT:    ; def s8
2171 ; GFX940-NEXT:    ;;#ASMEND
2172 ; GFX940-NEXT:    s_nop 0
2173 ; GFX940-NEXT:    ;;#ASMSTART
2174 ; GFX940-NEXT:    ; use s[8:9]
2175 ; GFX940-NEXT:    ;;#ASMEND
2176 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2177   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2178   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 poison, i32 poison>
2179   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2180   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2181   ret void
2184 define void @s_shuffle_v3i16_v2i16__1_u_u() {
2185 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__1_u_u:
2186 ; GFX900:       ; %bb.0:
2187 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2188 ; GFX900-NEXT:    ;;#ASMSTART
2189 ; GFX900-NEXT:    ; def s4
2190 ; GFX900-NEXT:    ;;#ASMEND
2191 ; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
2192 ; GFX900-NEXT:    ;;#ASMSTART
2193 ; GFX900-NEXT:    ; use s[8:9]
2194 ; GFX900-NEXT:    ;;#ASMEND
2195 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2197 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__1_u_u:
2198 ; GFX90A:       ; %bb.0:
2199 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2200 ; GFX90A-NEXT:    ;;#ASMSTART
2201 ; GFX90A-NEXT:    ; def s4
2202 ; GFX90A-NEXT:    ;;#ASMEND
2203 ; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
2204 ; GFX90A-NEXT:    ;;#ASMSTART
2205 ; GFX90A-NEXT:    ; use s[8:9]
2206 ; GFX90A-NEXT:    ;;#ASMEND
2207 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2209 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__1_u_u:
2210 ; GFX940:       ; %bb.0:
2211 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2212 ; GFX940-NEXT:    ;;#ASMSTART
2213 ; GFX940-NEXT:    ; def s0
2214 ; GFX940-NEXT:    ;;#ASMEND
2215 ; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
2216 ; GFX940-NEXT:    ;;#ASMSTART
2217 ; GFX940-NEXT:    ; use s[8:9]
2218 ; GFX940-NEXT:    ;;#ASMEND
2219 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2220   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2221   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 poison, i32 poison>
2222   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2223   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2224   ret void
2227 define void @s_shuffle_v3i16_v2i16__2_u_u() {
2228 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__2_u_u:
2229 ; GFX9:       ; %bb.0:
2230 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2231 ; GFX9-NEXT:    ;;#ASMSTART
2232 ; GFX9-NEXT:    ; use s[8:9]
2233 ; GFX9-NEXT:    ;;#ASMEND
2234 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2235   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2236   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 poison, i32 poison>
2237   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2238   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2239   ret void
2242 define void @s_shuffle_v3i16_v2i16__3_u_u() {
2243 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_u_u:
2244 ; GFX900:       ; %bb.0:
2245 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2246 ; GFX900-NEXT:    ;;#ASMSTART
2247 ; GFX900-NEXT:    ; def s4
2248 ; GFX900-NEXT:    ;;#ASMEND
2249 ; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
2250 ; GFX900-NEXT:    ;;#ASMSTART
2251 ; GFX900-NEXT:    ; use s[8:9]
2252 ; GFX900-NEXT:    ;;#ASMEND
2253 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2255 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_u_u:
2256 ; GFX90A:       ; %bb.0:
2257 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2258 ; GFX90A-NEXT:    ;;#ASMSTART
2259 ; GFX90A-NEXT:    ; def s4
2260 ; GFX90A-NEXT:    ;;#ASMEND
2261 ; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
2262 ; GFX90A-NEXT:    ;;#ASMSTART
2263 ; GFX90A-NEXT:    ; use s[8:9]
2264 ; GFX90A-NEXT:    ;;#ASMEND
2265 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2267 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_u_u:
2268 ; GFX940:       ; %bb.0:
2269 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2270 ; GFX940-NEXT:    ;;#ASMSTART
2271 ; GFX940-NEXT:    ; def s0
2272 ; GFX940-NEXT:    ;;#ASMEND
2273 ; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
2274 ; GFX940-NEXT:    ;;#ASMSTART
2275 ; GFX940-NEXT:    ; use s[8:9]
2276 ; GFX940-NEXT:    ;;#ASMEND
2277 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2278   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2279   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2280   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 poison>
2281   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2282   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2283   ret void
2286 define void @s_shuffle_v3i16_v2i16__3_0_u() {
2287 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_0_u:
2288 ; GFX900:       ; %bb.0:
2289 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2290 ; GFX900-NEXT:    ;;#ASMSTART
2291 ; GFX900-NEXT:    ; def s5
2292 ; GFX900-NEXT:    ;;#ASMEND
2293 ; GFX900-NEXT:    s_lshr_b32 s5, s5, 16
2294 ; GFX900-NEXT:    ;;#ASMSTART
2295 ; GFX900-NEXT:    ; def s4
2296 ; GFX900-NEXT:    ;;#ASMEND
2297 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2298 ; GFX900-NEXT:    ;;#ASMSTART
2299 ; GFX900-NEXT:    ; use s[8:9]
2300 ; GFX900-NEXT:    ;;#ASMEND
2301 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2303 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_0_u:
2304 ; GFX90A:       ; %bb.0:
2305 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2306 ; GFX90A-NEXT:    ;;#ASMSTART
2307 ; GFX90A-NEXT:    ; def s5
2308 ; GFX90A-NEXT:    ;;#ASMEND
2309 ; GFX90A-NEXT:    s_lshr_b32 s5, s5, 16
2310 ; GFX90A-NEXT:    ;;#ASMSTART
2311 ; GFX90A-NEXT:    ; def s4
2312 ; GFX90A-NEXT:    ;;#ASMEND
2313 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2314 ; GFX90A-NEXT:    ;;#ASMSTART
2315 ; GFX90A-NEXT:    ; use s[8:9]
2316 ; GFX90A-NEXT:    ;;#ASMEND
2317 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2319 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_0_u:
2320 ; GFX940:       ; %bb.0:
2321 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2322 ; GFX940-NEXT:    ;;#ASMSTART
2323 ; GFX940-NEXT:    ; def s1
2324 ; GFX940-NEXT:    ;;#ASMEND
2325 ; GFX940-NEXT:    s_lshr_b32 s1, s1, 16
2326 ; GFX940-NEXT:    ;;#ASMSTART
2327 ; GFX940-NEXT:    ; def s0
2328 ; GFX940-NEXT:    ;;#ASMEND
2329 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
2330 ; GFX940-NEXT:    ;;#ASMSTART
2331 ; GFX940-NEXT:    ; use s[8:9]
2332 ; GFX940-NEXT:    ;;#ASMEND
2333 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2334   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2335   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2336   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 poison>
2337   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2338   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2339   ret void
2342 define void @s_shuffle_v3i16_v2i16__3_1_u() {
2343 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_1_u:
2344 ; GFX900:       ; %bb.0:
2345 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2346 ; GFX900-NEXT:    ;;#ASMSTART
2347 ; GFX900-NEXT:    ; def s4
2348 ; GFX900-NEXT:    ;;#ASMEND
2349 ; GFX900-NEXT:    ;;#ASMSTART
2350 ; GFX900-NEXT:    ; def s5
2351 ; GFX900-NEXT:    ;;#ASMEND
2352 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
2353 ; GFX900-NEXT:    ;;#ASMSTART
2354 ; GFX900-NEXT:    ; use s[8:9]
2355 ; GFX900-NEXT:    ;;#ASMEND
2356 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2358 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_1_u:
2359 ; GFX90A:       ; %bb.0:
2360 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2361 ; GFX90A-NEXT:    ;;#ASMSTART
2362 ; GFX90A-NEXT:    ; def s4
2363 ; GFX90A-NEXT:    ;;#ASMEND
2364 ; GFX90A-NEXT:    ;;#ASMSTART
2365 ; GFX90A-NEXT:    ; def s5
2366 ; GFX90A-NEXT:    ;;#ASMEND
2367 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
2368 ; GFX90A-NEXT:    ;;#ASMSTART
2369 ; GFX90A-NEXT:    ; use s[8:9]
2370 ; GFX90A-NEXT:    ;;#ASMEND
2371 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2373 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_1_u:
2374 ; GFX940:       ; %bb.0:
2375 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2376 ; GFX940-NEXT:    ;;#ASMSTART
2377 ; GFX940-NEXT:    ; def s0
2378 ; GFX940-NEXT:    ;;#ASMEND
2379 ; GFX940-NEXT:    ;;#ASMSTART
2380 ; GFX940-NEXT:    ; def s1
2381 ; GFX940-NEXT:    ;;#ASMEND
2382 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s0
2383 ; GFX940-NEXT:    ;;#ASMSTART
2384 ; GFX940-NEXT:    ; use s[8:9]
2385 ; GFX940-NEXT:    ;;#ASMEND
2386 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2387   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2388   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2389   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 poison>
2390   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2391   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2392   ret void
2395 define void @s_shuffle_v3i16_v2i16__3_2_u() {
2396 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_2_u:
2397 ; GFX900:       ; %bb.0:
2398 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2399 ; GFX900-NEXT:    ;;#ASMSTART
2400 ; GFX900-NEXT:    ; def s4
2401 ; GFX900-NEXT:    ;;#ASMEND
2402 ; GFX900-NEXT:    s_lshr_b32 s5, s4, 16
2403 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2404 ; GFX900-NEXT:    ;;#ASMSTART
2405 ; GFX900-NEXT:    ; use s[8:9]
2406 ; GFX900-NEXT:    ;;#ASMEND
2407 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2409 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_2_u:
2410 ; GFX90A:       ; %bb.0:
2411 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2412 ; GFX90A-NEXT:    ;;#ASMSTART
2413 ; GFX90A-NEXT:    ; def s4
2414 ; GFX90A-NEXT:    ;;#ASMEND
2415 ; GFX90A-NEXT:    s_lshr_b32 s5, s4, 16
2416 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2417 ; GFX90A-NEXT:    ;;#ASMSTART
2418 ; GFX90A-NEXT:    ; use s[8:9]
2419 ; GFX90A-NEXT:    ;;#ASMEND
2420 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2422 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_2_u:
2423 ; GFX940:       ; %bb.0:
2424 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2425 ; GFX940-NEXT:    ;;#ASMSTART
2426 ; GFX940-NEXT:    ; def s0
2427 ; GFX940-NEXT:    ;;#ASMEND
2428 ; GFX940-NEXT:    s_lshr_b32 s1, s0, 16
2429 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
2430 ; GFX940-NEXT:    ;;#ASMSTART
2431 ; GFX940-NEXT:    ; use s[8:9]
2432 ; GFX940-NEXT:    ;;#ASMEND
2433 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2434   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2435   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2436   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 poison>
2437   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2438   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2439   ret void
2442 define void @s_shuffle_v3i16_v2i16__3_3_u() {
2443 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_3_u:
2444 ; GFX900:       ; %bb.0:
2445 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2446 ; GFX900-NEXT:    ;;#ASMSTART
2447 ; GFX900-NEXT:    ; def s4
2448 ; GFX900-NEXT:    ;;#ASMEND
2449 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
2450 ; GFX900-NEXT:    ;;#ASMSTART
2451 ; GFX900-NEXT:    ; use s[8:9]
2452 ; GFX900-NEXT:    ;;#ASMEND
2453 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2455 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_3_u:
2456 ; GFX90A:       ; %bb.0:
2457 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2458 ; GFX90A-NEXT:    ;;#ASMSTART
2459 ; GFX90A-NEXT:    ; def s4
2460 ; GFX90A-NEXT:    ;;#ASMEND
2461 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
2462 ; GFX90A-NEXT:    ;;#ASMSTART
2463 ; GFX90A-NEXT:    ; use s[8:9]
2464 ; GFX90A-NEXT:    ;;#ASMEND
2465 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2467 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_3_u:
2468 ; GFX940:       ; %bb.0:
2469 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2470 ; GFX940-NEXT:    ;;#ASMSTART
2471 ; GFX940-NEXT:    ; def s0
2472 ; GFX940-NEXT:    ;;#ASMEND
2473 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
2474 ; GFX940-NEXT:    ;;#ASMSTART
2475 ; GFX940-NEXT:    ; use s[8:9]
2476 ; GFX940-NEXT:    ;;#ASMEND
2477 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2478   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2479   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2480   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 poison>
2481   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2482   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2483   ret void
2486 define void @s_shuffle_v3i16_v2i16__3_3_0() {
2487 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_3_0:
2488 ; GFX900:       ; %bb.0:
2489 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2490 ; GFX900-NEXT:    ;;#ASMSTART
2491 ; GFX900-NEXT:    ; def s9
2492 ; GFX900-NEXT:    ;;#ASMEND
2493 ; GFX900-NEXT:    ;;#ASMSTART
2494 ; GFX900-NEXT:    ; def s4
2495 ; GFX900-NEXT:    ;;#ASMEND
2496 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
2497 ; GFX900-NEXT:    ;;#ASMSTART
2498 ; GFX900-NEXT:    ; use s[8:9]
2499 ; GFX900-NEXT:    ;;#ASMEND
2500 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2502 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_3_0:
2503 ; GFX90A:       ; %bb.0:
2504 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2505 ; GFX90A-NEXT:    ;;#ASMSTART
2506 ; GFX90A-NEXT:    ; def s9
2507 ; GFX90A-NEXT:    ;;#ASMEND
2508 ; GFX90A-NEXT:    ;;#ASMSTART
2509 ; GFX90A-NEXT:    ; def s4
2510 ; GFX90A-NEXT:    ;;#ASMEND
2511 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
2512 ; GFX90A-NEXT:    ;;#ASMSTART
2513 ; GFX90A-NEXT:    ; use s[8:9]
2514 ; GFX90A-NEXT:    ;;#ASMEND
2515 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2517 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_3_0:
2518 ; GFX940:       ; %bb.0:
2519 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2520 ; GFX940-NEXT:    ;;#ASMSTART
2521 ; GFX940-NEXT:    ; def s9
2522 ; GFX940-NEXT:    ;;#ASMEND
2523 ; GFX940-NEXT:    ;;#ASMSTART
2524 ; GFX940-NEXT:    ; def s0
2525 ; GFX940-NEXT:    ;;#ASMEND
2526 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
2527 ; GFX940-NEXT:    ;;#ASMSTART
2528 ; GFX940-NEXT:    ; use s[8:9]
2529 ; GFX940-NEXT:    ;;#ASMEND
2530 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2531   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2532   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2533   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 0>
2534   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2535   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2536   ret void
2539 define void @s_shuffle_v3i16_v2i16__3_3_1() {
2540 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_3_1:
2541 ; GFX900:       ; %bb.0:
2542 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2543 ; GFX900-NEXT:    ;;#ASMSTART
2544 ; GFX900-NEXT:    ; def s4
2545 ; GFX900-NEXT:    ;;#ASMEND
2546 ; GFX900-NEXT:    ;;#ASMSTART
2547 ; GFX900-NEXT:    ; def s5
2548 ; GFX900-NEXT:    ;;#ASMEND
2549 ; GFX900-NEXT:    s_lshr_b32 s9, s4, 16
2550 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
2551 ; GFX900-NEXT:    ;;#ASMSTART
2552 ; GFX900-NEXT:    ; use s[8:9]
2553 ; GFX900-NEXT:    ;;#ASMEND
2554 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2556 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_3_1:
2557 ; GFX90A:       ; %bb.0:
2558 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2559 ; GFX90A-NEXT:    ;;#ASMSTART
2560 ; GFX90A-NEXT:    ; def s4
2561 ; GFX90A-NEXT:    ;;#ASMEND
2562 ; GFX90A-NEXT:    ;;#ASMSTART
2563 ; GFX90A-NEXT:    ; def s5
2564 ; GFX90A-NEXT:    ;;#ASMEND
2565 ; GFX90A-NEXT:    s_lshr_b32 s9, s4, 16
2566 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s5
2567 ; GFX90A-NEXT:    ;;#ASMSTART
2568 ; GFX90A-NEXT:    ; use s[8:9]
2569 ; GFX90A-NEXT:    ;;#ASMEND
2570 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2572 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_3_1:
2573 ; GFX940:       ; %bb.0:
2574 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2575 ; GFX940-NEXT:    ;;#ASMSTART
2576 ; GFX940-NEXT:    ; def s0
2577 ; GFX940-NEXT:    ;;#ASMEND
2578 ; GFX940-NEXT:    ;;#ASMSTART
2579 ; GFX940-NEXT:    ; def s1
2580 ; GFX940-NEXT:    ;;#ASMEND
2581 ; GFX940-NEXT:    s_lshr_b32 s9, s0, 16
2582 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s1
2583 ; GFX940-NEXT:    ;;#ASMSTART
2584 ; GFX940-NEXT:    ; use s[8:9]
2585 ; GFX940-NEXT:    ;;#ASMEND
2586 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2587   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2588   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2589   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 1>
2590   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2591   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2592   ret void
2595 define void @s_shuffle_v3i16_v2i16__3_3_2() {
2596 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__3_3_2:
2597 ; GFX9:       ; %bb.0:
2598 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2599 ; GFX9-NEXT:    ;;#ASMSTART
2600 ; GFX9-NEXT:    ; def s9
2601 ; GFX9-NEXT:    ;;#ASMEND
2602 ; GFX9-NEXT:    s_pack_hh_b32_b16 s8, s9, s9
2603 ; GFX9-NEXT:    ;;#ASMSTART
2604 ; GFX9-NEXT:    ; use s[8:9]
2605 ; GFX9-NEXT:    ;;#ASMEND
2606 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2607   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2608   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2609   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 2>
2610   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2611   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2612   ret void
2615 define void @s_shuffle_v3i16_v2i16__3_3_3() {
2616 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_3_3:
2617 ; GFX900:       ; %bb.0:
2618 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2619 ; GFX900-NEXT:    ;;#ASMSTART
2620 ; GFX900-NEXT:    ; def s4
2621 ; GFX900-NEXT:    ;;#ASMEND
2622 ; GFX900-NEXT:    s_lshr_b32 s9, s4, 16
2623 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
2624 ; GFX900-NEXT:    ;;#ASMSTART
2625 ; GFX900-NEXT:    ; use s[8:9]
2626 ; GFX900-NEXT:    ;;#ASMEND
2627 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2629 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_3_3:
2630 ; GFX90A:       ; %bb.0:
2631 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2632 ; GFX90A-NEXT:    ;;#ASMSTART
2633 ; GFX90A-NEXT:    ; def s4
2634 ; GFX90A-NEXT:    ;;#ASMEND
2635 ; GFX90A-NEXT:    s_lshr_b32 s9, s4, 16
2636 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
2637 ; GFX90A-NEXT:    ;;#ASMSTART
2638 ; GFX90A-NEXT:    ; use s[8:9]
2639 ; GFX90A-NEXT:    ;;#ASMEND
2640 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2642 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_3_3:
2643 ; GFX940:       ; %bb.0:
2644 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2645 ; GFX940-NEXT:    ;;#ASMSTART
2646 ; GFX940-NEXT:    ; def s0
2647 ; GFX940-NEXT:    ;;#ASMEND
2648 ; GFX940-NEXT:    s_lshr_b32 s9, s0, 16
2649 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
2650 ; GFX940-NEXT:    ;;#ASMSTART
2651 ; GFX940-NEXT:    ; use s[8:9]
2652 ; GFX940-NEXT:    ;;#ASMEND
2653 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2654   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2655   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2656   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 3, i32 3>
2657   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2658   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2659   ret void
2662 define void @s_shuffle_v3i16_v2i16__u_0_0() {
2663 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__u_0_0:
2664 ; GFX9:       ; %bb.0:
2665 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2666 ; GFX9-NEXT:    ;;#ASMSTART
2667 ; GFX9-NEXT:    ; def s9
2668 ; GFX9-NEXT:    ;;#ASMEND
2669 ; GFX9-NEXT:    s_pack_ll_b32_b16 s8, s9, s9
2670 ; GFX9-NEXT:    ;;#ASMSTART
2671 ; GFX9-NEXT:    ; use s[8:9]
2672 ; GFX9-NEXT:    ;;#ASMEND
2673 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2674   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2675   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 0, i32 0>
2676   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2677   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2678   ret void
2681 define void @s_shuffle_v3i16_v2i16__0_0_0() {
2682 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__0_0_0:
2683 ; GFX9:       ; %bb.0:
2684 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2685 ; GFX9-NEXT:    ;;#ASMSTART
2686 ; GFX9-NEXT:    ; def s9
2687 ; GFX9-NEXT:    ;;#ASMEND
2688 ; GFX9-NEXT:    s_pack_ll_b32_b16 s8, s9, s9
2689 ; GFX9-NEXT:    ;;#ASMSTART
2690 ; GFX9-NEXT:    ; use s[8:9]
2691 ; GFX9-NEXT:    ;;#ASMEND
2692 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2693   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2694   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> zeroinitializer
2695   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2696   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2697   ret void
2700 define void @s_shuffle_v3i16_v2i16__1_0_0() {
2701 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__1_0_0:
2702 ; GFX900:       ; %bb.0:
2703 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2704 ; GFX900-NEXT:    ;;#ASMSTART
2705 ; GFX900-NEXT:    ; def s9
2706 ; GFX900-NEXT:    ;;#ASMEND
2707 ; GFX900-NEXT:    s_lshr_b32 s4, s9, 16
2708 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s9
2709 ; GFX900-NEXT:    ;;#ASMSTART
2710 ; GFX900-NEXT:    ; use s[8:9]
2711 ; GFX900-NEXT:    ;;#ASMEND
2712 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2714 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__1_0_0:
2715 ; GFX90A:       ; %bb.0:
2716 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2717 ; GFX90A-NEXT:    ;;#ASMSTART
2718 ; GFX90A-NEXT:    ; def s9
2719 ; GFX90A-NEXT:    ;;#ASMEND
2720 ; GFX90A-NEXT:    s_lshr_b32 s4, s9, 16
2721 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s9
2722 ; GFX90A-NEXT:    ;;#ASMSTART
2723 ; GFX90A-NEXT:    ; use s[8:9]
2724 ; GFX90A-NEXT:    ;;#ASMEND
2725 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2727 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__1_0_0:
2728 ; GFX940:       ; %bb.0:
2729 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2730 ; GFX940-NEXT:    ;;#ASMSTART
2731 ; GFX940-NEXT:    ; def s9
2732 ; GFX940-NEXT:    ;;#ASMEND
2733 ; GFX940-NEXT:    s_lshr_b32 s0, s9, 16
2734 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s9
2735 ; GFX940-NEXT:    ;;#ASMSTART
2736 ; GFX940-NEXT:    ; use s[8:9]
2737 ; GFX940-NEXT:    ;;#ASMEND
2738 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2739   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2740   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 0, i32 0>
2741   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2742   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2743   ret void
2746 define void @s_shuffle_v3i16_v2i16__2_0_0() {
2747 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__2_0_0:
2748 ; GFX9:       ; %bb.0:
2749 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2750 ; GFX9-NEXT:    ;;#ASMSTART
2751 ; GFX9-NEXT:    ; def s9
2752 ; GFX9-NEXT:    ;;#ASMEND
2753 ; GFX9-NEXT:    s_pack_ll_b32_b16 s8, s9, s9
2754 ; GFX9-NEXT:    ;;#ASMSTART
2755 ; GFX9-NEXT:    ; use s[8:9]
2756 ; GFX9-NEXT:    ;;#ASMEND
2757 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2758   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2759   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 0, i32 0>
2760   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2761   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2762   ret void
2765 define void @s_shuffle_v3i16_v2i16__3_0_0() {
2766 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_0_0:
2767 ; GFX900:       ; %bb.0:
2768 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2769 ; GFX900-NEXT:    ;;#ASMSTART
2770 ; GFX900-NEXT:    ; def s4
2771 ; GFX900-NEXT:    ;;#ASMEND
2772 ; GFX900-NEXT:    s_lshr_b32 s4, s4, 16
2773 ; GFX900-NEXT:    ;;#ASMSTART
2774 ; GFX900-NEXT:    ; def s9
2775 ; GFX900-NEXT:    ;;#ASMEND
2776 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s9
2777 ; GFX900-NEXT:    ;;#ASMSTART
2778 ; GFX900-NEXT:    ; use s[8:9]
2779 ; GFX900-NEXT:    ;;#ASMEND
2780 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2782 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_0_0:
2783 ; GFX90A:       ; %bb.0:
2784 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2785 ; GFX90A-NEXT:    ;;#ASMSTART
2786 ; GFX90A-NEXT:    ; def s4
2787 ; GFX90A-NEXT:    ;;#ASMEND
2788 ; GFX90A-NEXT:    s_lshr_b32 s4, s4, 16
2789 ; GFX90A-NEXT:    ;;#ASMSTART
2790 ; GFX90A-NEXT:    ; def s9
2791 ; GFX90A-NEXT:    ;;#ASMEND
2792 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s9
2793 ; GFX90A-NEXT:    ;;#ASMSTART
2794 ; GFX90A-NEXT:    ; use s[8:9]
2795 ; GFX90A-NEXT:    ;;#ASMEND
2796 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2798 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_0_0:
2799 ; GFX940:       ; %bb.0:
2800 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2801 ; GFX940-NEXT:    ;;#ASMSTART
2802 ; GFX940-NEXT:    ; def s0
2803 ; GFX940-NEXT:    ;;#ASMEND
2804 ; GFX940-NEXT:    s_lshr_b32 s0, s0, 16
2805 ; GFX940-NEXT:    ;;#ASMSTART
2806 ; GFX940-NEXT:    ; def s9
2807 ; GFX940-NEXT:    ;;#ASMEND
2808 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s9
2809 ; GFX940-NEXT:    ;;#ASMSTART
2810 ; GFX940-NEXT:    ; use s[8:9]
2811 ; GFX940-NEXT:    ;;#ASMEND
2812 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2813   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2814   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2815   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 0>
2816   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2817   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2818   ret void
2821 define void @s_shuffle_v3i16_v2i16__3_u_0() {
2822 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_u_0:
2823 ; GFX900:       ; %bb.0:
2824 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2825 ; GFX900-NEXT:    ;;#ASMSTART
2826 ; GFX900-NEXT:    ; def s9
2827 ; GFX900-NEXT:    ;;#ASMEND
2828 ; GFX900-NEXT:    ;;#ASMSTART
2829 ; GFX900-NEXT:    ; def s4
2830 ; GFX900-NEXT:    ;;#ASMEND
2831 ; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
2832 ; GFX900-NEXT:    ;;#ASMSTART
2833 ; GFX900-NEXT:    ; use s[8:9]
2834 ; GFX900-NEXT:    ;;#ASMEND
2835 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2837 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_u_0:
2838 ; GFX90A:       ; %bb.0:
2839 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2840 ; GFX90A-NEXT:    ;;#ASMSTART
2841 ; GFX90A-NEXT:    ; def s9
2842 ; GFX90A-NEXT:    ;;#ASMEND
2843 ; GFX90A-NEXT:    ;;#ASMSTART
2844 ; GFX90A-NEXT:    ; def s4
2845 ; GFX90A-NEXT:    ;;#ASMEND
2846 ; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
2847 ; GFX90A-NEXT:    ;;#ASMSTART
2848 ; GFX90A-NEXT:    ; use s[8:9]
2849 ; GFX90A-NEXT:    ;;#ASMEND
2850 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2852 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_u_0:
2853 ; GFX940:       ; %bb.0:
2854 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2855 ; GFX940-NEXT:    ;;#ASMSTART
2856 ; GFX940-NEXT:    ; def s9
2857 ; GFX940-NEXT:    ;;#ASMEND
2858 ; GFX940-NEXT:    ;;#ASMSTART
2859 ; GFX940-NEXT:    ; def s0
2860 ; GFX940-NEXT:    ;;#ASMEND
2861 ; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
2862 ; GFX940-NEXT:    ;;#ASMSTART
2863 ; GFX940-NEXT:    ; use s[8:9]
2864 ; GFX940-NEXT:    ;;#ASMEND
2865 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2866   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2867   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2868   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 0>
2869   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2870   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2871   ret void
2874 define void @s_shuffle_v3i16_v2i16__3_1_0() {
2875 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_1_0:
2876 ; GFX900:       ; %bb.0:
2877 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2878 ; GFX900-NEXT:    ;;#ASMSTART
2879 ; GFX900-NEXT:    ; def s9
2880 ; GFX900-NEXT:    ;;#ASMEND
2881 ; GFX900-NEXT:    ;;#ASMSTART
2882 ; GFX900-NEXT:    ; def s4
2883 ; GFX900-NEXT:    ;;#ASMEND
2884 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s9
2885 ; GFX900-NEXT:    ;;#ASMSTART
2886 ; GFX900-NEXT:    ; use s[8:9]
2887 ; GFX900-NEXT:    ;;#ASMEND
2888 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2890 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_1_0:
2891 ; GFX90A:       ; %bb.0:
2892 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2893 ; GFX90A-NEXT:    ;;#ASMSTART
2894 ; GFX90A-NEXT:    ; def s9
2895 ; GFX90A-NEXT:    ;;#ASMEND
2896 ; GFX90A-NEXT:    ;;#ASMSTART
2897 ; GFX90A-NEXT:    ; def s4
2898 ; GFX90A-NEXT:    ;;#ASMEND
2899 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s9
2900 ; GFX90A-NEXT:    ;;#ASMSTART
2901 ; GFX90A-NEXT:    ; use s[8:9]
2902 ; GFX90A-NEXT:    ;;#ASMEND
2903 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2905 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_1_0:
2906 ; GFX940:       ; %bb.0:
2907 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2908 ; GFX940-NEXT:    ;;#ASMSTART
2909 ; GFX940-NEXT:    ; def s9
2910 ; GFX940-NEXT:    ;;#ASMEND
2911 ; GFX940-NEXT:    ;;#ASMSTART
2912 ; GFX940-NEXT:    ; def s0
2913 ; GFX940-NEXT:    ;;#ASMEND
2914 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s9
2915 ; GFX940-NEXT:    ;;#ASMSTART
2916 ; GFX940-NEXT:    ; use s[8:9]
2917 ; GFX940-NEXT:    ;;#ASMEND
2918 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2919   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2920   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2921   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 0>
2922   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2923   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2924   ret void
2927 define void @s_shuffle_v3i16_v2i16__3_2_0() {
2928 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_2_0:
2929 ; GFX900:       ; %bb.0:
2930 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2931 ; GFX900-NEXT:    ;;#ASMSTART
2932 ; GFX900-NEXT:    ; def s4
2933 ; GFX900-NEXT:    ;;#ASMEND
2934 ; GFX900-NEXT:    s_lshr_b32 s5, s4, 16
2935 ; GFX900-NEXT:    ;;#ASMSTART
2936 ; GFX900-NEXT:    ; def s9
2937 ; GFX900-NEXT:    ;;#ASMEND
2938 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2939 ; GFX900-NEXT:    ;;#ASMSTART
2940 ; GFX900-NEXT:    ; use s[8:9]
2941 ; GFX900-NEXT:    ;;#ASMEND
2942 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2944 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_2_0:
2945 ; GFX90A:       ; %bb.0:
2946 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2947 ; GFX90A-NEXT:    ;;#ASMSTART
2948 ; GFX90A-NEXT:    ; def s4
2949 ; GFX90A-NEXT:    ;;#ASMEND
2950 ; GFX90A-NEXT:    s_lshr_b32 s5, s4, 16
2951 ; GFX90A-NEXT:    ;;#ASMSTART
2952 ; GFX90A-NEXT:    ; def s9
2953 ; GFX90A-NEXT:    ;;#ASMEND
2954 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2955 ; GFX90A-NEXT:    ;;#ASMSTART
2956 ; GFX90A-NEXT:    ; use s[8:9]
2957 ; GFX90A-NEXT:    ;;#ASMEND
2958 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2960 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_2_0:
2961 ; GFX940:       ; %bb.0:
2962 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2963 ; GFX940-NEXT:    ;;#ASMSTART
2964 ; GFX940-NEXT:    ; def s0
2965 ; GFX940-NEXT:    ;;#ASMEND
2966 ; GFX940-NEXT:    s_lshr_b32 s1, s0, 16
2967 ; GFX940-NEXT:    ;;#ASMSTART
2968 ; GFX940-NEXT:    ; def s9
2969 ; GFX940-NEXT:    ;;#ASMEND
2970 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
2971 ; GFX940-NEXT:    ;;#ASMSTART
2972 ; GFX940-NEXT:    ; use s[8:9]
2973 ; GFX940-NEXT:    ;;#ASMEND
2974 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2975   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2976   %vec1 = call <2 x i16> asm "; def $0", "=s"()
2977   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 0>
2978   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2979   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2980   ret void
2983 define void @s_shuffle_v3i16_v2i16__u_1_1() {
2984 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__u_1_1:
2985 ; GFX9:       ; %bb.0:
2986 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2987 ; GFX9-NEXT:    ;;#ASMSTART
2988 ; GFX9-NEXT:    ; def s8
2989 ; GFX9-NEXT:    ;;#ASMEND
2990 ; GFX9-NEXT:    s_lshr_b32 s9, s8, 16
2991 ; GFX9-NEXT:    ;;#ASMSTART
2992 ; GFX9-NEXT:    ; use s[8:9]
2993 ; GFX9-NEXT:    ;;#ASMEND
2994 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2995   %vec0 = call <2 x i16> asm "; def $0", "=s"()
2996   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 1, i32 1>
2997   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
2998   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
2999   ret void
3002 define void @s_shuffle_v3i16_v2i16__0_1_1() {
3003 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__0_1_1:
3004 ; GFX9:       ; %bb.0:
3005 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3006 ; GFX9-NEXT:    ;;#ASMSTART
3007 ; GFX9-NEXT:    ; def s8
3008 ; GFX9-NEXT:    ;;#ASMEND
3009 ; GFX9-NEXT:    s_lshr_b32 s9, s8, 16
3010 ; GFX9-NEXT:    ;;#ASMSTART
3011 ; GFX9-NEXT:    ; use s[8:9]
3012 ; GFX9-NEXT:    ;;#ASMEND
3013 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3014   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3015   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 1, i32 1>
3016   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3017   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3018   ret void
3021 define void @s_shuffle_v3i16_v2i16__1_1_1() {
3022 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__1_1_1:
3023 ; GFX900:       ; %bb.0:
3024 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3025 ; GFX900-NEXT:    ;;#ASMSTART
3026 ; GFX900-NEXT:    ; def s4
3027 ; GFX900-NEXT:    ;;#ASMEND
3028 ; GFX900-NEXT:    s_lshr_b32 s9, s4, 16
3029 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
3030 ; GFX900-NEXT:    ;;#ASMSTART
3031 ; GFX900-NEXT:    ; use s[8:9]
3032 ; GFX900-NEXT:    ;;#ASMEND
3033 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3035 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__1_1_1:
3036 ; GFX90A:       ; %bb.0:
3037 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3038 ; GFX90A-NEXT:    ;;#ASMSTART
3039 ; GFX90A-NEXT:    ; def s4
3040 ; GFX90A-NEXT:    ;;#ASMEND
3041 ; GFX90A-NEXT:    s_lshr_b32 s9, s4, 16
3042 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
3043 ; GFX90A-NEXT:    ;;#ASMSTART
3044 ; GFX90A-NEXT:    ; use s[8:9]
3045 ; GFX90A-NEXT:    ;;#ASMEND
3046 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3048 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__1_1_1:
3049 ; GFX940:       ; %bb.0:
3050 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3051 ; GFX940-NEXT:    ;;#ASMSTART
3052 ; GFX940-NEXT:    ; def s0
3053 ; GFX940-NEXT:    ;;#ASMEND
3054 ; GFX940-NEXT:    s_lshr_b32 s9, s0, 16
3055 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
3056 ; GFX940-NEXT:    ;;#ASMSTART
3057 ; GFX940-NEXT:    ; use s[8:9]
3058 ; GFX940-NEXT:    ;;#ASMEND
3059 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3060   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3061   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 1, i32 1>
3062   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3063   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3064   ret void
3067 define void @s_shuffle_v3i16_v2i16__2_1_1() {
3068 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__2_1_1:
3069 ; GFX9:       ; %bb.0:
3070 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3071 ; GFX9-NEXT:    ;;#ASMSTART
3072 ; GFX9-NEXT:    ; def s8
3073 ; GFX9-NEXT:    ;;#ASMEND
3074 ; GFX9-NEXT:    s_lshr_b32 s9, s8, 16
3075 ; GFX9-NEXT:    ;;#ASMSTART
3076 ; GFX9-NEXT:    ; use s[8:9]
3077 ; GFX9-NEXT:    ;;#ASMEND
3078 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3079   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3080   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 1, i32 1>
3081   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3082   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3083   ret void
3086 define void @s_shuffle_v3i16_v2i16__3_1_1() {
3087 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_1_1:
3088 ; GFX900:       ; %bb.0:
3089 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3090 ; GFX900-NEXT:    ;;#ASMSTART
3091 ; GFX900-NEXT:    ; def s4
3092 ; GFX900-NEXT:    ;;#ASMEND
3093 ; GFX900-NEXT:    ;;#ASMSTART
3094 ; GFX900-NEXT:    ; def s5
3095 ; GFX900-NEXT:    ;;#ASMEND
3096 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
3097 ; GFX900-NEXT:    s_lshr_b32 s9, s4, 16
3098 ; GFX900-NEXT:    ;;#ASMSTART
3099 ; GFX900-NEXT:    ; use s[8:9]
3100 ; GFX900-NEXT:    ;;#ASMEND
3101 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3103 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_1_1:
3104 ; GFX90A:       ; %bb.0:
3105 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3106 ; GFX90A-NEXT:    ;;#ASMSTART
3107 ; GFX90A-NEXT:    ; def s4
3108 ; GFX90A-NEXT:    ;;#ASMEND
3109 ; GFX90A-NEXT:    ;;#ASMSTART
3110 ; GFX90A-NEXT:    ; def s5
3111 ; GFX90A-NEXT:    ;;#ASMEND
3112 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
3113 ; GFX90A-NEXT:    s_lshr_b32 s9, s4, 16
3114 ; GFX90A-NEXT:    ;;#ASMSTART
3115 ; GFX90A-NEXT:    ; use s[8:9]
3116 ; GFX90A-NEXT:    ;;#ASMEND
3117 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3119 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_1_1:
3120 ; GFX940:       ; %bb.0:
3121 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3122 ; GFX940-NEXT:    ;;#ASMSTART
3123 ; GFX940-NEXT:    ; def s0
3124 ; GFX940-NEXT:    ;;#ASMEND
3125 ; GFX940-NEXT:    ;;#ASMSTART
3126 ; GFX940-NEXT:    ; def s1
3127 ; GFX940-NEXT:    ;;#ASMEND
3128 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s0
3129 ; GFX940-NEXT:    s_lshr_b32 s9, s0, 16
3130 ; GFX940-NEXT:    ;;#ASMSTART
3131 ; GFX940-NEXT:    ; use s[8:9]
3132 ; GFX940-NEXT:    ;;#ASMEND
3133 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3134   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3135   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3136   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 1>
3137   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3138   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3139   ret void
3142 define void @s_shuffle_v3i16_v2i16__3_u_1() {
3143 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_u_1:
3144 ; GFX900:       ; %bb.0:
3145 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3146 ; GFX900-NEXT:    ;;#ASMSTART
3147 ; GFX900-NEXT:    ; def s4
3148 ; GFX900-NEXT:    ;;#ASMEND
3149 ; GFX900-NEXT:    ;;#ASMSTART
3150 ; GFX900-NEXT:    ; def s5
3151 ; GFX900-NEXT:    ;;#ASMEND
3152 ; GFX900-NEXT:    s_lshr_b32 s9, s4, 16
3153 ; GFX900-NEXT:    s_lshr_b32 s8, s5, 16
3154 ; GFX900-NEXT:    ;;#ASMSTART
3155 ; GFX900-NEXT:    ; use s[8:9]
3156 ; GFX900-NEXT:    ;;#ASMEND
3157 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3159 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_u_1:
3160 ; GFX90A:       ; %bb.0:
3161 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3162 ; GFX90A-NEXT:    ;;#ASMSTART
3163 ; GFX90A-NEXT:    ; def s4
3164 ; GFX90A-NEXT:    ;;#ASMEND
3165 ; GFX90A-NEXT:    ;;#ASMSTART
3166 ; GFX90A-NEXT:    ; def s5
3167 ; GFX90A-NEXT:    ;;#ASMEND
3168 ; GFX90A-NEXT:    s_lshr_b32 s9, s4, 16
3169 ; GFX90A-NEXT:    s_lshr_b32 s8, s5, 16
3170 ; GFX90A-NEXT:    ;;#ASMSTART
3171 ; GFX90A-NEXT:    ; use s[8:9]
3172 ; GFX90A-NEXT:    ;;#ASMEND
3173 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3175 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_u_1:
3176 ; GFX940:       ; %bb.0:
3177 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3178 ; GFX940-NEXT:    ;;#ASMSTART
3179 ; GFX940-NEXT:    ; def s0
3180 ; GFX940-NEXT:    ;;#ASMEND
3181 ; GFX940-NEXT:    ;;#ASMSTART
3182 ; GFX940-NEXT:    ; def s1
3183 ; GFX940-NEXT:    ;;#ASMEND
3184 ; GFX940-NEXT:    s_lshr_b32 s9, s0, 16
3185 ; GFX940-NEXT:    s_lshr_b32 s8, s1, 16
3186 ; GFX940-NEXT:    ;;#ASMSTART
3187 ; GFX940-NEXT:    ; use s[8:9]
3188 ; GFX940-NEXT:    ;;#ASMEND
3189 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3190   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3191   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3192   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 1>
3193   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3194   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3195   ret void
3198 define void @s_shuffle_v3i16_v2i16__3_0_1() {
3199 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_0_1:
3200 ; GFX900:       ; %bb.0:
3201 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3202 ; GFX900-NEXT:    ;;#ASMSTART
3203 ; GFX900-NEXT:    ; def s5
3204 ; GFX900-NEXT:    ;;#ASMEND
3205 ; GFX900-NEXT:    s_lshr_b32 s5, s5, 16
3206 ; GFX900-NEXT:    ;;#ASMSTART
3207 ; GFX900-NEXT:    ; def s4
3208 ; GFX900-NEXT:    ;;#ASMEND
3209 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
3210 ; GFX900-NEXT:    s_lshr_b32 s9, s4, 16
3211 ; GFX900-NEXT:    ;;#ASMSTART
3212 ; GFX900-NEXT:    ; use s[8:9]
3213 ; GFX900-NEXT:    ;;#ASMEND
3214 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3216 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_0_1:
3217 ; GFX90A:       ; %bb.0:
3218 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3219 ; GFX90A-NEXT:    ;;#ASMSTART
3220 ; GFX90A-NEXT:    ; def s5
3221 ; GFX90A-NEXT:    ;;#ASMEND
3222 ; GFX90A-NEXT:    s_lshr_b32 s5, s5, 16
3223 ; GFX90A-NEXT:    ;;#ASMSTART
3224 ; GFX90A-NEXT:    ; def s4
3225 ; GFX90A-NEXT:    ;;#ASMEND
3226 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
3227 ; GFX90A-NEXT:    s_lshr_b32 s9, s4, 16
3228 ; GFX90A-NEXT:    ;;#ASMSTART
3229 ; GFX90A-NEXT:    ; use s[8:9]
3230 ; GFX90A-NEXT:    ;;#ASMEND
3231 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3233 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_0_1:
3234 ; GFX940:       ; %bb.0:
3235 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3236 ; GFX940-NEXT:    ;;#ASMSTART
3237 ; GFX940-NEXT:    ; def s1
3238 ; GFX940-NEXT:    ;;#ASMEND
3239 ; GFX940-NEXT:    s_lshr_b32 s1, s1, 16
3240 ; GFX940-NEXT:    ;;#ASMSTART
3241 ; GFX940-NEXT:    ; def s0
3242 ; GFX940-NEXT:    ;;#ASMEND
3243 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
3244 ; GFX940-NEXT:    s_lshr_b32 s9, s0, 16
3245 ; GFX940-NEXT:    ;;#ASMSTART
3246 ; GFX940-NEXT:    ; use s[8:9]
3247 ; GFX940-NEXT:    ;;#ASMEND
3248 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3249   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3250   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3251   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 1>
3252   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3253   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3254   ret void
3257 define void @s_shuffle_v3i16_v2i16__3_2_1() {
3258 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_2_1:
3259 ; GFX900:       ; %bb.0:
3260 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3261 ; GFX900-NEXT:    ;;#ASMSTART
3262 ; GFX900-NEXT:    ; def s5
3263 ; GFX900-NEXT:    ;;#ASMEND
3264 ; GFX900-NEXT:    s_lshr_b32 s6, s5, 16
3265 ; GFX900-NEXT:    ;;#ASMSTART
3266 ; GFX900-NEXT:    ; def s4
3267 ; GFX900-NEXT:    ;;#ASMEND
3268 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s6, s5
3269 ; GFX900-NEXT:    s_lshr_b32 s9, s4, 16
3270 ; GFX900-NEXT:    ;;#ASMSTART
3271 ; GFX900-NEXT:    ; use s[8:9]
3272 ; GFX900-NEXT:    ;;#ASMEND
3273 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3275 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_2_1:
3276 ; GFX90A:       ; %bb.0:
3277 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3278 ; GFX90A-NEXT:    ;;#ASMSTART
3279 ; GFX90A-NEXT:    ; def s5
3280 ; GFX90A-NEXT:    ;;#ASMEND
3281 ; GFX90A-NEXT:    s_lshr_b32 s6, s5, 16
3282 ; GFX90A-NEXT:    ;;#ASMSTART
3283 ; GFX90A-NEXT:    ; def s4
3284 ; GFX90A-NEXT:    ;;#ASMEND
3285 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s6, s5
3286 ; GFX90A-NEXT:    s_lshr_b32 s9, s4, 16
3287 ; GFX90A-NEXT:    ;;#ASMSTART
3288 ; GFX90A-NEXT:    ; use s[8:9]
3289 ; GFX90A-NEXT:    ;;#ASMEND
3290 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3292 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_2_1:
3293 ; GFX940:       ; %bb.0:
3294 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3295 ; GFX940-NEXT:    ;;#ASMSTART
3296 ; GFX940-NEXT:    ; def s1
3297 ; GFX940-NEXT:    ;;#ASMEND
3298 ; GFX940-NEXT:    s_lshr_b32 s2, s1, 16
3299 ; GFX940-NEXT:    ;;#ASMSTART
3300 ; GFX940-NEXT:    ; def s0
3301 ; GFX940-NEXT:    ;;#ASMEND
3302 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s2, s1
3303 ; GFX940-NEXT:    s_lshr_b32 s9, s0, 16
3304 ; GFX940-NEXT:    ;;#ASMSTART
3305 ; GFX940-NEXT:    ; use s[8:9]
3306 ; GFX940-NEXT:    ;;#ASMEND
3307 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3308   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3309   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3310   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 1>
3311   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3312   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3313   ret void
3316 define void @s_shuffle_v3i16_v2i16__u_2_2() {
3317 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__u_2_2:
3318 ; GFX9:       ; %bb.0:
3319 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3320 ; GFX9-NEXT:    ;;#ASMSTART
3321 ; GFX9-NEXT:    ; use s[8:9]
3322 ; GFX9-NEXT:    ;;#ASMEND
3323 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3324   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3325   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 poison, i32 2, i32 2>
3326   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3327   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3328   ret void
3331 define void @s_shuffle_v3i16_v2i16__0_2_2() {
3332 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__0_2_2:
3333 ; GFX900:       ; %bb.0:
3334 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3335 ; GFX900-NEXT:    ;;#ASMSTART
3336 ; GFX900-NEXT:    ; def s8
3337 ; GFX900-NEXT:    ;;#ASMEND
3338 ; GFX900-NEXT:    ;;#ASMSTART
3339 ; GFX900-NEXT:    ; use s[8:9]
3340 ; GFX900-NEXT:    ;;#ASMEND
3341 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3343 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__0_2_2:
3344 ; GFX90A:       ; %bb.0:
3345 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3346 ; GFX90A-NEXT:    ;;#ASMSTART
3347 ; GFX90A-NEXT:    ; def s8
3348 ; GFX90A-NEXT:    ;;#ASMEND
3349 ; GFX90A-NEXT:    ;;#ASMSTART
3350 ; GFX90A-NEXT:    ; use s[8:9]
3351 ; GFX90A-NEXT:    ;;#ASMEND
3352 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3354 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__0_2_2:
3355 ; GFX940:       ; %bb.0:
3356 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3357 ; GFX940-NEXT:    ;;#ASMSTART
3358 ; GFX940-NEXT:    ; def s8
3359 ; GFX940-NEXT:    ;;#ASMEND
3360 ; GFX940-NEXT:    s_nop 0
3361 ; GFX940-NEXT:    ;;#ASMSTART
3362 ; GFX940-NEXT:    ; use s[8:9]
3363 ; GFX940-NEXT:    ;;#ASMEND
3364 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3365   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3366   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 0, i32 2, i32 2>
3367   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3368   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3369   ret void
3372 define void @s_shuffle_v3i16_v2i16__1_2_2() {
3373 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__1_2_2:
3374 ; GFX900:       ; %bb.0:
3375 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3376 ; GFX900-NEXT:    ;;#ASMSTART
3377 ; GFX900-NEXT:    ; def s4
3378 ; GFX900-NEXT:    ;;#ASMEND
3379 ; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
3380 ; GFX900-NEXT:    ;;#ASMSTART
3381 ; GFX900-NEXT:    ; use s[8:9]
3382 ; GFX900-NEXT:    ;;#ASMEND
3383 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3385 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__1_2_2:
3386 ; GFX90A:       ; %bb.0:
3387 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3388 ; GFX90A-NEXT:    ;;#ASMSTART
3389 ; GFX90A-NEXT:    ; def s4
3390 ; GFX90A-NEXT:    ;;#ASMEND
3391 ; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
3392 ; GFX90A-NEXT:    ;;#ASMSTART
3393 ; GFX90A-NEXT:    ; use s[8:9]
3394 ; GFX90A-NEXT:    ;;#ASMEND
3395 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3397 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__1_2_2:
3398 ; GFX940:       ; %bb.0:
3399 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3400 ; GFX940-NEXT:    ;;#ASMSTART
3401 ; GFX940-NEXT:    ; def s0
3402 ; GFX940-NEXT:    ;;#ASMEND
3403 ; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
3404 ; GFX940-NEXT:    ;;#ASMSTART
3405 ; GFX940-NEXT:    ; use s[8:9]
3406 ; GFX940-NEXT:    ;;#ASMEND
3407 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3408   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3409   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 1, i32 2, i32 2>
3410   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3411   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3412   ret void
3415 define void @s_shuffle_v3i16_v2i16__2_2_2() {
3416 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__2_2_2:
3417 ; GFX9:       ; %bb.0:
3418 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3419 ; GFX9-NEXT:    ;;#ASMSTART
3420 ; GFX9-NEXT:    ; use s[8:9]
3421 ; GFX9-NEXT:    ;;#ASMEND
3422 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3423   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3424   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> poison, <3 x i32> <i32 2, i32 2, i32 2>
3425   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3426   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3427   ret void
3430 define void @s_shuffle_v3i16_v2i16__3_2_2() {
3431 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_2_2:
3432 ; GFX900:       ; %bb.0:
3433 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3434 ; GFX900-NEXT:    ;;#ASMSTART
3435 ; GFX900-NEXT:    ; def s9
3436 ; GFX900-NEXT:    ;;#ASMEND
3437 ; GFX900-NEXT:    s_lshr_b32 s4, s9, 16
3438 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s9
3439 ; GFX900-NEXT:    ;;#ASMSTART
3440 ; GFX900-NEXT:    ; use s[8:9]
3441 ; GFX900-NEXT:    ;;#ASMEND
3442 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3444 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_2_2:
3445 ; GFX90A:       ; %bb.0:
3446 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3447 ; GFX90A-NEXT:    ;;#ASMSTART
3448 ; GFX90A-NEXT:    ; def s9
3449 ; GFX90A-NEXT:    ;;#ASMEND
3450 ; GFX90A-NEXT:    s_lshr_b32 s4, s9, 16
3451 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s9
3452 ; GFX90A-NEXT:    ;;#ASMSTART
3453 ; GFX90A-NEXT:    ; use s[8:9]
3454 ; GFX90A-NEXT:    ;;#ASMEND
3455 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3457 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_2_2:
3458 ; GFX940:       ; %bb.0:
3459 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3460 ; GFX940-NEXT:    ;;#ASMSTART
3461 ; GFX940-NEXT:    ; def s9
3462 ; GFX940-NEXT:    ;;#ASMEND
3463 ; GFX940-NEXT:    s_lshr_b32 s0, s9, 16
3464 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s9
3465 ; GFX940-NEXT:    ;;#ASMSTART
3466 ; GFX940-NEXT:    ; use s[8:9]
3467 ; GFX940-NEXT:    ;;#ASMEND
3468 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3469   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3470   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3471   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 2>
3472   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3473   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3474   ret void
3477 define void @s_shuffle_v3i16_v2i16__3_u_2() {
3478 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__3_u_2:
3479 ; GFX9:       ; %bb.0:
3480 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3481 ; GFX9-NEXT:    ;;#ASMSTART
3482 ; GFX9-NEXT:    ; def s9
3483 ; GFX9-NEXT:    ;;#ASMEND
3484 ; GFX9-NEXT:    s_lshr_b32 s8, s9, 16
3485 ; GFX9-NEXT:    ;;#ASMSTART
3486 ; GFX9-NEXT:    ; use s[8:9]
3487 ; GFX9-NEXT:    ;;#ASMEND
3488 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3489   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3490   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3491   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 2>
3492   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3493   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3494   ret void
3497 define void @s_shuffle_v3i16_v2i16__3_0_2() {
3498 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_0_2:
3499 ; GFX900:       ; %bb.0:
3500 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3501 ; GFX900-NEXT:    ;;#ASMSTART
3502 ; GFX900-NEXT:    ; def s9
3503 ; GFX900-NEXT:    ;;#ASMEND
3504 ; GFX900-NEXT:    s_lshr_b32 s5, s9, 16
3505 ; GFX900-NEXT:    ;;#ASMSTART
3506 ; GFX900-NEXT:    ; def s4
3507 ; GFX900-NEXT:    ;;#ASMEND
3508 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
3509 ; GFX900-NEXT:    ;;#ASMSTART
3510 ; GFX900-NEXT:    ; use s[8:9]
3511 ; GFX900-NEXT:    ;;#ASMEND
3512 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3514 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_0_2:
3515 ; GFX90A:       ; %bb.0:
3516 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3517 ; GFX90A-NEXT:    ;;#ASMSTART
3518 ; GFX90A-NEXT:    ; def s9
3519 ; GFX90A-NEXT:    ;;#ASMEND
3520 ; GFX90A-NEXT:    s_lshr_b32 s5, s9, 16
3521 ; GFX90A-NEXT:    ;;#ASMSTART
3522 ; GFX90A-NEXT:    ; def s4
3523 ; GFX90A-NEXT:    ;;#ASMEND
3524 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
3525 ; GFX90A-NEXT:    ;;#ASMSTART
3526 ; GFX90A-NEXT:    ; use s[8:9]
3527 ; GFX90A-NEXT:    ;;#ASMEND
3528 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3530 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_0_2:
3531 ; GFX940:       ; %bb.0:
3532 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3533 ; GFX940-NEXT:    ;;#ASMSTART
3534 ; GFX940-NEXT:    ; def s9
3535 ; GFX940-NEXT:    ;;#ASMEND
3536 ; GFX940-NEXT:    s_lshr_b32 s1, s9, 16
3537 ; GFX940-NEXT:    ;;#ASMSTART
3538 ; GFX940-NEXT:    ; def s0
3539 ; GFX940-NEXT:    ;;#ASMEND
3540 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
3541 ; GFX940-NEXT:    ;;#ASMSTART
3542 ; GFX940-NEXT:    ; use s[8:9]
3543 ; GFX940-NEXT:    ;;#ASMEND
3544 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3545   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3546   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3547   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 2>
3548   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3549   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3550   ret void
3553 define void @s_shuffle_v3i16_v2i16__3_1_2() {
3554 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_1_2:
3555 ; GFX900:       ; %bb.0:
3556 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3557 ; GFX900-NEXT:    ;;#ASMSTART
3558 ; GFX900-NEXT:    ; def s4
3559 ; GFX900-NEXT:    ;;#ASMEND
3560 ; GFX900-NEXT:    ;;#ASMSTART
3561 ; GFX900-NEXT:    ; def s9
3562 ; GFX900-NEXT:    ;;#ASMEND
3563 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s9, s4
3564 ; GFX900-NEXT:    ;;#ASMSTART
3565 ; GFX900-NEXT:    ; use s[8:9]
3566 ; GFX900-NEXT:    ;;#ASMEND
3567 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3569 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_1_2:
3570 ; GFX90A:       ; %bb.0:
3571 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3572 ; GFX90A-NEXT:    ;;#ASMSTART
3573 ; GFX90A-NEXT:    ; def s4
3574 ; GFX90A-NEXT:    ;;#ASMEND
3575 ; GFX90A-NEXT:    ;;#ASMSTART
3576 ; GFX90A-NEXT:    ; def s9
3577 ; GFX90A-NEXT:    ;;#ASMEND
3578 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s9, s4
3579 ; GFX90A-NEXT:    ;;#ASMSTART
3580 ; GFX90A-NEXT:    ; use s[8:9]
3581 ; GFX90A-NEXT:    ;;#ASMEND
3582 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3584 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_1_2:
3585 ; GFX940:       ; %bb.0:
3586 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3587 ; GFX940-NEXT:    ;;#ASMSTART
3588 ; GFX940-NEXT:    ; def s0
3589 ; GFX940-NEXT:    ;;#ASMEND
3590 ; GFX940-NEXT:    ;;#ASMSTART
3591 ; GFX940-NEXT:    ; def s9
3592 ; GFX940-NEXT:    ;;#ASMEND
3593 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s9, s0
3594 ; GFX940-NEXT:    ;;#ASMSTART
3595 ; GFX940-NEXT:    ; use s[8:9]
3596 ; GFX940-NEXT:    ;;#ASMEND
3597 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3598   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3599   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3600   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 2>
3601   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3602   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3603   ret void
3606 define void @s_shuffle_v3i16_v2i16__u_3_3() {
3607 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__u_3_3:
3608 ; GFX9:       ; %bb.0:
3609 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3610 ; GFX9-NEXT:    ;;#ASMSTART
3611 ; GFX9-NEXT:    ; def s8
3612 ; GFX9-NEXT:    ;;#ASMEND
3613 ; GFX9-NEXT:    s_lshr_b32 s9, s8, 16
3614 ; GFX9-NEXT:    ;;#ASMSTART
3615 ; GFX9-NEXT:    ; use s[8:9]
3616 ; GFX9-NEXT:    ;;#ASMEND
3617 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3618   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3619   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3620   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 poison, i32 3, i32 3>
3621   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3622   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3623   ret void
3626 define void @s_shuffle_v3i16_v2i16__0_3_3() {
3627 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__0_3_3:
3628 ; GFX900:       ; %bb.0:
3629 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3630 ; GFX900-NEXT:    ;;#ASMSTART
3631 ; GFX900-NEXT:    ; def s4
3632 ; GFX900-NEXT:    ;;#ASMEND
3633 ; GFX900-NEXT:    ;;#ASMSTART
3634 ; GFX900-NEXT:    ; def s5
3635 ; GFX900-NEXT:    ;;#ASMEND
3636 ; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s4, s5
3637 ; GFX900-NEXT:    s_lshr_b32 s9, s5, 16
3638 ; GFX900-NEXT:    ;;#ASMSTART
3639 ; GFX900-NEXT:    ; use s[8:9]
3640 ; GFX900-NEXT:    ;;#ASMEND
3641 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3643 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__0_3_3:
3644 ; GFX90A:       ; %bb.0:
3645 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3646 ; GFX90A-NEXT:    ;;#ASMSTART
3647 ; GFX90A-NEXT:    ; def s4
3648 ; GFX90A-NEXT:    ;;#ASMEND
3649 ; GFX90A-NEXT:    ;;#ASMSTART
3650 ; GFX90A-NEXT:    ; def s5
3651 ; GFX90A-NEXT:    ;;#ASMEND
3652 ; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s4, s5
3653 ; GFX90A-NEXT:    s_lshr_b32 s9, s5, 16
3654 ; GFX90A-NEXT:    ;;#ASMSTART
3655 ; GFX90A-NEXT:    ; use s[8:9]
3656 ; GFX90A-NEXT:    ;;#ASMEND
3657 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3659 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__0_3_3:
3660 ; GFX940:       ; %bb.0:
3661 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3662 ; GFX940-NEXT:    ;;#ASMSTART
3663 ; GFX940-NEXT:    ; def s0
3664 ; GFX940-NEXT:    ;;#ASMEND
3665 ; GFX940-NEXT:    ;;#ASMSTART
3666 ; GFX940-NEXT:    ; def s1
3667 ; GFX940-NEXT:    ;;#ASMEND
3668 ; GFX940-NEXT:    s_pack_lh_b32_b16 s8, s0, s1
3669 ; GFX940-NEXT:    s_lshr_b32 s9, s1, 16
3670 ; GFX940-NEXT:    ;;#ASMSTART
3671 ; GFX940-NEXT:    ; use s[8:9]
3672 ; GFX940-NEXT:    ;;#ASMEND
3673 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3674   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3675   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3676   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 0, i32 3, i32 3>
3677   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3678   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3679   ret void
3682 define void @s_shuffle_v3i16_v2i16__1_3_3() {
3683 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__1_3_3:
3684 ; GFX900:       ; %bb.0:
3685 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3686 ; GFX900-NEXT:    ;;#ASMSTART
3687 ; GFX900-NEXT:    ; def s4
3688 ; GFX900-NEXT:    ;;#ASMEND
3689 ; GFX900-NEXT:    ;;#ASMSTART
3690 ; GFX900-NEXT:    ; def s5
3691 ; GFX900-NEXT:    ;;#ASMEND
3692 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s5
3693 ; GFX900-NEXT:    s_lshr_b32 s9, s5, 16
3694 ; GFX900-NEXT:    ;;#ASMSTART
3695 ; GFX900-NEXT:    ; use s[8:9]
3696 ; GFX900-NEXT:    ;;#ASMEND
3697 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3699 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__1_3_3:
3700 ; GFX90A:       ; %bb.0:
3701 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3702 ; GFX90A-NEXT:    ;;#ASMSTART
3703 ; GFX90A-NEXT:    ; def s4
3704 ; GFX90A-NEXT:    ;;#ASMEND
3705 ; GFX90A-NEXT:    ;;#ASMSTART
3706 ; GFX90A-NEXT:    ; def s5
3707 ; GFX90A-NEXT:    ;;#ASMEND
3708 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s5
3709 ; GFX90A-NEXT:    s_lshr_b32 s9, s5, 16
3710 ; GFX90A-NEXT:    ;;#ASMSTART
3711 ; GFX90A-NEXT:    ; use s[8:9]
3712 ; GFX90A-NEXT:    ;;#ASMEND
3713 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3715 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__1_3_3:
3716 ; GFX940:       ; %bb.0:
3717 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3718 ; GFX940-NEXT:    ;;#ASMSTART
3719 ; GFX940-NEXT:    ; def s0
3720 ; GFX940-NEXT:    ;;#ASMEND
3721 ; GFX940-NEXT:    ;;#ASMSTART
3722 ; GFX940-NEXT:    ; def s1
3723 ; GFX940-NEXT:    ;;#ASMEND
3724 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s1
3725 ; GFX940-NEXT:    s_lshr_b32 s9, s1, 16
3726 ; GFX940-NEXT:    ;;#ASMSTART
3727 ; GFX940-NEXT:    ; use s[8:9]
3728 ; GFX940-NEXT:    ;;#ASMEND
3729 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3730   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3731   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3732   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 1, i32 3, i32 3>
3733   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3734   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3735   ret void
3738 define void @s_shuffle_v3i16_v2i16__2_3_3() {
3739 ; GFX9-LABEL: s_shuffle_v3i16_v2i16__2_3_3:
3740 ; GFX9:       ; %bb.0:
3741 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3742 ; GFX9-NEXT:    ;;#ASMSTART
3743 ; GFX9-NEXT:    ; def s8
3744 ; GFX9-NEXT:    ;;#ASMEND
3745 ; GFX9-NEXT:    s_lshr_b32 s9, s8, 16
3746 ; GFX9-NEXT:    ;;#ASMSTART
3747 ; GFX9-NEXT:    ; use s[8:9]
3748 ; GFX9-NEXT:    ;;#ASMEND
3749 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3750   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3751   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3752   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 2, i32 3, i32 3>
3753   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3754   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3755   ret void
3758 define void @s_shuffle_v3i16_v2i16__3_u_3() {
3759 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_u_3:
3760 ; GFX900:       ; %bb.0:
3761 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3762 ; GFX900-NEXT:    ;;#ASMSTART
3763 ; GFX900-NEXT:    ; def s4
3764 ; GFX900-NEXT:    ;;#ASMEND
3765 ; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
3766 ; GFX900-NEXT:    s_mov_b32 s9, s8
3767 ; GFX900-NEXT:    ;;#ASMSTART
3768 ; GFX900-NEXT:    ; use s[8:9]
3769 ; GFX900-NEXT:    ;;#ASMEND
3770 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3772 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_u_3:
3773 ; GFX90A:       ; %bb.0:
3774 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3775 ; GFX90A-NEXT:    ;;#ASMSTART
3776 ; GFX90A-NEXT:    ; def s4
3777 ; GFX90A-NEXT:    ;;#ASMEND
3778 ; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
3779 ; GFX90A-NEXT:    s_mov_b32 s9, s8
3780 ; GFX90A-NEXT:    ;;#ASMSTART
3781 ; GFX90A-NEXT:    ; use s[8:9]
3782 ; GFX90A-NEXT:    ;;#ASMEND
3783 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3785 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_u_3:
3786 ; GFX940:       ; %bb.0:
3787 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3788 ; GFX940-NEXT:    ;;#ASMSTART
3789 ; GFX940-NEXT:    ; def s0
3790 ; GFX940-NEXT:    ;;#ASMEND
3791 ; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
3792 ; GFX940-NEXT:    s_mov_b32 s9, s8
3793 ; GFX940-NEXT:    ;;#ASMSTART
3794 ; GFX940-NEXT:    ; use s[8:9]
3795 ; GFX940-NEXT:    ;;#ASMEND
3796 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3797   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3798   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3799   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 poison, i32 3>
3800   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3801   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3802   ret void
3805 define void @s_shuffle_v3i16_v2i16__3_0_3() {
3806 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_0_3:
3807 ; GFX900:       ; %bb.0:
3808 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3809 ; GFX900-NEXT:    ;;#ASMSTART
3810 ; GFX900-NEXT:    ; def s5
3811 ; GFX900-NEXT:    ;;#ASMEND
3812 ; GFX900-NEXT:    s_lshr_b32 s9, s5, 16
3813 ; GFX900-NEXT:    ;;#ASMSTART
3814 ; GFX900-NEXT:    ; def s4
3815 ; GFX900-NEXT:    ;;#ASMEND
3816 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s9, s4
3817 ; GFX900-NEXT:    ;;#ASMSTART
3818 ; GFX900-NEXT:    ; use s[8:9]
3819 ; GFX900-NEXT:    ;;#ASMEND
3820 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3822 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_0_3:
3823 ; GFX90A:       ; %bb.0:
3824 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3825 ; GFX90A-NEXT:    ;;#ASMSTART
3826 ; GFX90A-NEXT:    ; def s5
3827 ; GFX90A-NEXT:    ;;#ASMEND
3828 ; GFX90A-NEXT:    s_lshr_b32 s9, s5, 16
3829 ; GFX90A-NEXT:    ;;#ASMSTART
3830 ; GFX90A-NEXT:    ; def s4
3831 ; GFX90A-NEXT:    ;;#ASMEND
3832 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s9, s4
3833 ; GFX90A-NEXT:    ;;#ASMSTART
3834 ; GFX90A-NEXT:    ; use s[8:9]
3835 ; GFX90A-NEXT:    ;;#ASMEND
3836 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3838 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_0_3:
3839 ; GFX940:       ; %bb.0:
3840 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3841 ; GFX940-NEXT:    ;;#ASMSTART
3842 ; GFX940-NEXT:    ; def s1
3843 ; GFX940-NEXT:    ;;#ASMEND
3844 ; GFX940-NEXT:    s_lshr_b32 s9, s1, 16
3845 ; GFX940-NEXT:    ;;#ASMSTART
3846 ; GFX940-NEXT:    ; def s0
3847 ; GFX940-NEXT:    ;;#ASMEND
3848 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s9, s0
3849 ; GFX940-NEXT:    ;;#ASMSTART
3850 ; GFX940-NEXT:    ; use s[8:9]
3851 ; GFX940-NEXT:    ;;#ASMEND
3852 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3853   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3854   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3855   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 0, i32 3>
3856   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3857   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3858   ret void
3861 define void @s_shuffle_v3i16_v2i16__3_1_3() {
3862 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_1_3:
3863 ; GFX900:       ; %bb.0:
3864 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3865 ; GFX900-NEXT:    ;;#ASMSTART
3866 ; GFX900-NEXT:    ; def s4
3867 ; GFX900-NEXT:    ;;#ASMEND
3868 ; GFX900-NEXT:    ;;#ASMSTART
3869 ; GFX900-NEXT:    ; def s5
3870 ; GFX900-NEXT:    ;;#ASMEND
3871 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
3872 ; GFX900-NEXT:    s_lshr_b32 s9, s5, 16
3873 ; GFX900-NEXT:    ;;#ASMSTART
3874 ; GFX900-NEXT:    ; use s[8:9]
3875 ; GFX900-NEXT:    ;;#ASMEND
3876 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3878 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_1_3:
3879 ; GFX90A:       ; %bb.0:
3880 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3881 ; GFX90A-NEXT:    ;;#ASMSTART
3882 ; GFX90A-NEXT:    ; def s4
3883 ; GFX90A-NEXT:    ;;#ASMEND
3884 ; GFX90A-NEXT:    ;;#ASMSTART
3885 ; GFX90A-NEXT:    ; def s5
3886 ; GFX90A-NEXT:    ;;#ASMEND
3887 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s5, s4
3888 ; GFX90A-NEXT:    s_lshr_b32 s9, s5, 16
3889 ; GFX90A-NEXT:    ;;#ASMSTART
3890 ; GFX90A-NEXT:    ; use s[8:9]
3891 ; GFX90A-NEXT:    ;;#ASMEND
3892 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3894 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_1_3:
3895 ; GFX940:       ; %bb.0:
3896 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3897 ; GFX940-NEXT:    ;;#ASMSTART
3898 ; GFX940-NEXT:    ; def s0
3899 ; GFX940-NEXT:    ;;#ASMEND
3900 ; GFX940-NEXT:    ;;#ASMSTART
3901 ; GFX940-NEXT:    ; def s1
3902 ; GFX940-NEXT:    ;;#ASMEND
3903 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s1, s0
3904 ; GFX940-NEXT:    s_lshr_b32 s9, s1, 16
3905 ; GFX940-NEXT:    ;;#ASMSTART
3906 ; GFX940-NEXT:    ; use s[8:9]
3907 ; GFX940-NEXT:    ;;#ASMEND
3908 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3909   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3910   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3911   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 1, i32 3>
3912   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3913   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3914   ret void
3917 define void @s_shuffle_v3i16_v2i16__3_2_3() {
3918 ; GFX900-LABEL: s_shuffle_v3i16_v2i16__3_2_3:
3919 ; GFX900:       ; %bb.0:
3920 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3921 ; GFX900-NEXT:    ;;#ASMSTART
3922 ; GFX900-NEXT:    ; def s4
3923 ; GFX900-NEXT:    ;;#ASMEND
3924 ; GFX900-NEXT:    s_lshr_b32 s9, s4, 16
3925 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s9, s4
3926 ; GFX900-NEXT:    ;;#ASMSTART
3927 ; GFX900-NEXT:    ; use s[8:9]
3928 ; GFX900-NEXT:    ;;#ASMEND
3929 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3931 ; GFX90A-LABEL: s_shuffle_v3i16_v2i16__3_2_3:
3932 ; GFX90A:       ; %bb.0:
3933 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3934 ; GFX90A-NEXT:    ;;#ASMSTART
3935 ; GFX90A-NEXT:    ; def s4
3936 ; GFX90A-NEXT:    ;;#ASMEND
3937 ; GFX90A-NEXT:    s_lshr_b32 s9, s4, 16
3938 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s9, s4
3939 ; GFX90A-NEXT:    ;;#ASMSTART
3940 ; GFX90A-NEXT:    ; use s[8:9]
3941 ; GFX90A-NEXT:    ;;#ASMEND
3942 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3944 ; GFX940-LABEL: s_shuffle_v3i16_v2i16__3_2_3:
3945 ; GFX940:       ; %bb.0:
3946 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3947 ; GFX940-NEXT:    ;;#ASMSTART
3948 ; GFX940-NEXT:    ; def s0
3949 ; GFX940-NEXT:    ;;#ASMEND
3950 ; GFX940-NEXT:    s_lshr_b32 s9, s0, 16
3951 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s9, s0
3952 ; GFX940-NEXT:    ;;#ASMSTART
3953 ; GFX940-NEXT:    ; use s[8:9]
3954 ; GFX940-NEXT:    ;;#ASMEND
3955 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3956   %vec0 = call <2 x i16> asm "; def $0", "=s"()
3957   %vec1 = call <2 x i16> asm "; def $0", "=s"()
3958   %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <3 x i32> <i32 3, i32 2, i32 3>
3959   %extend3 = shufflevector <3 x i16> %shuf, <3 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
3960   call void asm sideeffect "; use $0", "{s[8:9]}"(<4 x i16> %extend3)
3961   ret void
3963 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
3964 ; GFX90APLUS: {{.*}}