summaryrefslogtreecommitdiffstats
path: root/polly/lib/Analysis/ScopBuilder.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'polly/lib/Analysis/ScopBuilder.cpp')
-rw-r--r--polly/lib/Analysis/ScopBuilder.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/polly/lib/Analysis/ScopBuilder.cpp b/polly/lib/Analysis/ScopBuilder.cpp
index aa114527e6c..3d1e292b757 100644
--- a/polly/lib/Analysis/ScopBuilder.cpp
+++ b/polly/lib/Analysis/ScopBuilder.cpp
@@ -1190,10 +1190,21 @@ void ScopBuilder::buildDomain(ScopStmt &Stmt) {
void ScopBuilder::collectSurroundingLoops(ScopStmt &Stmt) {
isl::set Domain = Stmt.getDomain();
- for (unsigned u = 0, e = Domain.dim(isl::dim::set); u < e; u++) {
- isl::id DimId = Domain.get_dim_id(isl::dim::set, u);
- Stmt.NestLoops.push_back(static_cast<Loop *>(DimId.get_user()));
+ BasicBlock *BB = Stmt.getEntryBlock();
+
+ Loop *L = LI.getLoopFor(BB);
+
+ while (L && Stmt.isRegionStmt() && Stmt.getRegion()->contains(L))
+ L = L->getParentLoop();
+
+ SmallVector<llvm::Loop *, 8> Loops;
+
+ while (L && Stmt.getParent()->getRegion().contains(L)) {
+ Loops.push_back(L);
+ L = L->getParentLoop();
}
+
+ Stmt.NestLoops.insert(Stmt.NestLoops.begin(), Loops.rbegin(), Loops.rend());
}
/// Return the reduction type for a given binary operator.
OpenPOWER on IntegriCloud