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