@@ -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
@@ -69,7 +74,8 @@ define i1 @abs_plus_one_unsigned_greater_or_equal_nonnegative_arg(i32 %arg) {
6974; CHECK-NEXT: call void @llvm.assume(i1 [[CMP_ARG_NONNEGATIVE]])
7075; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
7176; CHECK-NEXT: [[ABS_PLUS_ONE:%.*]] = add nuw i32 [[ABS]], 1
72- ; CHECK-NEXT: ret i1 true
77+ ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i32 [[ABS_PLUS_ONE]], [[ARG]]
78+ ; CHECK-NEXT: ret i1 [[CMP]]
7379;
7480 %cmp_arg_nonnegative = icmp sge i32 %arg , 0
7581 call void @llvm.assume (i1 %cmp_arg_nonnegative )
@@ -142,7 +148,8 @@ define i1 @abs_is_nonnegative_int_min_is_poison(i32 %arg) {
142148; CHECK-LABEL: define i1 @abs_is_nonnegative_int_min_is_poison(
143149; CHECK-SAME: i32 [[ARG:%.*]]) {
144150; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
145- ; CHECK-NEXT: ret i1 true
151+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ABS]], 0
152+ ; CHECK-NEXT: ret i1 [[CMP]]
146153;
147154 %abs = tail call i32 @llvm.abs.i32 (i32 %arg , i1 true )
148155 %cmp = icmp sge i32 %abs , 0
@@ -152,7 +159,8 @@ define i1 @abs_is_nonnegative_int_min_is_poison(i32 %arg) {
152159define i1 @abs_is_nonnegative_constant_arg () {
153160; CHECK-LABEL: define i1 @abs_is_nonnegative_constant_arg() {
154161; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 -3, i1 true)
155- ; CHECK-NEXT: ret i1 true
162+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ABS]], 0
163+ ; CHECK-NEXT: ret i1 [[CMP]]
156164;
157165 %abs = tail call i32 @llvm.abs.i32 (i32 -3 , i1 true )
158166 %cmp = icmp sge i32 %abs , 0
0 commit comments