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