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
14 liveins: $sgpr0, $vgpr0
16 ; WAVE64-LABEL: name: icmp_eq_s16_sv
17 ; WAVE64: liveins: $sgpr0, $vgpr0
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_]]
24 ; WAVE32-LABEL: name: icmp_eq_s16_sv
25 ; WAVE32: liveins: $sgpr0, $vgpr0
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_]]
32 ; GFX11-LABEL: name: icmp_eq_s16_sv
33 ; GFX11: liveins: $sgpr0, $vgpr0
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
55 liveins: $sgpr0, $vgpr0
57 ; WAVE64-LABEL: name: icmp_eq_s16_vs
58 ; WAVE64: liveins: $sgpr0, $vgpr0
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_]]
65 ; WAVE32-LABEL: name: icmp_eq_s16_vs
66 ; WAVE32: liveins: $sgpr0, $vgpr0
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_]]
73 ; GFX11-LABEL: name: icmp_eq_s16_vs
74 ; GFX11: liveins: $sgpr0, $vgpr0
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
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_]]
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_]]
114 ; GFX11-LABEL: name: icmp_eq_s16_vv
115 ; GFX11: liveins: $vgpr0, $vgpr1
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
133 regBankSelected: true
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_]]
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_]]
155 ; GFX11-LABEL: name: icmp_ne_s16_vv
156 ; GFX11: liveins: $vgpr0, $vgpr1
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
174 regBankSelected: true
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_]]
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_]]
196 ; GFX11-LABEL: name: icmp_slt_s16_vv
197 ; GFX11: liveins: $vgpr0, $vgpr1
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
215 regBankSelected: true
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_]]
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_]]
237 ; GFX11-LABEL: name: icmp_sle_s16_vv
238 ; GFX11: liveins: $vgpr0, $vgpr1
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
256 regBankSelected: true
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_]]
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_]]
278 ; GFX11-LABEL: name: icmp_ult_s16_vv
279 ; GFX11: liveins: $vgpr0, $vgpr1
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
297 regBankSelected: true
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_]]
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_]]
319 ; GFX11-LABEL: name: icmp_ule_s16_vv
320 ; GFX11: liveins: $vgpr0, $vgpr1
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