[llvm] eb98b50 - [ConstraintElim] Add tests for llvm.abs >= 0 (#79068)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 29 10:45:34 PST 2024


Author: Alexander Shaposhnikov
Date: 2024-01-29T10:45:29-08:00
New Revision: eb98b5003cacfc01102557744655f6c2fc02b0cb

URL: https://github.com/llvm/llvm-project/commit/eb98b5003cacfc01102557744655f6c2fc02b0cb
DIFF: https://github.com/llvm/llvm-project/commit/eb98b5003cacfc01102557744655f6c2fc02b0cb.diff

LOG: [ConstraintElim] Add tests for llvm.abs >= 0 (#79068)

Add tests for llvm.abs >= 0.
This is a preparation for
https://github.com/llvm/llvm-project/pull/79070 .

Added: 
    

Modified: 
    llvm/test/Transforms/ConstraintElimination/abs.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/ConstraintElimination/abs.ll b/llvm/test/Transforms/ConstraintElimination/abs.ll
index c3162ba48c2e4a..a7b20997fa4cd3 100644
--- a/llvm/test/Transforms/ConstraintElimination/abs.ll
+++ b/llvm/test/Transforms/ConstraintElimination/abs.ll
@@ -114,5 +114,52 @@ define i1 @abs_constant_positive_arg() {
   ret i1 %cmp
 }
 
+define i1 @abs_is_nonnegative_except_for_int_min_if_int_min_is_not_poison(i32 %arg) {
+; CHECK-LABEL: define i1 @abs_is_nonnegative_except_for_int_min_if_int_min_is_not_poison(
+; CHECK-SAME: i32 [[ARG:%.*]]) {
+; CHECK-NEXT:    [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 false)
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i32 [[ABS]], 0
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %abs = tail call i32 @llvm.abs.i32(i32 %arg, i1 false)
+  %cmp = icmp sge i32 %abs, 0
+  ret i1 %cmp
+}
+
+define i1 @abs_is_not_strictly_positive(i32 %arg) {
+; CHECK-LABEL: define i1 @abs_is_not_strictly_positive(
+; CHECK-SAME: i32 [[ARG:%.*]]) {
+; CHECK-NEXT:    [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i32 [[ABS]], 0
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %abs = tail call i32 @llvm.abs.i32(i32 %arg, i1 true)
+  %cmp = icmp sgt i32 %abs, 0
+  ret i1 %cmp
+}
+
+define i1 @abs_is_nonnegative_int_min_is_poison(i32 %arg) {
+; CHECK-LABEL: define i1 @abs_is_nonnegative_int_min_is_poison(
+; CHECK-SAME: i32 [[ARG:%.*]]) {
+; CHECK-NEXT:    [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 [[ARG]], i1 true)
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i32 [[ABS]], 0
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %abs = tail call i32 @llvm.abs.i32(i32 %arg, i1 true)
+  %cmp = icmp sge i32 %abs, 0
+  ret i1 %cmp
+}
+
+define i1 @abs_is_nonnegative_constant_arg() {
+; CHECK-LABEL: define i1 @abs_is_nonnegative_constant_arg() {
+; CHECK-NEXT:    [[ABS:%.*]] = tail call i32 @llvm.abs.i32(i32 -3, i1 true)
+; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i32 [[ABS]], 0
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %abs = tail call i32 @llvm.abs.i32(i32 -3, i1 true)
+  %cmp = icmp sge i32 %abs, 0
+  ret i1 %cmp
+}
+
 declare i32 @llvm.abs.i32(i32, i1 immarg)
 declare void @llvm.assume(i1)


        


More information about the llvm-commits mailing list