Skip to content

Commit f051f42

Browse files
committed
add nopoison back
1 parent 14ade27 commit f051f42

File tree

2 files changed

+12
-7
lines changed

2 files changed

+12
-7
lines changed

llvm/lib/Transforms/Scalar/ConstraintElimination.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1134,7 +1134,6 @@ void State::addInfoFor(BasicBlock &BB) {
11341134
case Intrinsic::smin:
11351135
case Intrinsic::smax:
11361136
case Intrinsic::usub_sat:
1137-
// TODO: handle llvm.abs as well
11381137
WorkList.push_back(
11391138
FactOrCheck::getCheck(DT.getNode(&BB), cast<CallInst>(&I)));
11401139
// TODO: Check if it is possible to instead only added the min/max facts

llvm/test/Transforms/ConstraintElimination/abs.ll

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ define i1 @abs_int_min_is_not_poison(i32 %arg) {
55
; CHECK-LABEL: define i1 @abs_int_min_is_not_poison(
66
; CHECK-SAME: i32 [[ARG:%.*]]) {
77
; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 false)
8-
; CHECK-NEXT: ret i1 true
8+
; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ABS]], [[ARG]]
9+
; CHECK-NEXT: ret i1 [[CMP]]
910
;
1011
%abs = tail call i32 @llvm.abs.i32(i32 %arg, i1 false)
1112
%cmp = icmp sge i32 %abs, %arg
@@ -16,7 +17,8 @@ define i1 @abs_int_min_is_poison(i32 %arg) {
1617
; CHECK-LABEL: define i1 @abs_int_min_is_poison(
1718
; CHECK-SAME: i32 [[ARG:%.*]]) {
1819
; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
19-
; CHECK-NEXT: ret i1 true
20+
; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ABS]], [[ARG]]
21+
; CHECK-NEXT: ret i1 [[CMP]]
2022
;
2123
%abs = tail call i32 @llvm.abs.i32(i32 %arg, i1 true)
2224
%cmp = icmp sge i32 %abs, %arg
@@ -28,7 +30,8 @@ define i1 @abs_plus_one(i32 %arg) {
2830
; CHECK-SAME: i32 [[ARG:%.*]]) {
2931
; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
3032
; CHECK-NEXT: [[ABS_PLUS_ONE:%.*]] = add nsw i32 [[ABS]], 1
31-
; CHECK-NEXT: ret i1 true
33+
; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ABS_PLUS_ONE]], [[ARG]]
34+
; CHECK-NEXT: ret i1 [[CMP]]
3235
;
3336
%abs = tail call i32 @llvm.abs.i32(i32 %arg, i1 true)
3437
%abs_plus_one = add nsw i32 %abs, 1
@@ -41,7 +44,8 @@ define i1 @arg_minus_one_strict_less(i32 %arg) {
4144
; CHECK-SAME: i32 [[ARG:%.*]]) {
4245
; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
4346
; CHECK-NEXT: [[ARG_MINUS_ONE:%.*]] = add nsw i32 [[ARG]], -1
44-
; CHECK-NEXT: ret i1 true
47+
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[ARG_MINUS_ONE]], [[ABS]]
48+
; CHECK-NEXT: ret i1 [[CMP]]
4549
;
4650
%abs = tail call i32 @llvm.abs.i32(i32 %arg, i1 true)
4751
%arg_minus_one = add nsw i32 %arg, -1
@@ -54,7 +58,8 @@ define i1 @arg_minus_one_strict_greater(i32 %arg) {
5458
; CHECK-SAME: i32 [[ARG:%.*]]) {
5559
; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
5660
; CHECK-NEXT: [[ARG_MINUS_ONE:%.*]] = add nsw i32 [[ARG]], -1
57-
; CHECK-NEXT: ret i1 false
61+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[ARG_MINUS_ONE]], [[ABS]]
62+
; CHECK-NEXT: ret i1 [[CMP]]
5863
;
5964
%abs = tail call i32 @llvm.abs.i32(i32 %arg, i1 true)
6065
%arg_minus_one = add nsw i32 %arg, -1
@@ -138,7 +143,8 @@ define i1 @abs_is_nonnegative_int_min_is_poison(i32 %arg) {
138143
; CHECK-LABEL: define i1 @abs_is_nonnegative_int_min_is_poison(
139144
; CHECK-SAME: i32 [[ARG:%.*]]) {
140145
; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
141-
; CHECK-NEXT: ret i1 true
146+
; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ABS]], 0
147+
; CHECK-NEXT: ret i1 [[CMP]]
142148
;
143149
%abs = tail call i32 @llvm.abs.i32(i32 %arg, i1 true)
144150
%cmp = icmp sge i32 %abs, 0

0 commit comments

Comments
 (0)