[polly] r249275 - [FIX] Domain generation for non-affine loops

Johannes Doerfert via llvm-commits llvm-commits at lists.llvm.org
Sun Oct 4 07:57:41 PDT 2015


Author: jdoerfert
Date: Sun Oct  4 09:57:41 2015
New Revision: 249275

URL: http://llvm.org/viewvc/llvm-project?rev=249275&view=rev
Log:
[FIX] Domain generation for non-affine loops

Added:
    polly/trunk/test/ScopInfo/2015-10-04-Crash-in-domain-generation.ll
Modified:
    polly/trunk/lib/Analysis/ScopInfo.cpp

Modified: polly/trunk/lib/Analysis/ScopInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopInfo.cpp?rev=249275&r1=249274&r2=249275&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopInfo.cpp (original)
+++ polly/trunk/lib/Analysis/ScopInfo.cpp Sun Oct  4 09:57:41 2015
@@ -1820,9 +1820,11 @@ void Scop::buildDomainsWithBranchConstra
       // 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 @@ void Scop::buildDomainsWithBranchConstra
         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");
     }
   }
 }

Added: polly/trunk/test/ScopInfo/2015-10-04-Crash-in-domain-generation.ll
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/test/ScopInfo/2015-10-04-Crash-in-domain-generation.ll?rev=249275&view=auto
==============================================================================
--- polly/trunk/test/ScopInfo/2015-10-04-Crash-in-domain-generation.ll (added)
+++ polly/trunk/test/ScopInfo/2015-10-04-Crash-in-domain-generation.ll Sun Oct  4 09:57:41 2015
@@ -0,0 +1,32 @@
+; RUN: opt %loadPolly -polly-detect-unprofitable -polly-allow-nonaffine-loops -polly-scops -analyze < %s
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+; Function Attrs: nounwind uwtable
+define void @kernel_reg_detect([6 x i32]* %path) {
+entry:
+  br label %for.body.6
+
+for.body.6:                                       ; preds = %for.inc.43, %for.body.6, %entry
+  %indvars.iv9 = phi i64 [ %indvars.iv.next10, %for.body.6 ], [ 0, %entry ]
+  %indvars.iv.next10 = add nuw nsw i64 %indvars.iv9, 1
+  %exitcond = icmp ne i64 %indvars.iv.next10, 6
+  br i1 %exitcond, label %for.body.6, label %for.inc.40
+
+for.inc.40:                                       ; preds = %for.inc.40, %for.body.6
+  %indvars.iv = phi i64 [ %indvars.iv.next, %for.inc.40 ], [ 0, %for.body.6 ]
+  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
+  %arrayidx28 = getelementptr inbounds [6 x i32], [6 x i32]* %path, i64 0, i64 0
+  %tmp = load i32, i32* %arrayidx28, align 4
+  %arrayidx36 = getelementptr inbounds [6 x i32], [6 x i32]* %path, i64 0, i64 0
+  store i32 0, i32* %arrayidx36, align 4
+  %mul = mul i64 %indvars.iv, %indvars.iv
+  %exitcond22 = icmp ne i64 %mul, 6
+  br i1 %exitcond22, label %for.inc.40, label %for.inc.43
+
+for.inc.43:                                       ; preds = %for.inc.40
+  br label %for.end.45
+
+for.end.45:                                       ; preds = %for.inc.43
+  ret void
+}




More information about the llvm-commits mailing list