diff options
Diffstat (limited to 'polly/lib/Support/ScopHelper.cpp')
-rw-r--r-- | polly/lib/Support/ScopHelper.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/polly/lib/Support/ScopHelper.cpp b/polly/lib/Support/ScopHelper.cpp index cc41d4812f7..d2123bd69eb 100644 --- a/polly/lib/Support/ScopHelper.cpp +++ b/polly/lib/Support/ScopHelper.cpp @@ -14,7 +14,6 @@ #include "polly/Support/ScopHelper.h" #include "polly/Options.h" #include "polly/ScopInfo.h" -#include "llvm/Analysis/AliasAnalysis.h" #include "llvm/Analysis/LoopInfo.h" #include "llvm/Analysis/RegionInfo.h" #include "llvm/Analysis/ScalarEvolution.h" @@ -240,8 +239,6 @@ void polly::splitEntryBlockForAlloca(BasicBlock *EntryBlock, Pass *P) { struct ScopExpander : SCEVVisitor<ScopExpander, const SCEV *> { friend struct SCEVVisitor<ScopExpander, const SCEV *>; - typedef llvm::DenseMap<const llvm::Value *, llvm::Value *> ValueMapT; - explicit ScopExpander(const Region &R, ScalarEvolution &SE, const DataLayout &DL, const char *Name, ValueMapT *VMap) : Expander(SCEVExpander(SE, DL, Name)), SE(SE), Name(Name), R(R), @@ -342,10 +339,9 @@ private: ///} }; -Value * -polly::expandCodeFor(Scop &S, ScalarEvolution &SE, const DataLayout &DL, - const char *Name, const SCEV *E, Type *Ty, Instruction *IP, - llvm::DenseMap<const llvm::Value *, llvm::Value *> *VMap) { +Value *polly::expandCodeFor(Scop &S, ScalarEvolution &SE, const DataLayout &DL, + const char *Name, const SCEV *E, Type *Ty, + Instruction *IP, ValueMapT *VMap) { ScopExpander Expander(S.getRegion(), SE, DL, Name, VMap); return Expander.expandCodeFor(E, Ty, IP); } @@ -383,3 +379,16 @@ Value *polly::getConditionFromTerminator(TerminatorInst *TI) { return nullptr; } + +bool polly::isHoistableLoad(LoadInst *LInst, Region &R, LoopInfo &LI, + ScalarEvolution &SE) { + Loop *L = LI.getLoopFor(LInst->getParent()); + const SCEV *PtrSCEV = SE.getSCEVAtScope(LInst->getPointerOperand(), L); + while (L && R.contains(L)) { + if (!SE.isLoopInvariant(PtrSCEV, L)) + return false; + L = L->getParentLoop(); + } + + return true; +} |