[MachineScheduler] Fix physreg dependencies of ExitSU (#123541)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / GlobalISel / inst-select-icmp.s16.mir
blobd45bc31a12729106b68342385c71aae468f4ffde
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=WAVE64 %s
3 # RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=WAVE32 %s
4 # RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX11 %s
6 ---
8 name:            icmp_eq_s16_sv
9 legalized:       true
10 regBankSelected: true
12 body: |
13   bb.0:
14     liveins:  $sgpr0, $vgpr0
16     ; WAVE64-LABEL: name: icmp_eq_s16_sv
17     ; WAVE64: liveins: $sgpr0, $vgpr0
18     ; WAVE64-NEXT: {{  $}}
19     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
20     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
21     ; WAVE64-NEXT: [[V_CMP_EQ_U16_e64_:%[0-9]+]]:sreg_64 = V_CMP_EQ_U16_e64 [[COPY]], [[COPY1]], implicit $exec
22     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_CMP_EQ_U16_e64_]]
23     ;
24     ; WAVE32-LABEL: name: icmp_eq_s16_sv
25     ; WAVE32: liveins: $sgpr0, $vgpr0
26     ; WAVE32-NEXT: {{  $}}
27     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
28     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
29     ; WAVE32-NEXT: [[V_CMP_EQ_U16_e64_:%[0-9]+]]:sreg_32 = V_CMP_EQ_U16_e64 [[COPY]], [[COPY1]], implicit $exec
30     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_CMP_EQ_U16_e64_]]
31     ;
32     ; GFX11-LABEL: name: icmp_eq_s16_sv
33     ; GFX11: liveins: $sgpr0, $vgpr0
34     ; GFX11-NEXT: {{  $}}
35     ; GFX11-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0
36     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr0
37     ; GFX11-NEXT: [[V_CMP_EQ_U16_fake16_e64_:%[0-9]+]]:sreg_32 = V_CMP_EQ_U16_fake16_e64 [[COPY]], [[COPY1]], implicit $exec
38     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_EQ_U16_fake16_e64_]]
39     %0:sgpr(s32) = COPY $sgpr0
40     %1:vgpr(s32) = COPY $vgpr0
41     %2:sgpr(s16) = G_TRUNC %0
42     %3:vgpr(s16) = G_TRUNC %1
43     %4:vcc(s1) = G_ICMP intpred(eq), %2, %3
44     S_ENDPGM 0, implicit %4
45 ...
47 ---
49 name:            icmp_eq_s16_vs
50 legalized:       true
51 regBankSelected: true
53 body: |
54   bb.0:
55     liveins:  $sgpr0, $vgpr0
57     ; WAVE64-LABEL: name: icmp_eq_s16_vs
58     ; WAVE64: liveins: $sgpr0, $vgpr0
59     ; WAVE64-NEXT: {{  $}}
60     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
61     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
62     ; WAVE64-NEXT: [[V_CMP_EQ_U16_e64_:%[0-9]+]]:sreg_64 = V_CMP_EQ_U16_e64 [[COPY]], [[COPY1]], implicit $exec
63     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_CMP_EQ_U16_e64_]]
64     ;
65     ; WAVE32-LABEL: name: icmp_eq_s16_vs
66     ; WAVE32: liveins: $sgpr0, $vgpr0
67     ; WAVE32-NEXT: {{  $}}
68     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
69     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
70     ; WAVE32-NEXT: [[V_CMP_EQ_U16_e64_:%[0-9]+]]:sreg_32 = V_CMP_EQ_U16_e64 [[COPY]], [[COPY1]], implicit $exec
71     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_CMP_EQ_U16_e64_]]
72     ;
73     ; GFX11-LABEL: name: icmp_eq_s16_vs
74     ; GFX11: liveins: $sgpr0, $vgpr0
75     ; GFX11-NEXT: {{  $}}
76     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
77     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr0
78     ; GFX11-NEXT: [[V_CMP_EQ_U16_fake16_e64_:%[0-9]+]]:sreg_32 = V_CMP_EQ_U16_fake16_e64 [[COPY]], [[COPY1]], implicit $exec
79     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_EQ_U16_fake16_e64_]]
80     %0:vgpr(s32) = COPY $vgpr0
81     %1:sgpr(s32) = COPY $sgpr0
82     %2:vgpr(s16) = G_TRUNC %0
83     %3:sgpr(s16) = G_TRUNC %1
84     %4:vcc(s1) = G_ICMP intpred(eq), %2, %3
85     S_ENDPGM 0, implicit %4
86 ...
88 ---
90 name:            icmp_eq_s16_vv
91 legalized:       true
92 regBankSelected: true
94 body: |
95   bb.0:
96     liveins:  $vgpr0, $vgpr1
98     ; WAVE64-LABEL: name: icmp_eq_s16_vv
99     ; WAVE64: liveins: $vgpr0, $vgpr1
100     ; WAVE64-NEXT: {{  $}}
101     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
102     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
103     ; WAVE64-NEXT: [[V_CMP_EQ_U16_e64_:%[0-9]+]]:sreg_64 = V_CMP_EQ_U16_e64 [[COPY]], [[COPY1]], implicit $exec
104     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_CMP_EQ_U16_e64_]]
105     ;
106     ; WAVE32-LABEL: name: icmp_eq_s16_vv
107     ; WAVE32: liveins: $vgpr0, $vgpr1
108     ; WAVE32-NEXT: {{  $}}
109     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
110     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
111     ; WAVE32-NEXT: [[V_CMP_EQ_U16_e64_:%[0-9]+]]:sreg_32 = V_CMP_EQ_U16_e64 [[COPY]], [[COPY1]], implicit $exec
112     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_CMP_EQ_U16_e64_]]
113     ;
114     ; GFX11-LABEL: name: icmp_eq_s16_vv
115     ; GFX11: liveins: $vgpr0, $vgpr1
116     ; GFX11-NEXT: {{  $}}
117     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
118     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
119     ; GFX11-NEXT: [[V_CMP_EQ_U16_fake16_e64_:%[0-9]+]]:sreg_32 = V_CMP_EQ_U16_fake16_e64 [[COPY]], [[COPY1]], implicit $exec
120     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_EQ_U16_fake16_e64_]]
121     %0:vgpr(s32) = COPY $vgpr0
122     %1:vgpr(s32) = COPY $vgpr1
123     %2:vgpr(s16) = G_TRUNC %0
124     %3:vgpr(s16) = G_TRUNC %1
125     %4:vcc(s1) = G_ICMP intpred(eq), %2, %3
126     S_ENDPGM 0, implicit %4
131 name:            icmp_ne_s16_vv
132 legalized:       true
133 regBankSelected: true
135 body: |
136   bb.0:
137     liveins:  $vgpr0, $vgpr1
139     ; WAVE64-LABEL: name: icmp_ne_s16_vv
140     ; WAVE64: liveins: $vgpr0, $vgpr1
141     ; WAVE64-NEXT: {{  $}}
142     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
143     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
144     ; WAVE64-NEXT: [[V_CMP_NE_U16_e64_:%[0-9]+]]:sreg_64 = V_CMP_NE_U16_e64 [[COPY]], [[COPY1]], implicit $exec
145     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_CMP_NE_U16_e64_]]
146     ;
147     ; WAVE32-LABEL: name: icmp_ne_s16_vv
148     ; WAVE32: liveins: $vgpr0, $vgpr1
149     ; WAVE32-NEXT: {{  $}}
150     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
151     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
152     ; WAVE32-NEXT: [[V_CMP_NE_U16_e64_:%[0-9]+]]:sreg_32 = V_CMP_NE_U16_e64 [[COPY]], [[COPY1]], implicit $exec
153     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_CMP_NE_U16_e64_]]
154     ;
155     ; GFX11-LABEL: name: icmp_ne_s16_vv
156     ; GFX11: liveins: $vgpr0, $vgpr1
157     ; GFX11-NEXT: {{  $}}
158     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
159     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
160     ; GFX11-NEXT: [[V_CMP_NE_U16_fake16_e64_:%[0-9]+]]:sreg_32 = V_CMP_NE_U16_fake16_e64 [[COPY]], [[COPY1]], implicit $exec
161     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_NE_U16_fake16_e64_]]
162     %0:vgpr(s32) = COPY $vgpr0
163     %1:vgpr(s32) = COPY $vgpr1
164     %2:vgpr(s16) = G_TRUNC %0
165     %3:vgpr(s16) = G_TRUNC %1
166     %4:vcc(s1) = G_ICMP intpred(ne), %2, %3
167     S_ENDPGM 0, implicit %4
172 name:            icmp_slt_s16_vv
173 legalized:       true
174 regBankSelected: true
176 body: |
177   bb.0:
178     liveins:  $vgpr0, $vgpr1
180     ; WAVE64-LABEL: name: icmp_slt_s16_vv
181     ; WAVE64: liveins: $vgpr0, $vgpr1
182     ; WAVE64-NEXT: {{  $}}
183     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
184     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
185     ; WAVE64-NEXT: [[V_CMP_LT_I16_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_I16_e64 [[COPY]], [[COPY1]], implicit $exec
186     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_CMP_LT_I16_e64_]]
187     ;
188     ; WAVE32-LABEL: name: icmp_slt_s16_vv
189     ; WAVE32: liveins: $vgpr0, $vgpr1
190     ; WAVE32-NEXT: {{  $}}
191     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
192     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
193     ; WAVE32-NEXT: [[V_CMP_LT_I16_e64_:%[0-9]+]]:sreg_32 = V_CMP_LT_I16_e64 [[COPY]], [[COPY1]], implicit $exec
194     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_CMP_LT_I16_e64_]]
195     ;
196     ; GFX11-LABEL: name: icmp_slt_s16_vv
197     ; GFX11: liveins: $vgpr0, $vgpr1
198     ; GFX11-NEXT: {{  $}}
199     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
200     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
201     ; GFX11-NEXT: [[V_CMP_LT_I16_fake16_e64_:%[0-9]+]]:sreg_32 = V_CMP_LT_I16_fake16_e64 [[COPY]], [[COPY1]], implicit $exec
202     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_LT_I16_fake16_e64_]]
203     %0:vgpr(s32) = COPY $vgpr0
204     %1:vgpr(s32) = COPY $vgpr1
205     %2:vgpr(s16) = G_TRUNC %0
206     %3:vgpr(s16) = G_TRUNC %1
207     %4:vcc(s1) = G_ICMP intpred(slt), %2, %3
208     S_ENDPGM 0, implicit %4
213 name:            icmp_sle_s16_vv
214 legalized:       true
215 regBankSelected: true
217 body: |
218   bb.0:
219     liveins:  $vgpr0, $vgpr1
221     ; WAVE64-LABEL: name: icmp_sle_s16_vv
222     ; WAVE64: liveins: $vgpr0, $vgpr1
223     ; WAVE64-NEXT: {{  $}}
224     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
225     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
226     ; WAVE64-NEXT: [[V_CMP_LE_I16_e64_:%[0-9]+]]:sreg_64 = V_CMP_LE_I16_e64 [[COPY]], [[COPY1]], implicit $exec
227     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_CMP_LE_I16_e64_]]
228     ;
229     ; WAVE32-LABEL: name: icmp_sle_s16_vv
230     ; WAVE32: liveins: $vgpr0, $vgpr1
231     ; WAVE32-NEXT: {{  $}}
232     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
233     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
234     ; WAVE32-NEXT: [[V_CMP_LE_I16_e64_:%[0-9]+]]:sreg_32 = V_CMP_LE_I16_e64 [[COPY]], [[COPY1]], implicit $exec
235     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_CMP_LE_I16_e64_]]
236     ;
237     ; GFX11-LABEL: name: icmp_sle_s16_vv
238     ; GFX11: liveins: $vgpr0, $vgpr1
239     ; GFX11-NEXT: {{  $}}
240     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
241     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
242     ; GFX11-NEXT: [[V_CMP_LE_I16_fake16_e64_:%[0-9]+]]:sreg_32 = V_CMP_LE_I16_fake16_e64 [[COPY]], [[COPY1]], implicit $exec
243     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_LE_I16_fake16_e64_]]
244     %0:vgpr(s32) = COPY $vgpr0
245     %1:vgpr(s32) = COPY $vgpr1
246     %2:vgpr(s16) = G_TRUNC %0
247     %3:vgpr(s16) = G_TRUNC %1
248     %4:vcc(s1) = G_ICMP intpred(sle), %2, %3
249     S_ENDPGM 0, implicit %4
254 name:            icmp_ult_s16_vv
255 legalized:       true
256 regBankSelected: true
258 body: |
259   bb.0:
260     liveins:  $vgpr0, $vgpr1
262     ; WAVE64-LABEL: name: icmp_ult_s16_vv
263     ; WAVE64: liveins: $vgpr0, $vgpr1
264     ; WAVE64-NEXT: {{  $}}
265     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
266     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
267     ; WAVE64-NEXT: [[V_CMP_LT_U16_e64_:%[0-9]+]]:sreg_64 = V_CMP_LT_U16_e64 [[COPY]], [[COPY1]], implicit $exec
268     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_CMP_LT_U16_e64_]]
269     ;
270     ; WAVE32-LABEL: name: icmp_ult_s16_vv
271     ; WAVE32: liveins: $vgpr0, $vgpr1
272     ; WAVE32-NEXT: {{  $}}
273     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
274     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
275     ; WAVE32-NEXT: [[V_CMP_LT_U16_e64_:%[0-9]+]]:sreg_32 = V_CMP_LT_U16_e64 [[COPY]], [[COPY1]], implicit $exec
276     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_CMP_LT_U16_e64_]]
277     ;
278     ; GFX11-LABEL: name: icmp_ult_s16_vv
279     ; GFX11: liveins: $vgpr0, $vgpr1
280     ; GFX11-NEXT: {{  $}}
281     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
282     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
283     ; GFX11-NEXT: [[V_CMP_LT_U16_fake16_e64_:%[0-9]+]]:sreg_32 = V_CMP_LT_U16_fake16_e64 [[COPY]], [[COPY1]], implicit $exec
284     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_LT_U16_fake16_e64_]]
285     %0:vgpr(s32) = COPY $vgpr0
286     %1:vgpr(s32) = COPY $vgpr1
287     %2:vgpr(s16) = G_TRUNC %0
288     %3:vgpr(s16) = G_TRUNC %1
289     %4:vcc(s1) = G_ICMP intpred(ult), %2, %3
290     S_ENDPGM 0, implicit %4
295 name:            icmp_ule_s16_vv
296 legalized:       true
297 regBankSelected: true
299 body: |
300   bb.0:
301     liveins:  $vgpr0, $vgpr1
303     ; WAVE64-LABEL: name: icmp_ule_s16_vv
304     ; WAVE64: liveins: $vgpr0, $vgpr1
305     ; WAVE64-NEXT: {{  $}}
306     ; WAVE64-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
307     ; WAVE64-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
308     ; WAVE64-NEXT: [[V_CMP_LE_U16_e64_:%[0-9]+]]:sreg_64 = V_CMP_LE_U16_e64 [[COPY]], [[COPY1]], implicit $exec
309     ; WAVE64-NEXT: S_ENDPGM 0, implicit [[V_CMP_LE_U16_e64_]]
310     ;
311     ; WAVE32-LABEL: name: icmp_ule_s16_vv
312     ; WAVE32: liveins: $vgpr0, $vgpr1
313     ; WAVE32-NEXT: {{  $}}
314     ; WAVE32-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
315     ; WAVE32-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
316     ; WAVE32-NEXT: [[V_CMP_LE_U16_e64_:%[0-9]+]]:sreg_32 = V_CMP_LE_U16_e64 [[COPY]], [[COPY1]], implicit $exec
317     ; WAVE32-NEXT: S_ENDPGM 0, implicit [[V_CMP_LE_U16_e64_]]
318     ;
319     ; GFX11-LABEL: name: icmp_ule_s16_vv
320     ; GFX11: liveins: $vgpr0, $vgpr1
321     ; GFX11-NEXT: {{  $}}
322     ; GFX11-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
323     ; GFX11-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
324     ; GFX11-NEXT: [[V_CMP_LE_U16_fake16_e64_:%[0-9]+]]:sreg_32 = V_CMP_LE_U16_fake16_e64 [[COPY]], [[COPY1]], implicit $exec
325     ; GFX11-NEXT: S_ENDPGM 0, implicit [[V_CMP_LE_U16_fake16_e64_]]
326     %0:vgpr(s32) = COPY $vgpr0
327     %1:vgpr(s32) = COPY $vgpr1
328     %2:vgpr(s16) = G_TRUNC %0
329     %3:vgpr(s16) = G_TRUNC %1
330     %4:vcc(s1) = G_ICMP intpred(ule), %2, %3
331     S_ENDPGM 0, implicit %4