[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / shufflevector.v2i16.v3i16.ll
blob36a9d54aca8a8769b69af4863adf4e1d8fcb472c
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_v2i16_v3i16__u_u(ptr addrspace(1) inreg %ptr) {
8 ; GFX9-LABEL: v_shuffle_v2i16_v3i16__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 <4 x i16> asm "; def $0", "=v"()
13   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
14   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> poison
15   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
16   ret void
19 define void @v_shuffle_v2i16_v3i16__0_u(ptr addrspace(1) inreg %ptr) {
20 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_u:
21 ; GFX900:       ; %bb.0:
22 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
23 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
24 ; GFX900-NEXT:    ;;#ASMSTART
25 ; GFX900-NEXT:    ; def v[0:1]
26 ; GFX900-NEXT:    ;;#ASMEND
27 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
28 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
29 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
31 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_u:
32 ; GFX90A:       ; %bb.0:
33 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
34 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
35 ; GFX90A-NEXT:    ;;#ASMSTART
36 ; GFX90A-NEXT:    ; def v[0:1]
37 ; GFX90A-NEXT:    ;;#ASMEND
38 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
39 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
40 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
42 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__0_u:
43 ; GFX940:       ; %bb.0:
44 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
45 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
46 ; GFX940-NEXT:    ;;#ASMSTART
47 ; GFX940-NEXT:    ; def v[0:1]
48 ; GFX940-NEXT:    ;;#ASMEND
49 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
50 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
51 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
52   %vec0 = call <4 x i16> asm "; def $0", "=v"()
53   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
54   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 poison>
55   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
56   ret void
59 define void @v_shuffle_v2i16_v3i16__1_u(ptr addrspace(1) inreg %ptr) {
60 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_u:
61 ; GFX900:       ; %bb.0:
62 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
63 ; GFX900-NEXT:    ;;#ASMSTART
64 ; GFX900-NEXT:    ; def v[0:1]
65 ; GFX900-NEXT:    ;;#ASMEND
66 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
67 ; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 16
68 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
69 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
70 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
72 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_u:
73 ; GFX90A:       ; %bb.0:
74 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
75 ; GFX90A-NEXT:    ;;#ASMSTART
76 ; GFX90A-NEXT:    ; def v[0:1]
77 ; GFX90A-NEXT:    ;;#ASMEND
78 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
79 ; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 16
80 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
81 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
82 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
84 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__1_u:
85 ; GFX940:       ; %bb.0:
86 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
87 ; GFX940-NEXT:    ;;#ASMSTART
88 ; GFX940-NEXT:    ; def v[0:1]
89 ; GFX940-NEXT:    ;;#ASMEND
90 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
91 ; GFX940-NEXT:    v_alignbit_b32 v0, s0, v0, 16
92 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
93 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
94 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
95   %vec0 = call <4 x i16> asm "; def $0", "=v"()
96   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
97   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 poison>
98   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
99   ret void
102 define void @v_shuffle_v2i16_v3i16__2_u(ptr addrspace(1) inreg %ptr) {
103 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_u:
104 ; GFX900:       ; %bb.0:
105 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
106 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
107 ; GFX900-NEXT:    ;;#ASMSTART
108 ; GFX900-NEXT:    ; def v[0:1]
109 ; GFX900-NEXT:    ;;#ASMEND
110 ; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]
111 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
112 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
114 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_u:
115 ; GFX90A:       ; %bb.0:
116 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
117 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
118 ; GFX90A-NEXT:    ;;#ASMSTART
119 ; GFX90A-NEXT:    ; def v[0:1]
120 ; GFX90A-NEXT:    ;;#ASMEND
121 ; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]
122 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
123 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
125 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__2_u:
126 ; GFX940:       ; %bb.0:
127 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
128 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
129 ; GFX940-NEXT:    ;;#ASMSTART
130 ; GFX940-NEXT:    ; def v[0:1]
131 ; GFX940-NEXT:    ;;#ASMEND
132 ; GFX940-NEXT:    global_store_dword v2, v1, s[0:1] sc0 sc1
133 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
134 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
135   %vec0 = call <4 x i16> asm "; def $0", "=v"()
136   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
137   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 poison>
138   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
139   ret void
142 define void @v_shuffle_v2i16_v3i16__3_u(ptr addrspace(1) inreg %ptr) {
143 ; GFX9-LABEL: v_shuffle_v2i16_v3i16__3_u:
144 ; GFX9:       ; %bb.0:
145 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
146 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
147   %vec0 = call <4 x i16> asm "; def $0", "=v"()
148   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
149   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 poison>
150   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
151   ret void
154 define void @v_shuffle_v2i16_v3i16__4_u(ptr addrspace(1) inreg %ptr) {
155 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_u:
156 ; GFX900:       ; %bb.0:
157 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
158 ; GFX900-NEXT:    ;;#ASMSTART
159 ; GFX900-NEXT:    ; def v[0:1]
160 ; GFX900-NEXT:    ;;#ASMEND
161 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
162 ; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 16
163 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
164 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
165 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
167 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_u:
168 ; GFX90A:       ; %bb.0:
169 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
170 ; GFX90A-NEXT:    ;;#ASMSTART
171 ; GFX90A-NEXT:    ; def v[0:1]
172 ; GFX90A-NEXT:    ;;#ASMEND
173 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
174 ; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 16
175 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
176 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
177 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
179 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__4_u:
180 ; GFX940:       ; %bb.0:
181 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
182 ; GFX940-NEXT:    ;;#ASMSTART
183 ; GFX940-NEXT:    ; def v[0:1]
184 ; GFX940-NEXT:    ;;#ASMEND
185 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
186 ; GFX940-NEXT:    v_alignbit_b32 v0, s0, v0, 16
187 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
188 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
189 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
190   %vec0 = call <4 x i16> asm "; def $0", "=v"()
191   %vec1 = call <4 x i16> asm "; def $0", "=v"()
192   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
193   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
194   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 poison>
195   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
196   ret void
199 define void @v_shuffle_v2i16_v3i16__5_u(ptr addrspace(1) inreg %ptr) {
200 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_u:
201 ; GFX900:       ; %bb.0:
202 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
203 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
204 ; GFX900-NEXT:    ;;#ASMSTART
205 ; GFX900-NEXT:    ; def v[0:1]
206 ; GFX900-NEXT:    ;;#ASMEND
207 ; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]
208 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
209 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
211 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_u:
212 ; GFX90A:       ; %bb.0:
213 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
214 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
215 ; GFX90A-NEXT:    ;;#ASMSTART
216 ; GFX90A-NEXT:    ; def v[0:1]
217 ; GFX90A-NEXT:    ;;#ASMEND
218 ; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]
219 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
220 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
222 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__5_u:
223 ; GFX940:       ; %bb.0:
224 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
225 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
226 ; GFX940-NEXT:    ;;#ASMSTART
227 ; GFX940-NEXT:    ; def v[0:1]
228 ; GFX940-NEXT:    ;;#ASMEND
229 ; GFX940-NEXT:    global_store_dword v2, v1, s[0:1] sc0 sc1
230 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
231 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
232   %vec0 = call <4 x i16> asm "; def $0", "=v"()
233   %vec1 = call <4 x i16> asm "; def $0", "=v"()
234   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
235   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
236   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 poison>
237   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
238   ret void
241 define void @v_shuffle_v2i16_v3i16__5_0(ptr addrspace(1) inreg %ptr) {
242 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_0:
243 ; GFX900:       ; %bb.0:
244 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
245 ; GFX900-NEXT:    ;;#ASMSTART
246 ; GFX900-NEXT:    ; def v[0:1]
247 ; GFX900-NEXT:    ;;#ASMEND
248 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
249 ; GFX900-NEXT:    v_mov_b32_e32 v3, 0
250 ; GFX900-NEXT:    ;;#ASMSTART
251 ; GFX900-NEXT:    ; def v[1:2]
252 ; GFX900-NEXT:    ;;#ASMEND
253 ; GFX900-NEXT:    v_perm_b32 v0, v0, v2, s4
254 ; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]
255 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
256 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
258 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_0:
259 ; GFX90A:       ; %bb.0:
260 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
261 ; GFX90A-NEXT:    ;;#ASMSTART
262 ; GFX90A-NEXT:    ; def v[0:1]
263 ; GFX90A-NEXT:    ;;#ASMEND
264 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
265 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
266 ; GFX90A-NEXT:    ;;#ASMSTART
267 ; GFX90A-NEXT:    ; def v[2:3]
268 ; GFX90A-NEXT:    ;;#ASMEND
269 ; GFX90A-NEXT:    v_perm_b32 v0, v0, v3, s4
270 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
271 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
272 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
274 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__5_0:
275 ; GFX940:       ; %bb.0:
276 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
277 ; GFX940-NEXT:    ;;#ASMSTART
278 ; GFX940-NEXT:    ; def v[0:1]
279 ; GFX940-NEXT:    ;;#ASMEND
280 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
281 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
282 ; GFX940-NEXT:    ;;#ASMSTART
283 ; GFX940-NEXT:    ; def v[2:3]
284 ; GFX940-NEXT:    ;;#ASMEND
285 ; GFX940-NEXT:    s_nop 0
286 ; GFX940-NEXT:    v_perm_b32 v0, v0, v3, s2
287 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
288 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
289 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
290   %vec0 = call <4 x i16> asm "; def $0", "=v"()
291   %vec1 = call <4 x i16> asm "; def $0", "=v"()
292   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
293   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
294   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 0>
295   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
296   ret void
299 define void @v_shuffle_v2i16_v3i16__5_1(ptr addrspace(1) inreg %ptr) {
300 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_1:
301 ; GFX900:       ; %bb.0:
302 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
303 ; GFX900-NEXT:    ;;#ASMSTART
304 ; GFX900-NEXT:    ; def v[0:1]
305 ; GFX900-NEXT:    ;;#ASMEND
306 ; GFX900-NEXT:    s_mov_b32 s4, 0xffff
307 ; GFX900-NEXT:    v_mov_b32_e32 v3, 0
308 ; GFX900-NEXT:    ;;#ASMSTART
309 ; GFX900-NEXT:    ; def v[1:2]
310 ; GFX900-NEXT:    ;;#ASMEND
311 ; GFX900-NEXT:    v_bfi_b32 v0, s4, v2, v0
312 ; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]
313 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
314 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
316 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_1:
317 ; GFX90A:       ; %bb.0:
318 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
319 ; GFX90A-NEXT:    ;;#ASMSTART
320 ; GFX90A-NEXT:    ; def v[0:1]
321 ; GFX90A-NEXT:    ;;#ASMEND
322 ; GFX90A-NEXT:    s_mov_b32 s4, 0xffff
323 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
324 ; GFX90A-NEXT:    ;;#ASMSTART
325 ; GFX90A-NEXT:    ; def v[2:3]
326 ; GFX90A-NEXT:    ;;#ASMEND
327 ; GFX90A-NEXT:    v_bfi_b32 v0, s4, v3, v0
328 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
329 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
330 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
332 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__5_1:
333 ; GFX940:       ; %bb.0:
334 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
335 ; GFX940-NEXT:    ;;#ASMSTART
336 ; GFX940-NEXT:    ; def v[0:1]
337 ; GFX940-NEXT:    ;;#ASMEND
338 ; GFX940-NEXT:    s_mov_b32 s2, 0xffff
339 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
340 ; GFX940-NEXT:    ;;#ASMSTART
341 ; GFX940-NEXT:    ; def v[2:3]
342 ; GFX940-NEXT:    ;;#ASMEND
343 ; GFX940-NEXT:    s_nop 0
344 ; GFX940-NEXT:    v_bfi_b32 v0, s2, v3, v0
345 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
346 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
347 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
348   %vec0 = call <4 x i16> asm "; def $0", "=v"()
349   %vec1 = call <4 x i16> asm "; def $0", "=v"()
350   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
351   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
352   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 1>
353   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
354   ret void
357 define void @v_shuffle_v2i16_v3i16__5_2(ptr addrspace(1) inreg %ptr) {
358 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_2:
359 ; GFX900:       ; %bb.0:
360 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
361 ; GFX900-NEXT:    ;;#ASMSTART
362 ; GFX900-NEXT:    ; def v[0:1]
363 ; GFX900-NEXT:    ;;#ASMEND
364 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
365 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
366 ; GFX900-NEXT:    ;;#ASMSTART
367 ; GFX900-NEXT:    ; def v[2:3]
368 ; GFX900-NEXT:    ;;#ASMEND
369 ; GFX900-NEXT:    v_perm_b32 v0, v1, v3, s4
370 ; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]
371 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
372 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
374 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_2:
375 ; GFX90A:       ; %bb.0:
376 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
377 ; GFX90A-NEXT:    ;;#ASMSTART
378 ; GFX90A-NEXT:    ; def v[0:1]
379 ; GFX90A-NEXT:    ;;#ASMEND
380 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
381 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
382 ; GFX90A-NEXT:    ;;#ASMSTART
383 ; GFX90A-NEXT:    ; def v[2:3]
384 ; GFX90A-NEXT:    ;;#ASMEND
385 ; GFX90A-NEXT:    v_perm_b32 v0, v1, v3, s4
386 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
387 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
388 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
390 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__5_2:
391 ; GFX940:       ; %bb.0:
392 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
393 ; GFX940-NEXT:    ;;#ASMSTART
394 ; GFX940-NEXT:    ; def v[0:1]
395 ; GFX940-NEXT:    ;;#ASMEND
396 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
397 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
398 ; GFX940-NEXT:    ;;#ASMSTART
399 ; GFX940-NEXT:    ; def v[2:3]
400 ; GFX940-NEXT:    ;;#ASMEND
401 ; GFX940-NEXT:    s_nop 0
402 ; GFX940-NEXT:    v_perm_b32 v0, v1, v3, s2
403 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
404 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
405 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
406   %vec0 = call <4 x i16> asm "; def $0", "=v"()
407   %vec1 = call <4 x i16> asm "; def $0", "=v"()
408   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
409   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
410   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 2>
411   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
412   ret void
415 define void @v_shuffle_v2i16_v3i16__5_3(ptr addrspace(1) inreg %ptr) {
416 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_3:
417 ; GFX900:       ; %bb.0:
418 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
419 ; GFX900-NEXT:    ;;#ASMSTART
420 ; GFX900-NEXT:    ; def v[0:1]
421 ; GFX900-NEXT:    ;;#ASMEND
422 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
423 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
424 ; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s4
425 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
426 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
427 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
429 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_3:
430 ; GFX90A:       ; %bb.0:
431 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
432 ; GFX90A-NEXT:    ;;#ASMSTART
433 ; GFX90A-NEXT:    ; def v[0:1]
434 ; GFX90A-NEXT:    ;;#ASMEND
435 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
436 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
437 ; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s4
438 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
439 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
440 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
442 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__5_3:
443 ; GFX940:       ; %bb.0:
444 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
445 ; GFX940-NEXT:    ;;#ASMSTART
446 ; GFX940-NEXT:    ; def v[0:1]
447 ; GFX940-NEXT:    ;;#ASMEND
448 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
449 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
450 ; GFX940-NEXT:    v_perm_b32 v0, v0, v1, s2
451 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
452 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
453 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
454   %vec0 = call <4 x i16> asm "; def $0", "=v"()
455   %vec1 = call <4 x i16> asm "; def $0", "=v"()
456   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
457   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
458   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 3>
459   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
460   ret void
463 define void @v_shuffle_v2i16_v3i16__5_4(ptr addrspace(1) inreg %ptr) {
464 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_4:
465 ; GFX900:       ; %bb.0:
466 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
467 ; GFX900-NEXT:    ;;#ASMSTART
468 ; GFX900-NEXT:    ; def v[0:1]
469 ; GFX900-NEXT:    ;;#ASMEND
470 ; GFX900-NEXT:    s_mov_b32 s4, 0xffff
471 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
472 ; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v0
473 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
474 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
475 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
477 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_4:
478 ; GFX90A:       ; %bb.0:
479 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
480 ; GFX90A-NEXT:    ;;#ASMSTART
481 ; GFX90A-NEXT:    ; def v[0:1]
482 ; GFX90A-NEXT:    ;;#ASMEND
483 ; GFX90A-NEXT:    s_mov_b32 s4, 0xffff
484 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
485 ; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v0
486 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
487 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
488 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
490 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__5_4:
491 ; GFX940:       ; %bb.0:
492 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
493 ; GFX940-NEXT:    ;;#ASMSTART
494 ; GFX940-NEXT:    ; def v[0:1]
495 ; GFX940-NEXT:    ;;#ASMEND
496 ; GFX940-NEXT:    s_mov_b32 s2, 0xffff
497 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
498 ; GFX940-NEXT:    v_bfi_b32 v0, s2, v1, v0
499 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
500 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
501 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
502   %vec0 = call <4 x i16> asm "; def $0", "=v"()
503   %vec1 = call <4 x i16> asm "; def $0", "=v"()
504   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
505   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
506   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 4>
507   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
508   ret void
511 define void @v_shuffle_v2i16_v3i16__5_5(ptr addrspace(1) inreg %ptr) {
512 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__5_5:
513 ; GFX900:       ; %bb.0:
514 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
515 ; GFX900-NEXT:    ;;#ASMSTART
516 ; GFX900-NEXT:    ; def v[0:1]
517 ; GFX900-NEXT:    ;;#ASMEND
518 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
519 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
520 ; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4
521 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
522 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
523 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
525 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__5_5:
526 ; GFX90A:       ; %bb.0:
527 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
528 ; GFX90A-NEXT:    ;;#ASMSTART
529 ; GFX90A-NEXT:    ; def v[0:1]
530 ; GFX90A-NEXT:    ;;#ASMEND
531 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
532 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
533 ; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4
534 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
535 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
536 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
538 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__5_5:
539 ; GFX940:       ; %bb.0:
540 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
541 ; GFX940-NEXT:    ;;#ASMSTART
542 ; GFX940-NEXT:    ; def v[0:1]
543 ; GFX940-NEXT:    ;;#ASMEND
544 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
545 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
546 ; GFX940-NEXT:    v_perm_b32 v0, v1, v1, s2
547 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
548 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
549 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
550   %vec0 = call <4 x i16> asm "; def $0", "=v"()
551   %vec1 = call <4 x i16> asm "; def $0", "=v"()
552   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
553   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
554   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 5>
555   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
556   ret void
559 define void @v_shuffle_v2i16_v3i16__u_0(ptr addrspace(1) inreg %ptr) {
560 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__u_0:
561 ; GFX900:       ; %bb.0:
562 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
563 ; GFX900-NEXT:    ;;#ASMSTART
564 ; GFX900-NEXT:    ; def v[0:1]
565 ; GFX900-NEXT:    ;;#ASMEND
566 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
567 ; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
568 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
569 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
570 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
572 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__u_0:
573 ; GFX90A:       ; %bb.0:
574 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
575 ; GFX90A-NEXT:    ;;#ASMSTART
576 ; GFX90A-NEXT:    ; def v[0:1]
577 ; GFX90A-NEXT:    ;;#ASMEND
578 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
579 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
580 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
581 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
582 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
584 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__u_0:
585 ; GFX940:       ; %bb.0:
586 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
587 ; GFX940-NEXT:    ;;#ASMSTART
588 ; GFX940-NEXT:    ; def v[0:1]
589 ; GFX940-NEXT:    ;;#ASMEND
590 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
591 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
592 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
593 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
594 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
595   %vec0 = call <4 x i16> asm "; def $0", "=v"()
596   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
597   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 0>
598   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
599   ret void
602 define void @v_shuffle_v2i16_v3i16__0_0(ptr addrspace(1) inreg %ptr) {
603 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_0:
604 ; GFX900:       ; %bb.0:
605 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
606 ; GFX900-NEXT:    ;;#ASMSTART
607 ; GFX900-NEXT:    ; def v[0:1]
608 ; GFX900-NEXT:    ;;#ASMEND
609 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
610 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
611 ; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
612 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
613 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
614 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
616 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_0:
617 ; GFX90A:       ; %bb.0:
618 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
619 ; GFX90A-NEXT:    ;;#ASMSTART
620 ; GFX90A-NEXT:    ; def v[0:1]
621 ; GFX90A-NEXT:    ;;#ASMEND
622 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
623 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
624 ; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
625 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
626 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
627 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
629 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__0_0:
630 ; GFX940:       ; %bb.0:
631 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
632 ; GFX940-NEXT:    ;;#ASMSTART
633 ; GFX940-NEXT:    ; def v[0:1]
634 ; GFX940-NEXT:    ;;#ASMEND
635 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
636 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
637 ; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
638 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
639 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
640 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
641   %vec0 = call <4 x i16> asm "; def $0", "=v"()
642   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
643   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> zeroinitializer
644   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
645   ret void
648 define void @v_shuffle_v2i16_v3i16__1_0(ptr addrspace(1) inreg %ptr) {
649 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_0:
650 ; GFX900:       ; %bb.0:
651 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
652 ; GFX900-NEXT:    ;;#ASMSTART
653 ; GFX900-NEXT:    ; def v[0:1]
654 ; GFX900-NEXT:    ;;#ASMEND
655 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
656 ; GFX900-NEXT:    v_alignbit_b32 v0, v0, v0, 16
657 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
658 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
659 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
661 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_0:
662 ; GFX90A:       ; %bb.0:
663 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
664 ; GFX90A-NEXT:    ;;#ASMSTART
665 ; GFX90A-NEXT:    ; def v[0:1]
666 ; GFX90A-NEXT:    ;;#ASMEND
667 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
668 ; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v0, 16
669 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
670 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
671 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
673 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__1_0:
674 ; GFX940:       ; %bb.0:
675 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
676 ; GFX940-NEXT:    ;;#ASMSTART
677 ; GFX940-NEXT:    ; def v[0:1]
678 ; GFX940-NEXT:    ;;#ASMEND
679 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
680 ; GFX940-NEXT:    v_alignbit_b32 v0, v0, v0, 16
681 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
682 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
683 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
684   %vec0 = call <4 x i16> asm "; def $0", "=v"()
685   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
686   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 0>
687   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
688   ret void
691 define void @v_shuffle_v2i16_v3i16__2_0(ptr addrspace(1) inreg %ptr) {
692 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_0:
693 ; GFX900:       ; %bb.0:
694 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
695 ; GFX900-NEXT:    ;;#ASMSTART
696 ; GFX900-NEXT:    ; def v[0:1]
697 ; GFX900-NEXT:    ;;#ASMEND
698 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
699 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
700 ; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s4
701 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
702 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
703 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
705 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_0:
706 ; GFX90A:       ; %bb.0:
707 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
708 ; GFX90A-NEXT:    ;;#ASMSTART
709 ; GFX90A-NEXT:    ; def v[0:1]
710 ; GFX90A-NEXT:    ;;#ASMEND
711 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
712 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
713 ; GFX90A-NEXT:    v_perm_b32 v0, v0, v1, s4
714 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
715 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
716 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
718 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__2_0:
719 ; GFX940:       ; %bb.0:
720 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
721 ; GFX940-NEXT:    ;;#ASMSTART
722 ; GFX940-NEXT:    ; def v[0:1]
723 ; GFX940-NEXT:    ;;#ASMEND
724 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
725 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
726 ; GFX940-NEXT:    v_perm_b32 v0, v0, v1, s2
727 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
728 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
729 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
730   %vec0 = call <4 x i16> asm "; def $0", "=v"()
731   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
732   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 0>
733   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
734   ret void
737 define void @v_shuffle_v2i16_v3i16__3_0(ptr addrspace(1) inreg %ptr) {
738 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__3_0:
739 ; GFX900:       ; %bb.0:
740 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
741 ; GFX900-NEXT:    ;;#ASMSTART
742 ; GFX900-NEXT:    ; def v[0:1]
743 ; GFX900-NEXT:    ;;#ASMEND
744 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
745 ; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
746 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
747 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
748 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
750 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__3_0:
751 ; GFX90A:       ; %bb.0:
752 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
753 ; GFX90A-NEXT:    ;;#ASMSTART
754 ; GFX90A-NEXT:    ; def v[0:1]
755 ; GFX90A-NEXT:    ;;#ASMEND
756 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
757 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
758 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
759 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
760 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
762 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__3_0:
763 ; GFX940:       ; %bb.0:
764 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
765 ; GFX940-NEXT:    ;;#ASMSTART
766 ; GFX940-NEXT:    ; def v[0:1]
767 ; GFX940-NEXT:    ;;#ASMEND
768 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
769 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v0
770 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
771 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
772 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
773   %vec0 = call <4 x i16> asm "; def $0", "=v"()
774   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
775   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 0>
776   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
777   ret void
780 define void @v_shuffle_v2i16_v3i16__4_0(ptr addrspace(1) inreg %ptr) {
781 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_0:
782 ; GFX900:       ; %bb.0:
783 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
784 ; GFX900-NEXT:    ;;#ASMSTART
785 ; GFX900-NEXT:    ; def v[0:1]
786 ; GFX900-NEXT:    ;;#ASMEND
787 ; GFX900-NEXT:    v_mov_b32_e32 v3, 0
788 ; GFX900-NEXT:    ;;#ASMSTART
789 ; GFX900-NEXT:    ; def v[1:2]
790 ; GFX900-NEXT:    ;;#ASMEND
791 ; GFX900-NEXT:    v_alignbit_b32 v0, v0, v1, 16
792 ; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]
793 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
794 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
796 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_0:
797 ; GFX90A:       ; %bb.0:
798 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
799 ; GFX90A-NEXT:    ;;#ASMSTART
800 ; GFX90A-NEXT:    ; def v[0:1]
801 ; GFX90A-NEXT:    ;;#ASMEND
802 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
803 ; GFX90A-NEXT:    ;;#ASMSTART
804 ; GFX90A-NEXT:    ; def v[2:3]
805 ; GFX90A-NEXT:    ;;#ASMEND
806 ; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v2, 16
807 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
808 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
809 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
811 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__4_0:
812 ; GFX940:       ; %bb.0:
813 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
814 ; GFX940-NEXT:    ;;#ASMSTART
815 ; GFX940-NEXT:    ; def v[0:1]
816 ; GFX940-NEXT:    ;;#ASMEND
817 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
818 ; GFX940-NEXT:    ;;#ASMSTART
819 ; GFX940-NEXT:    ; def v[2:3]
820 ; GFX940-NEXT:    ;;#ASMEND
821 ; GFX940-NEXT:    s_nop 0
822 ; GFX940-NEXT:    v_alignbit_b32 v0, v0, v2, 16
823 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
824 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
825 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
826   %vec0 = call <4 x i16> asm "; def $0", "=v"()
827   %vec1 = call <4 x i16> asm "; def $0", "=v"()
828   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
829   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
830   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 0>
831   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
832   ret void
835 define void @v_shuffle_v2i16_v3i16__u_1(ptr addrspace(1) inreg %ptr) {
836 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__u_1:
837 ; GFX900:       ; %bb.0:
838 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
839 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
840 ; GFX900-NEXT:    ;;#ASMSTART
841 ; GFX900-NEXT:    ; def v[0:1]
842 ; GFX900-NEXT:    ;;#ASMEND
843 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
844 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
845 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
847 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__u_1:
848 ; GFX90A:       ; %bb.0:
849 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
850 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
851 ; GFX90A-NEXT:    ;;#ASMSTART
852 ; GFX90A-NEXT:    ; def v[0:1]
853 ; GFX90A-NEXT:    ;;#ASMEND
854 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
855 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
856 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
858 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__u_1:
859 ; GFX940:       ; %bb.0:
860 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
861 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
862 ; GFX940-NEXT:    ;;#ASMSTART
863 ; GFX940-NEXT:    ; def v[0:1]
864 ; GFX940-NEXT:    ;;#ASMEND
865 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
866 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
867 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
868   %vec0 = call <4 x i16> asm "; def $0", "=v"()
869   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
870   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 1>
871   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
872   ret void
875 define void @v_shuffle_v2i16_v3i16__0_1(ptr addrspace(1) inreg %ptr) {
876 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_1:
877 ; GFX900:       ; %bb.0:
878 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
879 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
880 ; GFX900-NEXT:    ;;#ASMSTART
881 ; GFX900-NEXT:    ; def v[0:1]
882 ; GFX900-NEXT:    ;;#ASMEND
883 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
884 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
885 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
887 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_1:
888 ; GFX90A:       ; %bb.0:
889 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
890 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
891 ; GFX90A-NEXT:    ;;#ASMSTART
892 ; GFX90A-NEXT:    ; def v[0:1]
893 ; GFX90A-NEXT:    ;;#ASMEND
894 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
895 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
896 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
898 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__0_1:
899 ; GFX940:       ; %bb.0:
900 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
901 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
902 ; GFX940-NEXT:    ;;#ASMSTART
903 ; GFX940-NEXT:    ; def v[0:1]
904 ; GFX940-NEXT:    ;;#ASMEND
905 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
906 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
907 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
908   %vec0 = call <4 x i16> asm "; def $0", "=v"()
909   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
910   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 1>
911   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
912   ret void
915 define void @v_shuffle_v2i16_v3i16__1_1(ptr addrspace(1) inreg %ptr) {
916 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_1:
917 ; GFX900:       ; %bb.0:
918 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
919 ; GFX900-NEXT:    ;;#ASMSTART
920 ; GFX900-NEXT:    ; def v[0:1]
921 ; GFX900-NEXT:    ;;#ASMEND
922 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
923 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
924 ; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
925 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
926 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
927 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
929 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_1:
930 ; GFX90A:       ; %bb.0:
931 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
932 ; GFX90A-NEXT:    ;;#ASMSTART
933 ; GFX90A-NEXT:    ; def v[0:1]
934 ; GFX90A-NEXT:    ;;#ASMEND
935 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
936 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
937 ; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
938 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
939 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
940 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
942 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__1_1:
943 ; GFX940:       ; %bb.0:
944 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
945 ; GFX940-NEXT:    ;;#ASMSTART
946 ; GFX940-NEXT:    ; def v[0:1]
947 ; GFX940-NEXT:    ;;#ASMEND
948 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
949 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
950 ; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
951 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
952 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
953 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
954   %vec0 = call <4 x i16> asm "; def $0", "=v"()
955   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
956   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 1>
957   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
958   ret void
961 define void @v_shuffle_v2i16_v3i16__2_1(ptr addrspace(1) inreg %ptr) {
962 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_1:
963 ; GFX900:       ; %bb.0:
964 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
965 ; GFX900-NEXT:    ;;#ASMSTART
966 ; GFX900-NEXT:    ; def v[0:1]
967 ; GFX900-NEXT:    ;;#ASMEND
968 ; GFX900-NEXT:    s_mov_b32 s4, 0xffff
969 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
970 ; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v0
971 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
972 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
973 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
975 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_1:
976 ; GFX90A:       ; %bb.0:
977 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
978 ; GFX90A-NEXT:    ;;#ASMSTART
979 ; GFX90A-NEXT:    ; def v[0:1]
980 ; GFX90A-NEXT:    ;;#ASMEND
981 ; GFX90A-NEXT:    s_mov_b32 s4, 0xffff
982 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
983 ; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v0
984 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
985 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
986 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
988 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__2_1:
989 ; GFX940:       ; %bb.0:
990 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
991 ; GFX940-NEXT:    ;;#ASMSTART
992 ; GFX940-NEXT:    ; def v[0:1]
993 ; GFX940-NEXT:    ;;#ASMEND
994 ; GFX940-NEXT:    s_mov_b32 s2, 0xffff
995 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
996 ; GFX940-NEXT:    v_bfi_b32 v0, s2, v1, v0
997 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
998 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
999 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1000   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1001   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1002   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 1>
1003   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1004   ret void
1007 define void @v_shuffle_v2i16_v3i16__3_1(ptr addrspace(1) inreg %ptr) {
1008 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__3_1:
1009 ; GFX900:       ; %bb.0:
1010 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1011 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1012 ; GFX900-NEXT:    ;;#ASMSTART
1013 ; GFX900-NEXT:    ; def v[0:1]
1014 ; GFX900-NEXT:    ;;#ASMEND
1015 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1016 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1017 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1019 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__3_1:
1020 ; GFX90A:       ; %bb.0:
1021 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1022 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1023 ; GFX90A-NEXT:    ;;#ASMSTART
1024 ; GFX90A-NEXT:    ; def v[0:1]
1025 ; GFX90A-NEXT:    ;;#ASMEND
1026 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1027 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1028 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1030 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__3_1:
1031 ; GFX940:       ; %bb.0:
1032 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1033 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1034 ; GFX940-NEXT:    ;;#ASMSTART
1035 ; GFX940-NEXT:    ; def v[0:1]
1036 ; GFX940-NEXT:    ;;#ASMEND
1037 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1038 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1039 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1040   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1041   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1042   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 1>
1043   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1044   ret void
1047 define void @v_shuffle_v2i16_v3i16__4_1(ptr addrspace(1) inreg %ptr) {
1048 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_1:
1049 ; GFX900:       ; %bb.0:
1050 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1051 ; GFX900-NEXT:    ;;#ASMSTART
1052 ; GFX900-NEXT:    ; def v[0:1]
1053 ; GFX900-NEXT:    ;;#ASMEND
1054 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
1055 ; GFX900-NEXT:    v_mov_b32_e32 v3, 0
1056 ; GFX900-NEXT:    ;;#ASMSTART
1057 ; GFX900-NEXT:    ; def v[1:2]
1058 ; GFX900-NEXT:    ;;#ASMEND
1059 ; GFX900-NEXT:    v_perm_b32 v0, v0, v1, s4
1060 ; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]
1061 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1062 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1064 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_1:
1065 ; GFX90A:       ; %bb.0:
1066 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1067 ; GFX90A-NEXT:    ;;#ASMSTART
1068 ; GFX90A-NEXT:    ; def v[0:1]
1069 ; GFX90A-NEXT:    ;;#ASMEND
1070 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
1071 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1072 ; GFX90A-NEXT:    ;;#ASMSTART
1073 ; GFX90A-NEXT:    ; def v[2:3]
1074 ; GFX90A-NEXT:    ;;#ASMEND
1075 ; GFX90A-NEXT:    v_perm_b32 v0, v0, v2, s4
1076 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
1077 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1078 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1080 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__4_1:
1081 ; GFX940:       ; %bb.0:
1082 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1083 ; GFX940-NEXT:    ;;#ASMSTART
1084 ; GFX940-NEXT:    ; def v[0:1]
1085 ; GFX940-NEXT:    ;;#ASMEND
1086 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
1087 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1088 ; GFX940-NEXT:    ;;#ASMSTART
1089 ; GFX940-NEXT:    ; def v[2:3]
1090 ; GFX940-NEXT:    ;;#ASMEND
1091 ; GFX940-NEXT:    s_nop 0
1092 ; GFX940-NEXT:    v_perm_b32 v0, v0, v2, s2
1093 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
1094 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1095 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1096   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1097   %vec1 = call <4 x i16> asm "; def $0", "=v"()
1098   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1099   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1100   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 1>
1101   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1102   ret void
1105 define void @v_shuffle_v2i16_v3i16__u_2(ptr addrspace(1) inreg %ptr) {
1106 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__u_2:
1107 ; GFX900:       ; %bb.0:
1108 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1109 ; GFX900-NEXT:    ;;#ASMSTART
1110 ; GFX900-NEXT:    ; def v[0:1]
1111 ; GFX900-NEXT:    ;;#ASMEND
1112 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1113 ; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
1114 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1115 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1116 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1118 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__u_2:
1119 ; GFX90A:       ; %bb.0:
1120 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1121 ; GFX90A-NEXT:    ;;#ASMSTART
1122 ; GFX90A-NEXT:    ; def v[0:1]
1123 ; GFX90A-NEXT:    ;;#ASMEND
1124 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1125 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
1126 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1127 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1128 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1130 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__u_2:
1131 ; GFX940:       ; %bb.0:
1132 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1133 ; GFX940-NEXT:    ;;#ASMSTART
1134 ; GFX940-NEXT:    ; def v[0:1]
1135 ; GFX940-NEXT:    ;;#ASMEND
1136 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1137 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
1138 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1139 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1140 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1141   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1142   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1143   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 2>
1144   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1145   ret void
1148 define void @v_shuffle_v2i16_v3i16__0_2(ptr addrspace(1) inreg %ptr) {
1149 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_2:
1150 ; GFX900:       ; %bb.0:
1151 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1152 ; GFX900-NEXT:    ;;#ASMSTART
1153 ; GFX900-NEXT:    ; def v[0:1]
1154 ; GFX900-NEXT:    ;;#ASMEND
1155 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
1156 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1157 ; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s4
1158 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1159 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1160 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1162 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_2:
1163 ; GFX90A:       ; %bb.0:
1164 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1165 ; GFX90A-NEXT:    ;;#ASMSTART
1166 ; GFX90A-NEXT:    ; def v[0:1]
1167 ; GFX90A-NEXT:    ;;#ASMEND
1168 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
1169 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1170 ; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s4
1171 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1172 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1173 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1175 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__0_2:
1176 ; GFX940:       ; %bb.0:
1177 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1178 ; GFX940-NEXT:    ;;#ASMSTART
1179 ; GFX940-NEXT:    ; def v[0:1]
1180 ; GFX940-NEXT:    ;;#ASMEND
1181 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
1182 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1183 ; GFX940-NEXT:    v_perm_b32 v0, v1, v0, s2
1184 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1185 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1186 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1187   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1188   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1189   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 2>
1190   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1191   ret void
1194 define void @v_shuffle_v2i16_v3i16__1_2(ptr addrspace(1) inreg %ptr) {
1195 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_2:
1196 ; GFX900:       ; %bb.0:
1197 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1198 ; GFX900-NEXT:    ;;#ASMSTART
1199 ; GFX900-NEXT:    ; def v[0:1]
1200 ; GFX900-NEXT:    ;;#ASMEND
1201 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1202 ; GFX900-NEXT:    v_alignbit_b32 v0, v1, v0, 16
1203 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1204 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1205 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1207 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_2:
1208 ; GFX90A:       ; %bb.0:
1209 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1210 ; GFX90A-NEXT:    ;;#ASMSTART
1211 ; GFX90A-NEXT:    ; def v[0:1]
1212 ; GFX90A-NEXT:    ;;#ASMEND
1213 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1214 ; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v0, 16
1215 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1216 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1217 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1219 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__1_2:
1220 ; GFX940:       ; %bb.0:
1221 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1222 ; GFX940-NEXT:    ;;#ASMSTART
1223 ; GFX940-NEXT:    ; def v[0:1]
1224 ; GFX940-NEXT:    ;;#ASMEND
1225 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1226 ; GFX940-NEXT:    v_alignbit_b32 v0, v1, v0, 16
1227 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1228 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1229 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1230   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1231   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1232   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 2>
1233   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1234   ret void
1237 define void @v_shuffle_v2i16_v3i16__2_2(ptr addrspace(1) inreg %ptr) {
1238 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_2:
1239 ; GFX900:       ; %bb.0:
1240 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1241 ; GFX900-NEXT:    ;;#ASMSTART
1242 ; GFX900-NEXT:    ; def v[0:1]
1243 ; GFX900-NEXT:    ;;#ASMEND
1244 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
1245 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1246 ; GFX900-NEXT:    v_perm_b32 v0, v1, v1, s4
1247 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1248 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1249 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1251 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_2:
1252 ; GFX90A:       ; %bb.0:
1253 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1254 ; GFX90A-NEXT:    ;;#ASMSTART
1255 ; GFX90A-NEXT:    ; def v[0:1]
1256 ; GFX90A-NEXT:    ;;#ASMEND
1257 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
1258 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1259 ; GFX90A-NEXT:    v_perm_b32 v0, v1, v1, s4
1260 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1261 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1262 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1264 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__2_2:
1265 ; GFX940:       ; %bb.0:
1266 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1267 ; GFX940-NEXT:    ;;#ASMSTART
1268 ; GFX940-NEXT:    ; def v[0:1]
1269 ; GFX940-NEXT:    ;;#ASMEND
1270 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
1271 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1272 ; GFX940-NEXT:    v_perm_b32 v0, v1, v1, s2
1273 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1274 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1275 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1276   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1277   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1278   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 2>
1279   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1280   ret void
1283 define void @v_shuffle_v2i16_v3i16__3_2(ptr addrspace(1) inreg %ptr) {
1284 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__3_2:
1285 ; GFX900:       ; %bb.0:
1286 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1287 ; GFX900-NEXT:    ;;#ASMSTART
1288 ; GFX900-NEXT:    ; def v[0:1]
1289 ; GFX900-NEXT:    ;;#ASMEND
1290 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1291 ; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
1292 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1293 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1294 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1296 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__3_2:
1297 ; GFX90A:       ; %bb.0:
1298 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1299 ; GFX90A-NEXT:    ;;#ASMSTART
1300 ; GFX90A-NEXT:    ; def v[0:1]
1301 ; GFX90A-NEXT:    ;;#ASMEND
1302 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1303 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
1304 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1305 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1306 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1308 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__3_2:
1309 ; GFX940:       ; %bb.0:
1310 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1311 ; GFX940-NEXT:    ;;#ASMSTART
1312 ; GFX940-NEXT:    ; def v[0:1]
1313 ; GFX940-NEXT:    ;;#ASMEND
1314 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1315 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
1316 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1317 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1318 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1319   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1320   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1321   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 2>
1322   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1323   ret void
1326 define void @v_shuffle_v2i16_v3i16__4_2(ptr addrspace(1) inreg %ptr) {
1327 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_2:
1328 ; GFX900:       ; %bb.0:
1329 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1330 ; GFX900-NEXT:    ;;#ASMSTART
1331 ; GFX900-NEXT:    ; def v[0:1]
1332 ; GFX900-NEXT:    ;;#ASMEND
1333 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1334 ; GFX900-NEXT:    ;;#ASMSTART
1335 ; GFX900-NEXT:    ; def v[2:3]
1336 ; GFX900-NEXT:    ;;#ASMEND
1337 ; GFX900-NEXT:    v_alignbit_b32 v0, v1, v2, 16
1338 ; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]
1339 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1340 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1342 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_2:
1343 ; GFX90A:       ; %bb.0:
1344 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1345 ; GFX90A-NEXT:    ;;#ASMSTART
1346 ; GFX90A-NEXT:    ; def v[0:1]
1347 ; GFX90A-NEXT:    ;;#ASMEND
1348 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1349 ; GFX90A-NEXT:    ;;#ASMSTART
1350 ; GFX90A-NEXT:    ; def v[2:3]
1351 ; GFX90A-NEXT:    ;;#ASMEND
1352 ; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v2, 16
1353 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
1354 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1355 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1357 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__4_2:
1358 ; GFX940:       ; %bb.0:
1359 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1360 ; GFX940-NEXT:    ;;#ASMSTART
1361 ; GFX940-NEXT:    ; def v[0:1]
1362 ; GFX940-NEXT:    ;;#ASMEND
1363 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1364 ; GFX940-NEXT:    ;;#ASMSTART
1365 ; GFX940-NEXT:    ; def v[2:3]
1366 ; GFX940-NEXT:    ;;#ASMEND
1367 ; GFX940-NEXT:    s_nop 0
1368 ; GFX940-NEXT:    v_alignbit_b32 v0, v1, v2, 16
1369 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
1370 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1371 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1372   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1373   %vec1 = call <4 x i16> asm "; def $0", "=v"()
1374   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1375   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1376   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 2>
1377   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1378   ret void
1381 define void @v_shuffle_v2i16_v3i16__u_3(ptr addrspace(1) inreg %ptr) {
1382 ; GFX9-LABEL: v_shuffle_v2i16_v3i16__u_3:
1383 ; GFX9:       ; %bb.0:
1384 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1385 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1386   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1387   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1388   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 3>
1389   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1390   ret void
1393 define void @v_shuffle_v2i16_v3i16__0_3(ptr addrspace(1) inreg %ptr) {
1394 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_3:
1395 ; GFX900:       ; %bb.0:
1396 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1397 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1398 ; GFX900-NEXT:    ;;#ASMSTART
1399 ; GFX900-NEXT:    ; def v[0:1]
1400 ; GFX900-NEXT:    ;;#ASMEND
1401 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1402 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1403 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1405 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_3:
1406 ; GFX90A:       ; %bb.0:
1407 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1408 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1409 ; GFX90A-NEXT:    ;;#ASMSTART
1410 ; GFX90A-NEXT:    ; def v[0:1]
1411 ; GFX90A-NEXT:    ;;#ASMEND
1412 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1413 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1414 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1416 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__0_3:
1417 ; GFX940:       ; %bb.0:
1418 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1419 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1420 ; GFX940-NEXT:    ;;#ASMSTART
1421 ; GFX940-NEXT:    ; def v[0:1]
1422 ; GFX940-NEXT:    ;;#ASMEND
1423 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1424 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1425 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1426   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1427   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1428   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 3>
1429   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1430   ret void
1433 define void @v_shuffle_v2i16_v3i16__1_3(ptr addrspace(1) inreg %ptr) {
1434 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_3:
1435 ; GFX900:       ; %bb.0:
1436 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1437 ; GFX900-NEXT:    ;;#ASMSTART
1438 ; GFX900-NEXT:    ; def v[0:1]
1439 ; GFX900-NEXT:    ;;#ASMEND
1440 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1441 ; GFX900-NEXT:    v_alignbit_b32 v0, s4, v0, 16
1442 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1443 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1444 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1446 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_3:
1447 ; GFX90A:       ; %bb.0:
1448 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1449 ; GFX90A-NEXT:    ;;#ASMSTART
1450 ; GFX90A-NEXT:    ; def v[0:1]
1451 ; GFX90A-NEXT:    ;;#ASMEND
1452 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1453 ; GFX90A-NEXT:    v_alignbit_b32 v0, s4, v0, 16
1454 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1455 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1456 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1458 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__1_3:
1459 ; GFX940:       ; %bb.0:
1460 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1461 ; GFX940-NEXT:    ;;#ASMSTART
1462 ; GFX940-NEXT:    ; def v[0:1]
1463 ; GFX940-NEXT:    ;;#ASMEND
1464 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1465 ; GFX940-NEXT:    v_alignbit_b32 v0, s0, v0, 16
1466 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1467 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1468 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1469   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1470   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1471   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 3>
1472   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1473   ret void
1476 define void @v_shuffle_v2i16_v3i16__2_3(ptr addrspace(1) inreg %ptr) {
1477 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_3:
1478 ; GFX900:       ; %bb.0:
1479 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1480 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1481 ; GFX900-NEXT:    ;;#ASMSTART
1482 ; GFX900-NEXT:    ; def v[0:1]
1483 ; GFX900-NEXT:    ;;#ASMEND
1484 ; GFX900-NEXT:    global_store_dword v2, v1, s[16:17]
1485 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1486 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1488 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_3:
1489 ; GFX90A:       ; %bb.0:
1490 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1491 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1492 ; GFX90A-NEXT:    ;;#ASMSTART
1493 ; GFX90A-NEXT:    ; def v[0:1]
1494 ; GFX90A-NEXT:    ;;#ASMEND
1495 ; GFX90A-NEXT:    global_store_dword v2, v1, s[16:17]
1496 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1497 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1499 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__2_3:
1500 ; GFX940:       ; %bb.0:
1501 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1502 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1503 ; GFX940-NEXT:    ;;#ASMSTART
1504 ; GFX940-NEXT:    ; def v[0:1]
1505 ; GFX940-NEXT:    ;;#ASMEND
1506 ; GFX940-NEXT:    global_store_dword v2, v1, s[0:1] sc0 sc1
1507 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1508 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1509   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1510   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1511   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 3>
1512   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1513   ret void
1516 define void @v_shuffle_v2i16_v3i16__3_3(ptr addrspace(1) inreg %ptr) {
1517 ; GFX9-LABEL: v_shuffle_v2i16_v3i16__3_3:
1518 ; GFX9:       ; %bb.0:
1519 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1520 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1521   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1522   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1523   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 3>
1524   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1525   ret void
1528 define void @v_shuffle_v2i16_v3i16__4_3(ptr addrspace(1) inreg %ptr) {
1529 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_3:
1530 ; GFX900:       ; %bb.0:
1531 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1532 ; GFX900-NEXT:    ;;#ASMSTART
1533 ; GFX900-NEXT:    ; def v[0:1]
1534 ; GFX900-NEXT:    ;;#ASMEND
1535 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1536 ; GFX900-NEXT:    v_alignbit_b32 v0, v0, v0, 16
1537 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1538 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1539 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1541 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_3:
1542 ; GFX90A:       ; %bb.0:
1543 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1544 ; GFX90A-NEXT:    ;;#ASMSTART
1545 ; GFX90A-NEXT:    ; def v[0:1]
1546 ; GFX90A-NEXT:    ;;#ASMEND
1547 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1548 ; GFX90A-NEXT:    v_alignbit_b32 v0, v0, v0, 16
1549 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1550 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1551 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1553 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__4_3:
1554 ; GFX940:       ; %bb.0:
1555 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1556 ; GFX940-NEXT:    ;;#ASMSTART
1557 ; GFX940-NEXT:    ; def v[0:1]
1558 ; GFX940-NEXT:    ;;#ASMEND
1559 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1560 ; GFX940-NEXT:    v_alignbit_b32 v0, v0, v0, 16
1561 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1562 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1563 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1564   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1565   %vec1 = call <4 x i16> asm "; def $0", "=v"()
1566   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1567   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1568   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 3>
1569   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1570   ret void
1573 define void @v_shuffle_v2i16_v3i16__u_4(ptr addrspace(1) inreg %ptr) {
1574 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__u_4:
1575 ; GFX900:       ; %bb.0:
1576 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1577 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1578 ; GFX900-NEXT:    ;;#ASMSTART
1579 ; GFX900-NEXT:    ; def v[0:1]
1580 ; GFX900-NEXT:    ;;#ASMEND
1581 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1582 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1583 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1585 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__u_4:
1586 ; GFX90A:       ; %bb.0:
1587 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1588 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1589 ; GFX90A-NEXT:    ;;#ASMSTART
1590 ; GFX90A-NEXT:    ; def v[0:1]
1591 ; GFX90A-NEXT:    ;;#ASMEND
1592 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1593 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1594 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1596 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__u_4:
1597 ; GFX940:       ; %bb.0:
1598 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1599 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1600 ; GFX940-NEXT:    ;;#ASMSTART
1601 ; GFX940-NEXT:    ; def v[0:1]
1602 ; GFX940-NEXT:    ;;#ASMEND
1603 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1604 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1605 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1606   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1607   %vec1 = call <4 x i16> asm "; def $0", "=v"()
1608   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1609   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1610   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 poison, i32 4>
1611   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1612   ret void
1615 define void @v_shuffle_v2i16_v3i16__0_4(ptr addrspace(1) inreg %ptr) {
1616 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_4:
1617 ; GFX900:       ; %bb.0:
1618 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1619 ; GFX900-NEXT:    ;;#ASMSTART
1620 ; GFX900-NEXT:    ; def v[0:1]
1621 ; GFX900-NEXT:    ;;#ASMEND
1622 ; GFX900-NEXT:    s_mov_b32 s4, 0xffff
1623 ; GFX900-NEXT:    v_mov_b32_e32 v3, 0
1624 ; GFX900-NEXT:    ;;#ASMSTART
1625 ; GFX900-NEXT:    ; def v[1:2]
1626 ; GFX900-NEXT:    ;;#ASMEND
1627 ; GFX900-NEXT:    v_bfi_b32 v0, s4, v0, v1
1628 ; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]
1629 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1630 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1632 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_4:
1633 ; GFX90A:       ; %bb.0:
1634 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1635 ; GFX90A-NEXT:    ;;#ASMSTART
1636 ; GFX90A-NEXT:    ; def v[0:1]
1637 ; GFX90A-NEXT:    ;;#ASMEND
1638 ; GFX90A-NEXT:    s_mov_b32 s4, 0xffff
1639 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1640 ; GFX90A-NEXT:    ;;#ASMSTART
1641 ; GFX90A-NEXT:    ; def v[2:3]
1642 ; GFX90A-NEXT:    ;;#ASMEND
1643 ; GFX90A-NEXT:    v_bfi_b32 v0, s4, v0, v2
1644 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
1645 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1646 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1648 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__0_4:
1649 ; GFX940:       ; %bb.0:
1650 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1651 ; GFX940-NEXT:    ;;#ASMSTART
1652 ; GFX940-NEXT:    ; def v[0:1]
1653 ; GFX940-NEXT:    ;;#ASMEND
1654 ; GFX940-NEXT:    s_mov_b32 s2, 0xffff
1655 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1656 ; GFX940-NEXT:    ;;#ASMSTART
1657 ; GFX940-NEXT:    ; def v[2:3]
1658 ; GFX940-NEXT:    ;;#ASMEND
1659 ; GFX940-NEXT:    s_nop 0
1660 ; GFX940-NEXT:    v_bfi_b32 v0, s2, v0, v2
1661 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
1662 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1663 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1664   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1665   %vec1 = call <4 x i16> asm "; def $0", "=v"()
1666   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1667   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1668   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 0, i32 4>
1669   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1670   ret void
1673 define void @v_shuffle_v2i16_v3i16__1_4(ptr addrspace(1) inreg %ptr) {
1674 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_4:
1675 ; GFX900:       ; %bb.0:
1676 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1677 ; GFX900-NEXT:    ;;#ASMSTART
1678 ; GFX900-NEXT:    ; def v[0:1]
1679 ; GFX900-NEXT:    ;;#ASMEND
1680 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
1681 ; GFX900-NEXT:    v_mov_b32_e32 v3, 0
1682 ; GFX900-NEXT:    ;;#ASMSTART
1683 ; GFX900-NEXT:    ; def v[1:2]
1684 ; GFX900-NEXT:    ;;#ASMEND
1685 ; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s4
1686 ; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]
1687 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1688 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1690 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_4:
1691 ; GFX90A:       ; %bb.0:
1692 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1693 ; GFX90A-NEXT:    ;;#ASMSTART
1694 ; GFX90A-NEXT:    ; def v[0:1]
1695 ; GFX90A-NEXT:    ;;#ASMEND
1696 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
1697 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1698 ; GFX90A-NEXT:    ;;#ASMSTART
1699 ; GFX90A-NEXT:    ; def v[2:3]
1700 ; GFX90A-NEXT:    ;;#ASMEND
1701 ; GFX90A-NEXT:    v_perm_b32 v0, v2, v0, s4
1702 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
1703 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1704 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1706 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__1_4:
1707 ; GFX940:       ; %bb.0:
1708 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1709 ; GFX940-NEXT:    ;;#ASMSTART
1710 ; GFX940-NEXT:    ; def v[0:1]
1711 ; GFX940-NEXT:    ;;#ASMEND
1712 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
1713 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1714 ; GFX940-NEXT:    ;;#ASMSTART
1715 ; GFX940-NEXT:    ; def v[2:3]
1716 ; GFX940-NEXT:    ;;#ASMEND
1717 ; GFX940-NEXT:    s_nop 0
1718 ; GFX940-NEXT:    v_perm_b32 v0, v2, v0, s2
1719 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
1720 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1721 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1722   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1723   %vec1 = call <4 x i16> asm "; def $0", "=v"()
1724   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1725   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1726   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 1, i32 4>
1727   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1728   ret void
1731 define void @v_shuffle_v2i16_v3i16__2_4(ptr addrspace(1) inreg %ptr) {
1732 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_4:
1733 ; GFX900:       ; %bb.0:
1734 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1735 ; GFX900-NEXT:    ;;#ASMSTART
1736 ; GFX900-NEXT:    ; def v[0:1]
1737 ; GFX900-NEXT:    ;;#ASMEND
1738 ; GFX900-NEXT:    s_mov_b32 s4, 0xffff
1739 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
1740 ; GFX900-NEXT:    ;;#ASMSTART
1741 ; GFX900-NEXT:    ; def v[2:3]
1742 ; GFX900-NEXT:    ;;#ASMEND
1743 ; GFX900-NEXT:    v_bfi_b32 v0, s4, v1, v2
1744 ; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]
1745 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1746 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1748 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_4:
1749 ; GFX90A:       ; %bb.0:
1750 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1751 ; GFX90A-NEXT:    ;;#ASMSTART
1752 ; GFX90A-NEXT:    ; def v[0:1]
1753 ; GFX90A-NEXT:    ;;#ASMEND
1754 ; GFX90A-NEXT:    s_mov_b32 s4, 0xffff
1755 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1756 ; GFX90A-NEXT:    ;;#ASMSTART
1757 ; GFX90A-NEXT:    ; def v[2:3]
1758 ; GFX90A-NEXT:    ;;#ASMEND
1759 ; GFX90A-NEXT:    v_bfi_b32 v0, s4, v1, v2
1760 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
1761 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1762 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1764 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__2_4:
1765 ; GFX940:       ; %bb.0:
1766 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1767 ; GFX940-NEXT:    ;;#ASMSTART
1768 ; GFX940-NEXT:    ; def v[0:1]
1769 ; GFX940-NEXT:    ;;#ASMEND
1770 ; GFX940-NEXT:    s_mov_b32 s2, 0xffff
1771 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1772 ; GFX940-NEXT:    ;;#ASMSTART
1773 ; GFX940-NEXT:    ; def v[2:3]
1774 ; GFX940-NEXT:    ;;#ASMEND
1775 ; GFX940-NEXT:    s_nop 0
1776 ; GFX940-NEXT:    v_bfi_b32 v0, s2, v1, v2
1777 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
1778 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1779 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1780   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1781   %vec1 = call <4 x i16> asm "; def $0", "=v"()
1782   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1783   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1784   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 2, i32 4>
1785   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1786   ret void
1789 define void @v_shuffle_v2i16_v3i16__3_4(ptr addrspace(1) inreg %ptr) {
1790 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__3_4:
1791 ; GFX900:       ; %bb.0:
1792 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1793 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1794 ; GFX900-NEXT:    ;;#ASMSTART
1795 ; GFX900-NEXT:    ; def v[0:1]
1796 ; GFX900-NEXT:    ;;#ASMEND
1797 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1798 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1799 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1801 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__3_4:
1802 ; GFX90A:       ; %bb.0:
1803 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1804 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1805 ; GFX90A-NEXT:    ;;#ASMSTART
1806 ; GFX90A-NEXT:    ; def v[0:1]
1807 ; GFX90A-NEXT:    ;;#ASMEND
1808 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1809 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1810 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1812 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__3_4:
1813 ; GFX940:       ; %bb.0:
1814 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1815 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1816 ; GFX940-NEXT:    ;;#ASMSTART
1817 ; GFX940-NEXT:    ; def v[0:1]
1818 ; GFX940-NEXT:    ;;#ASMEND
1819 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1820 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1821 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1822   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1823   %vec1 = call <4 x i16> asm "; def $0", "=v"()
1824   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1825   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1826   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 3, i32 4>
1827   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1828   ret void
1831 define void @v_shuffle_v2i16_v3i16__4_4(ptr addrspace(1) inreg %ptr) {
1832 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_4:
1833 ; GFX900:       ; %bb.0:
1834 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1835 ; GFX900-NEXT:    ;;#ASMSTART
1836 ; GFX900-NEXT:    ; def v[0:1]
1837 ; GFX900-NEXT:    ;;#ASMEND
1838 ; GFX900-NEXT:    s_mov_b32 s4, 0x7060302
1839 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1840 ; GFX900-NEXT:    v_perm_b32 v0, v0, v0, s4
1841 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1842 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1843 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1845 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_4:
1846 ; GFX90A:       ; %bb.0:
1847 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1848 ; GFX90A-NEXT:    ;;#ASMSTART
1849 ; GFX90A-NEXT:    ; def v[0:1]
1850 ; GFX90A-NEXT:    ;;#ASMEND
1851 ; GFX90A-NEXT:    s_mov_b32 s4, 0x7060302
1852 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1853 ; GFX90A-NEXT:    v_perm_b32 v0, v0, v0, s4
1854 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1855 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1856 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1858 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__4_4:
1859 ; GFX940:       ; %bb.0:
1860 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1861 ; GFX940-NEXT:    ;;#ASMSTART
1862 ; GFX940-NEXT:    ; def v[0:1]
1863 ; GFX940-NEXT:    ;;#ASMEND
1864 ; GFX940-NEXT:    s_mov_b32 s2, 0x7060302
1865 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1866 ; GFX940-NEXT:    v_perm_b32 v0, v0, v0, s2
1867 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1868 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1869 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1870   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1871   %vec1 = call <4 x i16> asm "; def $0", "=v"()
1872   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1873   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1874   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 4>
1875   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1876   ret void
1879 define void @v_shuffle_v2i16_v3i16__u_5(ptr addrspace(1) inreg %ptr) {
1880 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__u_5:
1881 ; GFX900:       ; %bb.0:
1882 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1883 ; GFX900-NEXT:    ;;#ASMSTART
1884 ; GFX900-NEXT:    ; def v[0:1]
1885 ; GFX900-NEXT:    ;;#ASMEND
1886 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
1887 ; GFX900-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
1888 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
1889 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1890 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1892 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__u_5:
1893 ; GFX90A:       ; %bb.0:
1894 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1895 ; GFX90A-NEXT:    ;;#ASMSTART
1896 ; GFX90A-NEXT:    ; def v[0:1]
1897 ; GFX90A-NEXT:    ;;#ASMEND
1898 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
1899 ; GFX90A-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
1900 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
1901 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1902 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1904 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__u_5:
1905 ; GFX940:       ; %bb.0:
1906 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1907 ; GFX940-NEXT:    ;;#ASMSTART
1908 ; GFX940-NEXT:    ; def v[0:1]
1909 ; GFX940-NEXT:    ;;#ASMEND
1910 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
1911 ; GFX940-NEXT:    v_lshlrev_b32_e32 v0, 16, v1
1912 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
1913 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1914 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1915   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1916   %vec1 = call <4 x i16> asm "; def $0", "=v"()
1917   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1918   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1919   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 poison, i32 5>
1920   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1921   ret void
1924 define void @v_shuffle_v2i16_v3i16__0_5(ptr addrspace(1) inreg %ptr) {
1925 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__0_5:
1926 ; GFX900:       ; %bb.0:
1927 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1928 ; GFX900-NEXT:    ;;#ASMSTART
1929 ; GFX900-NEXT:    ; def v[0:1]
1930 ; GFX900-NEXT:    ;;#ASMEND
1931 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
1932 ; GFX900-NEXT:    v_mov_b32_e32 v3, 0
1933 ; GFX900-NEXT:    ;;#ASMSTART
1934 ; GFX900-NEXT:    ; def v[1:2]
1935 ; GFX900-NEXT:    ;;#ASMEND
1936 ; GFX900-NEXT:    v_perm_b32 v0, v2, v0, s4
1937 ; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]
1938 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1939 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1941 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__0_5:
1942 ; GFX90A:       ; %bb.0:
1943 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1944 ; GFX90A-NEXT:    ;;#ASMSTART
1945 ; GFX90A-NEXT:    ; def v[0:1]
1946 ; GFX90A-NEXT:    ;;#ASMEND
1947 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
1948 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
1949 ; GFX90A-NEXT:    ;;#ASMSTART
1950 ; GFX90A-NEXT:    ; def v[2:3]
1951 ; GFX90A-NEXT:    ;;#ASMEND
1952 ; GFX90A-NEXT:    v_perm_b32 v0, v3, v0, s4
1953 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
1954 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
1955 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
1957 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__0_5:
1958 ; GFX940:       ; %bb.0:
1959 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1960 ; GFX940-NEXT:    ;;#ASMSTART
1961 ; GFX940-NEXT:    ; def v[0:1]
1962 ; GFX940-NEXT:    ;;#ASMEND
1963 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
1964 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
1965 ; GFX940-NEXT:    ;;#ASMSTART
1966 ; GFX940-NEXT:    ; def v[2:3]
1967 ; GFX940-NEXT:    ;;#ASMEND
1968 ; GFX940-NEXT:    s_nop 0
1969 ; GFX940-NEXT:    v_perm_b32 v0, v3, v0, s2
1970 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
1971 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
1972 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
1973   %vec0 = call <4 x i16> asm "; def $0", "=v"()
1974   %vec1 = call <4 x i16> asm "; def $0", "=v"()
1975   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1976   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
1977   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 0, i32 5>
1978   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
1979   ret void
1982 define void @v_shuffle_v2i16_v3i16__1_5(ptr addrspace(1) inreg %ptr) {
1983 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__1_5:
1984 ; GFX900:       ; %bb.0:
1985 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1986 ; GFX900-NEXT:    ;;#ASMSTART
1987 ; GFX900-NEXT:    ; def v[0:1]
1988 ; GFX900-NEXT:    ;;#ASMEND
1989 ; GFX900-NEXT:    v_mov_b32_e32 v3, 0
1990 ; GFX900-NEXT:    ;;#ASMSTART
1991 ; GFX900-NEXT:    ; def v[1:2]
1992 ; GFX900-NEXT:    ;;#ASMEND
1993 ; GFX900-NEXT:    v_alignbit_b32 v0, v2, v0, 16
1994 ; GFX900-NEXT:    global_store_dword v3, v0, s[16:17]
1995 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
1996 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
1998 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__1_5:
1999 ; GFX90A:       ; %bb.0:
2000 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2001 ; GFX90A-NEXT:    ;;#ASMSTART
2002 ; GFX90A-NEXT:    ; def v[0:1]
2003 ; GFX90A-NEXT:    ;;#ASMEND
2004 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2005 ; GFX90A-NEXT:    ;;#ASMSTART
2006 ; GFX90A-NEXT:    ; def v[2:3]
2007 ; GFX90A-NEXT:    ;;#ASMEND
2008 ; GFX90A-NEXT:    v_alignbit_b32 v0, v3, v0, 16
2009 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
2010 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2011 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2013 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__1_5:
2014 ; GFX940:       ; %bb.0:
2015 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2016 ; GFX940-NEXT:    ;;#ASMSTART
2017 ; GFX940-NEXT:    ; def v[0:1]
2018 ; GFX940-NEXT:    ;;#ASMEND
2019 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2020 ; GFX940-NEXT:    ;;#ASMSTART
2021 ; GFX940-NEXT:    ; def v[2:3]
2022 ; GFX940-NEXT:    ;;#ASMEND
2023 ; GFX940-NEXT:    s_nop 0
2024 ; GFX940-NEXT:    v_alignbit_b32 v0, v3, v0, 16
2025 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
2026 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2027 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2028   %vec0 = call <4 x i16> asm "; def $0", "=v"()
2029   %vec1 = call <4 x i16> asm "; def $0", "=v"()
2030   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2031   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2032   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 1, i32 5>
2033   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
2034   ret void
2037 define void @v_shuffle_v2i16_v3i16__2_5(ptr addrspace(1) inreg %ptr) {
2038 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__2_5:
2039 ; GFX900:       ; %bb.0:
2040 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2041 ; GFX900-NEXT:    ;;#ASMSTART
2042 ; GFX900-NEXT:    ; def v[0:1]
2043 ; GFX900-NEXT:    ;;#ASMEND
2044 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
2045 ; GFX900-NEXT:    v_mov_b32_e32 v4, 0
2046 ; GFX900-NEXT:    ;;#ASMSTART
2047 ; GFX900-NEXT:    ; def v[2:3]
2048 ; GFX900-NEXT:    ;;#ASMEND
2049 ; GFX900-NEXT:    v_perm_b32 v0, v3, v1, s4
2050 ; GFX900-NEXT:    global_store_dword v4, v0, s[16:17]
2051 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2052 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2054 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__2_5:
2055 ; GFX90A:       ; %bb.0:
2056 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2057 ; GFX90A-NEXT:    ;;#ASMSTART
2058 ; GFX90A-NEXT:    ; def v[0:1]
2059 ; GFX90A-NEXT:    ;;#ASMEND
2060 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
2061 ; GFX90A-NEXT:    v_mov_b32_e32 v4, 0
2062 ; GFX90A-NEXT:    ;;#ASMSTART
2063 ; GFX90A-NEXT:    ; def v[2:3]
2064 ; GFX90A-NEXT:    ;;#ASMEND
2065 ; GFX90A-NEXT:    v_perm_b32 v0, v3, v1, s4
2066 ; GFX90A-NEXT:    global_store_dword v4, v0, s[16:17]
2067 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2068 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2070 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__2_5:
2071 ; GFX940:       ; %bb.0:
2072 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2073 ; GFX940-NEXT:    ;;#ASMSTART
2074 ; GFX940-NEXT:    ; def v[0:1]
2075 ; GFX940-NEXT:    ;;#ASMEND
2076 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
2077 ; GFX940-NEXT:    v_mov_b32_e32 v4, 0
2078 ; GFX940-NEXT:    ;;#ASMSTART
2079 ; GFX940-NEXT:    ; def v[2:3]
2080 ; GFX940-NEXT:    ;;#ASMEND
2081 ; GFX940-NEXT:    s_nop 0
2082 ; GFX940-NEXT:    v_perm_b32 v0, v3, v1, s2
2083 ; GFX940-NEXT:    global_store_dword v4, v0, s[0:1] sc0 sc1
2084 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2085 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2086   %vec0 = call <4 x i16> asm "; def $0", "=v"()
2087   %vec1 = call <4 x i16> asm "; def $0", "=v"()
2088   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2089   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2090   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 2, i32 5>
2091   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
2092   ret void
2095 define void @v_shuffle_v2i16_v3i16__3_5(ptr addrspace(1) inreg %ptr) {
2096 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__3_5:
2097 ; GFX900:       ; %bb.0:
2098 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2099 ; GFX900-NEXT:    ;;#ASMSTART
2100 ; GFX900-NEXT:    ; def v[0:1]
2101 ; GFX900-NEXT:    ;;#ASMEND
2102 ; GFX900-NEXT:    s_mov_b32 s4, 0x5040100
2103 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
2104 ; GFX900-NEXT:    v_perm_b32 v0, v1, v0, s4
2105 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
2106 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2107 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2109 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__3_5:
2110 ; GFX90A:       ; %bb.0:
2111 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2112 ; GFX90A-NEXT:    ;;#ASMSTART
2113 ; GFX90A-NEXT:    ; def v[0:1]
2114 ; GFX90A-NEXT:    ;;#ASMEND
2115 ; GFX90A-NEXT:    s_mov_b32 s4, 0x5040100
2116 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
2117 ; GFX90A-NEXT:    v_perm_b32 v0, v1, v0, s4
2118 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
2119 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2120 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2122 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__3_5:
2123 ; GFX940:       ; %bb.0:
2124 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2125 ; GFX940-NEXT:    ;;#ASMSTART
2126 ; GFX940-NEXT:    ; def v[0:1]
2127 ; GFX940-NEXT:    ;;#ASMEND
2128 ; GFX940-NEXT:    s_mov_b32 s2, 0x5040100
2129 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
2130 ; GFX940-NEXT:    v_perm_b32 v0, v1, v0, s2
2131 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
2132 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2133 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2134   %vec0 = call <4 x i16> asm "; def $0", "=v"()
2135   %vec1 = call <4 x i16> asm "; def $0", "=v"()
2136   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2137   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2138   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 3, i32 5>
2139   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
2140   ret void
2143 define void @v_shuffle_v2i16_v3i16__4_5(ptr addrspace(1) inreg %ptr) {
2144 ; GFX900-LABEL: v_shuffle_v2i16_v3i16__4_5:
2145 ; GFX900:       ; %bb.0:
2146 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2147 ; GFX900-NEXT:    ;;#ASMSTART
2148 ; GFX900-NEXT:    ; def v[0:1]
2149 ; GFX900-NEXT:    ;;#ASMEND
2150 ; GFX900-NEXT:    v_mov_b32_e32 v2, 0
2151 ; GFX900-NEXT:    v_alignbit_b32 v0, v1, v0, 16
2152 ; GFX900-NEXT:    global_store_dword v2, v0, s[16:17]
2153 ; GFX900-NEXT:    s_waitcnt vmcnt(0)
2154 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2156 ; GFX90A-LABEL: v_shuffle_v2i16_v3i16__4_5:
2157 ; GFX90A:       ; %bb.0:
2158 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2159 ; GFX90A-NEXT:    ;;#ASMSTART
2160 ; GFX90A-NEXT:    ; def v[0:1]
2161 ; GFX90A-NEXT:    ;;#ASMEND
2162 ; GFX90A-NEXT:    v_mov_b32_e32 v2, 0
2163 ; GFX90A-NEXT:    v_alignbit_b32 v0, v1, v0, 16
2164 ; GFX90A-NEXT:    global_store_dword v2, v0, s[16:17]
2165 ; GFX90A-NEXT:    s_waitcnt vmcnt(0)
2166 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2168 ; GFX940-LABEL: v_shuffle_v2i16_v3i16__4_5:
2169 ; GFX940:       ; %bb.0:
2170 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2171 ; GFX940-NEXT:    ;;#ASMSTART
2172 ; GFX940-NEXT:    ; def v[0:1]
2173 ; GFX940-NEXT:    ;;#ASMEND
2174 ; GFX940-NEXT:    v_mov_b32_e32 v2, 0
2175 ; GFX940-NEXT:    v_alignbit_b32 v0, v1, v0, 16
2176 ; GFX940-NEXT:    global_store_dword v2, v0, s[0:1] sc0 sc1
2177 ; GFX940-NEXT:    s_waitcnt vmcnt(0)
2178 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2179   %vec0 = call <4 x i16> asm "; def $0", "=v"()
2180   %vec1 = call <4 x i16> asm "; def $0", "=v"()
2181   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2182   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2183   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 5>
2184   store <2 x i16> %shuf, ptr addrspace(1) %ptr, align 4
2185   ret void
2188 define void @s_shuffle_v2i16_v3i16__u_u() {
2189 ; GFX9-LABEL: s_shuffle_v2i16_v3i16__u_u:
2190 ; GFX9:       ; %bb.0:
2191 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2192 ; GFX9-NEXT:    ;;#ASMSTART
2193 ; GFX9-NEXT:    ; use s8
2194 ; GFX9-NEXT:    ;;#ASMEND
2195 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2196   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2197   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2198   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> poison
2199   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2200   ret void
2203 define void @s_shuffle_v2i16_v3i16__0_u() {
2204 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_u:
2205 ; GFX900:       ; %bb.0:
2206 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2207 ; GFX900-NEXT:    ;;#ASMSTART
2208 ; GFX900-NEXT:    ; def s[8:9]
2209 ; GFX900-NEXT:    ;;#ASMEND
2210 ; GFX900-NEXT:    ;;#ASMSTART
2211 ; GFX900-NEXT:    ; use s8
2212 ; GFX900-NEXT:    ;;#ASMEND
2213 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2215 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_u:
2216 ; GFX90A:       ; %bb.0:
2217 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2218 ; GFX90A-NEXT:    ;;#ASMSTART
2219 ; GFX90A-NEXT:    ; def s[8:9]
2220 ; GFX90A-NEXT:    ;;#ASMEND
2221 ; GFX90A-NEXT:    ;;#ASMSTART
2222 ; GFX90A-NEXT:    ; use s8
2223 ; GFX90A-NEXT:    ;;#ASMEND
2224 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2226 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__0_u:
2227 ; GFX940:       ; %bb.0:
2228 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2229 ; GFX940-NEXT:    ;;#ASMSTART
2230 ; GFX940-NEXT:    ; def s[8:9]
2231 ; GFX940-NEXT:    ;;#ASMEND
2232 ; GFX940-NEXT:    s_nop 0
2233 ; GFX940-NEXT:    ;;#ASMSTART
2234 ; GFX940-NEXT:    ; use s8
2235 ; GFX940-NEXT:    ;;#ASMEND
2236 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2237   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2238   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2239   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 poison>
2240   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2241   ret void
2244 define void @s_shuffle_v2i16_v3i16__1_u() {
2245 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_u:
2246 ; GFX900:       ; %bb.0:
2247 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2248 ; GFX900-NEXT:    ;;#ASMSTART
2249 ; GFX900-NEXT:    ; def s[4:5]
2250 ; GFX900-NEXT:    ;;#ASMEND
2251 ; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
2252 ; GFX900-NEXT:    ;;#ASMSTART
2253 ; GFX900-NEXT:    ; use s8
2254 ; GFX900-NEXT:    ;;#ASMEND
2255 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2257 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_u:
2258 ; GFX90A:       ; %bb.0:
2259 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2260 ; GFX90A-NEXT:    ;;#ASMSTART
2261 ; GFX90A-NEXT:    ; def s[4:5]
2262 ; GFX90A-NEXT:    ;;#ASMEND
2263 ; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
2264 ; GFX90A-NEXT:    ;;#ASMSTART
2265 ; GFX90A-NEXT:    ; use s8
2266 ; GFX90A-NEXT:    ;;#ASMEND
2267 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2269 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__1_u:
2270 ; GFX940:       ; %bb.0:
2271 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2272 ; GFX940-NEXT:    ;;#ASMSTART
2273 ; GFX940-NEXT:    ; def s[0:1]
2274 ; GFX940-NEXT:    ;;#ASMEND
2275 ; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
2276 ; GFX940-NEXT:    ;;#ASMSTART
2277 ; GFX940-NEXT:    ; use s8
2278 ; GFX940-NEXT:    ;;#ASMEND
2279 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2280   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2281   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2282   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 poison>
2283   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2284   ret void
2287 define void @s_shuffle_v2i16_v3i16__2_u() {
2288 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_u:
2289 ; GFX900:       ; %bb.0:
2290 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2291 ; GFX900-NEXT:    ;;#ASMSTART
2292 ; GFX900-NEXT:    ; def s[4:5]
2293 ; GFX900-NEXT:    ;;#ASMEND
2294 ; GFX900-NEXT:    s_mov_b32 s8, s5
2295 ; GFX900-NEXT:    ;;#ASMSTART
2296 ; GFX900-NEXT:    ; use s8
2297 ; GFX900-NEXT:    ;;#ASMEND
2298 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2300 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_u:
2301 ; GFX90A:       ; %bb.0:
2302 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2303 ; GFX90A-NEXT:    ;;#ASMSTART
2304 ; GFX90A-NEXT:    ; def s[4:5]
2305 ; GFX90A-NEXT:    ;;#ASMEND
2306 ; GFX90A-NEXT:    s_mov_b32 s8, s5
2307 ; GFX90A-NEXT:    ;;#ASMSTART
2308 ; GFX90A-NEXT:    ; use s8
2309 ; GFX90A-NEXT:    ;;#ASMEND
2310 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2312 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__2_u:
2313 ; GFX940:       ; %bb.0:
2314 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2315 ; GFX940-NEXT:    ;;#ASMSTART
2316 ; GFX940-NEXT:    ; def s[0:1]
2317 ; GFX940-NEXT:    ;;#ASMEND
2318 ; GFX940-NEXT:    s_mov_b32 s8, s1
2319 ; GFX940-NEXT:    ;;#ASMSTART
2320 ; GFX940-NEXT:    ; use s8
2321 ; GFX940-NEXT:    ;;#ASMEND
2322 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2323   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2324   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2325   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 poison>
2326   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2327   ret void
2330 define void @s_shuffle_v2i16_v3i16__3_u() {
2331 ; GFX9-LABEL: s_shuffle_v2i16_v3i16__3_u:
2332 ; GFX9:       ; %bb.0:
2333 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2334 ; GFX9-NEXT:    ;;#ASMSTART
2335 ; GFX9-NEXT:    ; use s8
2336 ; GFX9-NEXT:    ;;#ASMEND
2337 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
2338   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2339   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2340   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 poison>
2341   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2342   ret void
2345 define void @s_shuffle_v2i16_v3i16__4_u() {
2346 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_u:
2347 ; GFX900:       ; %bb.0:
2348 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2349 ; GFX900-NEXT:    ;;#ASMSTART
2350 ; GFX900-NEXT:    ; def s[4:5]
2351 ; GFX900-NEXT:    ;;#ASMEND
2352 ; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
2353 ; GFX900-NEXT:    ;;#ASMSTART
2354 ; GFX900-NEXT:    ; use s8
2355 ; GFX900-NEXT:    ;;#ASMEND
2356 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2358 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_u:
2359 ; GFX90A:       ; %bb.0:
2360 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2361 ; GFX90A-NEXT:    ;;#ASMSTART
2362 ; GFX90A-NEXT:    ; def s[4:5]
2363 ; GFX90A-NEXT:    ;;#ASMEND
2364 ; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
2365 ; GFX90A-NEXT:    ;;#ASMSTART
2366 ; GFX90A-NEXT:    ; use s8
2367 ; GFX90A-NEXT:    ;;#ASMEND
2368 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2370 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__4_u:
2371 ; GFX940:       ; %bb.0:
2372 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2373 ; GFX940-NEXT:    ;;#ASMSTART
2374 ; GFX940-NEXT:    ; def s[0:1]
2375 ; GFX940-NEXT:    ;;#ASMEND
2376 ; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
2377 ; GFX940-NEXT:    ;;#ASMSTART
2378 ; GFX940-NEXT:    ; use s8
2379 ; GFX940-NEXT:    ;;#ASMEND
2380 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2381   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2382   %vec1 = call <4 x i16> asm "; def $0", "=s"()
2383   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2384   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2385   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 poison>
2386   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2387   ret void
2390 define void @s_shuffle_v2i16_v3i16__5_u() {
2391 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_u:
2392 ; GFX900:       ; %bb.0:
2393 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2394 ; GFX900-NEXT:    ;;#ASMSTART
2395 ; GFX900-NEXT:    ; def s[4:5]
2396 ; GFX900-NEXT:    ;;#ASMEND
2397 ; GFX900-NEXT:    s_mov_b32 s8, s5
2398 ; GFX900-NEXT:    ;;#ASMSTART
2399 ; GFX900-NEXT:    ; use s8
2400 ; GFX900-NEXT:    ;;#ASMEND
2401 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2403 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_u:
2404 ; GFX90A:       ; %bb.0:
2405 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2406 ; GFX90A-NEXT:    ;;#ASMSTART
2407 ; GFX90A-NEXT:    ; def s[4:5]
2408 ; GFX90A-NEXT:    ;;#ASMEND
2409 ; GFX90A-NEXT:    s_mov_b32 s8, s5
2410 ; GFX90A-NEXT:    ;;#ASMSTART
2411 ; GFX90A-NEXT:    ; use s8
2412 ; GFX90A-NEXT:    ;;#ASMEND
2413 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2415 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__5_u:
2416 ; GFX940:       ; %bb.0:
2417 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2418 ; GFX940-NEXT:    ;;#ASMSTART
2419 ; GFX940-NEXT:    ; def s[0:1]
2420 ; GFX940-NEXT:    ;;#ASMEND
2421 ; GFX940-NEXT:    s_mov_b32 s8, s1
2422 ; GFX940-NEXT:    ;;#ASMSTART
2423 ; GFX940-NEXT:    ; use s8
2424 ; GFX940-NEXT:    ;;#ASMEND
2425 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2426   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2427   %vec1 = call <4 x i16> asm "; def $0", "=s"()
2428   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2429   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2430   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 poison>
2431   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2432   ret void
2435 define void @s_shuffle_v2i16_v3i16__5_0() {
2436 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_0:
2437 ; GFX900:       ; %bb.0:
2438 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2439 ; GFX900-NEXT:    ;;#ASMSTART
2440 ; GFX900-NEXT:    ; def s[4:5]
2441 ; GFX900-NEXT:    ;;#ASMEND
2442 ; GFX900-NEXT:    ;;#ASMSTART
2443 ; GFX900-NEXT:    ; def s[6:7]
2444 ; GFX900-NEXT:    ;;#ASMEND
2445 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s4
2446 ; GFX900-NEXT:    ;;#ASMSTART
2447 ; GFX900-NEXT:    ; use s8
2448 ; GFX900-NEXT:    ;;#ASMEND
2449 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2451 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_0:
2452 ; GFX90A:       ; %bb.0:
2453 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2454 ; GFX90A-NEXT:    ;;#ASMSTART
2455 ; GFX90A-NEXT:    ; def s[4:5]
2456 ; GFX90A-NEXT:    ;;#ASMEND
2457 ; GFX90A-NEXT:    ;;#ASMSTART
2458 ; GFX90A-NEXT:    ; def s[6:7]
2459 ; GFX90A-NEXT:    ;;#ASMEND
2460 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s4
2461 ; GFX90A-NEXT:    ;;#ASMSTART
2462 ; GFX90A-NEXT:    ; use s8
2463 ; GFX90A-NEXT:    ;;#ASMEND
2464 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2466 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__5_0:
2467 ; GFX940:       ; %bb.0:
2468 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2469 ; GFX940-NEXT:    ;;#ASMSTART
2470 ; GFX940-NEXT:    ; def s[0:1]
2471 ; GFX940-NEXT:    ;;#ASMEND
2472 ; GFX940-NEXT:    ;;#ASMSTART
2473 ; GFX940-NEXT:    ; def s[2:3]
2474 ; GFX940-NEXT:    ;;#ASMEND
2475 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s3, s0
2476 ; GFX940-NEXT:    ;;#ASMSTART
2477 ; GFX940-NEXT:    ; use s8
2478 ; GFX940-NEXT:    ;;#ASMEND
2479 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2480   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2481   %vec1 = call <4 x i16> asm "; def $0", "=s"()
2482   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2483   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2484   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 0>
2485   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2486   ret void
2489 define void @s_shuffle_v2i16_v3i16__5_1() {
2490 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_1:
2491 ; GFX900:       ; %bb.0:
2492 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2493 ; GFX900-NEXT:    ;;#ASMSTART
2494 ; GFX900-NEXT:    ; def s[4:5]
2495 ; GFX900-NEXT:    ;;#ASMEND
2496 ; GFX900-NEXT:    ;;#ASMSTART
2497 ; GFX900-NEXT:    ; def s[6:7]
2498 ; GFX900-NEXT:    ;;#ASMEND
2499 ; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s7, s4
2500 ; GFX900-NEXT:    ;;#ASMSTART
2501 ; GFX900-NEXT:    ; use s8
2502 ; GFX900-NEXT:    ;;#ASMEND
2503 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2505 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_1:
2506 ; GFX90A:       ; %bb.0:
2507 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2508 ; GFX90A-NEXT:    ;;#ASMSTART
2509 ; GFX90A-NEXT:    ; def s[4:5]
2510 ; GFX90A-NEXT:    ;;#ASMEND
2511 ; GFX90A-NEXT:    ;;#ASMSTART
2512 ; GFX90A-NEXT:    ; def s[6:7]
2513 ; GFX90A-NEXT:    ;;#ASMEND
2514 ; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s7, s4
2515 ; GFX90A-NEXT:    ;;#ASMSTART
2516 ; GFX90A-NEXT:    ; use s8
2517 ; GFX90A-NEXT:    ;;#ASMEND
2518 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2520 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__5_1:
2521 ; GFX940:       ; %bb.0:
2522 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2523 ; GFX940-NEXT:    ;;#ASMSTART
2524 ; GFX940-NEXT:    ; def s[0:1]
2525 ; GFX940-NEXT:    ;;#ASMEND
2526 ; GFX940-NEXT:    ;;#ASMSTART
2527 ; GFX940-NEXT:    ; def s[2:3]
2528 ; GFX940-NEXT:    ;;#ASMEND
2529 ; GFX940-NEXT:    s_pack_lh_b32_b16 s8, s3, s0
2530 ; GFX940-NEXT:    ;;#ASMSTART
2531 ; GFX940-NEXT:    ; use s8
2532 ; GFX940-NEXT:    ;;#ASMEND
2533 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2534   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2535   %vec1 = call <4 x i16> asm "; def $0", "=s"()
2536   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2537   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2538   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 1>
2539   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2540   ret void
2543 define void @s_shuffle_v2i16_v3i16__5_2() {
2544 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_2:
2545 ; GFX900:       ; %bb.0:
2546 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2547 ; GFX900-NEXT:    ;;#ASMSTART
2548 ; GFX900-NEXT:    ; def s[4:5]
2549 ; GFX900-NEXT:    ;;#ASMEND
2550 ; GFX900-NEXT:    ;;#ASMSTART
2551 ; GFX900-NEXT:    ; def s[6:7]
2552 ; GFX900-NEXT:    ;;#ASMEND
2553 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s7, s5
2554 ; GFX900-NEXT:    ;;#ASMSTART
2555 ; GFX900-NEXT:    ; use s8
2556 ; GFX900-NEXT:    ;;#ASMEND
2557 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2559 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_2:
2560 ; GFX90A:       ; %bb.0:
2561 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2562 ; GFX90A-NEXT:    ;;#ASMSTART
2563 ; GFX90A-NEXT:    ; def s[4:5]
2564 ; GFX90A-NEXT:    ;;#ASMEND
2565 ; GFX90A-NEXT:    ;;#ASMSTART
2566 ; GFX90A-NEXT:    ; def s[6:7]
2567 ; GFX90A-NEXT:    ;;#ASMEND
2568 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s7, s5
2569 ; GFX90A-NEXT:    ;;#ASMSTART
2570 ; GFX90A-NEXT:    ; use s8
2571 ; GFX90A-NEXT:    ;;#ASMEND
2572 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2574 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__5_2:
2575 ; GFX940:       ; %bb.0:
2576 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2577 ; GFX940-NEXT:    ;;#ASMSTART
2578 ; GFX940-NEXT:    ; def s[0:1]
2579 ; GFX940-NEXT:    ;;#ASMEND
2580 ; GFX940-NEXT:    ;;#ASMSTART
2581 ; GFX940-NEXT:    ; def s[2:3]
2582 ; GFX940-NEXT:    ;;#ASMEND
2583 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s3, s1
2584 ; GFX940-NEXT:    ;;#ASMSTART
2585 ; GFX940-NEXT:    ; use s8
2586 ; GFX940-NEXT:    ;;#ASMEND
2587 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2588   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2589   %vec1 = call <4 x i16> asm "; def $0", "=s"()
2590   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2591   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2592   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 2>
2593   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2594   ret void
2597 define void @s_shuffle_v2i16_v3i16__5_3() {
2598 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_3:
2599 ; GFX900:       ; %bb.0:
2600 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2601 ; GFX900-NEXT:    ;;#ASMSTART
2602 ; GFX900-NEXT:    ; def s[4:5]
2603 ; GFX900-NEXT:    ;;#ASMEND
2604 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2605 ; GFX900-NEXT:    ;;#ASMSTART
2606 ; GFX900-NEXT:    ; use s8
2607 ; GFX900-NEXT:    ;;#ASMEND
2608 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2610 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_3:
2611 ; GFX90A:       ; %bb.0:
2612 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2613 ; GFX90A-NEXT:    ;;#ASMSTART
2614 ; GFX90A-NEXT:    ; def s[4:5]
2615 ; GFX90A-NEXT:    ;;#ASMEND
2616 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2617 ; GFX90A-NEXT:    ;;#ASMSTART
2618 ; GFX90A-NEXT:    ; use s8
2619 ; GFX90A-NEXT:    ;;#ASMEND
2620 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2622 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__5_3:
2623 ; GFX940:       ; %bb.0:
2624 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2625 ; GFX940-NEXT:    ;;#ASMSTART
2626 ; GFX940-NEXT:    ; def s[0:1]
2627 ; GFX940-NEXT:    ;;#ASMEND
2628 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
2629 ; GFX940-NEXT:    ;;#ASMSTART
2630 ; GFX940-NEXT:    ; use s8
2631 ; GFX940-NEXT:    ;;#ASMEND
2632 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2633   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2634   %vec1 = call <4 x i16> asm "; def $0", "=s"()
2635   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2636   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2637   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 3>
2638   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2639   ret void
2642 define void @s_shuffle_v2i16_v3i16__5_4() {
2643 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_4:
2644 ; GFX900:       ; %bb.0:
2645 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2646 ; GFX900-NEXT:    ;;#ASMSTART
2647 ; GFX900-NEXT:    ; def s[4:5]
2648 ; GFX900-NEXT:    ;;#ASMEND
2649 ; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s5, s4
2650 ; GFX900-NEXT:    ;;#ASMSTART
2651 ; GFX900-NEXT:    ; use s8
2652 ; GFX900-NEXT:    ;;#ASMEND
2653 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2655 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_4:
2656 ; GFX90A:       ; %bb.0:
2657 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2658 ; GFX90A-NEXT:    ;;#ASMSTART
2659 ; GFX90A-NEXT:    ; def s[4:5]
2660 ; GFX90A-NEXT:    ;;#ASMEND
2661 ; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s5, s4
2662 ; GFX90A-NEXT:    ;;#ASMSTART
2663 ; GFX90A-NEXT:    ; use s8
2664 ; GFX90A-NEXT:    ;;#ASMEND
2665 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2667 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__5_4:
2668 ; GFX940:       ; %bb.0:
2669 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2670 ; GFX940-NEXT:    ;;#ASMSTART
2671 ; GFX940-NEXT:    ; def s[0:1]
2672 ; GFX940-NEXT:    ;;#ASMEND
2673 ; GFX940-NEXT:    s_pack_lh_b32_b16 s8, s1, s0
2674 ; GFX940-NEXT:    ;;#ASMSTART
2675 ; GFX940-NEXT:    ; use s8
2676 ; GFX940-NEXT:    ;;#ASMEND
2677 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2678   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2679   %vec1 = call <4 x i16> asm "; def $0", "=s"()
2680   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2681   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2682   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 4>
2683   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2684   ret void
2687 define void @s_shuffle_v2i16_v3i16__5_5() {
2688 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__5_5:
2689 ; GFX900:       ; %bb.0:
2690 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2691 ; GFX900-NEXT:    ;;#ASMSTART
2692 ; GFX900-NEXT:    ; def s[4:5]
2693 ; GFX900-NEXT:    ;;#ASMEND
2694 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s5
2695 ; GFX900-NEXT:    ;;#ASMSTART
2696 ; GFX900-NEXT:    ; use s8
2697 ; GFX900-NEXT:    ;;#ASMEND
2698 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2700 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__5_5:
2701 ; GFX90A:       ; %bb.0:
2702 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2703 ; GFX90A-NEXT:    ;;#ASMSTART
2704 ; GFX90A-NEXT:    ; def s[4:5]
2705 ; GFX90A-NEXT:    ;;#ASMEND
2706 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s5
2707 ; GFX90A-NEXT:    ;;#ASMSTART
2708 ; GFX90A-NEXT:    ; use s8
2709 ; GFX90A-NEXT:    ;;#ASMEND
2710 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2712 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__5_5:
2713 ; GFX940:       ; %bb.0:
2714 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2715 ; GFX940-NEXT:    ;;#ASMSTART
2716 ; GFX940-NEXT:    ; def s[0:1]
2717 ; GFX940-NEXT:    ;;#ASMEND
2718 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s1
2719 ; GFX940-NEXT:    ;;#ASMSTART
2720 ; GFX940-NEXT:    ; use s8
2721 ; GFX940-NEXT:    ;;#ASMEND
2722 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2723   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2724   %vec1 = call <4 x i16> asm "; def $0", "=s"()
2725   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2726   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2727   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 5, i32 5>
2728   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2729   ret void
2732 define void @s_shuffle_v2i16_v3i16__u_0() {
2733 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__u_0:
2734 ; GFX900:       ; %bb.0:
2735 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2736 ; GFX900-NEXT:    ;;#ASMSTART
2737 ; GFX900-NEXT:    ; def s[4:5]
2738 ; GFX900-NEXT:    ;;#ASMEND
2739 ; GFX900-NEXT:    s_lshl_b32 s8, s4, 16
2740 ; GFX900-NEXT:    ;;#ASMSTART
2741 ; GFX900-NEXT:    ; use s8
2742 ; GFX900-NEXT:    ;;#ASMEND
2743 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2745 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__u_0:
2746 ; GFX90A:       ; %bb.0:
2747 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2748 ; GFX90A-NEXT:    ;;#ASMSTART
2749 ; GFX90A-NEXT:    ; def s[4:5]
2750 ; GFX90A-NEXT:    ;;#ASMEND
2751 ; GFX90A-NEXT:    s_lshl_b32 s8, s4, 16
2752 ; GFX90A-NEXT:    ;;#ASMSTART
2753 ; GFX90A-NEXT:    ; use s8
2754 ; GFX90A-NEXT:    ;;#ASMEND
2755 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2757 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__u_0:
2758 ; GFX940:       ; %bb.0:
2759 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2760 ; GFX940-NEXT:    ;;#ASMSTART
2761 ; GFX940-NEXT:    ; def s[0:1]
2762 ; GFX940-NEXT:    ;;#ASMEND
2763 ; GFX940-NEXT:    s_lshl_b32 s8, s0, 16
2764 ; GFX940-NEXT:    ;;#ASMSTART
2765 ; GFX940-NEXT:    ; use s8
2766 ; GFX940-NEXT:    ;;#ASMEND
2767 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2768   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2769   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2770   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 0>
2771   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2772   ret void
2775 define void @s_shuffle_v2i16_v3i16__0_0() {
2776 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_0:
2777 ; GFX900:       ; %bb.0:
2778 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2779 ; GFX900-NEXT:    ;;#ASMSTART
2780 ; GFX900-NEXT:    ; def s[4:5]
2781 ; GFX900-NEXT:    ;;#ASMEND
2782 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s4
2783 ; GFX900-NEXT:    ;;#ASMSTART
2784 ; GFX900-NEXT:    ; use s8
2785 ; GFX900-NEXT:    ;;#ASMEND
2786 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2788 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_0:
2789 ; GFX90A:       ; %bb.0:
2790 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2791 ; GFX90A-NEXT:    ;;#ASMSTART
2792 ; GFX90A-NEXT:    ; def s[4:5]
2793 ; GFX90A-NEXT:    ;;#ASMEND
2794 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s4
2795 ; GFX90A-NEXT:    ;;#ASMSTART
2796 ; GFX90A-NEXT:    ; use s8
2797 ; GFX90A-NEXT:    ;;#ASMEND
2798 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2800 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__0_0:
2801 ; GFX940:       ; %bb.0:
2802 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2803 ; GFX940-NEXT:    ;;#ASMSTART
2804 ; GFX940-NEXT:    ; def s[0:1]
2805 ; GFX940-NEXT:    ;;#ASMEND
2806 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s0
2807 ; GFX940-NEXT:    ;;#ASMSTART
2808 ; GFX940-NEXT:    ; use s8
2809 ; GFX940-NEXT:    ;;#ASMEND
2810 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2811   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2812   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2813   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> zeroinitializer
2814   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2815   ret void
2818 define void @s_shuffle_v2i16_v3i16__1_0() {
2819 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_0:
2820 ; GFX900:       ; %bb.0:
2821 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2822 ; GFX900-NEXT:    ;;#ASMSTART
2823 ; GFX900-NEXT:    ; def s[4:5]
2824 ; GFX900-NEXT:    ;;#ASMEND
2825 ; GFX900-NEXT:    s_lshr_b32 s5, s4, 16
2826 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2827 ; GFX900-NEXT:    ;;#ASMSTART
2828 ; GFX900-NEXT:    ; use s8
2829 ; GFX900-NEXT:    ;;#ASMEND
2830 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2832 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_0:
2833 ; GFX90A:       ; %bb.0:
2834 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2835 ; GFX90A-NEXT:    ;;#ASMSTART
2836 ; GFX90A-NEXT:    ; def s[4:5]
2837 ; GFX90A-NEXT:    ;;#ASMEND
2838 ; GFX90A-NEXT:    s_lshr_b32 s5, s4, 16
2839 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2840 ; GFX90A-NEXT:    ;;#ASMSTART
2841 ; GFX90A-NEXT:    ; use s8
2842 ; GFX90A-NEXT:    ;;#ASMEND
2843 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2845 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__1_0:
2846 ; GFX940:       ; %bb.0:
2847 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2848 ; GFX940-NEXT:    ;;#ASMSTART
2849 ; GFX940-NEXT:    ; def s[0:1]
2850 ; GFX940-NEXT:    ;;#ASMEND
2851 ; GFX940-NEXT:    s_lshr_b32 s1, s0, 16
2852 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
2853 ; GFX940-NEXT:    ;;#ASMSTART
2854 ; GFX940-NEXT:    ; use s8
2855 ; GFX940-NEXT:    ;;#ASMEND
2856 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2857   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2858   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2859   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 0>
2860   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2861   ret void
2864 define void @s_shuffle_v2i16_v3i16__2_0() {
2865 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_0:
2866 ; GFX900:       ; %bb.0:
2867 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2868 ; GFX900-NEXT:    ;;#ASMSTART
2869 ; GFX900-NEXT:    ; def s[4:5]
2870 ; GFX900-NEXT:    ;;#ASMEND
2871 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2872 ; GFX900-NEXT:    ;;#ASMSTART
2873 ; GFX900-NEXT:    ; use s8
2874 ; GFX900-NEXT:    ;;#ASMEND
2875 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2877 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_0:
2878 ; GFX90A:       ; %bb.0:
2879 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2880 ; GFX90A-NEXT:    ;;#ASMSTART
2881 ; GFX90A-NEXT:    ; def s[4:5]
2882 ; GFX90A-NEXT:    ;;#ASMEND
2883 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2884 ; GFX90A-NEXT:    ;;#ASMSTART
2885 ; GFX90A-NEXT:    ; use s8
2886 ; GFX90A-NEXT:    ;;#ASMEND
2887 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2889 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__2_0:
2890 ; GFX940:       ; %bb.0:
2891 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2892 ; GFX940-NEXT:    ;;#ASMSTART
2893 ; GFX940-NEXT:    ; def s[0:1]
2894 ; GFX940-NEXT:    ;;#ASMEND
2895 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
2896 ; GFX940-NEXT:    ;;#ASMSTART
2897 ; GFX940-NEXT:    ; use s8
2898 ; GFX940-NEXT:    ;;#ASMEND
2899 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2900   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2901   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2902   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 0>
2903   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2904   ret void
2907 define void @s_shuffle_v2i16_v3i16__3_0() {
2908 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__3_0:
2909 ; GFX900:       ; %bb.0:
2910 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2911 ; GFX900-NEXT:    ;;#ASMSTART
2912 ; GFX900-NEXT:    ; def s[4:5]
2913 ; GFX900-NEXT:    ;;#ASMEND
2914 ; GFX900-NEXT:    s_lshl_b32 s8, s4, 16
2915 ; GFX900-NEXT:    ;;#ASMSTART
2916 ; GFX900-NEXT:    ; use s8
2917 ; GFX900-NEXT:    ;;#ASMEND
2918 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2920 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__3_0:
2921 ; GFX90A:       ; %bb.0:
2922 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2923 ; GFX90A-NEXT:    ;;#ASMSTART
2924 ; GFX90A-NEXT:    ; def s[4:5]
2925 ; GFX90A-NEXT:    ;;#ASMEND
2926 ; GFX90A-NEXT:    s_lshl_b32 s8, s4, 16
2927 ; GFX90A-NEXT:    ;;#ASMSTART
2928 ; GFX90A-NEXT:    ; use s8
2929 ; GFX90A-NEXT:    ;;#ASMEND
2930 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2932 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__3_0:
2933 ; GFX940:       ; %bb.0:
2934 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2935 ; GFX940-NEXT:    ;;#ASMSTART
2936 ; GFX940-NEXT:    ; def s[0:1]
2937 ; GFX940-NEXT:    ;;#ASMEND
2938 ; GFX940-NEXT:    s_lshl_b32 s8, s0, 16
2939 ; GFX940-NEXT:    ;;#ASMSTART
2940 ; GFX940-NEXT:    ; use s8
2941 ; GFX940-NEXT:    ;;#ASMEND
2942 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2943   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2944   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
2945   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 0>
2946   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
2947   ret void
2950 define void @s_shuffle_v2i16_v3i16__4_0() {
2951 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_0:
2952 ; GFX900:       ; %bb.0:
2953 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2954 ; GFX900-NEXT:    ;;#ASMSTART
2955 ; GFX900-NEXT:    ; def s[4:5]
2956 ; GFX900-NEXT:    ;;#ASMEND
2957 ; GFX900-NEXT:    ;;#ASMSTART
2958 ; GFX900-NEXT:    ; def s[6:7]
2959 ; GFX900-NEXT:    ;;#ASMEND
2960 ; GFX900-NEXT:    s_lshr_b32 s5, s6, 16
2961 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2962 ; GFX900-NEXT:    ;;#ASMSTART
2963 ; GFX900-NEXT:    ; use s8
2964 ; GFX900-NEXT:    ;;#ASMEND
2965 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
2967 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_0:
2968 ; GFX90A:       ; %bb.0:
2969 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2970 ; GFX90A-NEXT:    ;;#ASMSTART
2971 ; GFX90A-NEXT:    ; def s[4:5]
2972 ; GFX90A-NEXT:    ;;#ASMEND
2973 ; GFX90A-NEXT:    ;;#ASMSTART
2974 ; GFX90A-NEXT:    ; def s[6:7]
2975 ; GFX90A-NEXT:    ;;#ASMEND
2976 ; GFX90A-NEXT:    s_lshr_b32 s5, s6, 16
2977 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
2978 ; GFX90A-NEXT:    ;;#ASMSTART
2979 ; GFX90A-NEXT:    ; use s8
2980 ; GFX90A-NEXT:    ;;#ASMEND
2981 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
2983 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__4_0:
2984 ; GFX940:       ; %bb.0:
2985 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
2986 ; GFX940-NEXT:    ;;#ASMSTART
2987 ; GFX940-NEXT:    ; def s[0:1]
2988 ; GFX940-NEXT:    ;;#ASMEND
2989 ; GFX940-NEXT:    ;;#ASMSTART
2990 ; GFX940-NEXT:    ; def s[2:3]
2991 ; GFX940-NEXT:    ;;#ASMEND
2992 ; GFX940-NEXT:    s_lshr_b32 s1, s2, 16
2993 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
2994 ; GFX940-NEXT:    ;;#ASMSTART
2995 ; GFX940-NEXT:    ; use s8
2996 ; GFX940-NEXT:    ;;#ASMEND
2997 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
2998   %vec0 = call <4 x i16> asm "; def $0", "=s"()
2999   %vec1 = call <4 x i16> asm "; def $0", "=s"()
3000   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3001   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3002   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 0>
3003   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3004   ret void
3007 define void @s_shuffle_v2i16_v3i16__u_1() {
3008 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__u_1:
3009 ; GFX900:       ; %bb.0:
3010 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3011 ; GFX900-NEXT:    ;;#ASMSTART
3012 ; GFX900-NEXT:    ; def s[8:9]
3013 ; GFX900-NEXT:    ;;#ASMEND
3014 ; GFX900-NEXT:    ;;#ASMSTART
3015 ; GFX900-NEXT:    ; use s8
3016 ; GFX900-NEXT:    ;;#ASMEND
3017 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3019 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__u_1:
3020 ; GFX90A:       ; %bb.0:
3021 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3022 ; GFX90A-NEXT:    ;;#ASMSTART
3023 ; GFX90A-NEXT:    ; def s[8:9]
3024 ; GFX90A-NEXT:    ;;#ASMEND
3025 ; GFX90A-NEXT:    ;;#ASMSTART
3026 ; GFX90A-NEXT:    ; use s8
3027 ; GFX90A-NEXT:    ;;#ASMEND
3028 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3030 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__u_1:
3031 ; GFX940:       ; %bb.0:
3032 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3033 ; GFX940-NEXT:    ;;#ASMSTART
3034 ; GFX940-NEXT:    ; def s[8:9]
3035 ; GFX940-NEXT:    ;;#ASMEND
3036 ; GFX940-NEXT:    s_nop 0
3037 ; GFX940-NEXT:    ;;#ASMSTART
3038 ; GFX940-NEXT:    ; use s8
3039 ; GFX940-NEXT:    ;;#ASMEND
3040 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3041   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3042   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3043   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 1>
3044   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3045   ret void
3048 define void @s_shuffle_v2i16_v3i16__0_1() {
3049 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_1:
3050 ; GFX900:       ; %bb.0:
3051 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3052 ; GFX900-NEXT:    ;;#ASMSTART
3053 ; GFX900-NEXT:    ; def s[8:9]
3054 ; GFX900-NEXT:    ;;#ASMEND
3055 ; GFX900-NEXT:    ;;#ASMSTART
3056 ; GFX900-NEXT:    ; use s8
3057 ; GFX900-NEXT:    ;;#ASMEND
3058 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3060 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_1:
3061 ; GFX90A:       ; %bb.0:
3062 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3063 ; GFX90A-NEXT:    ;;#ASMSTART
3064 ; GFX90A-NEXT:    ; def s[8:9]
3065 ; GFX90A-NEXT:    ;;#ASMEND
3066 ; GFX90A-NEXT:    ;;#ASMSTART
3067 ; GFX90A-NEXT:    ; use s8
3068 ; GFX90A-NEXT:    ;;#ASMEND
3069 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3071 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__0_1:
3072 ; GFX940:       ; %bb.0:
3073 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3074 ; GFX940-NEXT:    ;;#ASMSTART
3075 ; GFX940-NEXT:    ; def s[8:9]
3076 ; GFX940-NEXT:    ;;#ASMEND
3077 ; GFX940-NEXT:    s_nop 0
3078 ; GFX940-NEXT:    ;;#ASMSTART
3079 ; GFX940-NEXT:    ; use s8
3080 ; GFX940-NEXT:    ;;#ASMEND
3081 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3082   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3083   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3084   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 1>
3085   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3086   ret void
3089 define void @s_shuffle_v2i16_v3i16__1_1() {
3090 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_1:
3091 ; GFX900:       ; %bb.0:
3092 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3093 ; GFX900-NEXT:    ;;#ASMSTART
3094 ; GFX900-NEXT:    ; def s[4:5]
3095 ; GFX900-NEXT:    ;;#ASMEND
3096 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
3097 ; GFX900-NEXT:    ;;#ASMSTART
3098 ; GFX900-NEXT:    ; use s8
3099 ; GFX900-NEXT:    ;;#ASMEND
3100 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3102 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_1:
3103 ; GFX90A:       ; %bb.0:
3104 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3105 ; GFX90A-NEXT:    ;;#ASMSTART
3106 ; GFX90A-NEXT:    ; def s[4:5]
3107 ; GFX90A-NEXT:    ;;#ASMEND
3108 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
3109 ; GFX90A-NEXT:    ;;#ASMSTART
3110 ; GFX90A-NEXT:    ; use s8
3111 ; GFX90A-NEXT:    ;;#ASMEND
3112 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3114 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__1_1:
3115 ; GFX940:       ; %bb.0:
3116 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3117 ; GFX940-NEXT:    ;;#ASMSTART
3118 ; GFX940-NEXT:    ; def s[0:1]
3119 ; GFX940-NEXT:    ;;#ASMEND
3120 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
3121 ; GFX940-NEXT:    ;;#ASMSTART
3122 ; GFX940-NEXT:    ; use s8
3123 ; GFX940-NEXT:    ;;#ASMEND
3124 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3125   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3126   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3127   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 1>
3128   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3129   ret void
3132 define void @s_shuffle_v2i16_v3i16__2_1() {
3133 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_1:
3134 ; GFX900:       ; %bb.0:
3135 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3136 ; GFX900-NEXT:    ;;#ASMSTART
3137 ; GFX900-NEXT:    ; def s[4:5]
3138 ; GFX900-NEXT:    ;;#ASMEND
3139 ; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s5, s4
3140 ; GFX900-NEXT:    ;;#ASMSTART
3141 ; GFX900-NEXT:    ; use s8
3142 ; GFX900-NEXT:    ;;#ASMEND
3143 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3145 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_1:
3146 ; GFX90A:       ; %bb.0:
3147 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3148 ; GFX90A-NEXT:    ;;#ASMSTART
3149 ; GFX90A-NEXT:    ; def s[4:5]
3150 ; GFX90A-NEXT:    ;;#ASMEND
3151 ; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s5, s4
3152 ; GFX90A-NEXT:    ;;#ASMSTART
3153 ; GFX90A-NEXT:    ; use s8
3154 ; GFX90A-NEXT:    ;;#ASMEND
3155 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3157 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__2_1:
3158 ; GFX940:       ; %bb.0:
3159 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3160 ; GFX940-NEXT:    ;;#ASMSTART
3161 ; GFX940-NEXT:    ; def s[0:1]
3162 ; GFX940-NEXT:    ;;#ASMEND
3163 ; GFX940-NEXT:    s_pack_lh_b32_b16 s8, s1, s0
3164 ; GFX940-NEXT:    ;;#ASMSTART
3165 ; GFX940-NEXT:    ; use s8
3166 ; GFX940-NEXT:    ;;#ASMEND
3167 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3168   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3169   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3170   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 1>
3171   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3172   ret void
3175 define void @s_shuffle_v2i16_v3i16__3_1() {
3176 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__3_1:
3177 ; GFX900:       ; %bb.0:
3178 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3179 ; GFX900-NEXT:    ;;#ASMSTART
3180 ; GFX900-NEXT:    ; def s[8:9]
3181 ; GFX900-NEXT:    ;;#ASMEND
3182 ; GFX900-NEXT:    ;;#ASMSTART
3183 ; GFX900-NEXT:    ; use s8
3184 ; GFX900-NEXT:    ;;#ASMEND
3185 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3187 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__3_1:
3188 ; GFX90A:       ; %bb.0:
3189 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3190 ; GFX90A-NEXT:    ;;#ASMSTART
3191 ; GFX90A-NEXT:    ; def s[8:9]
3192 ; GFX90A-NEXT:    ;;#ASMEND
3193 ; GFX90A-NEXT:    ;;#ASMSTART
3194 ; GFX90A-NEXT:    ; use s8
3195 ; GFX90A-NEXT:    ;;#ASMEND
3196 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3198 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__3_1:
3199 ; GFX940:       ; %bb.0:
3200 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3201 ; GFX940-NEXT:    ;;#ASMSTART
3202 ; GFX940-NEXT:    ; def s[8:9]
3203 ; GFX940-NEXT:    ;;#ASMEND
3204 ; GFX940-NEXT:    s_nop 0
3205 ; GFX940-NEXT:    ;;#ASMSTART
3206 ; GFX940-NEXT:    ; use s8
3207 ; GFX940-NEXT:    ;;#ASMEND
3208 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3209   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3210   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3211   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 1>
3212   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3213   ret void
3216 define void @s_shuffle_v2i16_v3i16__4_1() {
3217 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_1:
3218 ; GFX900:       ; %bb.0:
3219 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3220 ; GFX900-NEXT:    ;;#ASMSTART
3221 ; GFX900-NEXT:    ; def s[4:5]
3222 ; GFX900-NEXT:    ;;#ASMEND
3223 ; GFX900-NEXT:    ;;#ASMSTART
3224 ; GFX900-NEXT:    ; def s[6:7]
3225 ; GFX900-NEXT:    ;;#ASMEND
3226 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s6, s4
3227 ; GFX900-NEXT:    ;;#ASMSTART
3228 ; GFX900-NEXT:    ; use s8
3229 ; GFX900-NEXT:    ;;#ASMEND
3230 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3232 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_1:
3233 ; GFX90A:       ; %bb.0:
3234 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3235 ; GFX90A-NEXT:    ;;#ASMSTART
3236 ; GFX90A-NEXT:    ; def s[4:5]
3237 ; GFX90A-NEXT:    ;;#ASMEND
3238 ; GFX90A-NEXT:    ;;#ASMSTART
3239 ; GFX90A-NEXT:    ; def s[6:7]
3240 ; GFX90A-NEXT:    ;;#ASMEND
3241 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s6, s4
3242 ; GFX90A-NEXT:    ;;#ASMSTART
3243 ; GFX90A-NEXT:    ; use s8
3244 ; GFX90A-NEXT:    ;;#ASMEND
3245 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3247 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__4_1:
3248 ; GFX940:       ; %bb.0:
3249 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3250 ; GFX940-NEXT:    ;;#ASMSTART
3251 ; GFX940-NEXT:    ; def s[0:1]
3252 ; GFX940-NEXT:    ;;#ASMEND
3253 ; GFX940-NEXT:    ;;#ASMSTART
3254 ; GFX940-NEXT:    ; def s[2:3]
3255 ; GFX940-NEXT:    ;;#ASMEND
3256 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s2, s0
3257 ; GFX940-NEXT:    ;;#ASMSTART
3258 ; GFX940-NEXT:    ; use s8
3259 ; GFX940-NEXT:    ;;#ASMEND
3260 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3261   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3262   %vec1 = call <4 x i16> asm "; def $0", "=s"()
3263   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3264   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3265   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 1>
3266   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3267   ret void
3270 define void @s_shuffle_v2i16_v3i16__u_2() {
3271 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__u_2:
3272 ; GFX900:       ; %bb.0:
3273 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3274 ; GFX900-NEXT:    ;;#ASMSTART
3275 ; GFX900-NEXT:    ; def s[4:5]
3276 ; GFX900-NEXT:    ;;#ASMEND
3277 ; GFX900-NEXT:    s_lshl_b32 s8, s5, 16
3278 ; GFX900-NEXT:    ;;#ASMSTART
3279 ; GFX900-NEXT:    ; use s8
3280 ; GFX900-NEXT:    ;;#ASMEND
3281 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3283 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__u_2:
3284 ; GFX90A:       ; %bb.0:
3285 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3286 ; GFX90A-NEXT:    ;;#ASMSTART
3287 ; GFX90A-NEXT:    ; def s[4:5]
3288 ; GFX90A-NEXT:    ;;#ASMEND
3289 ; GFX90A-NEXT:    s_lshl_b32 s8, s5, 16
3290 ; GFX90A-NEXT:    ;;#ASMSTART
3291 ; GFX90A-NEXT:    ; use s8
3292 ; GFX90A-NEXT:    ;;#ASMEND
3293 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3295 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__u_2:
3296 ; GFX940:       ; %bb.0:
3297 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3298 ; GFX940-NEXT:    ;;#ASMSTART
3299 ; GFX940-NEXT:    ; def s[0:1]
3300 ; GFX940-NEXT:    ;;#ASMEND
3301 ; GFX940-NEXT:    s_lshl_b32 s8, s1, 16
3302 ; GFX940-NEXT:    ;;#ASMSTART
3303 ; GFX940-NEXT:    ; use s8
3304 ; GFX940-NEXT:    ;;#ASMEND
3305 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3306   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3307   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3308   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 2>
3309   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3310   ret void
3313 define void @s_shuffle_v2i16_v3i16__0_2() {
3314 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_2:
3315 ; GFX900:       ; %bb.0:
3316 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3317 ; GFX900-NEXT:    ;;#ASMSTART
3318 ; GFX900-NEXT:    ; def s[4:5]
3319 ; GFX900-NEXT:    ;;#ASMEND
3320 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s5
3321 ; GFX900-NEXT:    ;;#ASMSTART
3322 ; GFX900-NEXT:    ; use s8
3323 ; GFX900-NEXT:    ;;#ASMEND
3324 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3326 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_2:
3327 ; GFX90A:       ; %bb.0:
3328 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3329 ; GFX90A-NEXT:    ;;#ASMSTART
3330 ; GFX90A-NEXT:    ; def s[4:5]
3331 ; GFX90A-NEXT:    ;;#ASMEND
3332 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s5
3333 ; GFX90A-NEXT:    ;;#ASMSTART
3334 ; GFX90A-NEXT:    ; use s8
3335 ; GFX90A-NEXT:    ;;#ASMEND
3336 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3338 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__0_2:
3339 ; GFX940:       ; %bb.0:
3340 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3341 ; GFX940-NEXT:    ;;#ASMSTART
3342 ; GFX940-NEXT:    ; def s[0:1]
3343 ; GFX940-NEXT:    ;;#ASMEND
3344 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s1
3345 ; GFX940-NEXT:    ;;#ASMSTART
3346 ; GFX940-NEXT:    ; use s8
3347 ; GFX940-NEXT:    ;;#ASMEND
3348 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3349   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3350   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3351   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 2>
3352   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3353   ret void
3356 define void @s_shuffle_v2i16_v3i16__1_2() {
3357 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_2:
3358 ; GFX900:       ; %bb.0:
3359 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3360 ; GFX900-NEXT:    ;;#ASMSTART
3361 ; GFX900-NEXT:    ; def s[4:5]
3362 ; GFX900-NEXT:    ;;#ASMEND
3363 ; GFX900-NEXT:    s_lshr_b32 s4, s4, 16
3364 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s5
3365 ; GFX900-NEXT:    ;;#ASMSTART
3366 ; GFX900-NEXT:    ; use s8
3367 ; GFX900-NEXT:    ;;#ASMEND
3368 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3370 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_2:
3371 ; GFX90A:       ; %bb.0:
3372 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3373 ; GFX90A-NEXT:    ;;#ASMSTART
3374 ; GFX90A-NEXT:    ; def s[4:5]
3375 ; GFX90A-NEXT:    ;;#ASMEND
3376 ; GFX90A-NEXT:    s_lshr_b32 s4, s4, 16
3377 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s5
3378 ; GFX90A-NEXT:    ;;#ASMSTART
3379 ; GFX90A-NEXT:    ; use s8
3380 ; GFX90A-NEXT:    ;;#ASMEND
3381 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3383 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__1_2:
3384 ; GFX940:       ; %bb.0:
3385 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3386 ; GFX940-NEXT:    ;;#ASMSTART
3387 ; GFX940-NEXT:    ; def s[0:1]
3388 ; GFX940-NEXT:    ;;#ASMEND
3389 ; GFX940-NEXT:    s_lshr_b32 s0, s0, 16
3390 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s1
3391 ; GFX940-NEXT:    ;;#ASMSTART
3392 ; GFX940-NEXT:    ; use s8
3393 ; GFX940-NEXT:    ;;#ASMEND
3394 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3395   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3396   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3397   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 2>
3398   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3399   ret void
3402 define void @s_shuffle_v2i16_v3i16__2_2() {
3403 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_2:
3404 ; GFX900:       ; %bb.0:
3405 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3406 ; GFX900-NEXT:    ;;#ASMSTART
3407 ; GFX900-NEXT:    ; def s[4:5]
3408 ; GFX900-NEXT:    ;;#ASMEND
3409 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s5
3410 ; GFX900-NEXT:    ;;#ASMSTART
3411 ; GFX900-NEXT:    ; use s8
3412 ; GFX900-NEXT:    ;;#ASMEND
3413 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3415 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_2:
3416 ; GFX90A:       ; %bb.0:
3417 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3418 ; GFX90A-NEXT:    ;;#ASMSTART
3419 ; GFX90A-NEXT:    ; def s[4:5]
3420 ; GFX90A-NEXT:    ;;#ASMEND
3421 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s5
3422 ; GFX90A-NEXT:    ;;#ASMSTART
3423 ; GFX90A-NEXT:    ; use s8
3424 ; GFX90A-NEXT:    ;;#ASMEND
3425 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3427 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__2_2:
3428 ; GFX940:       ; %bb.0:
3429 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3430 ; GFX940-NEXT:    ;;#ASMSTART
3431 ; GFX940-NEXT:    ; def s[0:1]
3432 ; GFX940-NEXT:    ;;#ASMEND
3433 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s1
3434 ; GFX940-NEXT:    ;;#ASMSTART
3435 ; GFX940-NEXT:    ; use s8
3436 ; GFX940-NEXT:    ;;#ASMEND
3437 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3438   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3439   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3440   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 2>
3441   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3442   ret void
3445 define void @s_shuffle_v2i16_v3i16__3_2() {
3446 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__3_2:
3447 ; GFX900:       ; %bb.0:
3448 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3449 ; GFX900-NEXT:    ;;#ASMSTART
3450 ; GFX900-NEXT:    ; def s[4:5]
3451 ; GFX900-NEXT:    ;;#ASMEND
3452 ; GFX900-NEXT:    s_lshl_b32 s8, s5, 16
3453 ; GFX900-NEXT:    ;;#ASMSTART
3454 ; GFX900-NEXT:    ; use s8
3455 ; GFX900-NEXT:    ;;#ASMEND
3456 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3458 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__3_2:
3459 ; GFX90A:       ; %bb.0:
3460 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3461 ; GFX90A-NEXT:    ;;#ASMSTART
3462 ; GFX90A-NEXT:    ; def s[4:5]
3463 ; GFX90A-NEXT:    ;;#ASMEND
3464 ; GFX90A-NEXT:    s_lshl_b32 s8, s5, 16
3465 ; GFX90A-NEXT:    ;;#ASMSTART
3466 ; GFX90A-NEXT:    ; use s8
3467 ; GFX90A-NEXT:    ;;#ASMEND
3468 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3470 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__3_2:
3471 ; GFX940:       ; %bb.0:
3472 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3473 ; GFX940-NEXT:    ;;#ASMSTART
3474 ; GFX940-NEXT:    ; def s[0:1]
3475 ; GFX940-NEXT:    ;;#ASMEND
3476 ; GFX940-NEXT:    s_lshl_b32 s8, s1, 16
3477 ; GFX940-NEXT:    ;;#ASMSTART
3478 ; GFX940-NEXT:    ; use s8
3479 ; GFX940-NEXT:    ;;#ASMEND
3480 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3481   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3482   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3483   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 2>
3484   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3485   ret void
3488 define void @s_shuffle_v2i16_v3i16__4_2() {
3489 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_2:
3490 ; GFX900:       ; %bb.0:
3491 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3492 ; GFX900-NEXT:    ;;#ASMSTART
3493 ; GFX900-NEXT:    ; def s[4:5]
3494 ; GFX900-NEXT:    ;;#ASMEND
3495 ; GFX900-NEXT:    ;;#ASMSTART
3496 ; GFX900-NEXT:    ; def s[6:7]
3497 ; GFX900-NEXT:    ;;#ASMEND
3498 ; GFX900-NEXT:    s_lshr_b32 s4, s6, 16
3499 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s5
3500 ; GFX900-NEXT:    ;;#ASMSTART
3501 ; GFX900-NEXT:    ; use s8
3502 ; GFX900-NEXT:    ;;#ASMEND
3503 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3505 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_2:
3506 ; GFX90A:       ; %bb.0:
3507 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3508 ; GFX90A-NEXT:    ;;#ASMSTART
3509 ; GFX90A-NEXT:    ; def s[4:5]
3510 ; GFX90A-NEXT:    ;;#ASMEND
3511 ; GFX90A-NEXT:    ;;#ASMSTART
3512 ; GFX90A-NEXT:    ; def s[6:7]
3513 ; GFX90A-NEXT:    ;;#ASMEND
3514 ; GFX90A-NEXT:    s_lshr_b32 s4, s6, 16
3515 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s5
3516 ; GFX90A-NEXT:    ;;#ASMSTART
3517 ; GFX90A-NEXT:    ; use s8
3518 ; GFX90A-NEXT:    ;;#ASMEND
3519 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3521 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__4_2:
3522 ; GFX940:       ; %bb.0:
3523 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3524 ; GFX940-NEXT:    ;;#ASMSTART
3525 ; GFX940-NEXT:    ; def s[0:1]
3526 ; GFX940-NEXT:    ;;#ASMEND
3527 ; GFX940-NEXT:    ;;#ASMSTART
3528 ; GFX940-NEXT:    ; def s[2:3]
3529 ; GFX940-NEXT:    ;;#ASMEND
3530 ; GFX940-NEXT:    s_lshr_b32 s0, s2, 16
3531 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s1
3532 ; GFX940-NEXT:    ;;#ASMSTART
3533 ; GFX940-NEXT:    ; use s8
3534 ; GFX940-NEXT:    ;;#ASMEND
3535 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3536   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3537   %vec1 = call <4 x i16> asm "; def $0", "=s"()
3538   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3539   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3540   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 2>
3541   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3542   ret void
3545 define void @s_shuffle_v2i16_v3i16__u_3() {
3546 ; GFX9-LABEL: s_shuffle_v2i16_v3i16__u_3:
3547 ; GFX9:       ; %bb.0:
3548 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3549 ; GFX9-NEXT:    ;;#ASMSTART
3550 ; GFX9-NEXT:    ; use s8
3551 ; GFX9-NEXT:    ;;#ASMEND
3552 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3553   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3554   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3555   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 poison, i32 3>
3556   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3557   ret void
3560 define void @s_shuffle_v2i16_v3i16__0_3() {
3561 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_3:
3562 ; GFX900:       ; %bb.0:
3563 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3564 ; GFX900-NEXT:    ;;#ASMSTART
3565 ; GFX900-NEXT:    ; def s[8:9]
3566 ; GFX900-NEXT:    ;;#ASMEND
3567 ; GFX900-NEXT:    ;;#ASMSTART
3568 ; GFX900-NEXT:    ; use s8
3569 ; GFX900-NEXT:    ;;#ASMEND
3570 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3572 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_3:
3573 ; GFX90A:       ; %bb.0:
3574 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3575 ; GFX90A-NEXT:    ;;#ASMSTART
3576 ; GFX90A-NEXT:    ; def s[8:9]
3577 ; GFX90A-NEXT:    ;;#ASMEND
3578 ; GFX90A-NEXT:    ;;#ASMSTART
3579 ; GFX90A-NEXT:    ; use s8
3580 ; GFX90A-NEXT:    ;;#ASMEND
3581 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3583 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__0_3:
3584 ; GFX940:       ; %bb.0:
3585 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3586 ; GFX940-NEXT:    ;;#ASMSTART
3587 ; GFX940-NEXT:    ; def s[8:9]
3588 ; GFX940-NEXT:    ;;#ASMEND
3589 ; GFX940-NEXT:    s_nop 0
3590 ; GFX940-NEXT:    ;;#ASMSTART
3591 ; GFX940-NEXT:    ; use s8
3592 ; GFX940-NEXT:    ;;#ASMEND
3593 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3594   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3595   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3596   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 0, i32 3>
3597   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3598   ret void
3601 define void @s_shuffle_v2i16_v3i16__1_3() {
3602 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_3:
3603 ; GFX900:       ; %bb.0:
3604 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3605 ; GFX900-NEXT:    ;;#ASMSTART
3606 ; GFX900-NEXT:    ; def s[4:5]
3607 ; GFX900-NEXT:    ;;#ASMEND
3608 ; GFX900-NEXT:    s_lshr_b32 s8, s4, 16
3609 ; GFX900-NEXT:    ;;#ASMSTART
3610 ; GFX900-NEXT:    ; use s8
3611 ; GFX900-NEXT:    ;;#ASMEND
3612 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3614 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_3:
3615 ; GFX90A:       ; %bb.0:
3616 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3617 ; GFX90A-NEXT:    ;;#ASMSTART
3618 ; GFX90A-NEXT:    ; def s[4:5]
3619 ; GFX90A-NEXT:    ;;#ASMEND
3620 ; GFX90A-NEXT:    s_lshr_b32 s8, s4, 16
3621 ; GFX90A-NEXT:    ;;#ASMSTART
3622 ; GFX90A-NEXT:    ; use s8
3623 ; GFX90A-NEXT:    ;;#ASMEND
3624 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3626 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__1_3:
3627 ; GFX940:       ; %bb.0:
3628 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3629 ; GFX940-NEXT:    ;;#ASMSTART
3630 ; GFX940-NEXT:    ; def s[0:1]
3631 ; GFX940-NEXT:    ;;#ASMEND
3632 ; GFX940-NEXT:    s_lshr_b32 s8, s0, 16
3633 ; GFX940-NEXT:    ;;#ASMSTART
3634 ; GFX940-NEXT:    ; use s8
3635 ; GFX940-NEXT:    ;;#ASMEND
3636 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3637   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3638   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3639   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 1, i32 3>
3640   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3641   ret void
3644 define void @s_shuffle_v2i16_v3i16__2_3() {
3645 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_3:
3646 ; GFX900:       ; %bb.0:
3647 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3648 ; GFX900-NEXT:    ;;#ASMSTART
3649 ; GFX900-NEXT:    ; def s[4:5]
3650 ; GFX900-NEXT:    ;;#ASMEND
3651 ; GFX900-NEXT:    s_mov_b32 s8, s5
3652 ; GFX900-NEXT:    ;;#ASMSTART
3653 ; GFX900-NEXT:    ; use s8
3654 ; GFX900-NEXT:    ;;#ASMEND
3655 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3657 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_3:
3658 ; GFX90A:       ; %bb.0:
3659 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3660 ; GFX90A-NEXT:    ;;#ASMSTART
3661 ; GFX90A-NEXT:    ; def s[4:5]
3662 ; GFX90A-NEXT:    ;;#ASMEND
3663 ; GFX90A-NEXT:    s_mov_b32 s8, s5
3664 ; GFX90A-NEXT:    ;;#ASMSTART
3665 ; GFX90A-NEXT:    ; use s8
3666 ; GFX90A-NEXT:    ;;#ASMEND
3667 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3669 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__2_3:
3670 ; GFX940:       ; %bb.0:
3671 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3672 ; GFX940-NEXT:    ;;#ASMSTART
3673 ; GFX940-NEXT:    ; def s[0:1]
3674 ; GFX940-NEXT:    ;;#ASMEND
3675 ; GFX940-NEXT:    s_mov_b32 s8, s1
3676 ; GFX940-NEXT:    ;;#ASMSTART
3677 ; GFX940-NEXT:    ; use s8
3678 ; GFX940-NEXT:    ;;#ASMEND
3679 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3680   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3681   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3682   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 2, i32 3>
3683   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3684   ret void
3687 define void @s_shuffle_v2i16_v3i16__3_3() {
3688 ; GFX9-LABEL: s_shuffle_v2i16_v3i16__3_3:
3689 ; GFX9:       ; %bb.0:
3690 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3691 ; GFX9-NEXT:    ;;#ASMSTART
3692 ; GFX9-NEXT:    ; use s8
3693 ; GFX9-NEXT:    ;;#ASMEND
3694 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
3695   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3696   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3697   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> poison, <2 x i32> <i32 3, i32 3>
3698   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3699   ret void
3702 define void @s_shuffle_v2i16_v3i16__4_3() {
3703 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_3:
3704 ; GFX900:       ; %bb.0:
3705 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3706 ; GFX900-NEXT:    ;;#ASMSTART
3707 ; GFX900-NEXT:    ; def s[4:5]
3708 ; GFX900-NEXT:    ;;#ASMEND
3709 ; GFX900-NEXT:    s_lshr_b32 s5, s4, 16
3710 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
3711 ; GFX900-NEXT:    ;;#ASMSTART
3712 ; GFX900-NEXT:    ; use s8
3713 ; GFX900-NEXT:    ;;#ASMEND
3714 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3716 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_3:
3717 ; GFX90A:       ; %bb.0:
3718 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3719 ; GFX90A-NEXT:    ;;#ASMSTART
3720 ; GFX90A-NEXT:    ; def s[4:5]
3721 ; GFX90A-NEXT:    ;;#ASMEND
3722 ; GFX90A-NEXT:    s_lshr_b32 s5, s4, 16
3723 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s4
3724 ; GFX90A-NEXT:    ;;#ASMSTART
3725 ; GFX90A-NEXT:    ; use s8
3726 ; GFX90A-NEXT:    ;;#ASMEND
3727 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3729 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__4_3:
3730 ; GFX940:       ; %bb.0:
3731 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3732 ; GFX940-NEXT:    ;;#ASMSTART
3733 ; GFX940-NEXT:    ; def s[0:1]
3734 ; GFX940-NEXT:    ;;#ASMEND
3735 ; GFX940-NEXT:    s_lshr_b32 s1, s0, 16
3736 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s0
3737 ; GFX940-NEXT:    ;;#ASMSTART
3738 ; GFX940-NEXT:    ; use s8
3739 ; GFX940-NEXT:    ;;#ASMEND
3740 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3741   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3742   %vec1 = call <4 x i16> asm "; def $0", "=s"()
3743   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3744   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3745   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 3>
3746   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3747   ret void
3750 define void @s_shuffle_v2i16_v3i16__u_4() {
3751 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__u_4:
3752 ; GFX900:       ; %bb.0:
3753 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3754 ; GFX900-NEXT:    ;;#ASMSTART
3755 ; GFX900-NEXT:    ; def s[8:9]
3756 ; GFX900-NEXT:    ;;#ASMEND
3757 ; GFX900-NEXT:    ;;#ASMSTART
3758 ; GFX900-NEXT:    ; use s8
3759 ; GFX900-NEXT:    ;;#ASMEND
3760 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3762 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__u_4:
3763 ; GFX90A:       ; %bb.0:
3764 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3765 ; GFX90A-NEXT:    ;;#ASMSTART
3766 ; GFX90A-NEXT:    ; def s[8:9]
3767 ; GFX90A-NEXT:    ;;#ASMEND
3768 ; GFX90A-NEXT:    ;;#ASMSTART
3769 ; GFX90A-NEXT:    ; use s8
3770 ; GFX90A-NEXT:    ;;#ASMEND
3771 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3773 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__u_4:
3774 ; GFX940:       ; %bb.0:
3775 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3776 ; GFX940-NEXT:    ;;#ASMSTART
3777 ; GFX940-NEXT:    ; def s[8:9]
3778 ; GFX940-NEXT:    ;;#ASMEND
3779 ; GFX940-NEXT:    s_nop 0
3780 ; GFX940-NEXT:    ;;#ASMSTART
3781 ; GFX940-NEXT:    ; use s8
3782 ; GFX940-NEXT:    ;;#ASMEND
3783 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3784   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3785   %vec1 = call <4 x i16> asm "; def $0", "=s"()
3786   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3787   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3788   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 poison, i32 4>
3789   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3790   ret void
3793 define void @s_shuffle_v2i16_v3i16__0_4() {
3794 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_4:
3795 ; GFX900:       ; %bb.0:
3796 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3797 ; GFX900-NEXT:    ;;#ASMSTART
3798 ; GFX900-NEXT:    ; def s[4:5]
3799 ; GFX900-NEXT:    ;;#ASMEND
3800 ; GFX900-NEXT:    ;;#ASMSTART
3801 ; GFX900-NEXT:    ; def s[6:7]
3802 ; GFX900-NEXT:    ;;#ASMEND
3803 ; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s4, s6
3804 ; GFX900-NEXT:    ;;#ASMSTART
3805 ; GFX900-NEXT:    ; use s8
3806 ; GFX900-NEXT:    ;;#ASMEND
3807 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3809 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_4:
3810 ; GFX90A:       ; %bb.0:
3811 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3812 ; GFX90A-NEXT:    ;;#ASMSTART
3813 ; GFX90A-NEXT:    ; def s[4:5]
3814 ; GFX90A-NEXT:    ;;#ASMEND
3815 ; GFX90A-NEXT:    ;;#ASMSTART
3816 ; GFX90A-NEXT:    ; def s[6:7]
3817 ; GFX90A-NEXT:    ;;#ASMEND
3818 ; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s4, s6
3819 ; GFX90A-NEXT:    ;;#ASMSTART
3820 ; GFX90A-NEXT:    ; use s8
3821 ; GFX90A-NEXT:    ;;#ASMEND
3822 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3824 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__0_4:
3825 ; GFX940:       ; %bb.0:
3826 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3827 ; GFX940-NEXT:    ;;#ASMSTART
3828 ; GFX940-NEXT:    ; def s[0:1]
3829 ; GFX940-NEXT:    ;;#ASMEND
3830 ; GFX940-NEXT:    ;;#ASMSTART
3831 ; GFX940-NEXT:    ; def s[2:3]
3832 ; GFX940-NEXT:    ;;#ASMEND
3833 ; GFX940-NEXT:    s_pack_lh_b32_b16 s8, s0, s2
3834 ; GFX940-NEXT:    ;;#ASMSTART
3835 ; GFX940-NEXT:    ; use s8
3836 ; GFX940-NEXT:    ;;#ASMEND
3837 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3838   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3839   %vec1 = call <4 x i16> asm "; def $0", "=s"()
3840   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3841   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3842   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 0, i32 4>
3843   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3844   ret void
3847 define void @s_shuffle_v2i16_v3i16__1_4() {
3848 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_4:
3849 ; GFX900:       ; %bb.0:
3850 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3851 ; GFX900-NEXT:    ;;#ASMSTART
3852 ; GFX900-NEXT:    ; def s[4:5]
3853 ; GFX900-NEXT:    ;;#ASMEND
3854 ; GFX900-NEXT:    ;;#ASMSTART
3855 ; GFX900-NEXT:    ; def s[6:7]
3856 ; GFX900-NEXT:    ;;#ASMEND
3857 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s6
3858 ; GFX900-NEXT:    ;;#ASMSTART
3859 ; GFX900-NEXT:    ; use s8
3860 ; GFX900-NEXT:    ;;#ASMEND
3861 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3863 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_4:
3864 ; GFX90A:       ; %bb.0:
3865 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3866 ; GFX90A-NEXT:    ;;#ASMSTART
3867 ; GFX90A-NEXT:    ; def s[4:5]
3868 ; GFX90A-NEXT:    ;;#ASMEND
3869 ; GFX90A-NEXT:    ;;#ASMSTART
3870 ; GFX90A-NEXT:    ; def s[6:7]
3871 ; GFX90A-NEXT:    ;;#ASMEND
3872 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s6
3873 ; GFX90A-NEXT:    ;;#ASMSTART
3874 ; GFX90A-NEXT:    ; use s8
3875 ; GFX90A-NEXT:    ;;#ASMEND
3876 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3878 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__1_4:
3879 ; GFX940:       ; %bb.0:
3880 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3881 ; GFX940-NEXT:    ;;#ASMSTART
3882 ; GFX940-NEXT:    ; def s[0:1]
3883 ; GFX940-NEXT:    ;;#ASMEND
3884 ; GFX940-NEXT:    ;;#ASMSTART
3885 ; GFX940-NEXT:    ; def s[2:3]
3886 ; GFX940-NEXT:    ;;#ASMEND
3887 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s2
3888 ; GFX940-NEXT:    ;;#ASMSTART
3889 ; GFX940-NEXT:    ; use s8
3890 ; GFX940-NEXT:    ;;#ASMEND
3891 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3892   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3893   %vec1 = call <4 x i16> asm "; def $0", "=s"()
3894   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3895   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3896   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 1, i32 4>
3897   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3898   ret void
3901 define void @s_shuffle_v2i16_v3i16__2_4() {
3902 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_4:
3903 ; GFX900:       ; %bb.0:
3904 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3905 ; GFX900-NEXT:    ;;#ASMSTART
3906 ; GFX900-NEXT:    ; def s[4:5]
3907 ; GFX900-NEXT:    ;;#ASMEND
3908 ; GFX900-NEXT:    ;;#ASMSTART
3909 ; GFX900-NEXT:    ; def s[6:7]
3910 ; GFX900-NEXT:    ;;#ASMEND
3911 ; GFX900-NEXT:    s_pack_lh_b32_b16 s8, s5, s6
3912 ; GFX900-NEXT:    ;;#ASMSTART
3913 ; GFX900-NEXT:    ; use s8
3914 ; GFX900-NEXT:    ;;#ASMEND
3915 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3917 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_4:
3918 ; GFX90A:       ; %bb.0:
3919 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3920 ; GFX90A-NEXT:    ;;#ASMSTART
3921 ; GFX90A-NEXT:    ; def s[4:5]
3922 ; GFX90A-NEXT:    ;;#ASMEND
3923 ; GFX90A-NEXT:    ;;#ASMSTART
3924 ; GFX90A-NEXT:    ; def s[6:7]
3925 ; GFX90A-NEXT:    ;;#ASMEND
3926 ; GFX90A-NEXT:    s_pack_lh_b32_b16 s8, s5, s6
3927 ; GFX90A-NEXT:    ;;#ASMSTART
3928 ; GFX90A-NEXT:    ; use s8
3929 ; GFX90A-NEXT:    ;;#ASMEND
3930 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3932 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__2_4:
3933 ; GFX940:       ; %bb.0:
3934 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3935 ; GFX940-NEXT:    ;;#ASMSTART
3936 ; GFX940-NEXT:    ; def s[0:1]
3937 ; GFX940-NEXT:    ;;#ASMEND
3938 ; GFX940-NEXT:    ;;#ASMSTART
3939 ; GFX940-NEXT:    ; def s[2:3]
3940 ; GFX940-NEXT:    ;;#ASMEND
3941 ; GFX940-NEXT:    s_pack_lh_b32_b16 s8, s1, s2
3942 ; GFX940-NEXT:    ;;#ASMSTART
3943 ; GFX940-NEXT:    ; use s8
3944 ; GFX940-NEXT:    ;;#ASMEND
3945 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3946   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3947   %vec1 = call <4 x i16> asm "; def $0", "=s"()
3948   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3949   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3950   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 2, i32 4>
3951   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3952   ret void
3955 define void @s_shuffle_v2i16_v3i16__3_4() {
3956 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__3_4:
3957 ; GFX900:       ; %bb.0:
3958 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3959 ; GFX900-NEXT:    ;;#ASMSTART
3960 ; GFX900-NEXT:    ; def s[8:9]
3961 ; GFX900-NEXT:    ;;#ASMEND
3962 ; GFX900-NEXT:    ;;#ASMSTART
3963 ; GFX900-NEXT:    ; use s8
3964 ; GFX900-NEXT:    ;;#ASMEND
3965 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
3967 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__3_4:
3968 ; GFX90A:       ; %bb.0:
3969 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3970 ; GFX90A-NEXT:    ;;#ASMSTART
3971 ; GFX90A-NEXT:    ; def s[8:9]
3972 ; GFX90A-NEXT:    ;;#ASMEND
3973 ; GFX90A-NEXT:    ;;#ASMSTART
3974 ; GFX90A-NEXT:    ; use s8
3975 ; GFX90A-NEXT:    ;;#ASMEND
3976 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
3978 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__3_4:
3979 ; GFX940:       ; %bb.0:
3980 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
3981 ; GFX940-NEXT:    ;;#ASMSTART
3982 ; GFX940-NEXT:    ; def s[8:9]
3983 ; GFX940-NEXT:    ;;#ASMEND
3984 ; GFX940-NEXT:    s_nop 0
3985 ; GFX940-NEXT:    ;;#ASMSTART
3986 ; GFX940-NEXT:    ; use s8
3987 ; GFX940-NEXT:    ;;#ASMEND
3988 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
3989   %vec0 = call <4 x i16> asm "; def $0", "=s"()
3990   %vec1 = call <4 x i16> asm "; def $0", "=s"()
3991   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3992   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
3993   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 3, i32 4>
3994   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
3995   ret void
3998 define void @s_shuffle_v2i16_v3i16__4_4() {
3999 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_4:
4000 ; GFX900:       ; %bb.0:
4001 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4002 ; GFX900-NEXT:    ;;#ASMSTART
4003 ; GFX900-NEXT:    ; def s[4:5]
4004 ; GFX900-NEXT:    ;;#ASMEND
4005 ; GFX900-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
4006 ; GFX900-NEXT:    ;;#ASMSTART
4007 ; GFX900-NEXT:    ; use s8
4008 ; GFX900-NEXT:    ;;#ASMEND
4009 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4011 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_4:
4012 ; GFX90A:       ; %bb.0:
4013 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4014 ; GFX90A-NEXT:    ;;#ASMSTART
4015 ; GFX90A-NEXT:    ; def s[4:5]
4016 ; GFX90A-NEXT:    ;;#ASMEND
4017 ; GFX90A-NEXT:    s_pack_hh_b32_b16 s8, s4, s4
4018 ; GFX90A-NEXT:    ;;#ASMSTART
4019 ; GFX90A-NEXT:    ; use s8
4020 ; GFX90A-NEXT:    ;;#ASMEND
4021 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4023 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__4_4:
4024 ; GFX940:       ; %bb.0:
4025 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4026 ; GFX940-NEXT:    ;;#ASMSTART
4027 ; GFX940-NEXT:    ; def s[0:1]
4028 ; GFX940-NEXT:    ;;#ASMEND
4029 ; GFX940-NEXT:    s_pack_hh_b32_b16 s8, s0, s0
4030 ; GFX940-NEXT:    ;;#ASMSTART
4031 ; GFX940-NEXT:    ; use s8
4032 ; GFX940-NEXT:    ;;#ASMEND
4033 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4034   %vec0 = call <4 x i16> asm "; def $0", "=s"()
4035   %vec1 = call <4 x i16> asm "; def $0", "=s"()
4036   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4037   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4038   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 4>
4039   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
4040   ret void
4043 define void @s_shuffle_v2i16_v3i16__u_5() {
4044 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__u_5:
4045 ; GFX900:       ; %bb.0:
4046 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4047 ; GFX900-NEXT:    ;;#ASMSTART
4048 ; GFX900-NEXT:    ; def s[4:5]
4049 ; GFX900-NEXT:    ;;#ASMEND
4050 ; GFX900-NEXT:    s_lshl_b32 s8, s5, 16
4051 ; GFX900-NEXT:    ;;#ASMSTART
4052 ; GFX900-NEXT:    ; use s8
4053 ; GFX900-NEXT:    ;;#ASMEND
4054 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4056 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__u_5:
4057 ; GFX90A:       ; %bb.0:
4058 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4059 ; GFX90A-NEXT:    ;;#ASMSTART
4060 ; GFX90A-NEXT:    ; def s[4:5]
4061 ; GFX90A-NEXT:    ;;#ASMEND
4062 ; GFX90A-NEXT:    s_lshl_b32 s8, s5, 16
4063 ; GFX90A-NEXT:    ;;#ASMSTART
4064 ; GFX90A-NEXT:    ; use s8
4065 ; GFX90A-NEXT:    ;;#ASMEND
4066 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4068 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__u_5:
4069 ; GFX940:       ; %bb.0:
4070 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4071 ; GFX940-NEXT:    ;;#ASMSTART
4072 ; GFX940-NEXT:    ; def s[0:1]
4073 ; GFX940-NEXT:    ;;#ASMEND
4074 ; GFX940-NEXT:    s_lshl_b32 s8, s1, 16
4075 ; GFX940-NEXT:    ;;#ASMSTART
4076 ; GFX940-NEXT:    ; use s8
4077 ; GFX940-NEXT:    ;;#ASMEND
4078 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4079   %vec0 = call <4 x i16> asm "; def $0", "=s"()
4080   %vec1 = call <4 x i16> asm "; def $0", "=s"()
4081   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4082   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4083   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 poison, i32 5>
4084   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
4085   ret void
4088 define void @s_shuffle_v2i16_v3i16__0_5() {
4089 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__0_5:
4090 ; GFX900:       ; %bb.0:
4091 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4092 ; GFX900-NEXT:    ;;#ASMSTART
4093 ; GFX900-NEXT:    ; def s[4:5]
4094 ; GFX900-NEXT:    ;;#ASMEND
4095 ; GFX900-NEXT:    ;;#ASMSTART
4096 ; GFX900-NEXT:    ; def s[6:7]
4097 ; GFX900-NEXT:    ;;#ASMEND
4098 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s7
4099 ; GFX900-NEXT:    ;;#ASMSTART
4100 ; GFX900-NEXT:    ; use s8
4101 ; GFX900-NEXT:    ;;#ASMEND
4102 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4104 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__0_5:
4105 ; GFX90A:       ; %bb.0:
4106 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4107 ; GFX90A-NEXT:    ;;#ASMSTART
4108 ; GFX90A-NEXT:    ; def s[4:5]
4109 ; GFX90A-NEXT:    ;;#ASMEND
4110 ; GFX90A-NEXT:    ;;#ASMSTART
4111 ; GFX90A-NEXT:    ; def s[6:7]
4112 ; GFX90A-NEXT:    ;;#ASMEND
4113 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s7
4114 ; GFX90A-NEXT:    ;;#ASMSTART
4115 ; GFX90A-NEXT:    ; use s8
4116 ; GFX90A-NEXT:    ;;#ASMEND
4117 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4119 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__0_5:
4120 ; GFX940:       ; %bb.0:
4121 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4122 ; GFX940-NEXT:    ;;#ASMSTART
4123 ; GFX940-NEXT:    ; def s[0:1]
4124 ; GFX940-NEXT:    ;;#ASMEND
4125 ; GFX940-NEXT:    ;;#ASMSTART
4126 ; GFX940-NEXT:    ; def s[2:3]
4127 ; GFX940-NEXT:    ;;#ASMEND
4128 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s3
4129 ; GFX940-NEXT:    ;;#ASMSTART
4130 ; GFX940-NEXT:    ; use s8
4131 ; GFX940-NEXT:    ;;#ASMEND
4132 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4133   %vec0 = call <4 x i16> asm "; def $0", "=s"()
4134   %vec1 = call <4 x i16> asm "; def $0", "=s"()
4135   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4136   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4137   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 0, i32 5>
4138   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
4139   ret void
4142 define void @s_shuffle_v2i16_v3i16__1_5() {
4143 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__1_5:
4144 ; GFX900:       ; %bb.0:
4145 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4146 ; GFX900-NEXT:    ;;#ASMSTART
4147 ; GFX900-NEXT:    ; def s[4:5]
4148 ; GFX900-NEXT:    ;;#ASMEND
4149 ; GFX900-NEXT:    s_lshr_b32 s4, s4, 16
4150 ; GFX900-NEXT:    ;;#ASMSTART
4151 ; GFX900-NEXT:    ; def s[6:7]
4152 ; GFX900-NEXT:    ;;#ASMEND
4153 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s7
4154 ; GFX900-NEXT:    ;;#ASMSTART
4155 ; GFX900-NEXT:    ; use s8
4156 ; GFX900-NEXT:    ;;#ASMEND
4157 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4159 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__1_5:
4160 ; GFX90A:       ; %bb.0:
4161 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4162 ; GFX90A-NEXT:    ;;#ASMSTART
4163 ; GFX90A-NEXT:    ; def s[4:5]
4164 ; GFX90A-NEXT:    ;;#ASMEND
4165 ; GFX90A-NEXT:    s_lshr_b32 s4, s4, 16
4166 ; GFX90A-NEXT:    ;;#ASMSTART
4167 ; GFX90A-NEXT:    ; def s[6:7]
4168 ; GFX90A-NEXT:    ;;#ASMEND
4169 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s7
4170 ; GFX90A-NEXT:    ;;#ASMSTART
4171 ; GFX90A-NEXT:    ; use s8
4172 ; GFX90A-NEXT:    ;;#ASMEND
4173 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4175 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__1_5:
4176 ; GFX940:       ; %bb.0:
4177 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4178 ; GFX940-NEXT:    ;;#ASMSTART
4179 ; GFX940-NEXT:    ; def s[0:1]
4180 ; GFX940-NEXT:    ;;#ASMEND
4181 ; GFX940-NEXT:    s_lshr_b32 s0, s0, 16
4182 ; GFX940-NEXT:    ;;#ASMSTART
4183 ; GFX940-NEXT:    ; def s[2:3]
4184 ; GFX940-NEXT:    ;;#ASMEND
4185 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s3
4186 ; GFX940-NEXT:    ;;#ASMSTART
4187 ; GFX940-NEXT:    ; use s8
4188 ; GFX940-NEXT:    ;;#ASMEND
4189 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4190   %vec0 = call <4 x i16> asm "; def $0", "=s"()
4191   %vec1 = call <4 x i16> asm "; def $0", "=s"()
4192   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4193   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4194   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 1, i32 5>
4195   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
4196   ret void
4199 define void @s_shuffle_v2i16_v3i16__2_5() {
4200 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__2_5:
4201 ; GFX900:       ; %bb.0:
4202 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4203 ; GFX900-NEXT:    ;;#ASMSTART
4204 ; GFX900-NEXT:    ; def s[4:5]
4205 ; GFX900-NEXT:    ;;#ASMEND
4206 ; GFX900-NEXT:    ;;#ASMSTART
4207 ; GFX900-NEXT:    ; def s[6:7]
4208 ; GFX900-NEXT:    ;;#ASMEND
4209 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s5, s7
4210 ; GFX900-NEXT:    ;;#ASMSTART
4211 ; GFX900-NEXT:    ; use s8
4212 ; GFX900-NEXT:    ;;#ASMEND
4213 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4215 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__2_5:
4216 ; GFX90A:       ; %bb.0:
4217 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4218 ; GFX90A-NEXT:    ;;#ASMSTART
4219 ; GFX90A-NEXT:    ; def s[4:5]
4220 ; GFX90A-NEXT:    ;;#ASMEND
4221 ; GFX90A-NEXT:    ;;#ASMSTART
4222 ; GFX90A-NEXT:    ; def s[6:7]
4223 ; GFX90A-NEXT:    ;;#ASMEND
4224 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s5, s7
4225 ; GFX90A-NEXT:    ;;#ASMSTART
4226 ; GFX90A-NEXT:    ; use s8
4227 ; GFX90A-NEXT:    ;;#ASMEND
4228 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4230 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__2_5:
4231 ; GFX940:       ; %bb.0:
4232 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4233 ; GFX940-NEXT:    ;;#ASMSTART
4234 ; GFX940-NEXT:    ; def s[0:1]
4235 ; GFX940-NEXT:    ;;#ASMEND
4236 ; GFX940-NEXT:    ;;#ASMSTART
4237 ; GFX940-NEXT:    ; def s[2:3]
4238 ; GFX940-NEXT:    ;;#ASMEND
4239 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s1, s3
4240 ; GFX940-NEXT:    ;;#ASMSTART
4241 ; GFX940-NEXT:    ; use s8
4242 ; GFX940-NEXT:    ;;#ASMEND
4243 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4244   %vec0 = call <4 x i16> asm "; def $0", "=s"()
4245   %vec1 = call <4 x i16> asm "; def $0", "=s"()
4246   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4247   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4248   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 2, i32 5>
4249   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
4250   ret void
4253 define void @s_shuffle_v2i16_v3i16__3_5() {
4254 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__3_5:
4255 ; GFX900:       ; %bb.0:
4256 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4257 ; GFX900-NEXT:    ;;#ASMSTART
4258 ; GFX900-NEXT:    ; def s[4:5]
4259 ; GFX900-NEXT:    ;;#ASMEND
4260 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s5
4261 ; GFX900-NEXT:    ;;#ASMSTART
4262 ; GFX900-NEXT:    ; use s8
4263 ; GFX900-NEXT:    ;;#ASMEND
4264 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4266 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__3_5:
4267 ; GFX90A:       ; %bb.0:
4268 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4269 ; GFX90A-NEXT:    ;;#ASMSTART
4270 ; GFX90A-NEXT:    ; def s[4:5]
4271 ; GFX90A-NEXT:    ;;#ASMEND
4272 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s5
4273 ; GFX90A-NEXT:    ;;#ASMSTART
4274 ; GFX90A-NEXT:    ; use s8
4275 ; GFX90A-NEXT:    ;;#ASMEND
4276 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4278 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__3_5:
4279 ; GFX940:       ; %bb.0:
4280 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4281 ; GFX940-NEXT:    ;;#ASMSTART
4282 ; GFX940-NEXT:    ; def s[0:1]
4283 ; GFX940-NEXT:    ;;#ASMEND
4284 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s1
4285 ; GFX940-NEXT:    ;;#ASMSTART
4286 ; GFX940-NEXT:    ; use s8
4287 ; GFX940-NEXT:    ;;#ASMEND
4288 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4289   %vec0 = call <4 x i16> asm "; def $0", "=s"()
4290   %vec1 = call <4 x i16> asm "; def $0", "=s"()
4291   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4292   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4293   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 3, i32 5>
4294   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
4295   ret void
4298 define void @s_shuffle_v2i16_v3i16__4_5() {
4299 ; GFX900-LABEL: s_shuffle_v2i16_v3i16__4_5:
4300 ; GFX900:       ; %bb.0:
4301 ; GFX900-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4302 ; GFX900-NEXT:    ;;#ASMSTART
4303 ; GFX900-NEXT:    ; def s[4:5]
4304 ; GFX900-NEXT:    ;;#ASMEND
4305 ; GFX900-NEXT:    s_lshr_b32 s4, s4, 16
4306 ; GFX900-NEXT:    s_pack_ll_b32_b16 s8, s4, s5
4307 ; GFX900-NEXT:    ;;#ASMSTART
4308 ; GFX900-NEXT:    ; use s8
4309 ; GFX900-NEXT:    ;;#ASMEND
4310 ; GFX900-NEXT:    s_setpc_b64 s[30:31]
4312 ; GFX90A-LABEL: s_shuffle_v2i16_v3i16__4_5:
4313 ; GFX90A:       ; %bb.0:
4314 ; GFX90A-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4315 ; GFX90A-NEXT:    ;;#ASMSTART
4316 ; GFX90A-NEXT:    ; def s[4:5]
4317 ; GFX90A-NEXT:    ;;#ASMEND
4318 ; GFX90A-NEXT:    s_lshr_b32 s4, s4, 16
4319 ; GFX90A-NEXT:    s_pack_ll_b32_b16 s8, s4, s5
4320 ; GFX90A-NEXT:    ;;#ASMSTART
4321 ; GFX90A-NEXT:    ; use s8
4322 ; GFX90A-NEXT:    ;;#ASMEND
4323 ; GFX90A-NEXT:    s_setpc_b64 s[30:31]
4325 ; GFX940-LABEL: s_shuffle_v2i16_v3i16__4_5:
4326 ; GFX940:       ; %bb.0:
4327 ; GFX940-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
4328 ; GFX940-NEXT:    ;;#ASMSTART
4329 ; GFX940-NEXT:    ; def s[0:1]
4330 ; GFX940-NEXT:    ;;#ASMEND
4331 ; GFX940-NEXT:    s_lshr_b32 s0, s0, 16
4332 ; GFX940-NEXT:    s_pack_ll_b32_b16 s8, s0, s1
4333 ; GFX940-NEXT:    ;;#ASMSTART
4334 ; GFX940-NEXT:    ; use s8
4335 ; GFX940-NEXT:    ;;#ASMEND
4336 ; GFX940-NEXT:    s_setpc_b64 s[30:31]
4337   %vec0 = call <4 x i16> asm "; def $0", "=s"()
4338   %vec1 = call <4 x i16> asm "; def $0", "=s"()
4339   %extract3 = shufflevector <4 x i16> %vec0, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4340   %extract31 = shufflevector <4 x i16> %vec1, <4 x i16> poison, <3 x i32> <i32 0, i32 1, i32 2>
4341   %shuf = shufflevector <3 x i16> %extract3, <3 x i16> %extract31, <2 x i32> <i32 4, i32 5>
4342   call void asm sideeffect "; use $0", "{s8}"(<2 x i16> %shuf)
4343   ret void
4345 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
4346 ; GFX90APLUS: {{.*}}