Skip to content

Commit 5f6f3c3

Browse files
committed
Pre-commit tests (NFC)
1 parent f0eb558 commit 5f6f3c3

File tree

2 files changed

+150
-0
lines changed

2 files changed

+150
-0
lines changed

llvm/test/CodeGen/AArch64/cmp-chains.ll

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,3 +258,59 @@ define i32 @neg_range_int(i32 %a, i32 %b, i32 %c) {
258258
ret i32 %retval.0
259259
}
260260

261+
; (b > -(d | 1) && a < c)
262+
define i32 @neg_range_int_comp(i32 %a, i32 %b, i32 %c, i32 %d) {
263+
; CHECK-LABEL: neg_range_int_comp:
264+
; CHECK: // %bb.0:
265+
; CHECK-NEXT: orr w8, w3, #0x1
266+
; CHECK-NEXT: cmp w0, w2
267+
; CHECK-NEXT: neg w8, w8
268+
; CHECK-NEXT: ccmp w1, w8, #4, lt
269+
; CHECK-NEXT: csel w0, w1, w0, gt
270+
; CHECK-NEXT: ret
271+
%dor = or i32 %d, 1
272+
%negd = sub i32 0, %dor
273+
%cmp = icmp sgt i32 %b, %negd
274+
%cmp1 = icmp slt i32 %a, %c
275+
%or.cond = and i1 %cmp, %cmp1
276+
%retval.0 = select i1 %or.cond, i32 %b, i32 %a
277+
ret i32 %retval.0
278+
}
279+
280+
; (b >u -(d | 1) && a < c)
281+
define i32 @neg_range_int_comp_u(i32 %a, i32 %b, i32 %c, i32 %d) {
282+
; CHECK-LABEL: neg_range_int_comp_u:
283+
; CHECK: // %bb.0:
284+
; CHECK-NEXT: orr w8, w3, #0x1
285+
; CHECK-NEXT: cmp w0, w2
286+
; CHECK-NEXT: neg w8, w8
287+
; CHECK-NEXT: ccmp w1, w8, #0, lt
288+
; CHECK-NEXT: csel w0, w1, w0, hi
289+
; CHECK-NEXT: ret
290+
%dor = or i32 %d, 1
291+
%negd = sub i32 0, %dor
292+
%cmp = icmp ugt i32 %b, %negd
293+
%cmp1 = icmp slt i32 %a, %c
294+
%or.cond = and i1 %cmp, %cmp1
295+
%retval.0 = select i1 %or.cond, i32 %b, i32 %a
296+
ret i32 %retval.0
297+
}
298+
299+
; (b > -(d | 1) && a u < c)
300+
define i32 @neg_range_int_comp_ua(i32 %a, i32 %b, i32 %c, i32 %d) {
301+
; CHECK-LABEL: neg_range_int_comp_ua:
302+
; CHECK: // %bb.0:
303+
; CHECK-NEXT: orr w8, w3, #0x1
304+
; CHECK-NEXT: cmp w0, w2
305+
; CHECK-NEXT: neg w8, w8
306+
; CHECK-NEXT: ccmp w1, w8, #4, lo
307+
; CHECK-NEXT: csel w0, w1, w0, gt
308+
; CHECK-NEXT: ret
309+
%dor = or i32 %d, 1
310+
%negd = sub i32 0, %dor
311+
%cmp = icmp sgt i32 %b, %negd
312+
%cmp1 = icmp ult i32 %a, %c
313+
%or.cond = and i1 %cmp, %cmp1
314+
%retval.0 = select i1 %or.cond, i32 %b, i32 %a
315+
ret i32 %retval.0
316+
}

llvm/test/CodeGen/AArch64/cmp-select-sign.ll

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,4 +262,98 @@ define <4 x i65> @sign_4xi65(<4 x i65> %a) {
262262
ret <4 x i65> %res
263263
}
264264

265+
define i32 @or_neg(i32 %x, i32 %y) {
266+
; CHECK-LABEL: or_neg:
267+
; CHECK: // %bb.0:
268+
; CHECK-NEXT: orr w8, w0, #0x1
269+
; CHECK-NEXT: neg w8, w8
270+
; CHECK-NEXT: cmp w8, w1
271+
; CHECK-NEXT: cset w0, gt
272+
; CHECK-NEXT: ret
273+
%3 = or i32 %x, 1
274+
%4 = sub i32 0, %3
275+
%5 = icmp sgt i32 %4, %y
276+
%6 = zext i1 %5 to i32
277+
ret i32 %6
278+
}
279+
280+
define i32 @or_neg_ult(i32 %x, i32 %y) {
281+
; CHECK-LABEL: or_neg_ult:
282+
; CHECK: // %bb.0:
283+
; CHECK-NEXT: orr w8, w0, #0x1
284+
; CHECK-NEXT: neg w8, w8
285+
; CHECK-NEXT: cmp w8, w1
286+
; CHECK-NEXT: cset w0, hi
287+
; CHECK-NEXT: ret
288+
%3 = or i32 %x, 1
289+
%4 = sub i32 0, %3
290+
%5 = icmp ugt i32 %4, %y
291+
%6 = zext i1 %5 to i32
292+
ret i32 %6
293+
}
294+
295+
; Negative test
296+
297+
define i32 @or_neg_no_smin(i32 %x, i32 %y) {
298+
; CHECK-LABEL: or_neg_no_smin:
299+
; CHECK: // %bb.0:
300+
; CHECK-NEXT: neg w8, w0
301+
; CHECK-NEXT: cmp w8, w1
302+
; CHECK-NEXT: cset w0, gt
303+
; CHECK-NEXT: ret
304+
%4 = sub i32 0, %x
305+
%5 = icmp sgt i32 %4, %y
306+
%6 = zext i1 %5 to i32
307+
ret i32 %6
308+
}
309+
310+
; Negative test
311+
312+
define i32 @or_neg_ult_no_zero(i32 %x, i32 %y) {
313+
; CHECK-LABEL: or_neg_ult_no_zero:
314+
; CHECK: // %bb.0:
315+
; CHECK-NEXT: neg w8, w0
316+
; CHECK-NEXT: cmp w8, w1
317+
; CHECK-NEXT: cset w0, hi
318+
; CHECK-NEXT: ret
319+
%4 = sub i32 0, %x
320+
%5 = icmp ugt i32 %4, %y
321+
%6 = zext i1 %5 to i32
322+
ret i32 %6
323+
}
324+
325+
define i32 @or_neg_no_smin_but_zero(i32 %x, i32 %y) {
326+
; CHECK-LABEL: or_neg_no_smin_but_zero:
327+
; CHECK: // %bb.0:
328+
; CHECK-NEXT: bic w8, w0, w0, asr #31
329+
; CHECK-NEXT: neg w8, w8
330+
; CHECK-NEXT: cmp w8, w1
331+
; CHECK-NEXT: cset w0, gt
332+
; CHECK-NEXT: ret
333+
%3 = call i32 @llvm.smax.i32(i32 %x, i32 0)
334+
%4 = sub i32 0, %3
335+
%5 = icmp sgt i32 %4, %y
336+
%6 = zext i1 %5 to i32
337+
ret i32 %6
338+
}
339+
340+
define i32 @or_neg_slt_zero_but_no_smin(i32 %x, i32 %y) {
341+
; CHECK-LABEL: or_neg_slt_zero_but_no_smin:
342+
; CHECK: // %bb.0:
343+
; CHECK-NEXT: mov w8, #9 // =0x9
344+
; CHECK-NEXT: cmp w0, #9
345+
; CHECK-NEXT: csel w8, w0, w8, lo
346+
; CHECK-NEXT: neg w8, w8
347+
; CHECK-NEXT: cmp w8, w1
348+
; CHECK-NEXT: cset w0, hi
349+
; CHECK-NEXT: ret
350+
%3 = call i32 @llvm.umin.i32(i32 %x, i32 9)
351+
%4 = sub i32 0, %3
352+
%5 = icmp ugt i32 %4, %y
353+
%6 = zext i1 %5 to i32
354+
ret i32 %6
355+
}
356+
357+
declare i32 @llvm.smax.i32(i32, i32)
358+
declare i32 @llvm.umax.i32(i32, i32)
265359
declare void @use_4xi1(<4 x i1>)

0 commit comments

Comments
 (0)