diff options
-rw-r--r-- | polly/lib/Analysis/ScopInfo.cpp | 3 | ||||
-rw-r--r-- | polly/test/ScopInfo/new-domain-construction-schedule-not-freed.ll | 55 |
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)"} |