1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -march=amdgcn -mcpu=hawaii -run-pass=regbankselect -regbankselect-fast -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX7 %s
3# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect -regbankselect-fast -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX8 %s
4# RUN: llc -march=amdgcn -mcpu=hawaii -run-pass=regbankselect -regbankselect-greedy -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX7 %s
5# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=regbankselect -regbankselect-greedy -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX8 %s
6
7---
8name: icmp_eq_s32_ss
9legalized: true
10
11body: |
12  bb.0:
13    liveins: $sgpr0, $sgpr1
14    ; GFX7-LABEL: name: icmp_eq_s32_ss
15    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
16    ; GFX7: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
17    ; GFX7: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
18    ; GFX7: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
19    ; GFX8-LABEL: name: icmp_eq_s32_ss
20    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
21    ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
22    ; GFX8: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
23    ; GFX8: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
24    %0:_(s32) = COPY $sgpr0
25    %1:_(s32) = COPY $sgpr1
26    %2:_(s1) = G_ICMP intpred(eq), %0, %1
27...
28
29---
30name: icmp_eq_s32_sv
31legalized: true
32
33body: |
34  bb.0:
35    liveins: $sgpr0, $vgpr0
36    ; GFX7-LABEL: name: icmp_eq_s32_sv
37    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
38    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
39    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
40    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY2]](s32), [[COPY1]]
41    ; GFX8-LABEL: name: icmp_eq_s32_sv
42    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
43    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
44    ; GFX8: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
45    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY2]](s32), [[COPY1]]
46    %0:_(s32) = COPY $sgpr0
47    %1:_(s32) = COPY $vgpr0
48    %2:_(s1) = G_ICMP intpred(eq), %0, %1
49...
50
51---
52name: icmp_eq_s32_vs
53legalized: true
54
55body: |
56  bb.0:
57    liveins: $sgpr0, $vgpr0
58    ; GFX7-LABEL: name: icmp_eq_s32_vs
59    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
60    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
61    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
62    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY2]]
63    ; GFX8-LABEL: name: icmp_eq_s32_vs
64    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
65    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
66    ; GFX8: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
67    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY2]]
68    %0:_(s32) = COPY $sgpr0
69    %1:_(s32) = COPY $vgpr0
70    %2:_(s1) = G_ICMP intpred(eq), %1, %0
71...
72
73---
74name: icmp_eq_s32_vv
75legalized: true
76
77body: |
78  bb.0:
79    liveins: $vgpr0, $vgpr1
80    ; GFX7-LABEL: name: icmp_eq_s32_vv
81    ; GFX7: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
82    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
83    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
84    ; GFX8-LABEL: name: icmp_eq_s32_vv
85    ; GFX8: [[COPY:%[0-9]+]]:vgpr(s32) = COPY $vgpr0
86    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
87    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s32), [[COPY1]]
88    %0:_(s32) = COPY $vgpr0
89    %1:_(s32) = COPY $vgpr1
90    %2:_(s1) = G_ICMP intpred(eq), %0, %1
91...
92
93---
94name: icmp_eq_s64_ss
95legalized: true
96
97body: |
98  bb.0:
99    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
100    ; GFX7-LABEL: name: icmp_eq_s64_ss
101    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
102    ; GFX7: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
103    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
104    ; GFX7: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY [[COPY1]](s64)
105    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY2]](s64), [[COPY3]]
106    ; GFX8-LABEL: name: icmp_eq_s64_ss
107    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
108    ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
109    ; GFX8: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]
110    ; GFX8: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
111    %0:_(s64) = COPY $sgpr0_sgpr1
112    %1:_(s64) = COPY $sgpr2_sgpr3
113    %2:_(s1) = G_ICMP intpred(eq), %0, %1
114...
115
116---
117name: icmp_eq_s64_sv
118legalized: true
119
120body: |
121  bb.0:
122    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
123    ; GFX7-LABEL: name: icmp_eq_s64_sv
124    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
125    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
126    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
127    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY2]](s64), [[COPY1]]
128    ; GFX8-LABEL: name: icmp_eq_s64_sv
129    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
130    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
131    ; GFX8: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
132    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY2]](s64), [[COPY1]]
133    %0:_(s64) = COPY $sgpr0_sgpr1
134    %1:_(s64) = COPY $vgpr0_vgpr1
135    %2:_(s1) = G_ICMP intpred(eq), %0, %1
136...
137
138---
139name: icmp_eq_s64_vs
140legalized: true
141
142body: |
143  bb.0:
144    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
145    ; GFX7-LABEL: name: icmp_eq_s64_vs
146    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
147    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
148    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
149    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s64), [[COPY2]]
150    ; GFX8-LABEL: name: icmp_eq_s64_vs
151    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
152    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
153    ; GFX8: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
154    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY1]](s64), [[COPY2]]
155    %0:_(s64) = COPY $sgpr0_sgpr1
156    %1:_(s64) = COPY $vgpr0_vgpr1
157    %2:_(s1) = G_ICMP intpred(eq), %1, %0
158...
159
160---
161name: icmp_eq_s64_vv
162legalized: true
163
164body: |
165  bb.0:
166    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
167    ; GFX7-LABEL: name: icmp_eq_s64_vv
168    ; GFX7: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
169    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
170    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]
171    ; GFX8-LABEL: name: icmp_eq_s64_vv
172    ; GFX8: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
173    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
174    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY]](s64), [[COPY1]]
175    %0:_(s64) = COPY $vgpr0_vgpr1
176    %1:_(s64) = COPY $vgpr2_vgpr3
177    %2:_(s1) = G_ICMP intpred(eq), %0, %1
178...
179
180---
181name: icmp_ne_s64_ss
182legalized: true
183
184body: |
185  bb.0:
186    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
187    ; GFX7-LABEL: name: icmp_ne_s64_ss
188    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
189    ; GFX7: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
190    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
191    ; GFX7: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY [[COPY1]](s64)
192    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s64), [[COPY3]]
193    ; GFX8-LABEL: name: icmp_ne_s64_ss
194    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
195    ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
196    ; GFX8: [[ICMP:%[0-9]+]]:sgpr(s32) = G_ICMP intpred(ne), [[COPY]](s64), [[COPY1]]
197    ; GFX8: [[TRUNC:%[0-9]+]]:sgpr(s1) = G_TRUNC [[ICMP]](s32)
198    %0:_(s64) = COPY $sgpr0_sgpr1
199    %1:_(s64) = COPY $sgpr2_sgpr3
200    %2:_(s1) = G_ICMP intpred(ne), %0, %1
201...
202
203---
204name: icmp_ne_s64_sv
205legalized: true
206
207body: |
208  bb.0:
209    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
210    ; GFX7-LABEL: name: icmp_ne_s64_sv
211    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
212    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
213    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
214    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s64), [[COPY1]]
215    ; GFX8-LABEL: name: icmp_ne_s64_sv
216    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
217    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
218    ; GFX8: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
219    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY2]](s64), [[COPY1]]
220    %0:_(s64) = COPY $sgpr0_sgpr1
221    %1:_(s64) = COPY $vgpr0_vgpr1
222    %2:_(s1) = G_ICMP intpred(ne), %0, %1
223...
224
225---
226name: icmp_ne_s64_vs
227legalized: true
228
229body: |
230  bb.0:
231    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
232    ; GFX7-LABEL: name: icmp_ne_s64_vs
233    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
234    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
235    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
236    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s64), [[COPY2]]
237    ; GFX8-LABEL: name: icmp_ne_s64_vs
238    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
239    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
240    ; GFX8: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
241    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY1]](s64), [[COPY2]]
242    %0:_(s64) = COPY $sgpr0_sgpr1
243    %1:_(s64) = COPY $vgpr0_vgpr1
244    %2:_(s1) = G_ICMP intpred(ne), %1, %0
245...
246
247---
248name: icmp_ne_s64_vv
249legalized: true
250
251body: |
252  bb.0:
253    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
254    ; GFX7-LABEL: name: icmp_ne_s64_vv
255    ; GFX7: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
256    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
257    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s64), [[COPY1]]
258    ; GFX8-LABEL: name: icmp_ne_s64_vv
259    ; GFX8: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
260    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
261    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(ne), [[COPY]](s64), [[COPY1]]
262    %0:_(s64) = COPY $vgpr0_vgpr1
263    %1:_(s64) = COPY $vgpr2_vgpr3
264    %2:_(s1) = G_ICMP intpred(ne), %0, %1
265...
266
267---
268name: icmp_slt_s64_ss
269legalized: true
270
271body: |
272  bb.0:
273    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3
274    ; GFX7-LABEL: name: icmp_slt_s64_ss
275    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
276    ; GFX7: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
277    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
278    ; GFX7: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY [[COPY1]](s64)
279    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(slt), [[COPY2]](s64), [[COPY3]]
280    ; GFX8-LABEL: name: icmp_slt_s64_ss
281    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
282    ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s64) = COPY $sgpr2_sgpr3
283    ; GFX8: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
284    ; GFX8: [[COPY3:%[0-9]+]]:vgpr(s64) = COPY [[COPY1]](s64)
285    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(slt), [[COPY2]](s64), [[COPY3]]
286    %0:_(s64) = COPY $sgpr0_sgpr1
287    %1:_(s64) = COPY $sgpr2_sgpr3
288    %2:_(s1) = G_ICMP intpred(slt), %0, %1
289...
290
291---
292name: icmp_slt_s64_sv
293legalized: true
294
295body: |
296  bb.0:
297    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
298    ; GFX7-LABEL: name: icmp_slt_s64_sv
299    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
300    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
301    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
302    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(slt), [[COPY2]](s64), [[COPY1]]
303    ; GFX8-LABEL: name: icmp_slt_s64_sv
304    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
305    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
306    ; GFX8: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
307    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(slt), [[COPY2]](s64), [[COPY1]]
308    %0:_(s64) = COPY $sgpr0_sgpr1
309    %1:_(s64) = COPY $vgpr0_vgpr1
310    %2:_(s1) = G_ICMP intpred(slt), %0, %1
311...
312
313---
314name: icmp_slt_s64_vs
315legalized: true
316
317body: |
318  bb.0:
319    liveins: $sgpr0_sgpr1, $vgpr0_vgpr1
320    ; GFX7-LABEL: name: icmp_slt_s64_vs
321    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
322    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
323    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
324    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(slt), [[COPY1]](s64), [[COPY2]]
325    ; GFX8-LABEL: name: icmp_slt_s64_vs
326    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s64) = COPY $sgpr0_sgpr1
327    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
328    ; GFX8: [[COPY2:%[0-9]+]]:vgpr(s64) = COPY [[COPY]](s64)
329    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(slt), [[COPY1]](s64), [[COPY2]]
330    %0:_(s64) = COPY $sgpr0_sgpr1
331    %1:_(s64) = COPY $vgpr0_vgpr1
332    %2:_(s1) = G_ICMP intpred(slt), %1, %0
333...
334
335---
336name: icmp_slt_s64_vv
337legalized: true
338
339body: |
340  bb.0:
341    liveins: $vgpr0_vgpr1, $vgpr2_vgpr3
342    ; GFX7-LABEL: name: icmp_slt_s64_vv
343    ; GFX7: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
344    ; GFX7: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
345    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(slt), [[COPY]](s64), [[COPY1]]
346    ; GFX8-LABEL: name: icmp_slt_s64_vv
347    ; GFX8: [[COPY:%[0-9]+]]:vgpr(s64) = COPY $vgpr0_vgpr1
348    ; GFX8: [[COPY1:%[0-9]+]]:vgpr(s64) = COPY $vgpr2_vgpr3
349    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(slt), [[COPY]](s64), [[COPY1]]
350    %0:_(s64) = COPY $vgpr0_vgpr1
351    %1:_(s64) = COPY $vgpr2_vgpr3
352    %2:_(s1) = G_ICMP intpred(slt), %0, %1
353...
354
355# Result is already constrained to be VCC bank, despite scalar inputs.
356---
357name:            map_icmp_already_vcc_bank_sgpr_inputs
358legalized:       true
359tracksRegLiveness: true
360body:             |
361  bb.0:
362    liveins: $sgpr0, $sgpr1
363
364    ; GFX7-LABEL: name: map_icmp_already_vcc_bank_sgpr_inputs
365    ; GFX7: liveins: $sgpr0, $sgpr1
366    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
367    ; GFX7: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
368    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
369    ; GFX7: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
370    ; GFX7: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY2]](s32), [[COPY3]]
371    ; GFX7: S_ENDPGM 0, implicit [[ICMP]](s1)
372    ; GFX8-LABEL: name: map_icmp_already_vcc_bank_sgpr_inputs
373    ; GFX8: liveins: $sgpr0, $sgpr1
374    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
375    ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
376    ; GFX8: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
377    ; GFX8: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
378    ; GFX8: [[ICMP:%[0-9]+]]:vcc(s1) = G_ICMP intpred(eq), [[COPY2]](s32), [[COPY3]]
379    ; GFX8: S_ENDPGM 0, implicit [[ICMP]](s1)
380    %0:_(s32) = COPY $sgpr0
381    %1:_(s32) = COPY $sgpr1
382    %2:vcc(s1) = G_ICMP intpred(eq), %0, %1
383    S_ENDPGM 0, implicit %2
384...
385
386# Result is already con strained to be VCC bank, despite scalar inputs
387# and also has a register class.
388---
389name:            map_icmp_already_vcc_regclass_sgpr_inputs
390legalized:       true
391tracksRegLiveness: true
392body:             |
393  bb.0:
394    liveins: $sgpr0, $sgpr1
395
396    ; GFX7-LABEL: name: map_icmp_already_vcc_regclass_sgpr_inputs
397    ; GFX7: liveins: $sgpr0, $sgpr1
398    ; GFX7: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
399    ; GFX7: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
400    ; GFX7: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
401    ; GFX7: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
402    ; GFX7: [[ICMP:%[0-9]+]]:sreg_64_xexec(s1) = G_ICMP intpred(eq), [[COPY2]](s32), [[COPY3]]
403    ; GFX7: S_ENDPGM 0, implicit [[ICMP]](s1)
404    ; GFX8-LABEL: name: map_icmp_already_vcc_regclass_sgpr_inputs
405    ; GFX8: liveins: $sgpr0, $sgpr1
406    ; GFX8: [[COPY:%[0-9]+]]:sgpr(s32) = COPY $sgpr0
407    ; GFX8: [[COPY1:%[0-9]+]]:sgpr(s32) = COPY $sgpr1
408    ; GFX8: [[COPY2:%[0-9]+]]:vgpr(s32) = COPY [[COPY]](s32)
409    ; GFX8: [[COPY3:%[0-9]+]]:vgpr(s32) = COPY [[COPY1]](s32)
410    ; GFX8: [[ICMP:%[0-9]+]]:sreg_64_xexec(s1) = G_ICMP intpred(eq), [[COPY2]](s32), [[COPY3]]
411    ; GFX8: S_ENDPGM 0, implicit [[ICMP]](s1)
412    %0:_(s32) = COPY $sgpr0
413    %1:_(s32) = COPY $sgpr1
414    %2:sreg_64_xexec(s1) = G_ICMP intpred(eq), %0, %1
415    S_ENDPGM 0, implicit %2
416...
417