[FIX] Domain generation for non-affine loops
llvm-svn: 249275
diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp
index 7989eb8..f5fb5fa 100644
--- a/polly/lib/Analysis/ScopInfo.cpp
+++ b/polly/lib/Analysis/ScopInfo.cpp
@@ -1820,9 +1820,11 @@
// in a non-affine subregion or if the surrounding loop stays the same.
Loop *SuccBBLoop = LI.getLoopFor(SuccBB);
Region *SuccRegion = RI.getRegionFor(SuccBB);
- if (BBLoop != SuccBBLoop && !RN->isSubRegion() &&
- !(SD.isNonAffineSubRegion(SuccRegion, &getRegion()) &&
- SuccRegion->contains(SuccBBLoop))) {
+ if (SD.isNonAffineSubRegion(SuccRegion, &getRegion()))
+ while (SuccBBLoop && SuccRegion->contains(SuccBBLoop))
+ SuccBBLoop = SuccBBLoop->getParentLoop();
+
+ if (BBLoop != SuccBBLoop) {
// Check if the edge to SuccBB is a loop entry or exit edge. If so
// adjust the dimensionality accordingly. Lastly, if we leave a loop
@@ -1855,8 +1857,8 @@
SuccDomain = isl_set_union(SuccDomain, CondSet);
SuccDomain = isl_set_coalesce(SuccDomain);
- DEBUG(dbgs() << "\tSet SuccBB: " << SuccBB->getName() << " : " << Domain
- << "\n");
+ DEBUG(dbgs() << "\tSet SuccBB: " << SuccBB->getName() << " : "
+ << SuccDomain << "\n");
}
}
}