1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect -global-isel %s -verify-machineinstrs -o - -regbankselect-fast | FileCheck -check-prefix=FAST %s
3# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect -global-isel %s -verify-machineinstrs -o - -regbankselect-greedy | FileCheck -check-prefix=GREEDY %s
4
5---
6name: select_s32_scc_ss
7legalized: true
8body: |
9  bb.0:
10    liveins: $sgpr0, $sgpr1, $sgpr2, $sgpr3
11    ; FAST-LABEL: name: select_s32_scc_ss
12    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
13    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
14    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
15    ; FAST: [[COPY3:%[0-9]+]]:sgpr(s32) = COPY $sgpr3
16    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
17    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
18    ; FAST: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
19    ; FAST: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
20    ; GREEDY-LABEL: name: select_s32_scc_ss
21    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
22    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
23    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
24    ; GREEDY: [[COPY3:%[0-9]+]]:sgpr(s32) = COPY $sgpr3
25    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
26    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
27    ; GREEDY: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
28    ; GREEDY: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
29    %0:_(s32) = COPY $sgpr0
30    %1:_(s32) = COPY $sgpr1
31    %2:_(s32) = COPY $sgpr2
32    %3:_(s32) = COPY $sgpr3
33    %4:_(s1) = G_ICMP intpred(ne), %0, %1
34    %5:_(s32) = G_SELECT %4, %2, %3
35...
36
37---
38name: select_s32_scc_sv
39legalized: true
40body: |
41  bb.0:
42    liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr0
43    ; FAST-LABEL: name: select_s32_scc_sv
44    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
45    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
46    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
47    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
48    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
49    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
50    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
51    ; FAST: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
52    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[COPY5]], [[COPY3]]
53    ; GREEDY-LABEL: name: select_s32_scc_sv
54    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
55    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
56    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
57    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
58    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
59    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
60    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
61    ; GREEDY: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
62    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[COPY5]], [[COPY3]]
63    %0:_(s32) = COPY $sgpr0
64    %1:_(s32) = COPY $sgpr1
65    %2:_(s32) = COPY $sgpr2
66    %3:_(s32) = COPY $vgpr0
67    %4:_(s1) = G_ICMP intpred(ne), %0, %1
68    %5:_(s32) = G_SELECT %4, %2, %3
69
70...
71
72---
73name: select_s32_scc_vs
74legalized: true
75body: |
76  bb.0:
77    liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr0
78    ; FAST-LABEL: name: select_s32_scc_vs
79    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
80    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
81    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
82    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
83    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
84    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
85    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
86    ; FAST: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
87    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[COPY3]], [[COPY5]]
88    ; GREEDY-LABEL: name: select_s32_scc_vs
89    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
90    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
91    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
92    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
93    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
94    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
95    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
96    ; GREEDY: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
97    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[COPY3]], [[COPY5]]
98    %0:_(s32) = COPY $sgpr0
99    %1:_(s32) = COPY $sgpr1
100    %2:_(s32) = COPY $sgpr2
101    %3:_(s32) = COPY $vgpr0
102    %4:_(s1) = G_ICMP intpred(ne), %0, %1
103    %5:_(s32) = G_SELECT %4, %3, %2
104...
105
106---
107name: select_s32_scc_vv
108legalized: true
109body: |
110  bb.0:
111    liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
112    ; FAST-LABEL: name: select_s32_scc_vv
113    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
114    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
115    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
116    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
117    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
118    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
119    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
120    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[COPY2]], [[COPY3]]
121    ; GREEDY-LABEL: name: select_s32_scc_vv
122    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
123    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
124    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
125    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
126    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
127    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
128    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
129    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[COPY2]], [[COPY3]]
130    %0:_(s32) = COPY $sgpr0
131    %1:_(s32) = COPY $sgpr1
132    %2:_(s32) = COPY $vgpr0
133    %3:_(s32) = COPY $vgpr1
134    %4:_(s1) = G_ICMP intpred(ne), %0, %1
135    %5:_(s32) = G_SELECT %4, %2, %3
136...
137
138---
139name: select_s32_vcc_ss
140legalized: true
141body: |
142  bb.0:
143    liveins: $sgpr0, $sgpr1, $vgpr0, $vgpr1
144    ; FAST-LABEL: name: select_s32_vcc_ss
145    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
146    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
147    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
148    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
149    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY3]]
150    ; FAST: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
151    ; FAST: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
152    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[COPY4]], [[COPY5]]
153    ; GREEDY-LABEL: name: select_s32_vcc_ss
154    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
155    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
156    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
157    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
158    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY3]]
159    ; GREEDY: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
160    ; GREEDY: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
161    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[COPY4]], [[COPY5]]
162    %0:_(s32) = COPY $sgpr0
163    %1:_(s32) = COPY $sgpr1
164    %2:_(s32) = COPY $vgpr0
165    %3:_(s32) = COPY $vgpr1
166    %4:_(s1) = G_ICMP intpred(ne), %2, %3
167    %5:_(s32) = G_SELECT %4, %0, %1
168...
169
170---
171name: select_s32_vcc_sv
172legalized: true
173body: |
174  bb.0:
175    liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr2
176    ; FAST-LABEL: name: select_s32_vcc_sv
177    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
178    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
179    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
180    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
181    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
182    ; FAST: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
183    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[COPY4]], [[COPY3]]
184    ; GREEDY-LABEL: name: select_s32_vcc_sv
185    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
186    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
187    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
188    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
189    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
190    ; GREEDY: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
191    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[COPY4]], [[COPY3]]
192    %0:_(s32) = COPY $sgpr0
193    %1:_(s32) = COPY $vgpr0
194    %2:_(s32) = COPY $vgpr1
195    %3:_(s32) = COPY $vgpr2
196    %4:_(s1) = G_ICMP intpred(ne), %1, %2
197    %5:_(s32) = G_SELECT %4, %0, %3
198...
199
200---
201name: select_s32_vcc_vs
202legalized: true
203body: |
204  bb.0:
205    liveins: $sgpr0, $vgpr0, $vgpr1, $vgpr2
206    ; FAST-LABEL: name: select_s32_vcc_vs
207    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
208    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
209    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
210    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
211    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
212    ; FAST: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
213    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[COPY3]], [[COPY4]]
214    ; GREEDY-LABEL: name: select_s32_vcc_vs
215    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
216    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
217    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
218    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
219    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
220    ; GREEDY: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
221    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[COPY3]], [[COPY4]]
222    %0:_(s32) = COPY $sgpr0
223    %1:_(s32) = COPY $vgpr0
224    %2:_(s32) = COPY $vgpr1
225    %3:_(s32) = COPY $vgpr2
226    %4:_(s1) = G_ICMP intpred(ne), %1, %2
227    %5:_(s32) = G_SELECT %4, %3, %0
228...
229
230---
231name: select_s32_vcc_vv
232legalized: true
233body: |
234  bb.0:
235    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
236    ; FAST-LABEL: name: select_s32_vcc_vv
237    ; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
238    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
239    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
240    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
241    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
242    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[COPY2]], [[COPY3]]
243    ; GREEDY-LABEL: name: select_s32_vcc_vv
244    ; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
245    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
246    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
247    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr3
248    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
249    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[COPY2]], [[COPY3]]
250    %0:_(s32) = COPY $vgpr0
251    %1:_(s32) = COPY $vgpr1
252    %2:_(s32) = COPY $vgpr2
253    %3:_(s32) = COPY $vgpr3
254    %4:_(s1) = G_ICMP intpred(ne), %0, %1
255    %5:_(s32) = G_SELECT %4, %2, %3
256...
257
258---
259name: select_s64_sss
260legalized: true
261body: |
262  bb.0:
263    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5
264    ; FAST-LABEL: name: select_s64_sss
265    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
266    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
267    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
268    ; FAST: [[COPY3:%[0-9]+]]:sgpr(s64) = COPY $sgpr4_sgpr5
269    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
270    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
271    ; FAST: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
272    ; FAST: [[SELECT:%[0-9]+]]:sgpr(s64) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
273    ; GREEDY-LABEL: name: select_s64_sss
274    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
275    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
276    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
277    ; GREEDY: [[COPY3:%[0-9]+]]:sgpr(s64) = COPY $sgpr4_sgpr5
278    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
279    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
280    ; GREEDY: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
281    ; GREEDY: [[SELECT:%[0-9]+]]:sgpr(s64) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
282    %0:_(s32) = COPY $sgpr0
283    %1:_(s32) = COPY $sgpr1
284    %2:_(s64) = COPY $sgpr2_sgpr3
285    %3:_(s64) = COPY $sgpr4_sgpr5
286    %4:_(s1) = G_ICMP intpred(ne), %0, %1
287    %5:_(s64) = G_SELECT %4, %2, %3
288...
289
290---
291name: select_s64_ssv
292legalized: true
293body: |
294  bb.0:
295    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
296    ; FAST-LABEL: name: select_s64_ssv
297    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
298    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
299    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
300    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
301    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
302    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
303    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
304    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
305    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
306    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
307    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
308    ; FAST: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
309    ; GREEDY-LABEL: name: select_s64_ssv
310    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
311    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
312    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
313    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
314    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
315    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
316    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
317    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
318    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
319    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
320    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
321    ; GREEDY: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
322    %0:_(s32) = COPY $sgpr0
323    %1:_(s32) = COPY $sgpr1
324    %2:_(s64) = COPY $sgpr2_sgpr3
325    %3:_(s64) = COPY $vgpr0_vgpr1
326    %4:_(s1) = G_ICMP intpred(ne), %0, %1
327    %5:_(s64) = G_SELECT %4, %2, %3
328
329...
330
331---
332name: select_s64_svs
333legalized: true
334body: |
335  bb.0:
336    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
337    ; FAST-LABEL: name: select_s64_svs
338    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
339    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
340    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
341    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
342    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
343    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
344    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
345    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
346    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
347    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
348    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
349    ; FAST: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
350    ; GREEDY-LABEL: name: select_s64_svs
351    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
352    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
353    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
354    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
355    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
356    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
357    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
358    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
359    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
360    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
361    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
362    ; GREEDY: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
363    %0:_(s32) = COPY $sgpr0
364    %1:_(s32) = COPY $sgpr1
365    %2:_(s64) = COPY $sgpr2_sgpr3
366    %3:_(s64) = COPY $vgpr0_vgpr1
367    %4:_(s1) = G_ICMP intpred(ne), %0, %1
368    %5:_(s64) = G_SELECT %4, %3, %2
369...
370
371---
372name: select_s64_svv
373legalized: true
374body: |
375  bb.0:
376    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1, $vgpr2_vgpr3
377    ; FAST-LABEL: name: select_s64_svv
378    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
379    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
380    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
381    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
382    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
383    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
384    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
385    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
386    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
387    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
388    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
389    ; FAST: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
390    ; GREEDY-LABEL: name: select_s64_svv
391    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
392    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
393    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
394    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
395    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
396    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
397    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
398    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
399    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
400    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
401    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
402    ; GREEDY: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
403    %0:_(s32) = COPY $sgpr0
404    %1:_(s32) = COPY $sgpr1
405    %2:_(s64) = COPY $vgpr0_vgpr1
406    %3:_(s64) = COPY $vgpr2_vgpr3
407    %4:_(s1) = G_ICMP intpred(ne), %0, %1
408    %5:_(s64) = G_SELECT %4, %2, %3
409...
410
411---
412name: select_s64_vss
413legalized: true
414body: |
415  bb.0:
416    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0, $vgpr1
417    ; FAST-LABEL: name: select_s64_vss
418    ; FAST: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
419    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
420    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
421    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
422    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY3]]
423    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
424    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
425    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
426    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
427    ; FAST: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
428    ; GREEDY-LABEL: name: select_s64_vss
429    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
430    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
431    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
432    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
433    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY3]]
434    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
435    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](s64)
436    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
437    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
438    ; GREEDY: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
439    %0:_(s64) = COPY $sgpr0_sgpr1
440    %1:_(s64) = COPY $sgpr2_sgpr3
441    %2:_(s32) = COPY $vgpr0
442    %3:_(s32) = COPY $vgpr1
443    %4:_(s1) = G_ICMP intpred(ne), %2, %3
444    %5:_(s64) = G_SELECT %4, %0, %1
445...
446
447---
448name: select_s64_vsv
449legalized: true
450body: |
451  bb.0:
452    liveins: $sgpr0_sgpr1, $vgpr0, $vgpr1, $vgpr2_vgpr3
453    ; FAST-LABEL: name: select_s64_vsv
454    ; FAST: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
455    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
456    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
457    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
458    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
459    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
460    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
461    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
462    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
463    ; FAST: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
464    ; GREEDY-LABEL: name: select_s64_vsv
465    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
466    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
467    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
468    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
469    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
470    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
471    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
472    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
473    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
474    ; GREEDY: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
475    %0:_(s64) = COPY $sgpr0_sgpr1
476    %1:_(s32) = COPY $vgpr0
477    %2:_(s32) = COPY $vgpr1
478    %3:_(s64) = COPY $vgpr2_vgpr3
479    %4:_(s1) = G_ICMP intpred(ne), %1, %2
480    %5:_(s64) = G_SELECT %4, %0, %3
481...
482
483---
484name: select_s64_vvs
485legalized: true
486body: |
487  bb.0:
488    liveins: $sgpr0_sgpr1, $vgpr0, $vgpr1, $vgpr2_vgpr3
489    ; FAST-LABEL: name: select_s64_vvs
490    ; FAST: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
491    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
492    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
493    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
494    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
495    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
496    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
497    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
498    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
499    ; FAST: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
500    ; GREEDY-LABEL: name: select_s64_vvs
501    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
502    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
503    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
504    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
505    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
506    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
507    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](s64)
508    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
509    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
510    ; GREEDY: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
511    %0:_(s64) = COPY $sgpr0_sgpr1
512    %1:_(s32) = COPY $vgpr0
513    %2:_(s32) = COPY $vgpr1
514    %3:_(s64) = COPY $vgpr2_vgpr3
515    %4:_(s1) = G_ICMP intpred(ne), %1, %2
516    %5:_(s64) = G_SELECT %4, %3, %0
517...
518
519---
520name: select_s64_vvv
521legalized: true
522body: |
523  bb.0:
524    liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5
525    ; FAST-LABEL: name: select_s64_vvv
526    ; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
527    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
528    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
529    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr4_vgpr5
530    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
531    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
532    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
533    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
534    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
535    ; FAST: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
536    ; GREEDY-LABEL: name: select_s64_vvv
537    ; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
538    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
539    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
540    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY $vgpr4_vgpr5
541    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
542    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](s64)
543    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](s64)
544    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
545    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
546    ; GREEDY: [[MV:%[0-9]+]]:vgpr(s64) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
547    %0:_(s32) = COPY $vgpr0
548    %1:_(s32) = COPY $vgpr1
549    %2:_(s64) = COPY $vgpr2_vgpr3
550    %3:_(s64) = COPY $vgpr4_vgpr5
551    %4:_(s1) = G_ICMP intpred(ne), %0, %1
552    %5:_(s64) = G_SELECT %4, %2, %3
553...
554
555---
556name: select_v2s32_scc_ss
557legalized: true
558body: |
559  bb.0:
560    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5
561    ; FAST-LABEL: name: select_v2s32_scc_ss
562    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
563    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
564    ; FAST: [[COPY2:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
565    ; FAST: [[COPY3:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr4_sgpr5
566    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
567    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
568    ; FAST: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
569    ; FAST: [[SELECT:%[0-9]+]]:sgpr(<2 x s32>) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
570    ; GREEDY-LABEL: name: select_v2s32_scc_ss
571    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
572    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
573    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
574    ; GREEDY: [[COPY3:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr4_sgpr5
575    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
576    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
577    ; GREEDY: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
578    ; GREEDY: [[SELECT:%[0-9]+]]:sgpr(<2 x s32>) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
579    %0:_(s32) = COPY $sgpr0
580    %1:_(s32) = COPY $sgpr1
581    %2:_(<2 x s32>) = COPY $sgpr2_sgpr3
582    %3:_(<2 x s32>) = COPY $sgpr4_sgpr5
583    %4:_(s1) = G_ICMP intpred(ne), %0, %1
584    %5:_(<2 x s32>) = G_SELECT %4, %2, %3
585...
586
587---
588name: select_v2s32_scc_sv
589legalized: true
590body: |
591  bb.0:
592    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
593    ; FAST-LABEL: name: select_v2s32_scc_sv
594    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
595    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
596    ; FAST: [[COPY2:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
597    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
598    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
599    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
600    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
601    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
602    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
603    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
604    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
605    ; FAST: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
606    ; GREEDY-LABEL: name: select_v2s32_scc_sv
607    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
608    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
609    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
610    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
611    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
612    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
613    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
614    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
615    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
616    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
617    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
618    ; GREEDY: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
619    %0:_(s32) = COPY $sgpr0
620    %1:_(s32) = COPY $sgpr1
621    %2:_(<2 x s32>) = COPY $sgpr2_sgpr3
622    %3:_(<2 x s32>) = COPY $vgpr0_vgpr1
623    %4:_(s1) = G_ICMP intpred(ne), %0, %1
624    %5:_(<2 x s32>) = G_SELECT %4, %2, %3
625
626...
627
628---
629name: select_v2s32_scc_vs
630legalized: true
631body: |
632  bb.0:
633    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
634    ; FAST-LABEL: name: select_v2s32_scc_vs
635    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
636    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
637    ; FAST: [[COPY2:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
638    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
639    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
640    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
641    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
642    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
643    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
644    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
645    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
646    ; FAST: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
647    ; GREEDY-LABEL: name: select_v2s32_scc_vs
648    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
649    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
650    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
651    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
652    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
653    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
654    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
655    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
656    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
657    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
658    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
659    ; GREEDY: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
660    %0:_(s32) = COPY $sgpr0
661    %1:_(s32) = COPY $sgpr1
662    %2:_(<2 x s32>) = COPY $sgpr2_sgpr3
663    %3:_(<2 x s32>) = COPY $vgpr0_vgpr1
664    %4:_(s1) = G_ICMP intpred(ne), %0, %1
665    %5:_(<2 x s32>) = G_SELECT %4, %3, %2
666...
667
668---
669name: select_v2s32_scc_vv
670legalized: true
671body: |
672  bb.0:
673    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1, $vgpr2_vgpr3
674    ; FAST-LABEL: name: select_v2s32_scc_vv
675    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
676    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
677    ; FAST: [[COPY2:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
678    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
679    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
680    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
681    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
682    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
683    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
684    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
685    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
686    ; FAST: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
687    ; GREEDY-LABEL: name: select_v2s32_scc_vv
688    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
689    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
690    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr0_vgpr1
691    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
692    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
693    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
694    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
695    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
696    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
697    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
698    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
699    ; GREEDY: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
700    %0:_(s32) = COPY $sgpr0
701    %1:_(s32) = COPY $sgpr1
702    %2:_(<2 x s32>) = COPY $vgpr0_vgpr1
703    %3:_(<2 x s32>) = COPY $vgpr2_vgpr3
704    %4:_(s1) = G_ICMP intpred(ne), %0, %1
705    %5:_(<2 x s32>) = G_SELECT %4, %2, %3
706...
707
708---
709name: select_v2s32_vcc_ss
710legalized: true
711body: |
712  bb.0:
713    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0, $vgpr1
714    ; FAST-LABEL: name: select_v2s32_vcc_ss
715    ; FAST: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
716    ; FAST: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
717    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
718    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
719    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY3]]
720    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
721    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
722    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
723    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
724    ; FAST: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
725    ; GREEDY-LABEL: name: select_v2s32_vcc_ss
726    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
727    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr2_sgpr3
728    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
729    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
730    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY3]]
731    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
732    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](<2 x s32>)
733    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
734    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
735    ; GREEDY: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
736    %0:_(<2 x s32>) = COPY $sgpr0_sgpr1
737    %1:_(<2 x s32>) = COPY $sgpr2_sgpr3
738    %2:_(s32) = COPY $vgpr0
739    %3:_(s32) = COPY $vgpr1
740    %4:_(s1) = G_ICMP intpred(ne), %2, %3
741    %5:_(<2 x s32>) = G_SELECT %4, %0, %1
742...
743
744---
745name: select_v2s32_vcc_sv
746legalized: true
747body: |
748  bb.0:
749    liveins: $sgpr0_sgpr1, $vgpr0, $vgpr1, $vgpr2_vgpr3
750    ; FAST-LABEL: name: select_v2s32_vcc_sv
751    ; FAST: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
752    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
753    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
754    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
755    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
756    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
757    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
758    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
759    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
760    ; FAST: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
761    ; GREEDY-LABEL: name: select_v2s32_vcc_sv
762    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
763    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
764    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
765    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
766    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
767    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
768    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
769    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
770    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
771    ; GREEDY: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
772    %0:_(<2 x s32>) = COPY $sgpr0_sgpr1
773    %1:_(s32) = COPY $vgpr0
774    %2:_(s32) = COPY $vgpr1
775    %3:_(<2 x s32>) = COPY $vgpr2_vgpr3
776    %4:_(s1) = G_ICMP intpred(ne), %1, %2
777    %5:_(<2 x s32>) = G_SELECT %4, %0, %3
778...
779
780---
781name: select_v2s32_vcc_vs
782legalized: true
783body: |
784  bb.0:
785    liveins: $sgpr0_sgpr1, $vgpr0, $vgpr1, $vgpr2_vgpr3
786    ; FAST-LABEL: name: select_v2s32_vcc_vs
787    ; FAST: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
788    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
789    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
790    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
791    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
792    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
793    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
794    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
795    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
796    ; FAST: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
797    ; GREEDY-LABEL: name: select_v2s32_vcc_vs
798    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(<2 x s32>) = COPY $sgpr0_sgpr1
799    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
800    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
801    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
802    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
803    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
804    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](<2 x s32>)
805    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
806    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
807    ; GREEDY: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
808    %0:_(<2 x s32>) = COPY $sgpr0_sgpr1
809    %1:_(s32) = COPY $vgpr0
810    %2:_(s32) = COPY $vgpr1
811    %3:_(<2 x s32>) = COPY $vgpr2_vgpr3
812    %4:_(s1) = G_ICMP intpred(ne), %1, %2
813    %5:_(<2 x s32>) = G_SELECT %4, %3, %0
814...
815
816---
817name: select_v2s32_vcc_vv
818legalized: true
819body: |
820  bb.0:
821    liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5
822    ; FAST-LABEL: name: select_v2s32_vcc_vv
823    ; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
824    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
825    ; FAST: [[COPY2:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
826    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr4_vgpr5
827    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
828    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
829    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
830    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
831    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
832    ; FAST: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
833    ; GREEDY-LABEL: name: select_v2s32_vcc_vv
834    ; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
835    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
836    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr2_vgpr3
837    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<2 x s32>) = COPY $vgpr4_vgpr5
838    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
839    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](<2 x s32>)
840    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](<2 x s32>)
841    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
842    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
843    ; GREEDY: [[BUILD_VECTOR:%[0-9]+]]:vgpr(<2 x s32>) = G_BUILD_VECTOR [[SELECT]](s32), [[SELECT1]](s32)
844    %0:_(s32) = COPY $vgpr0
845    %1:_(s32) = COPY $vgpr1
846    %2:_(<2 x s32>) = COPY $vgpr2_vgpr3
847    %3:_(<2 x s32>) = COPY $vgpr4_vgpr5
848    %4:_(s1) = G_ICMP intpred(ne), %0, %1
849    %5:_(<2 x s32>) = G_SELECT %4, %2, %3
850...
851
852---
853name: select_v4s16_scc_ss
854legalized: true
855body: |
856  bb.0:
857    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5
858    ; FAST-LABEL: name: select_v4s16_scc_ss
859    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
860    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
861    ; FAST: [[COPY2:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
862    ; FAST: [[COPY3:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr4_sgpr5
863    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
864    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
865    ; FAST: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
866    ; FAST: [[SELECT:%[0-9]+]]:sgpr(<4 x s16>) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
867    ; GREEDY-LABEL: name: select_v4s16_scc_ss
868    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
869    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
870    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
871    ; GREEDY: [[COPY3:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr4_sgpr5
872    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
873    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
874    ; GREEDY: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
875    ; GREEDY: [[SELECT:%[0-9]+]]:sgpr(<4 x s16>) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
876    %0:_(s32) = COPY $sgpr0
877    %1:_(s32) = COPY $sgpr1
878    %2:_(<4 x s16>) = COPY $sgpr2_sgpr3
879    %3:_(<4 x s16>) = COPY $sgpr4_sgpr5
880    %4:_(s1) = G_ICMP intpred(ne), %0, %1
881    %5:_(<4 x s16>) = G_SELECT %4, %2, %3
882...
883
884---
885name: select_v4s16_scc_sv
886legalized: true
887body: |
888  bb.0:
889    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
890    ; FAST-LABEL: name: select_v4s16_scc_sv
891    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
892    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
893    ; FAST: [[COPY2:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
894    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
895    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
896    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
897    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
898    ; FAST: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)
899    ; FAST: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
900    ; FAST: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
901    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
902    ; FAST: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
903    ; GREEDY-LABEL: name: select_v4s16_scc_sv
904    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
905    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
906    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
907    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
908    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
909    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
910    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
911    ; GREEDY: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)
912    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
913    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
914    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
915    ; GREEDY: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
916    %0:_(s32) = COPY $sgpr0
917    %1:_(s32) = COPY $sgpr1
918    %2:_(<4 x s16>) = COPY $sgpr2_sgpr3
919    %3:_(<4 x s16>) = COPY $vgpr0_vgpr1
920    %4:_(s1) = G_ICMP intpred(ne), %0, %1
921    %5:_(<4 x s16>) = G_SELECT %4, %2, %3
922
923...
924
925---
926name: select_v4s16_scc_vs
927legalized: true
928body: |
929  bb.0:
930    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
931    ; FAST-LABEL: name: select_v4s16_scc_vs
932    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
933    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
934    ; FAST: [[COPY2:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
935    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
936    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
937    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
938    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
939    ; FAST: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
940    ; FAST: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)
941    ; FAST: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
942    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
943    ; FAST: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
944    ; GREEDY-LABEL: name: select_v4s16_scc_vs
945    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
946    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
947    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
948    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
949    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
950    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
951    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
952    ; GREEDY: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
953    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)
954    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
955    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
956    ; GREEDY: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
957    %0:_(s32) = COPY $sgpr0
958    %1:_(s32) = COPY $sgpr1
959    %2:_(<4 x s16>) = COPY $sgpr2_sgpr3
960    %3:_(<4 x s16>) = COPY $vgpr0_vgpr1
961    %4:_(s1) = G_ICMP intpred(ne), %0, %1
962    %5:_(<4 x s16>) = G_SELECT %4, %3, %2
963...
964
965---
966name: select_v4s16_scc_vv
967legalized: true
968body: |
969  bb.0:
970    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1, $vgpr2_vgpr3
971    ; FAST-LABEL: name: select_v4s16_scc_vv
972    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
973    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
974    ; FAST: [[COPY2:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
975    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
976    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
977    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
978    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
979    ; FAST: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)
980    ; FAST: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
981    ; FAST: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
982    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
983    ; FAST: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
984    ; GREEDY-LABEL: name: select_v4s16_scc_vv
985    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
986    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
987    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr0_vgpr1
988    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
989    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
990    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
991    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
992    ; GREEDY: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)
993    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
994    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
995    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
996    ; GREEDY: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
997    %0:_(s32) = COPY $sgpr0
998    %1:_(s32) = COPY $sgpr1
999    %2:_(<4 x s16>) = COPY $vgpr0_vgpr1
1000    %3:_(<4 x s16>) = COPY $vgpr2_vgpr3
1001    %4:_(s1) = G_ICMP intpred(ne), %0, %1
1002    %5:_(<4 x s16>) = G_SELECT %4, %2, %3
1003...
1004
1005---
1006name: select_v4s16_vcc_ss
1007legalized: true
1008body: |
1009  bb.0:
1010    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0, $vgpr1
1011    ; FAST-LABEL: name: select_v4s16_vcc_ss
1012    ; FAST: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
1013    ; FAST: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
1014    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1015    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1016    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY3]]
1017    ; FAST: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
1018    ; FAST: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
1019    ; FAST: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1020    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1021    ; FAST: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
1022    ; GREEDY-LABEL: name: select_v4s16_vcc_ss
1023    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
1024    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr2_sgpr3
1025    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1026    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1027    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY3]]
1028    ; GREEDY: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
1029    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY1]](<4 x s16>)
1030    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1031    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1032    ; GREEDY: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
1033    %0:_(<4 x s16>) = COPY $sgpr0_sgpr1
1034    %1:_(<4 x s16>) = COPY $sgpr2_sgpr3
1035    %2:_(s32) = COPY $vgpr0
1036    %3:_(s32) = COPY $vgpr1
1037    %4:_(s1) = G_ICMP intpred(ne), %2, %3
1038    %5:_(<4 x s16>) = G_SELECT %4, %0, %1
1039...
1040
1041---
1042name: select_v4s16_vcc_sv
1043legalized: true
1044body: |
1045  bb.0:
1046    liveins: $sgpr0_sgpr1, $vgpr0, $vgpr1, $vgpr2_vgpr3
1047    ; CHECK-LABEL: name: select_v4s16_vcc_sv
1048    ; FAST-LABEL: name: select_v4s16_vcc_sv
1049    ; FAST: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
1050    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1051    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1052    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
1053    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
1054    ; FAST: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
1055    ; FAST: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
1056    ; FAST: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1057    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1058    ; FAST: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
1059    ; GREEDY-LABEL: name: select_v4s16_vcc_sv
1060    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
1061    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1062    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1063    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
1064    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
1065    ; GREEDY: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
1066    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
1067    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1068    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1069    ; GREEDY: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
1070    %0:_(<4 x s16>) = COPY $sgpr0_sgpr1
1071    %1:_(s32) = COPY $vgpr0
1072    %2:_(s32) = COPY $vgpr1
1073    %3:_(<4 x s16>) = COPY $vgpr2_vgpr3
1074    %4:_(s1) = G_ICMP intpred(ne), %1, %2
1075    %5:_(<4 x s16>) = G_SELECT %4, %0, %3
1076...
1077
1078---
1079name: select_v4s16_vcc_vs
1080legalized: true
1081body: |
1082  bb.0:
1083    liveins: $sgpr0_sgpr1, $vgpr0, $vgpr1, $vgpr2_vgpr3
1084    ; FAST-LABEL: name: select_v4s16_vcc_vs
1085    ; FAST: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
1086    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1087    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1088    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
1089    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
1090    ; FAST: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
1091    ; FAST: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
1092    ; FAST: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1093    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1094    ; FAST: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
1095    ; GREEDY-LABEL: name: select_v4s16_vcc_vs
1096    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(<4 x s16>) = COPY $sgpr0_sgpr1
1097    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1098    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1099    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
1100    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
1101    ; GREEDY: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
1102    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY]](<4 x s16>)
1103    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1104    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1105    ; GREEDY: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
1106    %0:_(<4 x s16>) = COPY $sgpr0_sgpr1
1107    %1:_(s32) = COPY $vgpr0
1108    %2:_(s32) = COPY $vgpr1
1109    %3:_(<4 x s16>) = COPY $vgpr2_vgpr3
1110    %4:_(s1) = G_ICMP intpred(ne), %1, %2
1111    %5:_(<4 x s16>) = G_SELECT %4, %3, %0
1112...
1113
1114---
1115name: select_v4s16_vcc_vv
1116legalized: true
1117body: |
1118  bb.0:
1119    liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5
1120    ; FAST-LABEL: name: select_v4s16_vcc_vv
1121    ; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1122    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1123    ; FAST: [[COPY2:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
1124    ; FAST: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr4_vgpr5
1125    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1126    ; FAST: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)
1127    ; FAST: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
1128    ; FAST: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1129    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1130    ; FAST: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
1131    ; GREEDY-LABEL: name: select_v4s16_vcc_vv
1132    ; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1133    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1134    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr2_vgpr3
1135    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(<4 x s16>) = COPY $vgpr4_vgpr5
1136    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1137    ; GREEDY: [[UV:%[0-9]+]]:vgpr(<2 x s16>), [[UV1:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY2]](<4 x s16>)
1138    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(<2 x s16>), [[UV3:%[0-9]+]]:vgpr(<2 x s16>) = G_UNMERGE_VALUES [[COPY3]](<4 x s16>)
1139    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1140    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(<2 x s16>) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1141    ; GREEDY: [[CONCAT_VECTORS:%[0-9]+]]:vgpr(<4 x s16>) = G_CONCAT_VECTORS [[SELECT]](<2 x s16>), [[SELECT1]](<2 x s16>)
1142    %0:_(s32) = COPY $vgpr0
1143    %1:_(s32) = COPY $vgpr1
1144    %2:_(<4 x s16>) = COPY $vgpr2_vgpr3
1145    %3:_(<4 x s16>) = COPY $vgpr4_vgpr5
1146    %4:_(s1) = G_ICMP intpred(ne), %0, %1
1147    %5:_(<4 x s16>) = G_SELECT %4, %2, %3
1148...
1149
1150---
1151name: select_p1_scc_ss
1152legalized: true
1153body: |
1154  bb.0:
1155    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5
1156    ; FAST-LABEL: name: select_p1_scc_ss
1157    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1158    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1159    ; FAST: [[COPY2:%[0-9]+]]:sgpr(p1) = COPY $sgpr2_sgpr3
1160    ; FAST: [[COPY3:%[0-9]+]]:sgpr(p1) = COPY $sgpr4_sgpr5
1161    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1162    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
1163    ; FAST: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
1164    ; FAST: [[SELECT:%[0-9]+]]:sgpr(p1) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
1165    ; GREEDY-LABEL: name: select_p1_scc_ss
1166    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1167    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1168    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(p1) = COPY $sgpr2_sgpr3
1169    ; GREEDY: [[COPY3:%[0-9]+]]:sgpr(p1) = COPY $sgpr4_sgpr5
1170    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1171    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
1172    ; GREEDY: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
1173    ; GREEDY: [[SELECT:%[0-9]+]]:sgpr(p1) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
1174    %0:_(s32) = COPY $sgpr0
1175    %1:_(s32) = COPY $sgpr1
1176    %2:_(p1) = COPY $sgpr2_sgpr3
1177    %3:_(p1) = COPY $sgpr4_sgpr5
1178    %4:_(s1) = G_ICMP intpred(ne), %0, %1
1179    %5:_(p1) = G_SELECT %4, %2, %3
1180...
1181
1182---
1183name: select_p999_scc_ss
1184legalized: true
1185body: |
1186  bb.0:
1187    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $sgpr4_sgpr5
1188    ; FAST-LABEL: name: select_p999_scc_ss
1189    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1190    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1191    ; FAST: [[COPY2:%[0-9]+]]:sgpr(p999) = COPY $sgpr2_sgpr3
1192    ; FAST: [[COPY3:%[0-9]+]]:sgpr(p999) = COPY $sgpr4_sgpr5
1193    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1194    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
1195    ; FAST: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
1196    ; FAST: [[SELECT:%[0-9]+]]:sgpr(p999) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
1197    ; GREEDY-LABEL: name: select_p999_scc_ss
1198    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1199    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1200    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(p999) = COPY $sgpr2_sgpr3
1201    ; GREEDY: [[COPY3:%[0-9]+]]:sgpr(p999) = COPY $sgpr4_sgpr5
1202    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1203    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
1204    ; GREEDY: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
1205    ; GREEDY: [[SELECT:%[0-9]+]]:sgpr(p999) = G_SELECT [[ZEXT]](s32), [[COPY2]], [[COPY3]]
1206    %0:_(s32) = COPY $sgpr0
1207    %1:_(s32) = COPY $sgpr1
1208    %2:_(p999) = COPY $sgpr2_sgpr3
1209    %3:_(p999) = COPY $sgpr4_sgpr5
1210    %4:_(s1) = G_ICMP intpred(ne), %0, %1
1211    %5:_(p999) = G_SELECT %4, %2, %3
1212...
1213
1214---
1215name: select_p1_scc_sv
1216legalized: true
1217body: |
1218  bb.0:
1219    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
1220    ; FAST-LABEL: name: select_p1_scc_sv
1221    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1222    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1223    ; FAST: [[COPY2:%[0-9]+]]:sgpr(p1) = COPY $sgpr2_sgpr3
1224    ; FAST: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
1225    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1226    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
1227    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1228    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](p1)
1229    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1230    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
1231    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
1232    ; FAST: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1233    ; GREEDY-LABEL: name: select_p1_scc_sv
1234    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1235    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1236    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(p1) = COPY $sgpr2_sgpr3
1237    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
1238    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1239    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
1240    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1241    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](p1)
1242    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1243    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
1244    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
1245    ; GREEDY: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1246    %0:_(s32) = COPY $sgpr0
1247    %1:_(s32) = COPY $sgpr1
1248    %2:_(p1) = COPY $sgpr2_sgpr3
1249    %3:_(p1) = COPY $vgpr0_vgpr1
1250    %4:_(s1) = G_ICMP intpred(ne), %0, %1
1251    %5:_(p1) = G_SELECT %4, %2, %3
1252
1253...
1254
1255---
1256name: select_p1_scc_vs
1257legalized: true
1258body: |
1259  bb.0:
1260    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1
1261    ; FAST-LABEL: name: select_p1_scc_vs
1262    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1263    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1264    ; FAST: [[COPY2:%[0-9]+]]:sgpr(p1) = COPY $sgpr2_sgpr3
1265    ; FAST: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
1266    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1267    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
1268    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1269    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1270    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](p1)
1271    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
1272    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
1273    ; FAST: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1274    ; GREEDY-LABEL: name: select_p1_scc_vs
1275    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1276    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1277    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(p1) = COPY $sgpr2_sgpr3
1278    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
1279    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1280    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
1281    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1282    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1283    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](p1)
1284    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
1285    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
1286    ; GREEDY: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1287    %0:_(s32) = COPY $sgpr0
1288    %1:_(s32) = COPY $sgpr1
1289    %2:_(p1) = COPY $sgpr2_sgpr3
1290    %3:_(p1) = COPY $vgpr0_vgpr1
1291    %4:_(s1) = G_ICMP intpred(ne), %0, %1
1292    %5:_(p1) = G_SELECT %4, %3, %2
1293...
1294
1295---
1296name: select_p1_scc_vv
1297legalized: true
1298body: |
1299  bb.0:
1300    liveins: $sgpr0, $sgpr1, $sgpr2_sgpr3, $vgpr0_vgpr1, $vgpr2_vgpr3
1301    ; FAST-LABEL: name: select_p1_scc_vv
1302    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1303    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1304    ; FAST: [[COPY2:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
1305    ; FAST: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr2_vgpr3
1306    ; FAST: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1307    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
1308    ; FAST: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1309    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](p1)
1310    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1311    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
1312    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
1313    ; FAST: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1314    ; GREEDY-LABEL: name: select_p1_scc_vv
1315    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1316    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1317    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(p1) = COPY $vgpr0_vgpr1
1318    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr2_vgpr3
1319    ; GREEDY: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1320    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
1321    ; GREEDY: [[COPY4:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1322    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](p1)
1323    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1324    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV]], [[UV2]]
1325    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY4]](s1), [[UV1]], [[UV3]]
1326    ; GREEDY: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1327    %0:_(s32) = COPY $sgpr0
1328    %1:_(s32) = COPY $sgpr1
1329    %2:_(p1) = COPY $vgpr0_vgpr1
1330    %3:_(p1) = COPY $vgpr2_vgpr3
1331    %4:_(s1) = G_ICMP intpred(ne), %0, %1
1332    %5:_(p1) = G_SELECT %4, %2, %3
1333...
1334
1335---
1336name: select_p1_vcc_ss
1337legalized: true
1338body: |
1339  bb.0:
1340    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3, $vgpr0, $vgpr1
1341    ; FAST-LABEL: name: select_p1_vcc_ss
1342    ; FAST: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1
1343    ; FAST: [[COPY1:%[0-9]+]]:sgpr(p1) = COPY $sgpr2_sgpr3
1344    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1345    ; FAST: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1346    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY3]]
1347    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](p1)
1348    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](p1)
1349    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1350    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1351    ; FAST: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1352    ; GREEDY-LABEL: name: select_p1_vcc_ss
1353    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1
1354    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(p1) = COPY $sgpr2_sgpr3
1355    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1356    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1357    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s32), [[COPY3]]
1358    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](p1)
1359    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY1]](p1)
1360    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1361    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1362    ; GREEDY: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1363    %0:_(p1) = COPY $sgpr0_sgpr1
1364    %1:_(p1) = COPY $sgpr2_sgpr3
1365    %2:_(s32) = COPY $vgpr0
1366    %3:_(s32) = COPY $vgpr1
1367    %4:_(s1) = G_ICMP intpred(ne), %2, %3
1368    %5:_(p1) = G_SELECT %4, %0, %1
1369...
1370
1371---
1372name: select_p1_vcc_sv
1373legalized: true
1374body: |
1375  bb.0:
1376    liveins: $sgpr0_sgpr1, $vgpr0, $vgpr1, $vgpr2_vgpr3
1377    ; FAST-LABEL: name: select_p1_vcc_sv
1378    ; FAST: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1
1379    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1380    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1381    ; FAST: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr2_vgpr3
1382    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
1383    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](p1)
1384    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1385    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1386    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1387    ; FAST: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1388    ; GREEDY-LABEL: name: select_p1_vcc_sv
1389    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1
1390    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1391    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1392    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr2_vgpr3
1393    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
1394    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](p1)
1395    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1396    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1397    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1398    ; GREEDY: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1399    %0:_(p1) = COPY $sgpr0_sgpr1
1400    %1:_(s32) = COPY $vgpr0
1401    %2:_(s32) = COPY $vgpr1
1402    %3:_(p1) = COPY $vgpr2_vgpr3
1403    %4:_(s1) = G_ICMP intpred(ne), %1, %2
1404    %5:_(p1) = G_SELECT %4, %0, %3
1405...
1406
1407---
1408name: select_p1_vcc_vs
1409legalized: true
1410body: |
1411  bb.0:
1412    liveins: $sgpr0_sgpr1, $vgpr0, $vgpr1, $vgpr2_vgpr3
1413    ; FAST-LABEL: name: select_p1_vcc_vs
1414    ; FAST: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1
1415    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1416    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1417    ; FAST: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr2_vgpr3
1418    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
1419    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1420    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](p1)
1421    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1422    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1423    ; FAST: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1424    ; GREEDY-LABEL: name: select_p1_vcc_vs
1425    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(p1) = COPY $sgpr0_sgpr1
1426    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1427    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1428    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr2_vgpr3
1429    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s32), [[COPY2]]
1430    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1431    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY]](p1)
1432    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1433    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1434    ; GREEDY: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1435    %0:_(p1) = COPY $sgpr0_sgpr1
1436    %1:_(s32) = COPY $vgpr0
1437    %2:_(s32) = COPY $vgpr1
1438    %3:_(p1) = COPY $vgpr2_vgpr3
1439    %4:_(s1) = G_ICMP intpred(ne), %1, %2
1440    %5:_(p1) = G_SELECT %4, %3, %0
1441...
1442
1443---
1444name: select_p1_vcc_vv
1445legalized: true
1446body: |
1447  bb.0:
1448    liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5
1449    ; FAST-LABEL: name: select_p1_vcc_vv
1450    ; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1451    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1452    ; FAST: [[COPY2:%[0-9]+]]:vgpr(p1) = COPY $vgpr2_vgpr3
1453    ; FAST: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr4_vgpr5
1454    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1455    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](p1)
1456    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1457    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1458    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1459    ; FAST: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1460    ; GREEDY-LABEL: name: select_p1_vcc_vv
1461    ; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1462    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1463    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(p1) = COPY $vgpr2_vgpr3
1464    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(p1) = COPY $vgpr4_vgpr5
1465    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1466    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](p1)
1467    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p1)
1468    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1469    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1470    ; GREEDY: [[MV:%[0-9]+]]:vgpr(p1) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1471    %0:_(s32) = COPY $vgpr0
1472    %1:_(s32) = COPY $vgpr1
1473    %2:_(p1) = COPY $vgpr2_vgpr3
1474    %3:_(p1) = COPY $vgpr4_vgpr5
1475    %4:_(s1) = G_ICMP intpred(ne), %0, %1
1476    %5:_(p1) = G_SELECT %4, %2, %3
1477...
1478
1479---
1480name: select_p999_vcc_vv
1481legalized: true
1482body: |
1483  bb.0:
1484    liveins: $vgpr0, $vgpr1, $vgpr2_vgpr3, $vgpr4_vgpr5
1485    ; FAST-LABEL: name: select_p999_vcc_vv
1486    ; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1487    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1488    ; FAST: [[COPY2:%[0-9]+]]:vgpr(p999) = COPY $vgpr2_vgpr3
1489    ; FAST: [[COPY3:%[0-9]+]]:vgpr(p999) = COPY $vgpr4_vgpr5
1490    ; FAST: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1491    ; FAST: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](p999)
1492    ; FAST: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p999)
1493    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1494    ; FAST: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1495    ; FAST: [[MV:%[0-9]+]]:vgpr(p999) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1496    ; GREEDY-LABEL: name: select_p999_vcc_vv
1497    ; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1498    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1499    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(p999) = COPY $vgpr2_vgpr3
1500    ; GREEDY: [[COPY3:%[0-9]+]]:vgpr(p999) = COPY $vgpr4_vgpr5
1501    ; GREEDY: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s32), [[COPY1]]
1502    ; GREEDY: [[UV:%[0-9]+]]:vgpr(s32), [[UV1:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY2]](p999)
1503    ; GREEDY: [[UV2:%[0-9]+]]:vgpr(s32), [[UV3:%[0-9]+]]:vgpr(s32) = G_UNMERGE_VALUES [[COPY3]](p999)
1504    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV]], [[UV2]]
1505    ; GREEDY: [[SELECT1:%[0-9]+]]:vgpr(s32) = G_SELECT [[ICMP]](s1), [[UV1]], [[UV3]]
1506    ; GREEDY: [[MV:%[0-9]+]]:vgpr(p999) = G_MERGE_VALUES [[SELECT]](s32), [[SELECT1]](s32)
1507    %0:_(s32) = COPY $vgpr0
1508    %1:_(s32) = COPY $vgpr1
1509    %2:_(p999) = COPY $vgpr2_vgpr3
1510    %3:_(p999) = COPY $vgpr4_vgpr5
1511    %4:_(s1) = G_ICMP intpred(ne), %0, %1
1512    %5:_(p999) = G_SELECT %4, %2, %3
1513...
1514
1515---
1516name: select_s32_vgpr_vv
1517legalized: true
1518body: |
1519  bb.0:
1520    liveins: $vgpr0, $vgpr1, $vgpr2, $vgpr3
1521    ; FAST-LABEL: name: select_s32_vgpr_vv
1522    ; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1523    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1524    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
1525    ; FAST: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
1526    ; FAST: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1527    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY3]](s1), [[COPY1]], [[COPY2]]
1528    ; GREEDY-LABEL: name: select_s32_vgpr_vv
1529    ; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1530    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1531    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr2
1532    ; GREEDY: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
1533    ; GREEDY: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1534    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY3]](s1), [[COPY1]], [[COPY2]]
1535    %0:_(s32) = COPY $vgpr0
1536    %1:_(s32) = COPY $vgpr1
1537    %2:_(s32) = COPY $vgpr2
1538    %3:_(s1) = G_TRUNC %0
1539    %4:_(s32) = G_SELECT %3, %1, %2
1540...
1541
1542---
1543name: select_s32_vgpr_ss
1544legalized: true
1545body: |
1546  bb.0:
1547    liveins: $vgpr0, $sgpr0, $sgpr1
1548    ; FAST-LABEL: name: select_s32_vgpr_ss
1549    ; FAST: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1550    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1551    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1552    ; FAST: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
1553    ; FAST: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1554    ; FAST: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
1555    ; FAST: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
1556    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY3]](s1), [[COPY4]], [[COPY5]]
1557    ; GREEDY-LABEL: name: select_s32_vgpr_ss
1558    ; GREEDY: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1559    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1560    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1561    ; GREEDY: [[TRUNC:%[0-9]+]]:vgpr(s1) = G_TRUNC [[COPY]](s32)
1562    ; GREEDY: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1563    ; GREEDY: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
1564    ; GREEDY: [[COPY5:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
1565    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY3]](s1), [[COPY4]], [[COPY5]]
1566    %0:_(s32) = COPY $vgpr0
1567    %1:_(s32) = COPY $sgpr0
1568    %2:_(s32) = COPY $sgpr1
1569    %3:_(s1) = G_TRUNC %0
1570    %4:_(s32) = G_SELECT %3, %1, %2
1571...
1572
1573---
1574name: select_s32_sgpr_vv
1575legalized: true
1576body: |
1577  bb.0:
1578    liveins: $sgpr0, $vgpr0, $vgpr1
1579    ; FAST-LABEL: name: select_s32_sgpr_vv
1580    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1581    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1582    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1583    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
1584    ; FAST: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1585    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY3]](s1), [[COPY1]], [[COPY2]]
1586    ; GREEDY-LABEL: name: select_s32_sgpr_vv
1587    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1588    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1589    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
1590    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
1591    ; GREEDY: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1592    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY3]](s1), [[COPY1]], [[COPY2]]
1593    %0:_(s32) = COPY $sgpr0
1594    %1:_(s32) = COPY $vgpr0
1595    %2:_(s32) = COPY $vgpr1
1596    %3:_(s1) = G_TRUNC %0
1597    %4:_(s32) = G_SELECT %3, %1, %2
1598...
1599
1600---
1601name: select_s32_sgpr_vs
1602legalized: true
1603body: |
1604  bb.0:
1605    liveins: $sgpr0, $vgpr0, $sgpr1
1606    ; FAST-LABEL: name: select_s32_sgpr_vs
1607    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1608    ; FAST: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1609    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1610    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
1611    ; FAST: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1612    ; FAST: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
1613    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY3]](s1), [[COPY1]], [[COPY4]]
1614    ; GREEDY-LABEL: name: select_s32_sgpr_vs
1615    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1616    ; GREEDY: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1617    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1618    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
1619    ; GREEDY: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1620    ; GREEDY: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY2]](s32)
1621    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY3]](s1), [[COPY1]], [[COPY4]]
1622    %0:_(s32) = COPY $sgpr0
1623    %1:_(s32) = COPY $vgpr0
1624    %2:_(s32) = COPY $sgpr1
1625    %3:_(s1) = G_TRUNC %0
1626    %4:_(s32) = G_SELECT %3, %1, %2
1627...
1628
1629---
1630name: select_s32_sgpr_sv
1631legalized: true
1632body: |
1633  bb.0:
1634    liveins: $sgpr0, $sgpr0, $vgpr0
1635    ; FAST-LABEL: name: select_s32_sgpr_sv
1636    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1637    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1638    ; FAST: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1639    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
1640    ; FAST: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1641    ; FAST: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
1642    ; FAST: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY3]](s1), [[COPY4]], [[COPY2]]
1643    ; GREEDY-LABEL: name: select_s32_sgpr_sv
1644    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1645    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1646    ; GREEDY: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
1647    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
1648    ; GREEDY: [[COPY3:%[0-9]+]]:vcc(s1) = COPY [[TRUNC]](s1)
1649    ; GREEDY: [[COPY4:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
1650    ; GREEDY: [[SELECT:%[0-9]+]]:vgpr(s32) = G_SELECT [[COPY3]](s1), [[COPY4]], [[COPY2]]
1651    %0:_(s32) = COPY $sgpr0
1652    %1:_(s32) = COPY $sgpr1
1653    %2:_(s32) = COPY $vgpr0
1654    %3:_(s1) = G_TRUNC %0
1655    %4:_(s32) = G_SELECT %3, %1, %2
1656...
1657
1658# FIXME: greedy unnecessairly uses vcc/vgpr
1659---
1660name: select_s32_sgpr_ss
1661legalized: true
1662body: |
1663  bb.0:
1664    liveins: $sgpr0, $sgpr1, $sgpr2
1665    ; FAST-LABEL: name: select_s32_sgpr_ss
1666    ; FAST: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1667    ; FAST: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1668    ; FAST: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
1669    ; FAST: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
1670    ; FAST: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
1671    ; FAST: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[ZEXT]](s32), [[COPY1]], [[COPY2]]
1672    ; GREEDY-LABEL: name: select_s32_sgpr_ss
1673    ; GREEDY: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
1674    ; GREEDY: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
1675    ; GREEDY: [[COPY2:%[0-9]+]]:sgpr(s32) = COPY $sgpr2
1676    ; GREEDY: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[COPY]](s32)
1677    ; GREEDY: [[ZEXT:%[0-9]+]]:sgpr(s32) = G_ZEXT [[TRUNC]](s1)
1678    ; GREEDY: [[SELECT:%[0-9]+]]:sgpr(s32) = G_SELECT [[ZEXT]](s32), [[COPY1]], [[COPY2]]
1679    %0:_(s32) = COPY $sgpr0
1680    %1:_(s32) = COPY $sgpr1
1681    %2:_(s32) = COPY $sgpr2
1682    %3:_(s1) = G_TRUNC %0
1683    %4:_(s32) = G_SELECT %3, %1, %2
1684...
1685