[llvm] r303426 - [LoopPredication] NFC. Extract LoopPredication::expandCheck helper
Artur Pilipenko via llvm-commits
llvm-commits at lists.llvm.org
Fri May 19 07:00:59 PDT 2017
Author: apilipenko
Date: Fri May 19 09:00:58 2017
New Revision: 303426
URL: http://llvm.org/viewvc/llvm-project?rev=303426&view=rev
Log:
[LoopPredication] NFC. Extract LoopPredication::expandCheck helper
Modified:
llvm/trunk/lib/Transforms/Scalar/LoopPredication.cpp
Modified: llvm/trunk/lib/Transforms/Scalar/LoopPredication.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Scalar/LoopPredication.cpp?rev=303426&r1=303425&r2=303426&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Scalar/LoopPredication.cpp (original)
+++ llvm/trunk/lib/Transforms/Scalar/LoopPredication.cpp Fri May 19 09:00:58 2017
@@ -64,6 +64,10 @@ class LoopPredication {
const DataLayout *DL;
BasicBlock *Preheader;
+ Value *expandCheck(SCEVExpander &Expander, IRBuilder<> &Builder,
+ ICmpInst::Predicate Pred, const SCEV *LHS, const SCEV *RHS,
+ Instruction *InsertAt);
+
Optional<Value *> widenICmpRangeCheck(ICmpInst *ICI, SCEVExpander &Expander,
IRBuilder<> &Builder);
bool widenGuardConditions(IntrinsicInst *II, SCEVExpander &Expander);
@@ -116,6 +120,17 @@ PreservedAnalyses LoopPredicationPass::r
return getLoopPassPreservedAnalyses();
}
+Value *LoopPredication::expandCheck(SCEVExpander &Expander,
+ IRBuilder<> &Builder,
+ ICmpInst::Predicate Pred, const SCEV *LHS,
+ const SCEV *RHS, Instruction *InsertAt) {
+ Type *Ty = LHS->getType();
+ assert(Ty == RHS->getType() && "expandCheck operands have different types?");
+ Value *LHSV = Expander.expandCodeFor(LHS, Ty, InsertAt);
+ Value *RHSV = Expander.expandCodeFor(RHS, Ty, InsertAt);
+ return Builder.CreateICmp(Pred, LHSV, RHSV);
+}
+
/// If ICI can be widened to a loop invariant condition emits the loop
/// invariant condition in the loop preheader and return it, otherwise
/// returns None.
@@ -179,12 +194,8 @@ Optional<Value *> LoopPredication::widen
DEBUG(dbgs() << "NewLHSS is loop invariant and safe to expand. Expand!\n");
- Type *Ty = LHS->getType();
Instruction *InsertAt = Preheader->getTerminator();
- assert(Ty == RHS->getType() && "icmp operands have different types?");
- Value *NewLHS = Expander.expandCodeFor(NewLHSS, Ty, InsertAt);
- Value *NewRHS = Expander.expandCodeFor(RHSS, Ty, InsertAt);
- return Builder.CreateICmp(Pred, NewLHS, NewRHS);
+ return expandCheck(Expander, Builder, Pred, NewLHSS, RHSS, InsertAt);
}
bool LoopPredication::widenGuardConditions(IntrinsicInst *Guard,
More information about the llvm-commits
mailing list