@@ -5,7 +5,8 @@ define i1 @abs_int_min_is_not_poison(i32 %arg) {
5
5
; CHECK-LABEL: define i1 @abs_int_min_is_not_poison(
6
6
; CHECK-SAME: i32 [[ARG:%.*]]) {
7
7
; 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]]
9
10
;
10
11
%abs = tail call i32 @llvm.abs.i32 (i32 %arg , i1 false )
11
12
%cmp = icmp sge i32 %abs , %arg
@@ -16,7 +17,8 @@ define i1 @abs_int_min_is_poison(i32 %arg) {
16
17
; CHECK-LABEL: define i1 @abs_int_min_is_poison(
17
18
; CHECK-SAME: i32 [[ARG:%.*]]) {
18
19
; 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]]
20
22
;
21
23
%abs = tail call i32 @llvm.abs.i32 (i32 %arg , i1 true )
22
24
%cmp = icmp sge i32 %abs , %arg
@@ -28,7 +30,8 @@ define i1 @abs_plus_one(i32 %arg) {
28
30
; CHECK-SAME: i32 [[ARG:%.*]]) {
29
31
; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
30
32
; 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]]
32
35
;
33
36
%abs = tail call i32 @llvm.abs.i32 (i32 %arg , i1 true )
34
37
%abs_plus_one = add nsw i32 %abs , 1
@@ -41,7 +44,8 @@ define i1 @arg_minus_one_strict_less(i32 %arg) {
41
44
; CHECK-SAME: i32 [[ARG:%.*]]) {
42
45
; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
43
46
; 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]]
45
49
;
46
50
%abs = tail call i32 @llvm.abs.i32 (i32 %arg , i1 true )
47
51
%arg_minus_one = add nsw i32 %arg , -1
@@ -54,7 +58,8 @@ define i1 @arg_minus_one_strict_greater(i32 %arg) {
54
58
; CHECK-SAME: i32 [[ARG:%.*]]) {
55
59
; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
56
60
; 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]]
58
63
;
59
64
%abs = tail call i32 @llvm.abs.i32 (i32 %arg , i1 true )
60
65
%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) {
69
74
; CHECK-NEXT: call void @llvm.assume(i1 [[CMP_ARG_NONNEGATIVE]])
70
75
; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
71
76
; 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]]
73
79
;
74
80
%cmp_arg_nonnegative = icmp sge i32 %arg , 0
75
81
call void @llvm.assume (i1 %cmp_arg_nonnegative )
@@ -142,7 +148,8 @@ define i1 @abs_is_nonnegative_int_min_is_poison(i32 %arg) {
142
148
; CHECK-LABEL: define i1 @abs_is_nonnegative_int_min_is_poison(
143
149
; CHECK-SAME: i32 [[ARG:%.*]]) {
144
150
; 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]]
146
153
;
147
154
%abs = tail call i32 @llvm.abs.i32 (i32 %arg , i1 true )
148
155
%cmp = icmp sge i32 %abs , 0
@@ -152,7 +159,8 @@ define i1 @abs_is_nonnegative_int_min_is_poison(i32 %arg) {
152
159
define i1 @abs_is_nonnegative_constant_arg () {
153
160
; CHECK-LABEL: define i1 @abs_is_nonnegative_constant_arg() {
154
161
; 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]]
156
164
;
157
165
%abs = tail call i32 @llvm.abs.i32 (i32 -3 , i1 true )
158
166
%cmp = icmp sge i32 %abs , 0
0 commit comments