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