diff options
Diffstat (limited to 'polly/lib')
-rw-r--r-- | polly/lib/Analysis/ScopBuilder.cpp | 21 | ||||
-rw-r--r-- | polly/lib/Analysis/ScopInfo.cpp | 19 |
2 files changed, 20 insertions, 20 deletions
diff --git a/polly/lib/Analysis/ScopBuilder.cpp b/polly/lib/Analysis/ScopBuilder.cpp index c4ac225d04e..dcacd3eae5e 100644 --- a/polly/lib/Analysis/ScopBuilder.cpp +++ b/polly/lib/Analysis/ScopBuilder.cpp @@ -1320,6 +1320,25 @@ void ScopBuilder::verifyInvariantLoads() { } } +void ScopBuilder::hoistInvariantLoads() { + if (!PollyInvariantLoadHoisting) + return; + + isl::union_map Writes = scop->getWrites(); + for (ScopStmt &Stmt : *scop) { + InvariantAccessesTy InvariantAccesses; + + for (MemoryAccess *Access : Stmt) + if (isl::set NHCtx = scop->getNonHoistableCtx(Access, Writes)) + InvariantAccesses.push_back({Access, NHCtx}); + + // Transfer the memory access from the statement to the SCoP. + for (auto InvMA : InvariantAccesses) + Stmt.removeMemoryAccess(InvMA.MA); + scop->addInvariantLoads(Stmt, InvariantAccesses); + } +} + void ScopBuilder::collectCandidateReductionLoads( MemoryAccess *StoreMA, SmallVectorImpl<MemoryAccess *> &Loads) { ScopStmt *Stmt = StoreMA->getStatement(); @@ -1670,7 +1689,7 @@ void ScopBuilder::buildScop(Region &R, AssumptionCache &AC, return; } - scop->hoistInvariantLoads(); + hoistInvariantLoads(); canonicalizeDynamicBasePtrs(); verifyInvariantLoads(); scop->simplifySCoP(true); diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp index 0a8da7426bc..00ede96ada3 100644 --- a/polly/lib/Analysis/ScopInfo.cpp +++ b/polly/lib/Analysis/ScopInfo.cpp @@ -3778,25 +3778,6 @@ isl::set Scop::getNonHoistableCtx(MemoryAccess *Access, isl::union_map Writes) { return WrittenCtx; } -void Scop::hoistInvariantLoads() { - if (!PollyInvariantLoadHoisting) - return; - - isl::union_map Writes = getWrites(); - for (ScopStmt &Stmt : *this) { - InvariantAccessesTy InvariantAccesses; - - for (MemoryAccess *Access : Stmt) - if (isl::set NHCtx = getNonHoistableCtx(Access, Writes)) - InvariantAccesses.push_back({Access, NHCtx}); - - // Transfer the memory access from the statement to the SCoP. - for (auto InvMA : InvariantAccesses) - Stmt.removeMemoryAccess(InvMA.MA); - addInvariantLoads(Stmt, InvariantAccesses); - } -} - ScopArrayInfo *Scop::getOrCreateScopArrayInfo(Value *BasePtr, Type *ElementType, ArrayRef<const SCEV *> Sizes, MemoryKind Kind, |