summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--polly/lib/Analysis/ScopInfo.cpp3
-rw-r--r--polly/test/ScopInfo/new-domain-construction-schedule-not-freed.ll55
2 files changed, 58 insertions, 0 deletions
diff --git a/polly/lib/Analysis/ScopInfo.cpp b/polly/lib/Analysis/ScopInfo.cpp
index ab5469634e9..63ba35ab557 100644
--- a/polly/lib/Analysis/ScopInfo.cpp
+++ b/polly/lib/Analysis/ScopInfo.cpp
@@ -3091,6 +3091,9 @@ void Scop::buildSchedule(
}
Loop *L = getRegionNodeLoop(RN, LI);
+ if (!getRegion().contains(L))
+ L = getLoopSurroundingRegion(getRegion(), LI);
+
int LD = getRelativeLoopDepth(L);
auto &LSchedulePair = LoopSchedules[L];
LSchedulePair.second += getNumBlocksInRegionNode(RN);
diff --git a/polly/test/ScopInfo/new-domain-construction-schedule-not-freed.ll b/polly/test/ScopInfo/new-domain-construction-schedule-not-freed.ll
new file mode 100644
index 00000000000..348d4d22b79
--- /dev/null
+++ b/polly/test/ScopInfo/new-domain-construction-schedule-not-freed.ll
@@ -0,0 +1,55 @@
+; RUN: opt %loadPolly -analyze -polly-scops %s | FileCheck %s
+;
+; At some point this caused a problem in the schedule generation and we
+; keep the test to avoid regressions there.
+;
+; CHECK: Statements
+;
+target triple = "x86_64-unknown-linux-gnu"
+
+; Function Attrs: nounwind uwtable
+define void @qtm_decompress() #0 {
+entry:
+ br label %if.end.1631
+
+if.end.1631: ; preds = %entry
+ br i1 false, label %for.cond.1647.preheader, label %if.then.1635
+
+if.then.1635: ; preds = %if.end.1631
+ br label %for.cond.1647.preheader
+
+for.cond.1647.preheader: ; preds = %if.then.1635, %if.end.1631
+ br label %for.cond.1647.outer
+
+for.cond.1647.outer: ; preds = %do.end.1685, %for.cond.1647.preheader
+ %bits_needed.5.ph = phi i8 [ 8, %for.cond.1647.preheader ], [ undef, %do.end.1685 ]
+ br label %for.cond.1647
+
+for.cond.1647: ; preds = %do.cond.1718, %for.cond.1647.outer
+ %bits_needed.5 = phi i8 [ 8, %do.cond.1718 ], [ %bits_needed.5.ph, %for.cond.1647.outer ]
+ br i1 undef, label %do.cond.1718, label %if.then.1659
+
+if.then.1659: ; preds = %for.cond.1647
+ br i1 false, label %do.end.1685, label %cleanup.1785
+
+do.end.1685: ; preds = %if.then.1659
+ br label %for.cond.1647.outer
+
+do.cond.1718: ; preds = %for.cond.1647
+ br i1 false, label %land.lhs.true.1736, label %for.cond.1647
+
+land.lhs.true.1736: ; preds = %do.cond.1718
+ br label %if.then.1742
+
+if.then.1742: ; preds = %land.lhs.true.1736
+ unreachable
+
+cleanup.1785: ; preds = %if.then.1659
+ ret void
+}
+
+attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
+
+!llvm.ident = !{!0}
+
+!0 = !{!"clang version 3.8.0 (trunk 250010) (llvm/trunk 250018)"}
OpenPOWER on IntegriCloud