Skip to content

Commit eb98b50

Browse files
[ConstraintElim] Add tests for llvm.abs >= 0 (llvm#79068)
Add tests for llvm.abs >= 0. This is a preparation for llvm#79070 .
1 parent 6138485 commit eb98b50

File tree

1 file changed

+47
-0
lines changed
  • llvm/test/Transforms/ConstraintElimination

1 file changed

+47
-0
lines changed

llvm/test/Transforms/ConstraintElimination/abs.ll

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,5 +114,52 @@ define i1 @abs_constant_positive_arg() {
114114
ret i1 %cmp
115115
}
116116

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+
117164
declare i32 @llvm.abs.i32(i32, i1 immarg)
118165
declare void @llvm.assume(i1)

0 commit comments

Comments
 (0)