@@ -114,5 +114,52 @@ define i1 @abs_constant_positive_arg() {
114
114
ret i1 %cmp
115
115
}
116
116
117
+ define i1 @abs_is_nonnegative_except_for_int_min_if_int_min_is_not_poison (i32 %arg ) {
118
+ ; CHECK-LABEL: define i1 @abs_is_nonnegative_except_for_int_min_if_int_min_is_not_poison(
119
+ ; CHECK-SAME: i32 [[ARG:%.*]]) {
120
+ ; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 false)
121
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ABS]], 0
122
+ ; CHECK-NEXT: ret i1 [[CMP]]
123
+ ;
124
+ %abs = tail call i32 @llvm.abs.i32 (i32 %arg , i1 false )
125
+ %cmp = icmp sge i32 %abs , 0
126
+ ret i1 %cmp
127
+ }
128
+
129
+ define i1 @abs_is_not_strictly_positive (i32 %arg ) {
130
+ ; CHECK-LABEL: define i1 @abs_is_not_strictly_positive(
131
+ ; CHECK-SAME: i32 [[ARG:%.*]]) {
132
+ ; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
133
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[ABS]], 0
134
+ ; CHECK-NEXT: ret i1 [[CMP]]
135
+ ;
136
+ %abs = tail call i32 @llvm.abs.i32 (i32 %arg , i1 true )
137
+ %cmp = icmp sgt i32 %abs , 0
138
+ ret i1 %cmp
139
+ }
140
+
141
+ define i1 @abs_is_nonnegative_int_min_is_poison (i32 %arg ) {
142
+ ; CHECK-LABEL: define i1 @abs_is_nonnegative_int_min_is_poison(
143
+ ; CHECK-SAME: i32 [[ARG:%.*]]) {
144
+ ; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
145
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ABS]], 0
146
+ ; CHECK-NEXT: ret i1 [[CMP]]
147
+ ;
148
+ %abs = tail call i32 @llvm.abs.i32 (i32 %arg , i1 true )
149
+ %cmp = icmp sge i32 %abs , 0
150
+ ret i1 %cmp
151
+ }
152
+
153
+ define i1 @abs_is_nonnegative_constant_arg () {
154
+ ; CHECK-LABEL: define i1 @abs_is_nonnegative_constant_arg() {
155
+ ; CHECK-NEXT: [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 -3, i1 true)
156
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[ABS]], 0
157
+ ; CHECK-NEXT: ret i1 [[CMP]]
158
+ ;
159
+ %abs = tail call i32 @llvm.abs.i32 (i32 -3 , i1 true )
160
+ %cmp = icmp sge i32 %abs , 0
161
+ ret i1 %cmp
162
+ }
163
+
117
164
declare i32 @llvm.abs.i32 (i32 , i1 immarg)
118
165
declare void @llvm.assume (i1 )
0 commit comments