diff options
| -rw-r--r-- | llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp | 19 | ||||
| -rw-r--r-- | llvm/test/Transforms/IRCE/only-lower-check.ll | 2 | ||||
| -rw-r--r-- | llvm/test/Transforms/IRCE/only-upper-check.ll | 2 |
3 files changed, 12 insertions, 11 deletions
diff --git a/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp b/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp index 5b4b6c14693..2b9f3f59c8e 100644 --- a/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp +++ b/llvm/lib/Transforms/Scalar/InductiveRangeCheckElimination.cpp @@ -118,7 +118,7 @@ class InductiveRangeCheck { const SCEV *Offset; const SCEV *Scale; Value *Length; - BranchInst *Branch; + Use *CheckUse; RangeCheckKind Kind; static RangeCheckKind parseRangeCheckICmp(Loop *L, ICmpInst *ICI, @@ -129,8 +129,9 @@ class InductiveRangeCheck { parseRangeCheck(Loop *L, ScalarEvolution &SE, Value *Condition, const SCEV *&Index, Value *&UpperLimit); - InductiveRangeCheck() : - Offset(nullptr), Scale(nullptr), Length(nullptr), Branch(nullptr) { } + InductiveRangeCheck() + : Offset(nullptr), Scale(nullptr), Length(nullptr), + CheckUse(nullptr) {} public: const SCEV *getOffset() const { return Offset; } @@ -149,9 +150,9 @@ public: Length->print(OS); else OS << "(null)"; - OS << "\n Branch: "; - getBranch()->print(OS); - OS << "\n"; + OS << "\n CheckUse: "; + getCheckUse()->getUser()->print(OS); + OS << " Operand: " << getCheckUse()->getOperandNo() << "\n"; } #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) @@ -160,7 +161,7 @@ public: } #endif - BranchInst *getBranch() const { return Branch; } + Use *getCheckUse() const { return CheckUse; } /// Represents an signed integer range [Range.getBegin(), Range.getEnd()). If /// R.getEnd() sle R.getBegin(), then R denotes the empty range. @@ -407,7 +408,7 @@ InductiveRangeCheck::create(BranchInst *BI, Loop *L, ScalarEvolution &SE, IRC.Length = Length; IRC.Offset = IndexAddRec->getStart(); IRC.Scale = IndexAddRec->getStepRecurrence(SE); - IRC.Branch = BI; + IRC.CheckUse = &BI->getOperandUse(0); IRC.Kind = RCKind; return IRC; } @@ -1474,7 +1475,7 @@ bool InductiveRangeCheckElimination::runOnLoop(Loop *L, LPPassManager &LPM) { ConstantInt *FoldedRangeCheck = IRC.getPassingDirection() ? ConstantInt::getTrue(Context) : ConstantInt::getFalse(Context); - IRC.getBranch()->setCondition(FoldedRangeCheck); + IRC.getCheckUse()->set(FoldedRangeCheck); } } diff --git a/llvm/test/Transforms/IRCE/only-lower-check.ll b/llvm/test/Transforms/IRCE/only-lower-check.ll index 69abc89c1a6..428c3aabdec 100644 --- a/llvm/test/Transforms/IRCE/only-lower-check.ll +++ b/llvm/test/Transforms/IRCE/only-lower-check.ll @@ -4,7 +4,7 @@ ; CHECK-NEXT: InductiveRangeCheck: ; CHECK-NEXT: Kind: RANGE_CHECK_LOWER ; CHECK-NEXT: Offset: (-1 + %n) Scale: -1 Length: (null) -; CHECK-NEXT: Branch: br i1 %abc, label %in.bounds, label %out.of.bounds +; CHECK-NEXT: CheckUse: br i1 %abc, label %in.bounds, label %out.of.bounds, !prof !1 Operand: 0 ; CHECK-NEXT: irce: in function only_lower_check: constrained Loop at depth 1 containing: %loop<header><exiting>,%in.bounds<latch><exiting> define void @only_lower_check(i32 *%arr, i32 *%a_len_ptr, i32 %n) { diff --git a/llvm/test/Transforms/IRCE/only-upper-check.ll b/llvm/test/Transforms/IRCE/only-upper-check.ll index dda3f3f6dd8..8e3e1ffe99b 100644 --- a/llvm/test/Transforms/IRCE/only-upper-check.ll +++ b/llvm/test/Transforms/IRCE/only-upper-check.ll @@ -4,7 +4,7 @@ ; 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: Branch: br i1 %abc, label %in.bounds, label %out.of.bounds, !prof !1 +; 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> define void @incrementing(i32 *%arr, i32 *%a_len_ptr, i32 %n, i32 %offset) { |

