[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");
     }
   }
 }