]> granicus.if.org Git - llvm/commitdiff
[IRCE][NFC] Store Length as SCEV in RangeCheck instead of Value
authorMax Kazantsev <max.kazantsev@azul.com>
Mon, 30 Oct 2017 09:35:16 +0000 (09:35 +0000)
committerMax Kazantsev <max.kazantsev@azul.com>
Mon, 30 Oct 2017 09:35:16 +0000 (09:35 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@316889 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp
test/Transforms/IRCE/only-upper-check.ll

index 42c74c3a3ccb54c3ed3beadab4424f7650a1b3f8..d9c1b2ba57b8f1601d1e0dab812a5a43b9a1abd4 100644 (file)
@@ -151,7 +151,7 @@ class InductiveRangeCheck {
 
   const SCEV *Offset = nullptr;
   const SCEV *Scale = nullptr;
-  Value *Length = nullptr;
+  const SCEV *Length = nullptr;
   Use *CheckUse = nullptr;
   RangeCheckKind Kind = RANGE_CHECK_UNKNOWN;
   bool IsSigned = true;
@@ -168,7 +168,7 @@ class InductiveRangeCheck {
 public:
   const SCEV *getOffset() const { return Offset; }
   const SCEV *getScale() const { return Scale; }
-  Value *getLength() const { return Length; }
+  const SCEV *getLength() const { return Length; }
   bool isSigned() const { return IsSigned; }
 
   void print(raw_ostream &OS) const {
@@ -419,7 +419,7 @@ void InductiveRangeCheck::extractRangeChecksFromCond(
     return;
 
   InductiveRangeCheck IRC;
-  IRC.Length = Length;
+  IRC.Length = Length ? SE.getSCEV(Length) : nullptr;
   IRC.Offset = IndexAddRec->getStart();
   IRC.Scale = IndexAddRec->getStepRecurrence(SE);
   IRC.CheckUse = &ConditionUse;
@@ -1660,9 +1660,9 @@ InductiveRangeCheck::computeSafeIterationSpace(
 
   // We strengthen "0 <= I" to "0 <= I < INT_SMAX" and "I < L" to "0 <= I < L".
   // We can potentially do much better here.
-  if (Value *V = getLength()) {
-    UpperLimit = SE.getSCEV(V);
-  else {
+  if (const SCEV *L = getLength())
+    UpperLimit = L;
+  else {
     assert(Kind == InductiveRangeCheck::RANGE_CHECK_LOWER && "invariant!");
     unsigned BitWidth = cast<IntegerType>(IndVar->getType())->getBitWidth();
     UpperLimit = SE.getConstant(APInt::getSignedMaxValue(BitWidth));
index 24aaef0010111825484f4b34023d32e25d20846d..0f15339e9b116b0e4e73e1c2f147b2466a36cc13 100644 (file)
@@ -3,7 +3,7 @@
 ; CHECK: irce: loop has 1 inductive range checks:
 ; CHECK-NEXT:InductiveRangeCheck:
 ; CHECK-NEXT:  Kind: RANGE_CHECK_UPPER
-; CHECK-NEXT:  Offset: %offset  Scale: 1  Length:   %len = load i32, i32* %a_len_ptr, !range !0
+; CHECK-NEXT:  Offset: %offset  Scale: 1  Length:   %len
 ; CHECK-NEXT:  CheckUse:   br i1 %abc, label %in.bounds, label %out.of.bounds, !prof !1 Operand: 0
 ; CHECK-NEXT: irce: in function incrementing: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting>