Skip to content

Commit d795383

Browse files
committed
Add some more tests
1 parent 7660fae commit d795383

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

llvm/test/CodeGen/AArch64/underflow-compare-fold.ll

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
; GitHub issue #161036
44

5+
; Positive test : umin(sub(a,b),a) with scalar types should be folded
56
define i64 @underflow_compare_fold(i64 %a, i64 %b) {
67
; CHECK-LABEL: underflow_compare_fold
78
; CHECK: // %bb.0:
@@ -12,3 +13,41 @@ define i64 @underflow_compare_fold(i64 %a, i64 %b) {
1213
%cond = tail call i64 @llvm.umin.i64(i64 %sub, i64 %a)
1314
ret i64 %cond
1415
}
16+
17+
; Negative test, vector types : umin(sub(a,b),a) but with vectors
18+
define <16 x i8> @underflow_compare_dontfold_vectors(<16 x i8> %a, <16 x i8> %b) {
19+
; CHECK-LABEL: underflow_compare_dontfold_vectors
20+
; CHECK-LABEL: %bb.0
21+
; CHECK-NEXT: sub v1.16b, v0.16b, v1.16b
22+
; CHECK-NEXT: umin v0.16b, v1.16b, v0.16b
23+
; CHECK-NEXT: ret
24+
%sub = sub <16 x i8> %a, %b
25+
%cond = tail call <16 x i8> @llvm.umin.v16i8(<16 x i8> %sub, <16 x i8> %a)
26+
ret <16 x i8> %cond
27+
}
28+
29+
; Negative test, pattern mismatch : umin(a,sub(a,b))
30+
define i64 @umin_sub_inverse_args(i64 %a, i64 %b) {
31+
; CHECK-LABEL: umin_sub_inverse_args
32+
; CHECK-LABEL: %bb.0
33+
; CHECK-NEXT: sub x8, x0, x1
34+
; CHECK-NEXT: cmp x0, x8
35+
; CHECK-NEXT: csel x0, x0, x8, lo
36+
; CHECK-NEXT: ret
37+
%sub = sub i64 %a, %b
38+
%cond = tail call i64 @llvm.umin.i64(i64 %a, i64 %sub)
39+
ret i64 %cond
40+
}
41+
42+
; Negative test, pattern mismatch : umin(add(a,b),a)
43+
define i64 @umin_add(i64 %a, i64 %b) {
44+
; CHECK-LABEL: umin_add
45+
; CHECK-LABEL: %bb.0
46+
; CHECK-NEXT: add x8, x0, x1
47+
; CHECK-NEXT: cmp x8, x0
48+
; CHECK-NEXT: csel x0, x8, x0, lo
49+
; CHECK-NEXT: ret
50+
%add = add i64 %a, %b
51+
%cond = tail call i64 @llvm.umin.i64(i64 %add, i64 %a)
52+
ret i64 %cond
53+
}

llvm/test/CodeGen/X86/underflow-compare-fold.ll

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
; GitHub issue #161036
44

5+
; Positive test : umin(sub(a,b),a) with scalar types should be folded
56
define i64 @underflow_compare_fold(i64 %a, i64 %b) {
67
; CHECK-LABEL: underflow_compare_fold
78
; CHECK-LABEL: %bb.0
@@ -13,3 +14,43 @@ define i64 @underflow_compare_fold(i64 %a, i64 %b) {
1314
%cond = tail call i64 @llvm.umin.i64(i64 %sub, i64 %a)
1415
ret i64 %cond
1516
}
17+
18+
; Negative test, vector types : umin(sub(a,b),a) but with vectors
19+
define <16 x i8> @underflow_compare_dontfold_vectors(<16 x i8> %a, <16 x i8> %b) {
20+
; CHECK-LABEL: underflow_compare_dontfold_vectors
21+
; CHECK-LABEL: %bb.0
22+
; CHECK-NEXT: movdqa %xmm0, %xmm2
23+
; CHECK-NEXT: psubb %xmm1, %xmm2
24+
; CHECK-NEXT: pminub %xmm2, %xmm0
25+
; CHECK-NEXT: retq
26+
%sub = sub <16 x i8> %a, %b
27+
%cond = tail call <16 x i8> @llvm.umin.v16i8(<16 x i8> %sub, <16 x i8> %a)
28+
ret <16 x i8> %cond
29+
}
30+
31+
; Negative test, pattern mismatch : umin(a,sub(a,b))
32+
define i64 @umin_sub_inverse_args(i64 %a, i64 %b) {
33+
; CHECK-LABEL: umin_sub_inverse_args
34+
; CHECK-LABEL: %bb.0
35+
; CHECK-NEXT: movq %rdi, %rax
36+
; CHECK-NEXT: subq %rsi, %rax
37+
; CHECK-NEXT: cmpq %rax, %rdi
38+
; CHECK-NEXT: cmovbq %rdi, %rax
39+
; CHECK-NEXT: retq
40+
%sub = sub i64 %a, %b
41+
%cond = tail call i64 @llvm.umin.i64(i64 %a, i64 %sub)
42+
ret i64 %cond
43+
}
44+
45+
; Negative test, pattern mismatch : umin(add(a,b),a)
46+
define i64 @umin_add(i64 %a, i64 %b) {
47+
; CHECK-LABEL: umin_add
48+
; CHECK-LABEL: %bb.0
49+
; CHECK-NEXT: leaq (%rsi,%rdi), %rax
50+
; CHECK-NEXT: cmpq %rdi, %rax
51+
; CHECK-NEXT: cmovaeq %rdi, %rax
52+
; CHECK-NEXT: retq
53+
%add = add i64 %a, %b
54+
%cond = tail call i64 @llvm.umin.i64(i64 %add, i64 %a)
55+
ret i64 %cond
56+
}

0 commit comments

Comments
 (0)