[llvm-branch-commits] [llvm] e8c7e7c - [ValueTracking] Add more known non zero tests (NFC)

Nikita Popov via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Sat Dec 26 07:01:12 PST 2020


Author: Nikita Popov
Date: 2020-12-26T15:48:04+01:00
New Revision: e8c7e7cdbbb12a485999a8b9d69e7138b3f34845

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

LOG: [ValueTracking] Add more known non zero tests (NFC)

Add tests for non-trivial conditions that imply non-zero on the
false branch rather than the true branch.

The last case already folds due to canonicalization.

Added: 
    

Modified: 
    llvm/test/Transforms/InstCombine/known-non-zero.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/InstCombine/known-non-zero.ll b/llvm/test/Transforms/InstCombine/known-non-zero.ll
index 7fdb0886d6c7..ac2dfaa9089e 100644
--- a/llvm/test/Transforms/InstCombine/known-non-zero.ll
+++ b/llvm/test/Transforms/InstCombine/known-non-zero.ll
@@ -225,3 +225,95 @@ non_zero:
 exit:
   ret i64 -1
 }
+
+define i64 @test_sle_zero(i64 %x) {
+; CHECK-LABEL: @test_sle_zero(
+; CHECK-NEXT:  start:
+; CHECK-NEXT:    [[C:%.*]] = icmp slt i64 [[X:%.*]], 1
+; CHECK-NEXT:    br i1 [[C]], label [[EXIT:%.*]], label [[NON_ZERO:%.*]]
+; CHECK:       non_zero:
+; CHECK-NEXT:    [[CTZ:%.*]] = call i64 @llvm.ctlz.i64(i64 [[X]], i1 false), [[RNG0]]
+; CHECK-NEXT:    ret i64 [[CTZ]]
+; CHECK:       exit:
+; CHECK-NEXT:    ret i64 -1
+;
+start:
+  %c = icmp sle i64 %x, 0
+  br i1 %c, label %exit, label %non_zero
+
+non_zero:
+  %ctz = call i64 @llvm.ctlz.i64(i64 %x, i1 false)
+  ret i64 %ctz
+
+exit:
+  ret i64 -1
+}
+
+define i64 @test_sge_neg_ten(i64 %x) {
+; CHECK-LABEL: @test_sge_neg_ten(
+; CHECK-NEXT:  start:
+; CHECK-NEXT:    [[C:%.*]] = icmp sgt i64 [[X:%.*]], -11
+; CHECK-NEXT:    br i1 [[C]], label [[EXIT:%.*]], label [[NON_ZERO:%.*]]
+; CHECK:       non_zero:
+; CHECK-NEXT:    [[CTZ:%.*]] = call i64 @llvm.ctlz.i64(i64 [[X]], i1 false), [[RNG0]]
+; CHECK-NEXT:    ret i64 [[CTZ]]
+; CHECK:       exit:
+; CHECK-NEXT:    ret i64 -1
+;
+start:
+  %c = icmp sge i64 %x, -10
+  br i1 %c, label %exit, label %non_zero
+
+non_zero:
+  %ctz = call i64 @llvm.ctlz.i64(i64 %x, i1 false)
+  ret i64 %ctz
+
+exit:
+  ret i64 -1
+}
+
+define i64 @test_sge_ten(i64 %x) {
+; CHECK-LABEL: @test_sge_ten(
+; CHECK-NEXT:  start:
+; CHECK-NEXT:    [[C:%.*]] = icmp sgt i64 [[X:%.*]], 9
+; CHECK-NEXT:    br i1 [[C]], label [[EXIT:%.*]], label [[MAYBE_ZERO:%.*]]
+; CHECK:       maybe_zero:
+; CHECK-NEXT:    [[CTZ:%.*]] = call i64 @llvm.ctlz.i64(i64 [[X]], i1 false), [[RNG0]]
+; CHECK-NEXT:    ret i64 [[CTZ]]
+; CHECK:       exit:
+; CHECK-NEXT:    ret i64 -1
+;
+start:
+  %c = icmp sge i64 %x, 10
+  br i1 %c, label %exit, label %maybe_zero
+
+maybe_zero:
+  %ctz = call i64 @llvm.ctlz.i64(i64 %x, i1 false)
+  ret i64 %ctz
+
+exit:
+  ret i64 -1
+}
+
+define i64 @test_ule_unknown(i64 %x, i64 %y) {
+; CHECK-LABEL: @test_ule_unknown(
+; CHECK-NEXT:  start:
+; CHECK-NEXT:    [[C_NOT:%.*]] = icmp ugt i64 [[X:%.*]], [[Y:%.*]]
+; CHECK-NEXT:    br i1 [[C_NOT]], label [[NON_ZERO:%.*]], label [[EXIT:%.*]]
+; CHECK:       non_zero:
+; CHECK-NEXT:    [[CTZ:%.*]] = call i64 @llvm.ctlz.i64(i64 [[X]], i1 true), [[RNG0]]
+; CHECK-NEXT:    ret i64 [[CTZ]]
+; CHECK:       exit:
+; CHECK-NEXT:    ret i64 -1
+;
+start:
+  %c = icmp ule i64 %x, %y
+  br i1 %c, label %exit, label %non_zero
+
+non_zero:
+  %ctz = call i64 @llvm.ctlz.i64(i64 %x, i1 false)
+  ret i64 %ctz
+
+exit:
+  ret i64 -1
+}


        


More information about the llvm-branch-commits mailing list