1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=fiji -run-pass=legalizer -o - %s | FileCheck -check-prefix=GFX8 %s
3# RUN: llc -mtriple=amdgcn-mesa-mesa3d -mcpu=gfx900 -run-pass=legalizer -o - %s | FileCheck -check-prefix=GFX9 %s
4
5---
6name: shufflevector_v2s16_v2s16_undef_undef
7tracksRegLiveness: true
8
9body: |
10  bb.0:
11    liveins: $vgpr0, $vgpr1
12
13    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_undef_undef
14    ; GFX8: liveins: $vgpr0, $vgpr1
15    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
16    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
17    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
18    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
19    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C]], [[C1]](s32)
20    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[C]], [[SHL]]
21    ; GFX8: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
22    ; GFX8: $vgpr0 = COPY [[BITCAST]](<2 x s16>)
23    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_undef_undef
24    ; GFX9: liveins: $vgpr0, $vgpr1
25    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
26    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
27    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(undef, undef)
28    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
29    %0:_(<2 x s16>) = COPY $vgpr0
30    %1:_(<2 x s16>) = COPY $vgpr1
31    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, undef)
32    $vgpr0 = COPY %2
33
34...
35
36---
37name: shufflevector_v2s16_v2s16_0_undef
38tracksRegLiveness: true
39
40body: |
41  bb.0:
42    liveins: $vgpr0, $vgpr1
43
44    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_0_undef
45    ; GFX8: liveins: $vgpr0, $vgpr1
46    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
47    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
48    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
49    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
50    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
51    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
52    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
53    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
54    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C]](s32)
55    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
56    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY3]], [[C2]](s32)
57    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
58    ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
59    ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>)
60    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_0_undef
61    ; GFX9: liveins: $vgpr0, $vgpr1
62    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
63    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
64    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(0, undef)
65    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
66    %0:_(<2 x s16>) = COPY $vgpr0
67    %1:_(<2 x s16>) = COPY $vgpr1
68    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, undef)
69    $vgpr0 = COPY %2
70
71...
72
73---
74name: shufflevector_v2s16_v2s16_undef_0
75tracksRegLiveness: true
76
77body: |
78  bb.0:
79    liveins: $vgpr0, $vgpr1
80
81    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_undef_0
82    ; GFX8: liveins: $vgpr0, $vgpr1
83    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
84    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
85    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
86    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
87    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
88    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C]](s32)
89    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
90    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
91    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]]
92    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
93    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND]], [[C2]](s32)
94    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY2]], [[SHL]]
95    ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
96    ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>)
97    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_undef_0
98    ; GFX9: liveins: $vgpr0, $vgpr1
99    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
100    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
101    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(undef, 0)
102    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
103    %0:_(<2 x s16>) = COPY $vgpr0
104    %1:_(<2 x s16>) = COPY $vgpr1
105    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 0)
106    $vgpr0 = COPY %2
107
108...
109
110---
111name: shufflevector_v2s16_v2s16_0_1
112tracksRegLiveness: true
113
114body: |
115  bb.0:
116    liveins: $vgpr0, $vgpr1
117
118    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_0_1
119    ; GFX8: liveins: $vgpr0, $vgpr1
120    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
121    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
122    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
123    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
124    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
125    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
126    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
127    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32)
128    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
129    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
130    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
131    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
132    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
133    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
134    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
135    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
136    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
137    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_0_1
138    ; GFX9: liveins: $vgpr0, $vgpr1
139    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
140    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
141    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(0, 1)
142    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
143    %0:_(<2 x s16>) = COPY $vgpr0
144    %1:_(<2 x s16>) = COPY $vgpr1
145    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 1)
146    $vgpr0 = COPY %2
147
148...
149
150---
151name: shufflevector_v2s16_v2s16_1_0
152tracksRegLiveness: true
153
154body: |
155  bb.0:
156    liveins: $vgpr0, $vgpr1
157
158    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_1_0
159    ; GFX8: liveins: $vgpr0, $vgpr1
160    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
161    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
162    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
163    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
164    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
165    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32)
166    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
167    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
168    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
169    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
170    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
171    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
172    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
173    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
174    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
175    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
176    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
177    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_1_0
178    ; GFX9: liveins: $vgpr0, $vgpr1
179    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
180    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
181    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(1, 0)
182    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
183    %0:_(<2 x s16>) = COPY $vgpr0
184    %1:_(<2 x s16>) = COPY $vgpr1
185    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 0)
186    $vgpr0 = COPY %2
187
188...
189
190---
191name: shufflevector_v2s16_v2s16_0_0
192tracksRegLiveness: true
193
194body: |
195  bb.0:
196    liveins: $vgpr0, $vgpr1
197
198    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_0_0
199    ; GFX8: liveins: $vgpr0, $vgpr1
200    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
201    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
202    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
203    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
204    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
205    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
206    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
207    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
208    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
209    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
210    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
211    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]]
212    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
213    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32)
214    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
215    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
216    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
217    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_0_0
218    ; GFX9: liveins: $vgpr0, $vgpr1
219    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
220    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
221    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(0, 0)
222    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
223    %0:_(<2 x s16>) = COPY $vgpr0
224    %1:_(<2 x s16>) = COPY $vgpr1
225    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 0)
226    $vgpr0 = COPY %2
227
228...
229
230---
231name: shufflevector_v2s16_v2s16_1_1
232tracksRegLiveness: true
233
234body: |
235  bb.0:
236    liveins: $vgpr0, $vgpr1
237
238    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_1_1
239    ; GFX8: liveins: $vgpr0, $vgpr1
240    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
241    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
242    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
243    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
244    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
245    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
246    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
247    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
248    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
249    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
250    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
251    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]]
252    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32)
253    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
254    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
255    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
256    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_1_1
257    ; GFX9: liveins: $vgpr0, $vgpr1
258    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
259    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
260    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(1, 1)
261    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
262    %0:_(<2 x s16>) = COPY $vgpr0
263    %1:_(<2 x s16>) = COPY $vgpr1
264    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 1)
265    $vgpr0 = COPY %2
266
267...
268
269---
270name: shufflevector_v2s16_v2s16_2_2
271tracksRegLiveness: true
272
273body: |
274  bb.0:
275    liveins: $vgpr0, $vgpr1
276
277    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_2_2
278    ; GFX8: liveins: $vgpr0, $vgpr1
279    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
280    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
281    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
282    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
283    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
284    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
285    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
286    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
287    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
288    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
289    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
290    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]]
291    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
292    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32)
293    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
294    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
295    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
296    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_2_2
297    ; GFX9: liveins: $vgpr0, $vgpr1
298    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
299    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
300    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(2, 2)
301    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
302    %0:_(<2 x s16>) = COPY $vgpr0
303    %1:_(<2 x s16>) = COPY $vgpr1
304    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, 2)
305    $vgpr0 = COPY %2
306
307...
308
309---
310name: shufflevector_v2s16_v2s16_2_undef
311tracksRegLiveness: true
312
313body: |
314  bb.0:
315    liveins: $vgpr0, $vgpr1
316
317    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_2_undef
318    ; GFX8: liveins: $vgpr0, $vgpr1
319    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
320    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
321    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
322    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
323    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
324    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
325    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
326    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
327    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[C]](s32)
328    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
329    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY3]], [[C2]](s32)
330    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
331    ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
332    ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>)
333    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_2_undef
334    ; GFX9: liveins: $vgpr0, $vgpr1
335    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
336    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
337    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(2, undef)
338    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
339    %0:_(<2 x s16>) = COPY $vgpr0
340    %1:_(<2 x s16>) = COPY $vgpr1
341    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, undef)
342    $vgpr0 = COPY %2
343
344...
345
346---
347name: shufflevector_v2s16_v2s16_undef_2
348tracksRegLiveness: true
349
350body: |
351  bb.0:
352    liveins: $vgpr0, $vgpr1
353
354    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_undef_2
355    ; GFX8: liveins: $vgpr0, $vgpr1
356    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
357    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
358    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
359    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
360    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
361    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[C]](s32)
362    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
363    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
364    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]]
365    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
366    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND]], [[C2]](s32)
367    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[COPY2]], [[SHL]]
368    ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
369    ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>)
370    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_undef_2
371    ; GFX9: liveins: $vgpr0, $vgpr1
372    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
373    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
374    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(undef, 2)
375    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
376    %0:_(<2 x s16>) = COPY $vgpr0
377    %1:_(<2 x s16>) = COPY $vgpr1
378    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 2)
379    $vgpr0 = COPY %2
380
381...
382
383---
384name: shufflevector_v2s16_v2s16_2_3
385tracksRegLiveness: true
386
387body: |
388  bb.0:
389    liveins: $vgpr0, $vgpr1
390
391    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_2_3
392    ; GFX8: liveins: $vgpr0, $vgpr1
393    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
394    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
395    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
396    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
397    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
398    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
399    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
400    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32)
401    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
402    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
403    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
404    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
405    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
406    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
407    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
408    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
409    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
410    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_2_3
411    ; GFX9: liveins: $vgpr0, $vgpr1
412    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
413    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
414    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(2, 3)
415    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
416    %0:_(<2 x s16>) = COPY $vgpr0
417    %1:_(<2 x s16>) = COPY $vgpr1
418    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, 3)
419    $vgpr0 = COPY %2
420
421...
422
423---
424name: shufflevector_v2s16_v2s16_3_2
425tracksRegLiveness: true
426
427body: |
428  bb.0:
429    liveins: $vgpr0, $vgpr1
430
431    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_3_2
432    ; GFX8: liveins: $vgpr0, $vgpr1
433    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
434    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
435    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
436    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
437    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
438    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32)
439    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
440    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
441    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
442    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
443    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
444    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
445    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
446    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
447    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
448    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
449    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
450    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_3_2
451    ; GFX9: liveins: $vgpr0, $vgpr1
452    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
453    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
454    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(3, 2)
455    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
456    %0:_(<2 x s16>) = COPY $vgpr0
457    %1:_(<2 x s16>) = COPY $vgpr1
458    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, 2)
459    $vgpr0 = COPY %2
460
461...
462
463---
464name: shufflevector_v2s16_v2s16_undef_3
465tracksRegLiveness: true
466
467body: |
468  bb.0:
469    liveins: $vgpr0, $vgpr1
470
471    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_undef_3
472    ; GFX8: liveins: $vgpr0, $vgpr1
473    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
474    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
475    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
476    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
477    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
478    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
479    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
480    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
481    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
482    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND]], [[C]](s32)
483    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[C1]], [[SHL]]
484    ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
485    ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>)
486    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_undef_3
487    ; GFX9: liveins: $vgpr0, $vgpr1
488    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
489    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
490    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(undef, 3)
491    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
492    %0:_(<2 x s16>) = COPY $vgpr0
493    %1:_(<2 x s16>) = COPY $vgpr1
494    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(undef, 3)
495    $vgpr0 = COPY %2
496
497...
498
499---
500name: shufflevector_v2s16_v2s16_3_undef
501tracksRegLiveness: true
502
503body: |
504  bb.0:
505    liveins: $vgpr0, $vgpr1
506
507    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_3_undef
508    ; GFX8: liveins: $vgpr0, $vgpr1
509    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
510    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
511    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
512    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
513    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
514    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
515    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
516    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
517    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
518    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[C2]], [[C]](s32)
519    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
520    ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
521    ; GFX8: $vgpr0 = COPY [[BITCAST1]](<2 x s16>)
522    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_3_undef
523    ; GFX9: liveins: $vgpr0, $vgpr1
524    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
525    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
526    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(3, undef)
527    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
528    %0:_(<2 x s16>) = COPY $vgpr0
529    %1:_(<2 x s16>) = COPY $vgpr1
530    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, undef)
531    $vgpr0 = COPY %2
532
533...
534
535---
536name: shufflevector_v2s16_v2s16_3_3
537tracksRegLiveness: true
538
539body: |
540  bb.0:
541    liveins: $vgpr0, $vgpr1
542
543    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_3_3
544    ; GFX8: liveins: $vgpr0, $vgpr1
545    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
546    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
547    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
548    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
549    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
550    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
551    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
552    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
553    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
554    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
555    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
556    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]]
557    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32)
558    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
559    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
560    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
561    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_3_3
562    ; GFX9: liveins: $vgpr0, $vgpr1
563    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
564    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
565    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(3, 3)
566    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
567    %0:_(<2 x s16>) = COPY $vgpr0
568    %1:_(<2 x s16>) = COPY $vgpr1
569    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, 3)
570    $vgpr0 = COPY %2
571
572...
573
574---
575name: shufflevector_v2s16_v2s16_0_2
576tracksRegLiveness: true
577
578body: |
579  bb.0:
580    liveins: $vgpr0, $vgpr1
581
582    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_0_2
583    ; GFX8: liveins: $vgpr0, $vgpr1
584    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
585    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
586    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
587    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
588    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
589    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
590    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
591    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
592    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
593    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
594    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
595    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]]
596    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
597    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32)
598    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
599    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
600    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
601    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_0_2
602    ; GFX9: liveins: $vgpr0, $vgpr1
603    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
604    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
605    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
606    ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
607    ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
608    ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
609    ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
610    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
611    ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
612    ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32)
613    ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>)
614    %0:_(<2 x s16>) = COPY $vgpr0
615    %1:_(<2 x s16>) = COPY $vgpr1
616    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 2)
617    $vgpr0 = COPY %2
618
619...
620
621---
622name: shufflevector_v2s16_v2s16_2_0
623tracksRegLiveness: true
624
625body: |
626  bb.0:
627    liveins: $vgpr0, $vgpr1
628
629    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_2_0
630    ; GFX8: liveins: $vgpr0, $vgpr1
631    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
632    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
633    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
634    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
635    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
636    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
637    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
638    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
639    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
640    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
641    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
642    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]]
643    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
644    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C2]](s32)
645    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
646    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
647    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
648    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_2_0
649    ; GFX9: liveins: $vgpr0, $vgpr1
650    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
651    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
652    ; GFX9: [[SHUF:%[0-9]+]]:_(<2 x s16>) = G_SHUFFLE_VECTOR [[COPY]](<2 x s16>), [[COPY1]], shufflemask(0, 0)
653    ; GFX9: $vgpr0 = COPY [[SHUF]](<2 x s16>)
654    %0:_(<2 x s16>) = COPY $vgpr0
655    %1:_(<2 x s16>) = COPY $vgpr1
656    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 0)
657    $vgpr0 = COPY %2
658
659...
660
661---
662name: shufflevector_v2s16_v2s16_3_0
663tracksRegLiveness: true
664
665body: |
666  bb.0:
667    liveins: $vgpr0, $vgpr1
668
669    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_3_0
670    ; GFX8: liveins: $vgpr0, $vgpr1
671    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
672    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
673    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
674    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
675    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
676    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32)
677    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
678    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
679    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
680    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
681    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
682    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
683    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
684    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
685    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
686    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
687    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
688    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_3_0
689    ; GFX9: liveins: $vgpr0, $vgpr1
690    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
691    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
692    ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
693    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
694    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
695    ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32)
696    ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
697    ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
698    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
699    ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
700    ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32)
701    ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>)
702    %0:_(<2 x s16>) = COPY $vgpr0
703    %1:_(<2 x s16>) = COPY $vgpr1
704    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(3, 0)
705    $vgpr0 = COPY %2
706
707...
708
709---
710name: shufflevector_v2s16_v2s16_0_3
711tracksRegLiveness: true
712
713body: |
714  bb.0:
715    liveins: $vgpr0, $vgpr1
716
717    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_0_3
718    ; GFX8: liveins: $vgpr0, $vgpr1
719    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
720    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
721    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
722    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
723    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
724    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
725    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
726    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32)
727    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
728    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
729    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
730    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
731    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
732    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
733    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
734    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
735    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
736    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_0_3
737    ; GFX9: liveins: $vgpr0, $vgpr1
738    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
739    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
740    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
741    ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
742    ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
743    ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
744    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
745    ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32)
746    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
747    ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
748    ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32)
749    ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>)
750    %0:_(<2 x s16>) = COPY $vgpr0
751    %1:_(<2 x s16>) = COPY $vgpr1
752    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(0, 3)
753    $vgpr0 = COPY %2
754
755...
756
757---
758name: shufflevector_v2s16_v2s16_1_2
759tracksRegLiveness: true
760
761body: |
762  bb.0:
763    liveins: $vgpr0, $vgpr1
764
765    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_1_2
766    ; GFX8: liveins: $vgpr0, $vgpr1
767    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
768    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
769    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
770    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
771    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
772    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32)
773    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
774    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
775    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
776    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
777    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
778    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
779    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
780    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
781    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
782    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
783    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
784    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_1_2
785    ; GFX9: liveins: $vgpr0, $vgpr1
786    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
787    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
788    ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
789    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
790    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
791    ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32)
792    ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
793    ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
794    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
795    ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
796    ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32)
797    ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>)
798    %0:_(<2 x s16>) = COPY $vgpr0
799    %1:_(<2 x s16>) = COPY $vgpr1
800    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 2)
801    $vgpr0 = COPY %2
802
803...
804
805---
806name: shufflevector_v2s16_v2s16_2_1
807tracksRegLiveness: true
808
809body: |
810  bb.0:
811    liveins: $vgpr0, $vgpr1
812
813    ; GFX8-LABEL: name: shufflevector_v2s16_v2s16_2_1
814    ; GFX8: liveins: $vgpr0, $vgpr1
815    ; GFX8: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
816    ; GFX8: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
817    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
818    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
819    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
820    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
821    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
822    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32)
823    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
824    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
825    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
826    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
827    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
828    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
829    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
830    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
831    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
832    ; GFX9-LABEL: name: shufflevector_v2s16_v2s16_2_1
833    ; GFX9: liveins: $vgpr0, $vgpr1
834    ; GFX9: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
835    ; GFX9: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
836    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
837    ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
838    ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
839    ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
840    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
841    ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32)
842    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
843    ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
844    ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32)
845    ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>)
846    %0:_(<2 x s16>) = COPY $vgpr0
847    %1:_(<2 x s16>) = COPY $vgpr1
848    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(2, 1)
849    $vgpr0 = COPY %2
850
851...
852
853---
854name: shufflevector_v4s16_v3s16_2_0
855tracksRegLiveness: true
856
857body: |
858  bb.0:
859    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
860
861    ; GFX8-LABEL: name: shufflevector_v4s16_v3s16_2_0
862    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
863    ; GFX8: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
864    ; GFX8: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3
865    ; GFX8: [[EXTRACT:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[COPY]](<4 x s16>), 0
866    ; GFX8: [[EXTRACT1:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[COPY1]](<4 x s16>), 0
867    ; GFX8: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF
868    ; GFX8: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[EXTRACT1]](<3 x s16>), 0
869    ; GFX8: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT]](<4 x s16>)
870    ; GFX8: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
871    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
872    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
873    ; GFX8: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
874    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
875    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32)
876    ; GFX8: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 16
877    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
878    ; GFX8: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 16
879    ; GFX8: [[COPY4:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32)
880    ; GFX8: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY4]], 16
881    ; GFX8: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32), [[SEXT_INREG2]](s32)
882    ; GFX8: [[EXTRACT2:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<3 x s32>), 64
883    ; GFX8: [[INSERT1:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[EXTRACT]](<3 x s16>), 0
884    ; GFX8: [[UV2:%[0-9]+]]:_(<2 x s16>), [[UV3:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT1]](<4 x s16>)
885    ; GFX8: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV2]](<2 x s16>)
886    ; GFX8: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32)
887    ; GFX8: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV3]](<2 x s16>)
888    ; GFX8: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32)
889    ; GFX8: [[COPY5:%[0-9]+]]:_(s32) = COPY [[BITCAST2]](s32)
890    ; GFX8: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY5]], 16
891    ; GFX8: [[COPY6:%[0-9]+]]:_(s32) = COPY [[LSHR2]](s32)
892    ; GFX8: [[SEXT_INREG4:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY6]], 16
893    ; GFX8: [[COPY7:%[0-9]+]]:_(s32) = COPY [[BITCAST3]](s32)
894    ; GFX8: [[SEXT_INREG5:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY7]], 16
895    ; GFX8: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[SEXT_INREG3]](s32), [[SEXT_INREG4]](s32), [[SEXT_INREG5]](s32)
896    ; GFX8: [[EXTRACT3:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR1]](<3 x s32>), 32
897    ; GFX8: [[EXTRACT4:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<3 x s32>), 0
898    ; GFX8: [[EXTRACT5:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR1]](<3 x s32>), 0
899    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
900    ; GFX8: [[COPY8:%[0-9]+]]:_(s32) = COPY [[EXTRACT2]](s32)
901    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY8]], [[C1]]
902    ; GFX8: [[COPY9:%[0-9]+]]:_(s32) = COPY [[EXTRACT3]](s32)
903    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY9]], [[C1]]
904    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32)
905    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
906    ; GFX8: [[BITCAST4:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
907    ; GFX8: [[COPY10:%[0-9]+]]:_(s32) = COPY [[EXTRACT4]](s32)
908    ; GFX8: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY10]], [[C1]]
909    ; GFX8: [[COPY11:%[0-9]+]]:_(s32) = COPY [[EXTRACT5]](s32)
910    ; GFX8: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY11]], [[C1]]
911    ; GFX8: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C]](s32)
912    ; GFX8: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]
913    ; GFX8: [[BITCAST5:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)
914    ; GFX8: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BITCAST4]](<2 x s16>), [[BITCAST5]](<2 x s16>)
915    ; GFX8: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>)
916    ; GFX9-LABEL: name: shufflevector_v4s16_v3s16_2_0
917    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
918    ; GFX9: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
919    ; GFX9: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3
920    ; GFX9: [[EXTRACT:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[COPY]](<4 x s16>), 0
921    ; GFX9: [[EXTRACT1:%[0-9]+]]:_(<3 x s16>) = G_EXTRACT [[COPY1]](<4 x s16>), 0
922    ; GFX9: [[DEF:%[0-9]+]]:_(<4 x s16>) = G_IMPLICIT_DEF
923    ; GFX9: [[INSERT:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[EXTRACT1]](<3 x s16>), 0
924    ; GFX9: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT]](<4 x s16>)
925    ; GFX9: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
926    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
927    ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
928    ; GFX9: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
929    ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
930    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32)
931    ; GFX9: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 16
932    ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
933    ; GFX9: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 16
934    ; GFX9: [[COPY4:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32)
935    ; GFX9: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY4]], 16
936    ; GFX9: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32), [[SEXT_INREG2]](s32)
937    ; GFX9: [[EXTRACT2:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<3 x s32>), 64
938    ; GFX9: [[INSERT1:%[0-9]+]]:_(<4 x s16>) = G_INSERT [[DEF]], [[EXTRACT]](<3 x s16>), 0
939    ; GFX9: [[UV2:%[0-9]+]]:_(<2 x s16>), [[UV3:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[INSERT1]](<4 x s16>)
940    ; GFX9: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV2]](<2 x s16>)
941    ; GFX9: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32)
942    ; GFX9: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV3]](<2 x s16>)
943    ; GFX9: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32)
944    ; GFX9: [[COPY5:%[0-9]+]]:_(s32) = COPY [[BITCAST2]](s32)
945    ; GFX9: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY5]], 16
946    ; GFX9: [[COPY6:%[0-9]+]]:_(s32) = COPY [[LSHR2]](s32)
947    ; GFX9: [[SEXT_INREG4:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY6]], 16
948    ; GFX9: [[COPY7:%[0-9]+]]:_(s32) = COPY [[BITCAST3]](s32)
949    ; GFX9: [[SEXT_INREG5:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY7]], 16
950    ; GFX9: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[SEXT_INREG3]](s32), [[SEXT_INREG4]](s32), [[SEXT_INREG5]](s32)
951    ; GFX9: [[EXTRACT3:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR1]](<3 x s32>), 32
952    ; GFX9: [[EXTRACT4:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR]](<3 x s32>), 0
953    ; GFX9: [[EXTRACT5:%[0-9]+]]:_(s32) = G_EXTRACT [[BUILD_VECTOR1]](<3 x s32>), 0
954    ; GFX9: [[COPY8:%[0-9]+]]:_(s32) = COPY [[EXTRACT2]](s32)
955    ; GFX9: [[COPY9:%[0-9]+]]:_(s32) = COPY [[EXTRACT3]](s32)
956    ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY8]](s32), [[COPY9]](s32)
957    ; GFX9: [[COPY10:%[0-9]+]]:_(s32) = COPY [[EXTRACT4]](s32)
958    ; GFX9: [[COPY11:%[0-9]+]]:_(s32) = COPY [[EXTRACT5]](s32)
959    ; GFX9: [[BUILD_VECTOR_TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY10]](s32), [[COPY11]](s32)
960    ; GFX9: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[BUILD_VECTOR_TRUNC]](<2 x s16>), [[BUILD_VECTOR_TRUNC1]](<2 x s16>)
961    ; GFX9: $vgpr0_vgpr1 = COPY [[CONCAT_VECTORS]](<4 x s16>)
962    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
963    %1:_(<4 x s16>) = COPY $vgpr2_vgpr3
964    %2:_(<3 x s16>) = G_EXTRACT %0, 0
965    %3:_(<3 x s16>) = G_EXTRACT %1, 0
966    %4:_(<4 x s16>) = G_SHUFFLE_VECTOR %2, %3, shufflemask(5, 1, 3, 0)
967    $vgpr0_vgpr1 = COPY %4
968
969...
970
971---
972name: shufflevector_v2s16_v4s16_1_0
973tracksRegLiveness: true
974
975body: |
976  bb.0:
977    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
978
979    ; GFX8-LABEL: name: shufflevector_v2s16_v4s16_1_0
980    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
981    ; GFX8: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
982    ; GFX8: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3
983    ; GFX8: [[BITCAST:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>)
984    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
985    ; GFX8: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST]](<2 x s32>), 0
986    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
987    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT]], [[C1]](s32)
988    ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>)
989    ; GFX8: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST1]](<2 x s32>), 0
990    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT1]], [[C]](s32)
991    ; GFX8: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
992    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
993    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C2]]
994    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
995    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C2]]
996    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
997    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
998    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
999    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
1000    ; GFX9-LABEL: name: shufflevector_v2s16_v4s16_1_0
1001    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
1002    ; GFX9: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
1003    ; GFX9: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3
1004    ; GFX9: [[BITCAST:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>)
1005    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
1006    ; GFX9: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST]](<2 x s32>), 0
1007    ; GFX9: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
1008    ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT]], [[C1]](s32)
1009    ; GFX9: [[BITCAST1:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>)
1010    ; GFX9: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST1]](<2 x s32>), 0
1011    ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT1]], [[C]](s32)
1012    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
1013    ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
1014    ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32)
1015    ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>)
1016    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
1017    %1:_(<4 x s16>) = COPY $vgpr2_vgpr3
1018    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 0)
1019    $vgpr0 = COPY %2
1020
1021...
1022
1023---
1024name: shufflevector_v2s16_v4s16_1_3
1025tracksRegLiveness: true
1026
1027body: |
1028  bb.0:
1029    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
1030
1031    ; GFX8-LABEL: name: shufflevector_v2s16_v4s16_1_3
1032    ; GFX8: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
1033    ; GFX8: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
1034    ; GFX8: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3
1035    ; GFX8: [[BITCAST:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>)
1036    ; GFX8: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST]](<2 x s32>), 0
1037    ; GFX8: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
1038    ; GFX8: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT]], [[C]](s32)
1039    ; GFX8: [[BITCAST1:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>)
1040    ; GFX8: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST1]](<2 x s32>), 32
1041    ; GFX8: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT1]], [[C]](s32)
1042    ; GFX8: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
1043    ; GFX8: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
1044    ; GFX8: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
1045    ; GFX8: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
1046    ; GFX8: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]]
1047    ; GFX8: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C]](s32)
1048    ; GFX8: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
1049    ; GFX8: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
1050    ; GFX8: $vgpr0 = COPY [[BITCAST2]](<2 x s16>)
1051    ; GFX9-LABEL: name: shufflevector_v2s16_v4s16_1_3
1052    ; GFX9: liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
1053    ; GFX9: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
1054    ; GFX9: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3
1055    ; GFX9: [[BITCAST:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>)
1056    ; GFX9: [[EXTRACT:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST]](<2 x s32>), 0
1057    ; GFX9: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
1058    ; GFX9: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT]], [[C]](s32)
1059    ; GFX9: [[BITCAST1:%[0-9]+]]:_(<2 x s32>) = G_BITCAST [[COPY]](<4 x s16>)
1060    ; GFX9: [[EXTRACT1:%[0-9]+]]:_(s32) = G_EXTRACT [[BITCAST1]](<2 x s32>), 32
1061    ; GFX9: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[EXTRACT1]], [[C]](s32)
1062    ; GFX9: [[COPY2:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
1063    ; GFX9: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
1064    ; GFX9: [[BUILD_VECTOR_TRUNC:%[0-9]+]]:_(<2 x s16>) = G_BUILD_VECTOR_TRUNC [[COPY2]](s32), [[COPY3]](s32)
1065    ; GFX9: $vgpr0 = COPY [[BUILD_VECTOR_TRUNC]](<2 x s16>)
1066    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
1067    %1:_(<4 x s16>) = COPY $vgpr2_vgpr3
1068    %2:_(<2 x s16>) = G_SHUFFLE_VECTOR %0, %1, shufflemask(1, 3)
1069    $vgpr0 = COPY %2
1070
1071...
1072