• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -O0 -mtriple=amdgcn-mesa-mesa3d -mcpu=tahiti -run-pass=legalizer -global-isel-abort=0 -o - %s  | FileCheck %s
3
4---
5name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s32
6body:             |
7  bb.0:
8    ; CHECK-LABEL: name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s32
9    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
10    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
11    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
12    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
13    ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]
14    ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]
15    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
16    ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
17    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32)
18    ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 1
19    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[ANYEXT1]](s32)
20    ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 1
21    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)
22    ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
23    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
24    %1:_(<2 x s32>) = COPY $vgpr0_vgpr1
25    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)
26    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)
27    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4
28    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5
29    %8:_(s32) = G_ANYEXT %6(s1)
30    %9:_(s32) = G_ANYEXT %7(s1)
31    %10:_(<2 x s32>) = G_BUILD_VECTOR %8, %9
32    %11:_(<2 x s1>) = G_TRUNC %10(<2 x s32>)
33    %12:_(s1), %13:_(s1) = G_UNMERGE_VALUES %11
34    %14:_(s32) = G_SEXT %12
35    %15:_(s32) = G_SEXT %13
36    %16:_(<2 x s32>) = G_BUILD_VECTOR %14, %15
37    $vgpr0_vgpr1 = COPY %16
38
39...
40
41# Requires looking thorugh extra copies between the build_vector,
42# trunc and unmerge.
43---
44name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s32_extra_copies
45body:             |
46  bb.0:
47    ; CHECK-LABEL: name: test_unmerge_values_s1_trunc_v2s1_of_build_vector_v2s32_extra_copies
48    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
49    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
50    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
51    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
52    ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]
53    ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]
54    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
55    ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
56    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[ANYEXT]](s32)
57    ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 1
58    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[ANYEXT1]](s32)
59    ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 1
60    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT_INREG]](s32), [[SEXT_INREG1]](s32)
61    ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
62    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
63    %1:_(<2 x s32>) = COPY $vgpr0_vgpr1
64    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)
65    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)
66    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4
67    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5
68    %8:_(s32) = G_ANYEXT %6(s1)
69    %9:_(s32) = G_ANYEXT %7(s1)
70    %10:_(<2 x s32>) = G_BUILD_VECTOR %8, %9
71    %11:_(<2 x s32>) = COPY %10
72    %12:_(<2 x s1>) = G_TRUNC %11(<2 x s32>)
73    %13:_(<2 x s1>) = COPY %12
74    %14:_(s1), %15:_(s1) = G_UNMERGE_VALUES %13
75    %16:_(s32) = G_SEXT %14
76    %17:_(s32) = G_SEXT %15
77    %18:_(<2 x s32>) = G_BUILD_VECTOR %16, %17
78    $vgpr0_vgpr1 = COPY %18
79
80...
81
82---
83name: test_unmerge_values_s32_sext_v2s32_of_build_vector_v2s16
84body:             |
85  bb.0:
86    ; CHECK-LABEL: name: test_unmerge_values_s32_sext_v2s32_of_build_vector_v2s16
87    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
88    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
89    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
90    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
91    ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]
92    ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]
93    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP]](s1)
94    ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP1]](s1)
95    ; CHECK: [[SEXT:%[0-9]+]]:_(s32) = G_SEXT [[ANYEXT]](s16)
96    ; CHECK: [[SEXT1:%[0-9]+]]:_(s32) = G_SEXT [[ANYEXT1]](s16)
97    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[SEXT]](s32), [[SEXT1]](s32)
98    ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
99    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
100    %1:_(<2 x s32>) = COPY $vgpr0_vgpr1
101    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)
102    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)
103    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4
104    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5
105    %8:_(s16) = G_ANYEXT %6
106    %9:_(s16) = G_ANYEXT %7
107    %10:_(<2 x s16>) = G_BUILD_VECTOR %8, %9
108    %11:_(<2 x s32>) = G_SEXT %10
109    %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %11
110    %14:_(<2 x s32>) = G_BUILD_VECTOR %12, %13
111    $vgpr0_vgpr1 = COPY %14
112
113...
114
115---
116name: test_unmerge_values_s32_zext_v2s32_of_build_vector_v2s16
117body:             |
118  bb.0:
119    ; CHECK-LABEL: name: test_unmerge_values_s32_zext_v2s32_of_build_vector_v2s16
120    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
121    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
122    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
123    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
124    ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]
125    ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]
126    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP]](s1)
127    ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP1]](s1)
128    ; CHECK: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT]](s16)
129    ; CHECK: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT1]](s16)
130    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ZEXT]](s32), [[ZEXT1]](s32)
131    ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
132    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
133    %1:_(<2 x s32>) = COPY $vgpr0_vgpr1
134    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)
135    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)
136    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4
137    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5
138    %8:_(s16) = G_ANYEXT %6(s1)
139    %9:_(s16) = G_ANYEXT %7(s1)
140    %10:_(<2 x s16>) = G_BUILD_VECTOR %8, %9
141    %11:_(<2 x s32>) = G_ZEXT %10
142    %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %11
143    %14:_(<2 x s32>) = G_BUILD_VECTOR %12(s32), %13(s32)
144    $vgpr0_vgpr1 = COPY %14(<2 x s32>)
145
146...
147
148---
149name: test_unmerge_values_s32_anyext_v2s32_of_build_vector_v2s16
150body:             |
151  bb.0:
152    ; CHECK-LABEL: name: test_unmerge_values_s32_anyext_v2s32_of_build_vector_v2s16
153    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
154    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
155    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
156    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
157    ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]
158    ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]
159    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP]](s1)
160    ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s32) = G_ANYEXT [[ICMP1]](s1)
161    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[ANYEXT]](s32), [[ANYEXT1]](s32)
162    ; CHECK: $vgpr0_vgpr1 = COPY [[BUILD_VECTOR]](<2 x s32>)
163    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
164    %1:_(<2 x s32>) = COPY $vgpr0_vgpr1
165    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)
166    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)
167    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4
168    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5
169    %8:_(s16) = G_ANYEXT %6(s1)
170    %9:_(s16) = G_ANYEXT %7(s1)
171    %10:_(<2 x s16>) = G_BUILD_VECTOR %8, %9
172    %11:_(<2 x s32>) = G_ANYEXT %10
173    %12:_(s32), %13:_(s32) = G_UNMERGE_VALUES %11
174    %14:_(<2 x s32>) = G_BUILD_VECTOR %12, %13
175    $vgpr0_vgpr1 = COPY %14
176
177...
178
179---
180name: test_unmerge_values_v2s16_zext_v4s32_of_build_vector_v4s16
181
182body:             |
183  bb.0:
184    ; CHECK-LABEL: name: test_unmerge_values_v2s16_zext_v4s32_of_build_vector_v4s16
185    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
186    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
187    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
188    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
189    ; CHECK: [[ICMP:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV]](s32), [[UV2]]
190    ; CHECK: [[ICMP1:%[0-9]+]]:_(s1) = G_ICMP intpred(ne), [[UV1]](s32), [[UV3]]
191    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP]](s1)
192    ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s16) = G_ANYEXT [[ICMP1]](s1)
193    ; CHECK: [[ZEXT:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT]](s16)
194    ; CHECK: [[ZEXT1:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT1]](s16)
195    ; CHECK: [[ZEXT2:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT]](s16)
196    ; CHECK: [[ZEXT3:%[0-9]+]]:_(s32) = G_ZEXT [[ANYEXT1]](s16)
197    ; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[ZEXT]](s32)
198    ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[ZEXT1]](s32)
199    ; CHECK: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[ZEXT2]](s32)
200    ; CHECK: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[ZEXT3]](s32)
201    ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>), implicit [[BITCAST2]](<2 x s16>), implicit [[BITCAST3]](<2 x s16>)
202    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
203    %1:_(<2 x s32>) = COPY $vgpr0_vgpr1
204    %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %0(<2 x s32>)
205    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1(<2 x s32>)
206    %6:_(s1) = G_ICMP intpred(ne), %2(s32), %4
207    %7:_(s1) = G_ICMP intpred(ne), %3(s32), %5
208    %8:_(s16) = G_ANYEXT %6
209    %9:_(s16) = G_ANYEXT %7
210    %10:_(<4 x s16>) = G_BUILD_VECTOR %8, %9, %8, %9
211    %11:_(<4 x s32>) = G_ZEXT %10
212    %12:_(<2 x s16>), %13:_(<2 x s16>), %14:_(<2 x s16>), %15:_(<2 x s16>) = G_UNMERGE_VALUES %11
213    S_ENDPGM 0, implicit %12, implicit %13, implicit %14, implicit %15
214
215...
216
217---
218name: test_unmerge_values_s1_trunc_v4s1_of_concat_vectors_v4s32_v2s32
219body:             |
220  bb.0:
221    ; CHECK-LABEL: name: test_unmerge_values_s1_trunc_v4s1_of_concat_vectors_v4s32_v2s32
222    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
223    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
224    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
225    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
226    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[UV]](s32)
227    ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY2]], 1
228    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[UV1]](s32)
229    ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY3]], 1
230    ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[UV2]](s32)
231    ; CHECK: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY4]], 1
232    ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[UV3]](s32)
233    ; CHECK: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY5]], 1
234    ; CHECK: $vgpr0 = COPY [[SEXT_INREG]](s32)
235    ; CHECK: $vgpr1 = COPY [[SEXT_INREG1]](s32)
236    ; CHECK: $vgpr2 = COPY [[SEXT_INREG2]](s32)
237    ; CHECK: $vgpr3 = COPY [[SEXT_INREG3]](s32)
238    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
239    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
240    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1
241    %3:_(<4 x s1>) = G_TRUNC %2
242    %4:_(s1), %5:_(s1), %6:_(s1), %7:_(s1) = G_UNMERGE_VALUES %3
243    %8:_(s32) = G_SEXT %4
244    %9:_(s32) = G_SEXT %5
245    %10:_(s32) = G_SEXT %6
246    %11:_(s32) = G_SEXT %7
247    $vgpr0 = COPY %8
248    $vgpr1 = COPY %9
249    $vgpr2 = COPY %10
250    $vgpr3 = COPY %11
251...
252
253---
254name: test_unmerge_values_s16_of_concat_vectors_v2s16_v2s16
255body:             |
256  bb.0:
257    ; CHECK-LABEL: name: test_unmerge_values_s16_of_concat_vectors_v2s16_v2s16
258    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
259    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
260    ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
261    ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32)
262    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
263    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
264    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
265    ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
266    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32)
267    ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
268    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
269    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16)
270    %0:_(<2 x s16>) = COPY $vgpr0
271    %1:_(<2 x s16>) = COPY $vgpr1
272    %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1
273    %3:_(s16), %4:_(s16), %5:_(s16), %6:_(s16) = G_UNMERGE_VALUES %2
274    S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6
275...
276
277---
278name: test_unmerge_values_s32_of_concat_vectors_v2s32_v2s32
279body:             |
280  bb.0:
281    ; CHECK-LABEL: name: test_unmerge_values_s32_of_concat_vectors_v2s32_v2s32
282    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
283    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr1_vgpr2
284    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
285    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
286    ; CHECK: S_ENDPGM 0, implicit [[UV]](s32), implicit [[UV1]](s32), implicit [[UV2]](s32), implicit [[UV3]](s32)
287    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
288    %1:_(<2 x s32>) = COPY $vgpr1_vgpr2
289    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1
290    %3:_(s32), %4:_(s32), %5:_(s32), %6:_(s32) = G_UNMERGE_VALUES %2
291    S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6
292...
293
294---
295name: test_unmerge_values_s32_of_concat_vectors_v2s64_v2s64
296body:             |
297  bb.0:
298    ; CHECK-LABEL: name: test_unmerge_values_s32_of_concat_vectors_v2s64_v2s64
299    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
300    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
301    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
302    ; CHECK: [[UV4:%[0-9]+]]:_(s32), [[UV5:%[0-9]+]]:_(s32), [[UV6:%[0-9]+]]:_(s32), [[UV7:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>)
303    ; CHECK: S_ENDPGM 0, implicit [[UV]](s32), implicit [[UV1]](s32), implicit [[UV2]](s32), implicit [[UV3]](s32), implicit [[UV4]](s32), implicit [[UV5]](s32), implicit [[UV6]](s32), implicit [[UV7]](s32)
304    %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
305    %1:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
306    %2:_(<4 x s64>) = G_CONCAT_VECTORS %0, %1
307    %3:_(s32), %4:_(s32), %5:_(s32), %6:_(s32), %7:_(s32), %8:_(s32), %9:_(s32), %10:_(s32) = G_UNMERGE_VALUES %2
308    S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10
309...
310
311---
312name: test_unmerge_values_s32_of_trunc_concat_vectors_v2s64_v2s64
313body:             |
314  bb.0:
315    ; CHECK-LABEL: name: test_unmerge_values_s32_of_trunc_concat_vectors_v2s64_v2s64
316    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
317    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
318    ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<2 x s64>)
319    ; CHECK: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY1]](<2 x s64>)
320    ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV]](s64)
321    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV1]](s64)
322    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV2]](s64)
323    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV3]](s64)
324    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s32), implicit [[TRUNC1]](s32), implicit [[TRUNC2]](s32), implicit [[TRUNC3]](s32)
325    %0:_(<2 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
326    %1:_(<2 x s64>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
327    %2:_(<4 x s64>) = G_CONCAT_VECTORS %0, %1
328    %3:_(<4 x s32>) = G_TRUNC %2
329    %4:_(s32), %5:_(s32), %6:_(s32), %7:_(s32) = G_UNMERGE_VALUES %3
330    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7
331...
332
333---
334name: test_unmerge_values_s64_of_sext_concat_vectors_v2s32_v2s32
335body:             |
336  bb.0:
337    ; CHECK-LABEL: name: test_unmerge_values_s64_of_sext_concat_vectors_v2s32_v2s32
338    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
339    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
340    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
341    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
342    ; CHECK: [[SEXT:%[0-9]+]]:_(s64) = G_SEXT [[UV]](s32)
343    ; CHECK: [[SEXT1:%[0-9]+]]:_(s64) = G_SEXT [[UV1]](s32)
344    ; CHECK: [[SEXT2:%[0-9]+]]:_(s64) = G_SEXT [[UV2]](s32)
345    ; CHECK: [[SEXT3:%[0-9]+]]:_(s64) = G_SEXT [[UV3]](s32)
346    ; CHECK: S_ENDPGM 0, implicit [[SEXT]](s64), implicit [[SEXT1]](s64), implicit [[SEXT2]](s64), implicit [[SEXT3]](s64)
347    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
348    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
349    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1
350    %3:_(<4 x s64>) = G_SEXT %2
351    %4:_(s64), %5:_(s64), %6:_(s64), %7:_(s64) = G_UNMERGE_VALUES %3
352    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7
353...
354
355---
356name: test_unmerge_values_s64_of_zext_concat_vectors_v2s32_v2s32
357body:             |
358  bb.0:
359    ; CHECK-LABEL: name: test_unmerge_values_s64_of_zext_concat_vectors_v2s32_v2s32
360    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
361    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
362    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
363    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
364    ; CHECK: [[ZEXT:%[0-9]+]]:_(s64) = G_ZEXT [[UV]](s32)
365    ; CHECK: [[ZEXT1:%[0-9]+]]:_(s64) = G_ZEXT [[UV1]](s32)
366    ; CHECK: [[ZEXT2:%[0-9]+]]:_(s64) = G_ZEXT [[UV2]](s32)
367    ; CHECK: [[ZEXT3:%[0-9]+]]:_(s64) = G_ZEXT [[UV3]](s32)
368    ; CHECK: S_ENDPGM 0, implicit [[ZEXT]](s64), implicit [[ZEXT1]](s64), implicit [[ZEXT2]](s64), implicit [[ZEXT3]](s64)
369    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
370    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
371    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1
372    %3:_(<4 x s64>) = G_ZEXT %2
373    %4:_(s64), %5:_(s64), %6:_(s64), %7:_(s64) = G_UNMERGE_VALUES %3
374    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7
375...
376
377---
378name: test_unmerge_values_s64_of_anyext_concat_vectors_v2s32_v2s32
379body:             |
380  bb.0:
381    ; CHECK-LABEL: name: test_unmerge_values_s64_of_anyext_concat_vectors_v2s32_v2s32
382    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
383    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
384    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
385    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
386    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[UV]](s32)
387    ; CHECK: [[ANYEXT1:%[0-9]+]]:_(s64) = G_ANYEXT [[UV1]](s32)
388    ; CHECK: [[ANYEXT2:%[0-9]+]]:_(s64) = G_ANYEXT [[UV2]](s32)
389    ; CHECK: [[ANYEXT3:%[0-9]+]]:_(s64) = G_ANYEXT [[UV3]](s32)
390    ; CHECK: S_ENDPGM 0, implicit [[ANYEXT]](s64), implicit [[ANYEXT1]](s64), implicit [[ANYEXT2]](s64), implicit [[ANYEXT3]](s64)
391    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
392    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
393    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1
394    %3:_(<4 x s64>) = G_ANYEXT %2
395    %4:_(s64), %5:_(s64), %6:_(s64), %7:_(s64) = G_UNMERGE_VALUES %3
396    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7
397...
398
399---
400name: test_unmerge_values_s8_of_trunc_v4s16_concat_vectors_v2s32_v2s32
401body:             |
402  bb.0:
403    ; CHECK-LABEL: name: test_unmerge_values_s8_of_trunc_v4s16_concat_vectors_v2s32_v2s32
404    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
405    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
406    ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY]](<2 x s32>)
407    ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY1]](<2 x s32>)
408    ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC]](<2 x s16>)
409    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST]](s32)
410    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 8
411    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
412    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR]](s32)
413    ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
414    ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C1]](s32)
415    ; CHECK: [[TRUNC4:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR1]](s32)
416    ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
417    ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C2]](s32)
418    ; CHECK: [[TRUNC5:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR2]](s32)
419    ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC1]](<2 x s16>)
420    ; CHECK: [[TRUNC6:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST1]](s32)
421    ; CHECK: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
422    ; CHECK: [[TRUNC7:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR3]](s32)
423    ; CHECK: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C1]](s32)
424    ; CHECK: [[TRUNC8:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR4]](s32)
425    ; CHECK: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C2]](s32)
426    ; CHECK: [[TRUNC9:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR5]](s32)
427    ; CHECK: S_ENDPGM 0, implicit [[TRUNC2]](s8), implicit [[TRUNC3]](s8), implicit [[TRUNC4]](s8), implicit [[TRUNC5]](s8), implicit [[TRUNC6]](s8), implicit [[TRUNC7]](s8), implicit [[TRUNC8]](s8), implicit [[TRUNC9]](s8)
428    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
429    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
430    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1
431    %3:_(<4 x s16>) = G_TRUNC %2
432    %4:_(s8), %5:_(s8), %6:_(s8), %7:_(s8), %8:_(s8), %9:_(s8), %10:_(s8), %11:_(s8) = G_UNMERGE_VALUES %3
433    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10, implicit %11
434...
435
436---
437name: test_unmerge_values_s16_of_anyext_v4s64_concat_vectors_v2s32_v2s32
438body:             |
439  bb.0:
440    ; CHECK-LABEL: name: test_unmerge_values_s16_of_anyext_v4s64_concat_vectors_v2s32_v2s32
441    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
442    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
443    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
444    ; CHECK: [[ANYEXT:%[0-9]+]]:_(s64) = G_ANYEXT [[UV]](s32)
445    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[ANYEXT]](s64)
446    ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
447    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
448    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV2]], [[C]](s32)
449    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
450    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s32)
451    ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV3]], [[C]](s32)
452    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
453    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16)
454    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
455    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
456    %2:_(<4 x s32>) = G_CONCAT_VECTORS %0, %1
457    %3:_(<4 x s64>) = G_ANYEXT %2
458    %4:_(s16), %5:_(s16), %6:_(s16), %7:_(s16), %8:_(s16), %9:_(s16), %10:_(s16), %11:_(s16), %12:_(s16), %13:_(s16), %14:_(s16), %15:_(s16), %16:_(s16), %17:_(s16), %18:_(s16), %19:_(s16) = G_UNMERGE_VALUES %3
459    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7
460...
461
462# FIXME: Handle this
463---
464name: test_unmerge_values_s32_of_concat_vectors_v4s32_v4s32
465body:             |
466  bb.0:
467    ; CHECK-LABEL: name: test_unmerge_values_s32_of_concat_vectors_v4s32_v4s32
468    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr0_vgpr1
469    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr2_vgpr3
470    ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr4_vgpr5
471    ; CHECK: [[COPY3:%[0-9]+]]:_(<2 x s32>) = COPY $vgpr6_vgpr7
472    ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY]](<2 x s32>)
473    ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY1]](<2 x s32>)
474    ; CHECK: [[TRUNC2:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY2]](<2 x s32>)
475    ; CHECK: [[TRUNC3:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[COPY3]](<2 x s32>)
476    ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC]](<2 x s16>)
477    ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC1]](<2 x s16>)
478    ; CHECK: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC2]](<2 x s16>)
479    ; CHECK: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC3]](<2 x s16>)
480    ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](s32), implicit [[BITCAST1]](s32), implicit [[BITCAST2]](s32), implicit [[BITCAST3]](s32)
481    %0:_(<2 x s32>) = COPY $vgpr0_vgpr1
482    %1:_(<2 x s32>) = COPY $vgpr2_vgpr3
483    %2:_(<2 x s32>) = COPY $vgpr4_vgpr5
484    %3:_(<2 x s32>) = COPY $vgpr6_vgpr7
485    %4:_(<8 x s32>) = G_CONCAT_VECTORS %0, %1, %2, %3
486    %5:_(<8 x s16>) = G_TRUNC %4
487    %6:_(s32), %7:_(s32), %8:_(s32), %9:_(s32) = G_UNMERGE_VALUES %5
488    S_ENDPGM 0, implicit %6, implicit %7, implicit %8, implicit %9
489...
490
491---
492name: test_unmerge_values_s64_of_build_vector_v4s32
493body:             |
494  bb.0:
495    ; CHECK-LABEL: name: test_unmerge_values_s64_of_build_vector_v4s32
496    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
497    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
498    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
499    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
500    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32)
501    ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY2]](s32), [[COPY3]](s32)
502    ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[BUILD_VECTOR]](<2 x s32>)
503    ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[BUILD_VECTOR1]](<2 x s32>)
504    ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC]](<2 x s16>)
505    ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[TRUNC1]](<2 x s16>)
506    ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](s32), implicit [[BITCAST1]](s32)
507    %0:_(s32) = COPY $vgpr0
508    %1:_(s32) = COPY $vgpr1
509    %2:_(s32) = COPY $vgpr2
510    %3:_(s32) = COPY $vgpr3
511    %4:_(<4 x s32>) = G_BUILD_VECTOR %0, %1, %2, %3
512    %5:_(<4 x s16>) = G_TRUNC %4
513    %6:_(s32), %7:_(s32) = G_UNMERGE_VALUES %5
514    S_ENDPGM 0, implicit %6, implicit %7
515...
516
517# To properly simplify that one, we would need to insert bitcast
518# after the G_ZEXT.
519# i.e.,
520# s64 = zext <2 x s16> <-- invalid
521# vs.
522# <2 x s32> = zext <2 x s16>
523# s64 = bitcast <2 x s32> <-- we are missing the code to do that
524---
525name: test_unmerge_values_s128_of_zext_of_concat_vectors
526body:             |
527  bb.0:
528    ; CHECK-LABEL: name: test_unmerge_values_s128_of_zext_of_concat_vectors
529    ; CHECK: [[COPY:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr0
530    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY $vgpr1
531    ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[COPY]](<2 x s16>)
532    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
533    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
534    ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[COPY1]](<2 x s16>)
535    ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
536    ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
537    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32)
538    ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C1]]
539    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
540    ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY3]], [[C1]]
541    ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32)
542    ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY4]], [[C1]]
543    ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[LSHR1]](s32)
544    ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY5]], [[C1]]
545    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND]](s32), [[AND1]](s32)
546    ; CHECK: [[MV1:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[AND2]](s32), [[AND3]](s32)
547    ; CHECK: S_ENDPGM 0, implicit [[MV]](s64), implicit [[MV1]](s64)
548    %0:_(<2 x s16>) = COPY $vgpr0
549    %1:_(<2 x s16>) = COPY $vgpr1
550    %2:_(<4 x s16>) = G_CONCAT_VECTORS %0, %1
551    %3:_(<4 x s32>) = G_ZEXT %2
552    %4:_(s64), %5:_(s64) = G_UNMERGE_VALUES %3
553    S_ENDPGM 0, implicit %4, implicit %5
554...
555
556---
557
558name: test_unmerge_values_v3s32_of_v12s32_concat_vectors_v4s32
559body:             |
560  bb.0:
561    ; CHECK-LABEL: name: test_unmerge_values_v3s32_of_v12s32_concat_vectors_v4s32
562    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
563    ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
564    ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11
565    ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<12 x s32>) = G_CONCAT_VECTORS [[COPY]](<4 x s32>), [[COPY1]](<4 x s32>), [[COPY2]](<4 x s32>)
566    ; CHECK: [[UV:%[0-9]+]]:_(<3 x s32>), [[UV1:%[0-9]+]]:_(<3 x s32>), [[UV2:%[0-9]+]]:_(<3 x s32>), [[UV3:%[0-9]+]]:_(<3 x s32>) = G_UNMERGE_VALUES [[CONCAT_VECTORS]](<12 x s32>)
567    ; CHECK: S_ENDPGM 0, implicit [[UV]](<3 x s32>), implicit [[UV1]](<3 x s32>), implicit [[UV2]](<3 x s32>), implicit [[UV3]](<3 x s32>)
568    %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
569    %1:_(<4 x s32>) = COPY $vgpr4_vgpr5_vgpr6_vgpr7
570    %2:_(<4 x s32>) = COPY $vgpr8_vgpr9_vgpr10_vgpr11
571    %3:_(<12 x s32>) = G_CONCAT_VECTORS %0, %1, %2
572    %4:_(<3 x s32>), %5:_(<3 x s32>), %6:_(<3 x s32>), %7:_(<3 x s32>) = G_UNMERGE_VALUES %3
573    S_ENDPGM 0, implicit %4, implicit %5, implicit %6, implicit %7
574...
575
576---
577name: test_unmerge_values_v3s16_of_v12s16_concat_vectors_v4s16
578body:             |
579  bb.0:
580    ; CHECK-LABEL: name: test_unmerge_values_v3s16_of_v12s16_concat_vectors_v4s16
581    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
582    ; CHECK: [[COPY1:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr2_vgpr3
583    ; CHECK: [[COPY2:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr4_vgpr5
584    ; CHECK: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
585    ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
586    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
587    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
588    ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
589    ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
590    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[BITCAST]](s32)
591    ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[LSHR]](s32)
592    ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[BITCAST1]](s32)
593    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)
594    ; CHECK: [[UV2:%[0-9]+]]:_(<2 x s16>), [[UV3:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
595    ; CHECK: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV3]](<2 x s16>)
596    ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32)
597    ; CHECK: [[UV4:%[0-9]+]]:_(<2 x s16>), [[UV5:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
598    ; CHECK: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV4]](<2 x s16>)
599    ; CHECK: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32)
600    ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY [[LSHR2]](s32)
601    ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY [[BITCAST3]](s32)
602    ; CHECK: [[COPY8:%[0-9]+]]:_(s32) = COPY [[LSHR3]](s32)
603    ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY6]](s32), [[COPY7]](s32), [[COPY8]](s32)
604    ; CHECK: [[UV6:%[0-9]+]]:_(<2 x s16>), [[UV7:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
605    ; CHECK: [[BITCAST4:%[0-9]+]]:_(s32) = G_BITCAST [[UV7]](<2 x s16>)
606    ; CHECK: [[LSHR4:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST4]], [[C]](s32)
607    ; CHECK: [[UV8:%[0-9]+]]:_(<2 x s16>), [[UV9:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)
608    ; CHECK: [[BITCAST5:%[0-9]+]]:_(s32) = G_BITCAST [[UV8]](<2 x s16>)
609    ; CHECK: [[LSHR5:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST5]], [[C]](s32)
610    ; CHECK: [[COPY9:%[0-9]+]]:_(s32) = COPY [[BITCAST4]](s32)
611    ; CHECK: [[COPY10:%[0-9]+]]:_(s32) = COPY [[LSHR4]](s32)
612    ; CHECK: [[COPY11:%[0-9]+]]:_(s32) = COPY [[BITCAST5]](s32)
613    ; CHECK: [[BUILD_VECTOR2:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY9]](s32), [[COPY10]](s32), [[COPY11]](s32)
614    ; CHECK: [[UV10:%[0-9]+]]:_(<2 x s16>), [[UV11:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)
615    ; CHECK: [[BITCAST6:%[0-9]+]]:_(s32) = G_BITCAST [[UV10]](<2 x s16>)
616    ; CHECK: [[LSHR6:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST6]], [[C]](s32)
617    ; CHECK: [[BITCAST7:%[0-9]+]]:_(s32) = G_BITCAST [[UV11]](<2 x s16>)
618    ; CHECK: [[LSHR7:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST7]], [[C]](s32)
619    ; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY [[LSHR6]](s32)
620    ; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[BITCAST7]](s32)
621    ; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[LSHR7]](s32)
622    ; CHECK: [[BUILD_VECTOR3:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY12]](s32), [[COPY13]](s32), [[COPY14]](s32)
623    ; CHECK: S_ENDPGM 0, implicit [[BUILD_VECTOR]](<3 x s32>), implicit [[BUILD_VECTOR1]](<3 x s32>), implicit [[BUILD_VECTOR2]](<3 x s32>), implicit [[BUILD_VECTOR3]](<3 x s32>)
624    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
625    %1:_(<4 x s16>) = COPY $vgpr2_vgpr3
626    %2:_(<4 x s16>) = COPY $vgpr4_vgpr5
627    %3:_(<12 x s16>) = G_CONCAT_VECTORS %0, %1, %2
628    %4:_(<3 x s16>), %5:_(<3 x s16>), %6:_(<3 x s16>), %7:_(<3 x s16>) = G_UNMERGE_VALUES %3
629    %8:_(<3 x s32>) = G_ANYEXT %4
630    %9:_(<3 x s32>) = G_ANYEXT %5
631    %10:_(<3 x s32>) = G_ANYEXT %6
632    %11:_(<3 x s32>) = G_ANYEXT %7
633    S_ENDPGM 0, implicit %8, implicit %9, implicit %10, implicit %11
634...
635
636---
637name:            unmerge_v2s16_from_v4s16_sext_v4s8_concat_vectors_v2s8
638tracksRegLiveness: true
639body:             |
640  bb.1:
641    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
642
643    ; CHECK-LABEL: name: unmerge_v2s16_from_v4s16_sext_v4s8_concat_vectors_v2s8
644    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
645    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
646    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
647    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
648    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
649    ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
650    ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
651    ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32)
652    ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY [[COPY3]](s32)
653    ; CHECK: [[COPY8:%[0-9]+]]:_(s32) = COPY [[COPY4]](s32)
654    ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY8]], 8
655    ; CHECK: [[COPY9:%[0-9]+]]:_(s32) = COPY [[COPY5]](s32)
656    ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY9]], 8
657    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
658    ; CHECK: [[COPY10:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG]](s32)
659    ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY10]], [[C]]
660    ; CHECK: [[COPY11:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG1]](s32)
661    ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY11]], [[C]]
662    ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
663    ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
664    ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
665    ; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
666    ; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY6]](s32)
667    ; CHECK: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY12]], 8
668    ; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY7]](s32)
669    ; CHECK: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY13]], 8
670    ; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG2]](s32)
671    ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY14]], [[C]]
672    ; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG3]](s32)
673    ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY15]], [[C]]
674    ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)
675    ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]
676    ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)
677    ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>)
678    %0:_(s32) = COPY $vgpr0
679    %1:_(s32) = COPY $vgpr1
680    %2:_(s32) = COPY $vgpr2
681    %3:_(s32) = COPY $vgpr3
682    %4:_(s8) = G_TRUNC %0
683    %5:_(s8) = G_TRUNC %1
684    %6:_(s8) = G_TRUNC %2
685    %7:_(s8) = G_TRUNC %3
686    %8:_(<2 x s8>) = G_BUILD_VECTOR %4, %5
687    %9:_(<2 x s8>) = G_BUILD_VECTOR %6, %7
688    %10:_(<4 x s8>) = G_CONCAT_VECTORS %8, %9
689    %11:_(<4 x s16>) = G_SEXT %10
690    %12:_(<2 x s16>), %13:_(<2 x s16>) = G_UNMERGE_VALUES %11
691    S_ENDPGM 0, implicit %12, implicit %13
692...
693
694---
695name:            unmerge_v2s16_from_v8s16_sext_v8s8_concat_vectors_v4s8
696tracksRegLiveness: true
697body:             |
698  bb.1:
699    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7
700
701    ; CHECK-LABEL: name: unmerge_v2s16_from_v8s16_sext_v8s8_concat_vectors_v4s8
702    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7
703    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
704    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
705    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
706    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
707    ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
708    ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
709    ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
710    ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
711    ; CHECK: [[COPY8:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
712    ; CHECK: [[COPY9:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
713    ; CHECK: [[COPY10:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32)
714    ; CHECK: [[COPY11:%[0-9]+]]:_(s32) = COPY [[COPY3]](s32)
715    ; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY [[COPY8]](s32)
716    ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY12]], 8
717    ; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY [[COPY9]](s32)
718    ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY13]], 8
719    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
720    ; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG]](s32)
721    ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY14]], [[C]]
722    ; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG1]](s32)
723    ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY15]], [[C]]
724    ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
725    ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
726    ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
727    ; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
728    ; CHECK: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY10]](s32)
729    ; CHECK: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY16]], 8
730    ; CHECK: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY11]](s32)
731    ; CHECK: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY17]], 8
732    ; CHECK: [[COPY18:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG2]](s32)
733    ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY18]], [[C]]
734    ; CHECK: [[COPY19:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG3]](s32)
735    ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY19]], [[C]]
736    ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)
737    ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]
738    ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)
739    ; CHECK: [[COPY20:%[0-9]+]]:_(s32) = COPY [[COPY4]](s32)
740    ; CHECK: [[COPY21:%[0-9]+]]:_(s32) = COPY [[COPY5]](s32)
741    ; CHECK: [[COPY22:%[0-9]+]]:_(s32) = COPY [[COPY6]](s32)
742    ; CHECK: [[COPY23:%[0-9]+]]:_(s32) = COPY [[COPY7]](s32)
743    ; CHECK: [[COPY24:%[0-9]+]]:_(s32) = COPY [[COPY20]](s32)
744    ; CHECK: [[SEXT_INREG4:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY24]], 8
745    ; CHECK: [[COPY25:%[0-9]+]]:_(s32) = COPY [[COPY21]](s32)
746    ; CHECK: [[SEXT_INREG5:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY25]], 8
747    ; CHECK: [[COPY26:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG4]](s32)
748    ; CHECK: [[AND4:%[0-9]+]]:_(s32) = G_AND [[COPY26]], [[C]]
749    ; CHECK: [[COPY27:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG5]](s32)
750    ; CHECK: [[AND5:%[0-9]+]]:_(s32) = G_AND [[COPY27]], [[C]]
751    ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND5]], [[C1]](s32)
752    ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND4]], [[SHL2]]
753    ; CHECK: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32)
754    ; CHECK: [[COPY28:%[0-9]+]]:_(s32) = COPY [[COPY22]](s32)
755    ; CHECK: [[SEXT_INREG6:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY28]], 8
756    ; CHECK: [[COPY29:%[0-9]+]]:_(s32) = COPY [[COPY23]](s32)
757    ; CHECK: [[SEXT_INREG7:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY29]], 8
758    ; CHECK: [[COPY30:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG6]](s32)
759    ; CHECK: [[AND6:%[0-9]+]]:_(s32) = G_AND [[COPY30]], [[C]]
760    ; CHECK: [[COPY31:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG7]](s32)
761    ; CHECK: [[AND7:%[0-9]+]]:_(s32) = G_AND [[COPY31]], [[C]]
762    ; CHECK: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[AND7]], [[C1]](s32)
763    ; CHECK: [[OR3:%[0-9]+]]:_(s32) = G_OR [[AND6]], [[SHL3]]
764    ; CHECK: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR3]](s32)
765    ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>), implicit [[BITCAST2]](<2 x s16>), implicit [[BITCAST3]](<2 x s16>)
766    %0:_(s32) = COPY $vgpr0
767    %1:_(s32) = COPY $vgpr1
768    %2:_(s32) = COPY $vgpr2
769    %3:_(s32) = COPY $vgpr3
770    %4:_(s32) = COPY $vgpr4
771    %5:_(s32) = COPY $vgpr5
772    %6:_(s32) = COPY $vgpr6
773    %7:_(s32) = COPY $vgpr7
774    %8:_(s8) = G_TRUNC %0
775    %9:_(s8) = G_TRUNC %1
776    %10:_(s8) = G_TRUNC %2
777    %11:_(s8) = G_TRUNC %3
778    %12:_(s8) = G_TRUNC %4
779    %13:_(s8) = G_TRUNC %5
780    %14:_(s8) = G_TRUNC %6
781    %15:_(s8) = G_TRUNC %7
782    %16:_(<4 x s8>) = G_BUILD_VECTOR %8, %9, %10, %11
783    %17:_(<4 x s8>) = G_BUILD_VECTOR %12, %13, %14, %15
784    %18:_(<8 x s8>) = G_CONCAT_VECTORS %16, %17
785    %19:_(<8 x s16>) = G_SEXT %18
786    %20:_(<2 x s16>), %21:_(<2 x s16>), %22:_(<2 x s16>), %23:_(<2 x s16>) = G_UNMERGE_VALUES %19
787    S_ENDPGM 0, implicit %20, implicit %21, implicit %22, implicit %23
788...
789
790---
791name:            unmerge_v2s16_from_v16s16_sext_v16s8_concat_vectors_v8s8
792tracksRegLiveness: true
793body:             |
794  bb.1:
795    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15
796
797    ; CHECK-LABEL: name: unmerge_v2s16_from_v16s16_sext_v16s8_concat_vectors_v8s8
798    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5, $vgpr6, $vgpr7, $vgpr8, $vgpr9, $vgpr10, $vgpr11, $vgpr12, $vgpr13, $vgpr14, $vgpr15
799    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
800    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
801    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
802    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
803    ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
804    ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
805    ; CHECK: [[COPY6:%[0-9]+]]:_(s32) = COPY $vgpr6
806    ; CHECK: [[COPY7:%[0-9]+]]:_(s32) = COPY $vgpr7
807    ; CHECK: [[COPY8:%[0-9]+]]:_(s32) = COPY $vgpr8
808    ; CHECK: [[COPY9:%[0-9]+]]:_(s32) = COPY $vgpr9
809    ; CHECK: [[COPY10:%[0-9]+]]:_(s32) = COPY $vgpr10
810    ; CHECK: [[COPY11:%[0-9]+]]:_(s32) = COPY $vgpr11
811    ; CHECK: [[COPY12:%[0-9]+]]:_(s32) = COPY $vgpr12
812    ; CHECK: [[COPY13:%[0-9]+]]:_(s32) = COPY $vgpr13
813    ; CHECK: [[COPY14:%[0-9]+]]:_(s32) = COPY $vgpr14
814    ; CHECK: [[COPY15:%[0-9]+]]:_(s32) = COPY $vgpr15
815    ; CHECK: [[COPY16:%[0-9]+]]:_(s32) = COPY [[COPY]](s32)
816    ; CHECK: [[COPY17:%[0-9]+]]:_(s32) = COPY [[COPY1]](s32)
817    ; CHECK: [[COPY18:%[0-9]+]]:_(s32) = COPY [[COPY2]](s32)
818    ; CHECK: [[COPY19:%[0-9]+]]:_(s32) = COPY [[COPY3]](s32)
819    ; CHECK: [[COPY20:%[0-9]+]]:_(s32) = COPY [[COPY4]](s32)
820    ; CHECK: [[COPY21:%[0-9]+]]:_(s32) = COPY [[COPY5]](s32)
821    ; CHECK: [[COPY22:%[0-9]+]]:_(s32) = COPY [[COPY6]](s32)
822    ; CHECK: [[COPY23:%[0-9]+]]:_(s32) = COPY [[COPY7]](s32)
823    ; CHECK: [[COPY24:%[0-9]+]]:_(s32) = COPY [[COPY16]](s32)
824    ; CHECK: [[SEXT_INREG:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY24]], 8
825    ; CHECK: [[COPY25:%[0-9]+]]:_(s32) = COPY [[COPY17]](s32)
826    ; CHECK: [[SEXT_INREG1:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY25]], 8
827    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
828    ; CHECK: [[COPY26:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG]](s32)
829    ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY26]], [[C]]
830    ; CHECK: [[COPY27:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG1]](s32)
831    ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY27]], [[C]]
832    ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
833    ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
834    ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
835    ; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
836    ; CHECK: [[COPY28:%[0-9]+]]:_(s32) = COPY [[COPY18]](s32)
837    ; CHECK: [[SEXT_INREG2:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY28]], 8
838    ; CHECK: [[COPY29:%[0-9]+]]:_(s32) = COPY [[COPY19]](s32)
839    ; CHECK: [[SEXT_INREG3:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY29]], 8
840    ; CHECK: [[COPY30:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG2]](s32)
841    ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[COPY30]], [[C]]
842    ; CHECK: [[COPY31:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG3]](s32)
843    ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[COPY31]], [[C]]
844    ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)
845    ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]
846    ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)
847    ; CHECK: [[COPY32:%[0-9]+]]:_(s32) = COPY [[COPY20]](s32)
848    ; CHECK: [[SEXT_INREG4:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY32]], 8
849    ; CHECK: [[COPY33:%[0-9]+]]:_(s32) = COPY [[COPY21]](s32)
850    ; CHECK: [[SEXT_INREG5:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY33]], 8
851    ; CHECK: [[COPY34:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG4]](s32)
852    ; CHECK: [[AND4:%[0-9]+]]:_(s32) = G_AND [[COPY34]], [[C]]
853    ; CHECK: [[COPY35:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG5]](s32)
854    ; CHECK: [[AND5:%[0-9]+]]:_(s32) = G_AND [[COPY35]], [[C]]
855    ; CHECK: [[SHL2:%[0-9]+]]:_(s32) = G_SHL [[AND5]], [[C1]](s32)
856    ; CHECK: [[OR2:%[0-9]+]]:_(s32) = G_OR [[AND4]], [[SHL2]]
857    ; CHECK: [[BITCAST2:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR2]](s32)
858    ; CHECK: [[COPY36:%[0-9]+]]:_(s32) = COPY [[COPY22]](s32)
859    ; CHECK: [[SEXT_INREG6:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY36]], 8
860    ; CHECK: [[COPY37:%[0-9]+]]:_(s32) = COPY [[COPY23]](s32)
861    ; CHECK: [[SEXT_INREG7:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY37]], 8
862    ; CHECK: [[COPY38:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG6]](s32)
863    ; CHECK: [[AND6:%[0-9]+]]:_(s32) = G_AND [[COPY38]], [[C]]
864    ; CHECK: [[COPY39:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG7]](s32)
865    ; CHECK: [[AND7:%[0-9]+]]:_(s32) = G_AND [[COPY39]], [[C]]
866    ; CHECK: [[SHL3:%[0-9]+]]:_(s32) = G_SHL [[AND7]], [[C1]](s32)
867    ; CHECK: [[OR3:%[0-9]+]]:_(s32) = G_OR [[AND6]], [[SHL3]]
868    ; CHECK: [[BITCAST3:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR3]](s32)
869    ; CHECK: [[COPY40:%[0-9]+]]:_(s32) = COPY [[COPY8]](s32)
870    ; CHECK: [[COPY41:%[0-9]+]]:_(s32) = COPY [[COPY9]](s32)
871    ; CHECK: [[COPY42:%[0-9]+]]:_(s32) = COPY [[COPY10]](s32)
872    ; CHECK: [[COPY43:%[0-9]+]]:_(s32) = COPY [[COPY11]](s32)
873    ; CHECK: [[COPY44:%[0-9]+]]:_(s32) = COPY [[COPY12]](s32)
874    ; CHECK: [[COPY45:%[0-9]+]]:_(s32) = COPY [[COPY13]](s32)
875    ; CHECK: [[COPY46:%[0-9]+]]:_(s32) = COPY [[COPY14]](s32)
876    ; CHECK: [[COPY47:%[0-9]+]]:_(s32) = COPY [[COPY15]](s32)
877    ; CHECK: [[COPY48:%[0-9]+]]:_(s32) = COPY [[COPY40]](s32)
878    ; CHECK: [[SEXT_INREG8:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY48]], 8
879    ; CHECK: [[COPY49:%[0-9]+]]:_(s32) = COPY [[COPY41]](s32)
880    ; CHECK: [[SEXT_INREG9:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY49]], 8
881    ; CHECK: [[COPY50:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG8]](s32)
882    ; CHECK: [[AND8:%[0-9]+]]:_(s32) = G_AND [[COPY50]], [[C]]
883    ; CHECK: [[COPY51:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG9]](s32)
884    ; CHECK: [[AND9:%[0-9]+]]:_(s32) = G_AND [[COPY51]], [[C]]
885    ; CHECK: [[SHL4:%[0-9]+]]:_(s32) = G_SHL [[AND9]], [[C1]](s32)
886    ; CHECK: [[OR4:%[0-9]+]]:_(s32) = G_OR [[AND8]], [[SHL4]]
887    ; CHECK: [[BITCAST4:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR4]](s32)
888    ; CHECK: [[COPY52:%[0-9]+]]:_(s32) = COPY [[COPY42]](s32)
889    ; CHECK: [[SEXT_INREG10:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY52]], 8
890    ; CHECK: [[COPY53:%[0-9]+]]:_(s32) = COPY [[COPY43]](s32)
891    ; CHECK: [[SEXT_INREG11:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY53]], 8
892    ; CHECK: [[COPY54:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG10]](s32)
893    ; CHECK: [[AND10:%[0-9]+]]:_(s32) = G_AND [[COPY54]], [[C]]
894    ; CHECK: [[COPY55:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG11]](s32)
895    ; CHECK: [[AND11:%[0-9]+]]:_(s32) = G_AND [[COPY55]], [[C]]
896    ; CHECK: [[SHL5:%[0-9]+]]:_(s32) = G_SHL [[AND11]], [[C1]](s32)
897    ; CHECK: [[OR5:%[0-9]+]]:_(s32) = G_OR [[AND10]], [[SHL5]]
898    ; CHECK: [[BITCAST5:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR5]](s32)
899    ; CHECK: [[COPY56:%[0-9]+]]:_(s32) = COPY [[COPY44]](s32)
900    ; CHECK: [[SEXT_INREG12:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY56]], 8
901    ; CHECK: [[COPY57:%[0-9]+]]:_(s32) = COPY [[COPY45]](s32)
902    ; CHECK: [[SEXT_INREG13:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY57]], 8
903    ; CHECK: [[COPY58:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG12]](s32)
904    ; CHECK: [[AND12:%[0-9]+]]:_(s32) = G_AND [[COPY58]], [[C]]
905    ; CHECK: [[COPY59:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG13]](s32)
906    ; CHECK: [[AND13:%[0-9]+]]:_(s32) = G_AND [[COPY59]], [[C]]
907    ; CHECK: [[SHL6:%[0-9]+]]:_(s32) = G_SHL [[AND13]], [[C1]](s32)
908    ; CHECK: [[OR6:%[0-9]+]]:_(s32) = G_OR [[AND12]], [[SHL6]]
909    ; CHECK: [[BITCAST6:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR6]](s32)
910    ; CHECK: [[COPY60:%[0-9]+]]:_(s32) = COPY [[COPY46]](s32)
911    ; CHECK: [[SEXT_INREG14:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY60]], 8
912    ; CHECK: [[COPY61:%[0-9]+]]:_(s32) = COPY [[COPY47]](s32)
913    ; CHECK: [[SEXT_INREG15:%[0-9]+]]:_(s32) = G_SEXT_INREG [[COPY61]], 8
914    ; CHECK: [[COPY62:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG14]](s32)
915    ; CHECK: [[AND14:%[0-9]+]]:_(s32) = G_AND [[COPY62]], [[C]]
916    ; CHECK: [[COPY63:%[0-9]+]]:_(s32) = COPY [[SEXT_INREG15]](s32)
917    ; CHECK: [[AND15:%[0-9]+]]:_(s32) = G_AND [[COPY63]], [[C]]
918    ; CHECK: [[SHL7:%[0-9]+]]:_(s32) = G_SHL [[AND15]], [[C1]](s32)
919    ; CHECK: [[OR7:%[0-9]+]]:_(s32) = G_OR [[AND14]], [[SHL7]]
920    ; CHECK: [[BITCAST7:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR7]](s32)
921    ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>), implicit [[BITCAST2]](<2 x s16>), implicit [[BITCAST3]](<2 x s16>), implicit [[BITCAST4]](<2 x s16>), implicit [[BITCAST5]](<2 x s16>), implicit [[BITCAST6]](<2 x s16>), implicit [[BITCAST7]](<2 x s16>)
922    %0:_(s32) = COPY $vgpr0
923    %1:_(s32) = COPY $vgpr1
924    %2:_(s32) = COPY $vgpr2
925    %3:_(s32) = COPY $vgpr3
926    %4:_(s32) = COPY $vgpr4
927    %5:_(s32) = COPY $vgpr5
928    %6:_(s32) = COPY $vgpr6
929    %7:_(s32) = COPY $vgpr7
930    %8:_(s32) = COPY $vgpr8
931    %9:_(s32) = COPY $vgpr9
932    %10:_(s32) = COPY $vgpr10
933    %11:_(s32) = COPY $vgpr11
934    %12:_(s32) = COPY $vgpr12
935    %13:_(s32) = COPY $vgpr13
936    %14:_(s32) = COPY $vgpr14
937    %15:_(s32) = COPY $vgpr15
938    %16:_(s8) = G_TRUNC %0
939    %17:_(s8) = G_TRUNC %1
940    %18:_(s8) = G_TRUNC %2
941    %19:_(s8) = G_TRUNC %3
942    %20:_(s8) = G_TRUNC %4
943    %21:_(s8) = G_TRUNC %5
944    %22:_(s8) = G_TRUNC %6
945    %23:_(s8) = G_TRUNC %7
946    %24:_(s8) = G_TRUNC %8
947    %25:_(s8) = G_TRUNC %9
948    %26:_(s8) = G_TRUNC %10
949    %27:_(s8) = G_TRUNC %11
950    %28:_(s8) = G_TRUNC %12
951    %29:_(s8) = G_TRUNC %13
952    %30:_(s8) = G_TRUNC %14
953    %31:_(s8) = G_TRUNC %15
954    %32:_(<8 x s8>) = G_BUILD_VECTOR %16, %17, %18, %19, %20, %21, %22, %23
955    %33:_(<8 x s8>) = G_BUILD_VECTOR %24, %25, %26, %27, %28, %29, %30, %31
956    %34:_(<16 x s8>) = G_CONCAT_VECTORS %32, %33
957    %35:_(<16 x s16>) = G_SEXT %34
958    %36:_(<2 x s16>), %37:_(<2 x s16>), %38:_(<2 x s16>), %39:_(<2 x s16>), %40:_(<2 x s16>), %41:_(<2 x s16>), %42:_(<2 x s16>), %43:_(<2 x s16>) = G_UNMERGE_VALUES %35
959    S_ENDPGM 0, implicit %36, implicit %37, implicit %38, implicit %39, implicit %40, implicit %41, implicit %42, implicit %43
960...
961
962---
963name: test_unmerge_values_s32_trunc_s96_of_merge_values_s192_s64
964body:             |
965  bb.0:
966    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5
967    ; CHECK-LABEL: name: test_unmerge_values_s32_trunc_s96_of_merge_values_s192_s64
968    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
969    ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
970    ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5
971    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
972    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
973    ; CHECK: S_ENDPGM 0, implicit [[UV]](s32), implicit [[UV1]](s32), implicit [[UV2]](s32)
974    %0:_(s64) = COPY $vgpr0_vgpr1
975    %1:_(s64) = COPY $vgpr2_vgpr3
976    %2:_(s64) = COPY $vgpr4_vgpr5
977    %3:_(s192) = G_MERGE_VALUES %0, %1, %2
978    %4:_(s96) = G_TRUNC %3
979    %5:_(s32), %6:_(s32), %7:_(s32) = G_UNMERGE_VALUES %4
980    S_ENDPGM 0, implicit %5, implicit %6, implicit %7
981
982...
983
984---
985name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s64
986body:             |
987  bb.0:
988    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5
989    ; CHECK-LABEL: name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s64
990    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
991    ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
992    ; CHECK: [[COPY2:%[0-9]+]]:_(s64) = COPY $vgpr4_vgpr5
993    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
994    ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
995    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
996    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[UV]], [[C]](s32)
997    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
998    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
999    ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[UV1]], [[C]](s32)
1000    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
1001    ; CHECK: [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
1002    ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
1003    ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[UV2]], [[C]](s32)
1004    ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
1005    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16), implicit [[TRUNC4]](s16), implicit [[TRUNC5]](s16)
1006    %0:_(s64) = COPY $vgpr0_vgpr1
1007    %1:_(s64) = COPY $vgpr2_vgpr3
1008    %2:_(s64) = COPY $vgpr4_vgpr5
1009    %3:_(s192) = G_MERGE_VALUES %0, %1, %2
1010    %4:_(s96) = G_TRUNC %3
1011    %5:_(s16), %6:_(s16), %7:_(s16),  %8:_(s16), %9:_(s16), %10:_(s16) = G_UNMERGE_VALUES %4
1012    S_ENDPGM 0, implicit %5, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10
1013
1014...
1015
1016---
1017name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s32
1018body:             |
1019  bb.0:
1020    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3, $vgpr4, $vgpr5
1021    ; CHECK-LABEL: name: test_unmerge_values_s16_trunc_s96_of_merge_values_s192_s32
1022    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1023    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1024    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY $vgpr2
1025    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY $vgpr3
1026    ; CHECK: [[COPY4:%[0-9]+]]:_(s32) = COPY $vgpr4
1027    ; CHECK: [[COPY5:%[0-9]+]]:_(s32) = COPY $vgpr5
1028    ; CHECK: [[MV:%[0-9]+]]:_(s192) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32), [[COPY4]](s32), [[COPY5]](s32)
1029    ; CHECK: [[MV1:%[0-9]+]]:_(s96) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
1030    ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[COPY]](s32)
1031    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
1032    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[COPY]], [[C]](s32)
1033    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
1034    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[COPY1]](s32)
1035    ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[COPY1]], [[C]](s32)
1036    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR1]](s32)
1037    ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[COPY2]](s32)
1038    ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[COPY2]], [[C]](s32)
1039    ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
1040    ; CHECK: S_ENDPGM 0, implicit [[MV]](s192), implicit [[MV1]](s96), implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16), implicit [[TRUNC4]](s16), implicit [[TRUNC5]](s16)
1041    %0:_(s32) = COPY $vgpr0
1042    %1:_(s32) = COPY $vgpr1
1043    %2:_(s32) = COPY $vgpr2
1044    %3:_(s32) = COPY $vgpr3
1045    %4:_(s32) = COPY $vgpr4
1046    %5:_(s32) = COPY $vgpr5
1047    %6:_(s192) = G_MERGE_VALUES %0, %1, %2, %3, %4, %5
1048    %7:_(s96) = G_TRUNC %6
1049    %8:_(s16), %9:_(s16), %10:_(s16),  %11:_(s16), %12:_(s16), %13:_(s16) = G_UNMERGE_VALUES %7
1050    S_ENDPGM 0, implicit %6, implicit %7, implicit %8, implicit %9, implicit %10, implicit %11, implicit %12, implicit %13
1051
1052...
1053
1054---
1055name: test_unmerge_values_s64_anyext_s128_of_merge_values_s64
1056body:             |
1057  bb.0:
1058    ; CHECK-LABEL: name: test_unmerge_values_s64_anyext_s128_of_merge_values_s64
1059    ; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0
1060    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY $vgpr1
1061    ; CHECK: [[MV:%[0-9]+]]:_(s64) = G_MERGE_VALUES [[COPY]](s32), [[COPY1]](s32)
1062    ; CHECK: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
1063    ; CHECK: $vgpr0_vgpr1 = COPY [[MV]](s64)
1064    ; CHECK: $vgpr2_vgpr3 = COPY [[DEF]](s64)
1065    %0:_(s32) = COPY $vgpr0
1066    %1:_(s32) = COPY $vgpr1
1067    %2:_(s64) = G_MERGE_VALUES %0, %1
1068    %3:_(s128) = G_ANYEXT %2
1069    %4:_(s64), %5:_(s64) = G_UNMERGE_VALUES %3
1070    $vgpr0_vgpr1 = COPY %4
1071    $vgpr2_vgpr3 = COPY %5
1072
1073...
1074
1075---
1076name: test_unmerge_values_s32_trunc_s64_of_merge_values_s128
1077body:             |
1078  bb.0:
1079    ; CHECK-LABEL: name: test_unmerge_values_s32_trunc_s64_of_merge_values_s128
1080    ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $vgpr0_vgpr1
1081    ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $vgpr2_vgpr3
1082    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](s64)
1083    ; CHECK: $vgpr0 = COPY [[UV]](s32)
1084    ; CHECK: $vgpr1 = COPY [[UV1]](s32)
1085    %0:_(s64) = COPY $vgpr0_vgpr1
1086    %1:_(s64) = COPY $vgpr2_vgpr3
1087    %2:_(s128) = G_MERGE_VALUES %0, %1
1088    %3:_(s64) = G_TRUNC %2
1089    %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %3
1090    $vgpr0 = COPY %4
1091    $vgpr1 = COPY %5
1092...
1093
1094---
1095name: test_unmerge_values_s8_v4s8_trunc_v4s32
1096body:             |
1097  bb.0:
1098    liveins: $vgpr0_vgpr1_vgpr2_vgpr3
1099
1100    ; CHECK-LABEL: name: test_unmerge_values_s8_v4s8_trunc_v4s32
1101    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
1102    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)
1103    ; CHECK: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[UV]](s32)
1104    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[UV1]](s32)
1105    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[UV2]](s32)
1106    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[UV3]](s32)
1107    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s8), implicit [[TRUNC1]](s8), implicit [[TRUNC2]](s8), implicit [[TRUNC3]](s8)
1108    %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
1109    %1:_(<4 x s8>) = G_TRUNC %0
1110    %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8) = G_UNMERGE_VALUES %1
1111    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5
1112
1113...
1114
1115---
1116name: test_unmerge_values_v2s8_v4s8_trunc_v4s32
1117body:             |
1118  bb.0:
1119    liveins: $vgpr0_vgpr1_vgpr2_vgpr3
1120
1121    ; CHECK-LABEL: name: test_unmerge_values_v2s8_v4s8_trunc_v4s32
1122    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
1123    ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)
1124    ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>)
1125    ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>)
1126    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](<2 x s16>), implicit [[TRUNC1]](<2 x s16>)
1127    %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
1128    %1:_(<4 x s8>) = G_TRUNC %0
1129    %2:_(<2 x s8>), %3:_(<2 x s8>) = G_UNMERGE_VALUES %1
1130    %4:_(<2 x s16>) = G_ANYEXT %2
1131    %5:_(<2 x s16>) = G_ANYEXT %3
1132    S_ENDPGM 0, implicit %4, implicit %5
1133
1134...
1135
1136---
1137name: test_unmerge_values_v4s8_v8s8_trunc_v8s32
1138body:             |
1139  bb.0:
1140    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1141
1142    ; CHECK-LABEL: name: test_unmerge_values_v4s8_v8s8_trunc_v8s32
1143    ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1144    ; CHECK: [[UV:%[0-9]+]]:_(<4 x s32>), [[UV1:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[COPY]](<8 x s32>)
1145    ; CHECK: [[TRUNC:%[0-9]+]]:_(<4 x s8>) = G_TRUNC [[UV]](<4 x s32>)
1146    ; CHECK: [[TRUNC1:%[0-9]+]]:_(<4 x s8>) = G_TRUNC [[UV1]](<4 x s32>)
1147    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](<4 x s8>), implicit [[TRUNC1]](<4 x s8>)
1148    %0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1149    %1:_(<8 x s8>) = G_TRUNC %0
1150    %2:_(<4 x s8>), %3:_(<4 x s8>) = G_UNMERGE_VALUES %1
1151    S_ENDPGM 0, implicit %2, implicit %3
1152
1153...
1154
1155---
1156
1157name: test_unmerge_values_s16_v4s16_trunc_v4s32
1158body:             |
1159  bb.0:
1160    liveins: $vgpr0_vgpr1_vgpr2_vgpr3
1161
1162    ; CHECK-LABEL: name: test_unmerge_values_s16_v4s16_trunc_v4s32
1163    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
1164    ; CHECK: [[UV:%[0-9]+]]:_(s32), [[UV1:%[0-9]+]]:_(s32), [[UV2:%[0-9]+]]:_(s32), [[UV3:%[0-9]+]]:_(s32) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)
1165    ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s32)
1166    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s32)
1167    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s32)
1168    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s32)
1169    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16)
1170    %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
1171    %1:_(<4 x s16>) = G_TRUNC %0
1172    %2:_(s16), %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %1
1173    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5
1174
1175...
1176
1177---
1178name: test_unmerge_values_v2s16_v4s16_trunc_v4s32
1179body:             |
1180  bb.0:
1181    liveins: $vgpr0_vgpr1_vgpr2_vgpr3
1182
1183    ; CHECK-LABEL: name: test_unmerge_values_v2s16_v4s16_trunc_v4s32
1184    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
1185    ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<4 x s32>)
1186    ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>)
1187    ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>)
1188    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](<2 x s16>), implicit [[TRUNC1]](<2 x s16>)
1189    %0:_(<4 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3
1190    %1:_(<4 x s16>) = G_TRUNC %0
1191    %2:_(<2 x s16>), %3:_(<2 x s16>) = G_UNMERGE_VALUES %1
1192    S_ENDPGM 0, implicit %2, implicit %3
1193
1194...
1195
1196---
1197name: test_unmerge_values_v2s16_v8s16_trunc_v8s32
1198body:             |
1199  bb.0:
1200    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1201
1202    ; CHECK-LABEL: name: test_unmerge_values_v2s16_v8s16_trunc_v8s32
1203    ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1204    ; CHECK: [[UV:%[0-9]+]]:_(<2 x s32>), [[UV1:%[0-9]+]]:_(<2 x s32>), [[UV2:%[0-9]+]]:_(<2 x s32>), [[UV3:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[COPY]](<8 x s32>)
1205    ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV]](<2 x s32>)
1206    ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV1]](<2 x s32>)
1207    ; CHECK: [[TRUNC2:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV2]](<2 x s32>)
1208    ; CHECK: [[TRUNC3:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV3]](<2 x s32>)
1209    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](<2 x s16>), implicit [[TRUNC1]](<2 x s16>), implicit [[TRUNC2]](<2 x s16>), implicit [[TRUNC3]](<2 x s16>)
1210    %0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1211    %1:_(<8 x s16>) = G_TRUNC %0
1212    %2:_(<2 x s16>), %3:_(<2 x s16>), %4:_(<2 x s16>), %5:_(<2 x s16>) = G_UNMERGE_VALUES %1
1213    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5
1214
1215...
1216
1217---
1218name: test_unmerge_values_v4s16_v8s16_trunc_v8s32
1219body:             |
1220  bb.0:
1221    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1222
1223    ; CHECK-LABEL: name: test_unmerge_values_v4s16_v8s16_trunc_v8s32
1224    ; CHECK: [[COPY:%[0-9]+]]:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1225    ; CHECK: [[UV:%[0-9]+]]:_(<4 x s32>), [[UV1:%[0-9]+]]:_(<4 x s32>) = G_UNMERGE_VALUES [[COPY]](<8 x s32>)
1226    ; CHECK: [[UV2:%[0-9]+]]:_(<2 x s32>), [[UV3:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[UV]](<4 x s32>)
1227    ; CHECK: [[TRUNC:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV2]](<2 x s32>)
1228    ; CHECK: [[TRUNC1:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV3]](<2 x s32>)
1229    ; CHECK: [[CONCAT_VECTORS:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[TRUNC]](<2 x s16>), [[TRUNC1]](<2 x s16>)
1230    ; CHECK: [[UV4:%[0-9]+]]:_(<2 x s32>), [[UV5:%[0-9]+]]:_(<2 x s32>) = G_UNMERGE_VALUES [[UV1]](<4 x s32>)
1231    ; CHECK: [[TRUNC2:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV4]](<2 x s32>)
1232    ; CHECK: [[TRUNC3:%[0-9]+]]:_(<2 x s16>) = G_TRUNC [[UV5]](<2 x s32>)
1233    ; CHECK: [[CONCAT_VECTORS1:%[0-9]+]]:_(<4 x s16>) = G_CONCAT_VECTORS [[TRUNC2]](<2 x s16>), [[TRUNC3]](<2 x s16>)
1234    ; CHECK: S_ENDPGM 0, implicit [[CONCAT_VECTORS]](<4 x s16>), implicit [[CONCAT_VECTORS1]](<4 x s16>)
1235    %0:_(<8 x s32>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1236    %1:_(<8 x s16>) = G_TRUNC %0
1237    %2:_(<4 x s16>), %3:_(<4 x s16>) = G_UNMERGE_VALUES %1
1238    S_ENDPGM 0, implicit %2, implicit %3
1239
1240...
1241
1242---
1243name: test_unmerge_values_s8_v4s8_trunc_v4s16
1244body:             |
1245  bb.0:
1246    liveins: $vgpr0_vgpr1
1247
1248    ; CHECK-LABEL: name: test_unmerge_values_s8_v4s8_trunc_v4s16
1249    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
1250    ; CHECK: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
1251    ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
1252    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
1253    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
1254    ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
1255    ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
1256    ; CHECK: [[TRUNC:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST]](s32)
1257    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR]](s32)
1258    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s8) = G_TRUNC [[BITCAST1]](s32)
1259    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s8) = G_TRUNC [[LSHR1]](s32)
1260    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s8), implicit [[TRUNC1]](s8), implicit [[TRUNC2]](s8), implicit [[TRUNC3]](s8)
1261    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
1262    %1:_(<4 x s8>) = G_TRUNC %0
1263    %2:_(s8), %3:_(s8), %4:_(s8), %5:_(s8) = G_UNMERGE_VALUES %1
1264    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5
1265
1266...
1267
1268---
1269name: test_unmerge_values_v2s8_v4s8_trunc_v4s16
1270body:             |
1271  bb.0:
1272    liveins: $vgpr0_vgpr1
1273
1274    ; CHECK-LABEL: name: test_unmerge_values_v2s8_v4s8_trunc_v4s16
1275    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s16>) = COPY $vgpr0_vgpr1
1276    ; CHECK: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
1277    ; CHECK: [[COPY1:%[0-9]+]]:_(<2 x s16>) = COPY [[UV]](<2 x s16>)
1278    ; CHECK: [[COPY2:%[0-9]+]]:_(<2 x s16>) = COPY [[UV1]](<2 x s16>)
1279    ; CHECK: S_ENDPGM 0, implicit [[COPY1]](<2 x s16>), implicit [[COPY2]](<2 x s16>)
1280    %0:_(<4 x s16>) = COPY $vgpr0_vgpr1
1281    %1:_(<4 x s8>) = G_TRUNC %0
1282    %2:_(<2 x s8>), %3:_(<2 x s8>) = G_UNMERGE_VALUES %1
1283    %4:_(<2 x s16>) = G_ANYEXT %2
1284    %5:_(<2 x s16>) = G_ANYEXT %3
1285    S_ENDPGM 0, implicit %4, implicit %5
1286
1287...
1288
1289---
1290name: test_unmerge_values_s32_v4s32_trunc_v4s64
1291body:             |
1292  bb.0:
1293    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1294
1295    ; CHECK-LABEL: name: test_unmerge_values_s32_v4s32_trunc_v4s64
1296    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1297    ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<4 x s64>)
1298    ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV]](s64)
1299    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV1]](s64)
1300    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV2]](s64)
1301    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV3]](s64)
1302    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s32), implicit [[TRUNC1]](s32), implicit [[TRUNC2]](s32), implicit [[TRUNC3]](s32)
1303    %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1304    %1:_(<4 x s32>) = G_TRUNC %0
1305    %2:_(s32), %3:_(s32), %4:_(s32), %5:_(s32) = G_UNMERGE_VALUES %1
1306    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5
1307
1308...
1309
1310---
1311name: test_unmerge_values_v2s32_v4s32_trunc_v4s64
1312body:             |
1313  bb.0:
1314    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1315
1316    ; CHECK-LABEL: name: test_unmerge_values_v2s32_v4s32_trunc_v4s64
1317    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1318    ; CHECK: [[UV:%[0-9]+]]:_(<2 x s64>), [[UV1:%[0-9]+]]:_(<2 x s64>) = G_UNMERGE_VALUES [[COPY]](<4 x s64>)
1319    ; CHECK: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV]](<2 x s64>)
1320    ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV2]](s64)
1321    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV3]](s64)
1322    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[TRUNC]](s32), [[TRUNC1]](s32)
1323    ; CHECK: [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV1]](<2 x s64>)
1324    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV4]](s64)
1325    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV5]](s64)
1326    ; CHECK: [[BUILD_VECTOR1:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[TRUNC2]](s32), [[TRUNC3]](s32)
1327    ; CHECK: S_ENDPGM 0, implicit [[BUILD_VECTOR]](<2 x s32>), implicit [[BUILD_VECTOR1]](<2 x s32>)
1328    %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1329    %1:_(<4 x s32>) = G_TRUNC %0
1330    %2:_(<2 x s32>), %3:_(<2 x s32>) = G_UNMERGE_VALUES %1
1331    S_ENDPGM 0, implicit %2, implicit %3
1332
1333...
1334
1335---
1336name: test_unmerge_values_s16_v4s16_trunc_v4s64
1337body:             |
1338  bb.0:
1339    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1340
1341    ; CHECK-LABEL: name: test_unmerge_values_s16_v4s16_trunc_v4s64
1342    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1343    ; CHECK: [[UV:%[0-9]+]]:_(s64), [[UV1:%[0-9]+]]:_(s64), [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[COPY]](<4 x s64>)
1344    ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[UV]](s64)
1345    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[UV1]](s64)
1346    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[UV2]](s64)
1347    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[UV3]](s64)
1348    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16)
1349    %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1350    %1:_(<4 x s16>) = G_TRUNC %0
1351    %2:_(s16), %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %1
1352    S_ENDPGM 0, implicit %2, implicit %3, implicit %4, implicit %5
1353
1354...
1355
1356---
1357name: test_unmerge_values_v2s16_v4s16_trunc_v4s64
1358body:             |
1359  bb.0:
1360    liveins: $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1361
1362    ; CHECK-LABEL: name: test_unmerge_values_v2s16_v4s16_trunc_v4s64
1363    ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1364    ; CHECK: [[UV:%[0-9]+]]:_(<2 x s64>), [[UV1:%[0-9]+]]:_(<2 x s64>) = G_UNMERGE_VALUES [[COPY]](<4 x s64>)
1365    ; CHECK: [[UV2:%[0-9]+]]:_(s64), [[UV3:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV]](<2 x s64>)
1366    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
1367    ; CHECK: [[TRUNC:%[0-9]+]]:_(s32) = G_TRUNC [[UV2]](s64)
1368    ; CHECK: [[AND:%[0-9]+]]:_(s32) = G_AND [[TRUNC]], [[C]]
1369    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s32) = G_TRUNC [[UV3]](s64)
1370    ; CHECK: [[AND1:%[0-9]+]]:_(s32) = G_AND [[TRUNC1]], [[C]]
1371    ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
1372    ; CHECK: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[AND1]], [[C1]](s32)
1373    ; CHECK: [[OR:%[0-9]+]]:_(s32) = G_OR [[AND]], [[SHL]]
1374    ; CHECK: [[BITCAST:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR]](s32)
1375    ; CHECK: [[UV4:%[0-9]+]]:_(s64), [[UV5:%[0-9]+]]:_(s64) = G_UNMERGE_VALUES [[UV1]](<2 x s64>)
1376    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s32) = G_TRUNC [[UV4]](s64)
1377    ; CHECK: [[AND2:%[0-9]+]]:_(s32) = G_AND [[TRUNC2]], [[C]]
1378    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s32) = G_TRUNC [[UV5]](s64)
1379    ; CHECK: [[AND3:%[0-9]+]]:_(s32) = G_AND [[TRUNC3]], [[C]]
1380    ; CHECK: [[SHL1:%[0-9]+]]:_(s32) = G_SHL [[AND3]], [[C1]](s32)
1381    ; CHECK: [[OR1:%[0-9]+]]:_(s32) = G_OR [[AND2]], [[SHL1]]
1382    ; CHECK: [[BITCAST1:%[0-9]+]]:_(<2 x s16>) = G_BITCAST [[OR1]](s32)
1383    ; CHECK: S_ENDPGM 0, implicit [[BITCAST]](<2 x s16>), implicit [[BITCAST1]](<2 x s16>)
1384    %0:_(<4 x s64>) = COPY $vgpr0_vgpr1_vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7
1385    %1:_(<4 x s16>) = G_TRUNC %0
1386    %2:_(<2 x s16>), %3:_(<2 x s16>) = G_UNMERGE_VALUES %1
1387    S_ENDPGM 0, implicit %2, implicit %3
1388
1389...
1390
1391---
1392name: test_unmerge_values_s16_from_v3s16_from_v6s16
1393body:             |
1394  bb.0:
1395    liveins: $vgpr0_vgpr1_vgpr2
1396
1397    ; CHECK-LABEL: name: test_unmerge_values_s16_from_v3s16_from_v6s16
1398    ; CHECK: [[COPY:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2
1399    ; CHECK: [[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>)
1400    ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
1401    ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32)
1402    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
1403    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
1404    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
1405    ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
1406    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32)
1407    ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
1408    ; CHECK: [[UV3:%[0-9]+]]:_(<2 x s16>), [[UV4:%[0-9]+]]:_(<2 x s16>), [[UV5:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>)
1409    ; CHECK: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV4]](<2 x s16>)
1410    ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32)
1411    ; CHECK: [[TRUNC3:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR2]](s32)
1412    ; CHECK: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV5]](<2 x s16>)
1413    ; CHECK: [[TRUNC4:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST3]](s32)
1414    ; CHECK: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32)
1415    ; CHECK: [[TRUNC5:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR3]](s32)
1416    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[TRUNC3]](s16), implicit [[TRUNC4]](s16), implicit [[TRUNC5]](s16)
1417  %0:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2
1418  %1:_(<3 x s16>), %2:_(<3 x s16>) = G_UNMERGE_VALUES %0
1419  %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %1
1420  %6:_(s16), %7:_(s16), %8:_(s16) = G_UNMERGE_VALUES %2
1421  S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6, implicit %7, implicit %8
1422
1423...
1424
1425---
1426name: test_unmerge_values_s16_from_v3s16_from_v6s16_other_def_use
1427body:             |
1428  bb.0:
1429    liveins: $vgpr0_vgpr1_vgpr2
1430
1431    ; CHECK-LABEL: name: test_unmerge_values_s16_from_v3s16_from_v6s16_other_def_use
1432    ; CHECK: [[COPY:%[0-9]+]]:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2
1433    ; CHECK: [[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>)
1434    ; CHECK: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST [[UV]](<2 x s16>)
1435    ; CHECK: [[TRUNC:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST]](s32)
1436    ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
1437    ; CHECK: [[LSHR:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST]], [[C]](s32)
1438    ; CHECK: [[TRUNC1:%[0-9]+]]:_(s16) = G_TRUNC [[LSHR]](s32)
1439    ; CHECK: [[BITCAST1:%[0-9]+]]:_(s32) = G_BITCAST [[UV1]](<2 x s16>)
1440    ; CHECK: [[TRUNC2:%[0-9]+]]:_(s16) = G_TRUNC [[BITCAST1]](s32)
1441    ; CHECK: [[LSHR1:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST1]], [[C]](s32)
1442    ; CHECK: [[UV3:%[0-9]+]]:_(<2 x s16>), [[UV4:%[0-9]+]]:_(<2 x s16>), [[UV5:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<6 x s16>)
1443    ; CHECK: [[BITCAST2:%[0-9]+]]:_(s32) = G_BITCAST [[UV4]](<2 x s16>)
1444    ; CHECK: [[LSHR2:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST2]], [[C]](s32)
1445    ; CHECK: [[BITCAST3:%[0-9]+]]:_(s32) = G_BITCAST [[UV5]](<2 x s16>)
1446    ; CHECK: [[LSHR3:%[0-9]+]]:_(s32) = G_LSHR [[BITCAST3]], [[C]](s32)
1447    ; CHECK: [[COPY1:%[0-9]+]]:_(s32) = COPY [[LSHR2]](s32)
1448    ; CHECK: [[COPY2:%[0-9]+]]:_(s32) = COPY [[BITCAST3]](s32)
1449    ; CHECK: [[COPY3:%[0-9]+]]:_(s32) = COPY [[LSHR3]](s32)
1450    ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<3 x s32>) = G_BUILD_VECTOR [[COPY1]](s32), [[COPY2]](s32), [[COPY3]](s32)
1451    ; CHECK: S_ENDPGM 0, implicit [[TRUNC]](s16), implicit [[TRUNC1]](s16), implicit [[TRUNC2]](s16), implicit [[BUILD_VECTOR]](<3 x s32>)
1452  %0:_(<6 x s16>) = COPY $vgpr0_vgpr1_vgpr2
1453  %1:_(<3 x s16>), %2:_(<3 x s16>) = G_UNMERGE_VALUES %0
1454  %3:_(s16), %4:_(s16), %5:_(s16) = G_UNMERGE_VALUES %1
1455  %6:_(<3 x s32>) = G_ANYEXT %2
1456  S_ENDPGM 0, implicit %3, implicit %4, implicit %5, implicit %6
1457
1458...
1459