Skip to content

Commit 9620c0e

Browse files
committed
pre-commit test
1 parent 64dcc5e commit 9620c0e

File tree

1 file changed

+43
-2
lines changed

1 file changed

+43
-2
lines changed

llvm/test/Transforms/ConstraintElimination/uadd-usub-sat.ll

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ define i1 @uadd_sat_uge(i64 %a, i64 %b) {
88
; CHECK-LABEL: define i1 @uadd_sat_uge(
99
; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) {
1010
; CHECK-NEXT: [[ADD_SAT:%.*]] = call i64 @llvm.uadd.sat.i64(i64 [[A]], i64 [[B]])
11-
; CHECK-NEXT: [[CMP:%.*]] = and i1 true, true
11+
; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i64 [[ADD_SAT]], [[A]]
12+
; CHECK-NEXT: [[CMP2:%.*]] = icmp uge i64 [[ADD_SAT]], [[B]]
13+
; CHECK-NEXT: [[CMP:%.*]] = and i1 [[CMP1]], [[CMP2]]
1214
; CHECK-NEXT: ret i1 [[CMP]]
1315
;
1416
%add.sat = call i64 @llvm.uadd.sat.i64(i64 %a, i64 %b)
@@ -22,13 +24,42 @@ define i1 @usub_sat_ule_lhs(i64 %a, i64 %b) {
2224
; CHECK-LABEL: define i1 @usub_sat_ule_lhs(
2325
; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) {
2426
; CHECK-NEXT: [[SUB_SAT:%.*]] = call i64 @llvm.usub.sat.i64(i64 [[A]], i64 [[B]])
25-
; CHECK-NEXT: ret i1 true
27+
; CHECK-NEXT: [[CMP:%.*]] = icmp ule i64 [[SUB_SAT]], [[A]]
28+
; CHECK-NEXT: ret i1 [[CMP]]
2629
;
2730
%sub.sat = call i64 @llvm.usub.sat.i64(i64 %a, i64 %b)
2831
%cmp = icmp ule i64 %sub.sat, %a
2932
ret i1 %cmp
3033
}
3134

35+
define i64 @usub_sat_when_lhs_ugt_rhs(i64 %a, i64 %b) {
36+
; CHECK-LABEL: define i64 @usub_sat_when_lhs_ugt_rhs(
37+
; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) {
38+
; CHECK-NEXT: [[PRECOND:%.*]] = icmp ugt i64 [[A]], [[B]]
39+
; CHECK-NEXT: call void @llvm.assume(i1 [[PRECOND]])
40+
; CHECK-NEXT: [[SUB_SAT:%.*]] = call i64 @llvm.usub.sat.i64(i64 [[A]], i64 [[B]])
41+
; CHECK-NEXT: ret i64 [[SUB_SAT]]
42+
;
43+
%precond = icmp ugt i64 %a, %b
44+
call void @llvm.assume(i1 %precond)
45+
%sub.sat = call i64 @llvm.usub.sat.i64(i64 %a, i64 %b)
46+
ret i64 %sub.sat
47+
}
48+
49+
define i64 @usub_sat_when_lhs_ule_rhs(i64 %a, i64 %b) {
50+
; CHECK-LABEL: define i64 @usub_sat_when_lhs_ule_rhs(
51+
; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) {
52+
; CHECK-NEXT: [[PRECOND:%.*]] = icmp ule i64 [[A]], [[B]]
53+
; CHECK-NEXT: call void @llvm.assume(i1 [[PRECOND]])
54+
; CHECK-NEXT: [[SUB_SAT:%.*]] = call i64 @llvm.usub.sat.i64(i64 [[A]], i64 [[B]])
55+
; CHECK-NEXT: ret i64 [[SUB_SAT]]
56+
;
57+
%precond = icmp ule i64 %a, %b
58+
call void @llvm.assume(i1 %precond)
59+
%sub.sat = call i64 @llvm.usub.sat.i64(i64 %a, i64 %b)
60+
ret i64 %sub.sat
61+
}
62+
3263
; Negative test
3364
define i1 @usub_sat_not_ule_rhs(i64 %a, i64 %b) {
3465
; CHECK-LABEL: define i1 @usub_sat_not_ule_rhs(
@@ -41,3 +72,13 @@ define i1 @usub_sat_not_ule_rhs(i64 %a, i64 %b) {
4172
%cmp = icmp ule i64 %sub.sat, %b
4273
ret i1 %cmp
4374
}
75+
76+
define i64 @usub_sat_without_precond(i64 %a, i64 %b) {
77+
; CHECK-LABEL: define i64 @usub_sat_without_precond(
78+
; CHECK-SAME: i64 [[A:%.*]], i64 [[B:%.*]]) {
79+
; CHECK-NEXT: [[SUB_SAT:%.*]] = call i64 @llvm.usub.sat.i64(i64 [[A]], i64 [[B]])
80+
; CHECK-NEXT: ret i64 [[SUB_SAT]]
81+
;
82+
%sub.sat = call i64 @llvm.usub.sat.i64(i64 %a, i64 %b)
83+
ret i64 %sub.sat
84+
}

0 commit comments

Comments
 (0)