summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorArtur Pilipenko <apilipenko@azulsystems.com>2017-10-12 21:21:17 +0000
committerArtur Pilipenko <apilipenko@azulsystems.com>2017-10-12 21:21:17 +0000
commitead69ee4bd93eca62864c994a4428fe0d989fb74 (patch)
treedb7d33e833557fdb80c46d4846275e68285af3c9 /llvm/lib
parente1449566c6587b114b141092a24e35d09456f141 (diff)
downloadbcm5719-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.cpp8
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);
}
OpenPOWER on IntegriCloud