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