diff options
author | Artur Pilipenko <apilipenko@azulsystems.com> | 2017-10-12 21:21:17 +0000 |
---|---|---|
committer | Artur Pilipenko <apilipenko@azulsystems.com> | 2017-10-12 21:21:17 +0000 |
commit | ead69ee4bd93eca62864c994a4428fe0d989fb74 (patch) | |
tree | db7d33e833557fdb80c46d4846275e68285af3c9 /llvm/lib | |
parent | e1449566c6587b114b141092a24e35d09456f141 (diff) | |
download | bcm5719-llvm-ead69ee4bd93eca62864c994a4428fe0d989fb74.tar.gz bcm5719-llvm-ead69ee4bd93eca62864c994a4428fe0d989fb74.zip |
[LoopPredication] Check whether the loop is already guarded by the first iteration check condition
llvm-svn: 315623
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Scalar/LoopPredication.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopPredication.cpp b/llvm/lib/Transforms/Scalar/LoopPredication.cpp index bb22a50e604..393c6049af1 100644 --- a/llvm/lib/Transforms/Scalar/LoopPredication.cpp +++ b/llvm/lib/Transforms/Scalar/LoopPredication.cpp @@ -289,6 +289,10 @@ Value *LoopPredication::expandCheck(SCEVExpander &Expander, Type *Ty = LHS->getType(); assert(Ty == RHS->getType() && "expandCheck operands have different types?"); + + if (SE->isLoopEntryGuardedByCond(L, Pred, LHS, RHS)) + return Builder.getTrue(); + Value *LHSV = Expander.expandCodeFor(LHS, Ty, InsertAt); Value *RHSV = Expander.expandCodeFor(RHS, Ty, InsertAt); return Builder.CreateICmp(Pred, LHSV, RHSV); @@ -358,10 +362,10 @@ Optional<Value *> LoopPredication::widenICmpRangeCheck(ICmpInst *ICI, return None; Instruction *InsertAt = Preheader->getTerminator(); - auto *FirstIterationCheck = expandCheck(Expander, Builder, RangeCheck->Pred, - Start, RangeCheck->Limit, InsertAt); auto *LimitCheck = expandCheck(Expander, Builder, LimitCheckPred, LatchCheck.Limit, RangeCheck->Limit, InsertAt); + auto *FirstIterationCheck = expandCheck(Expander, Builder, RangeCheck->Pred, + Start, RangeCheck->Limit, InsertAt); return Builder.CreateAnd(FirstIterationCheck, LimitCheck); } |