[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