diff options
-rw-r--r-- | polly/lib/Analysis/ScopDetection.cpp | 2 | ||||
-rw-r--r-- | polly/test/ScopDetect/dot-scops.ll | 47 |
2 files changed, 48 insertions, 1 deletions
diff --git a/polly/lib/Analysis/ScopDetection.cpp b/polly/lib/Analysis/ScopDetection.cpp index 7df5179dc8d..488602269b8 100644 --- a/polly/lib/Analysis/ScopDetection.cpp +++ b/polly/lib/Analysis/ScopDetection.cpp @@ -1578,7 +1578,7 @@ void polly::ScopDetection::verifyAnalysis() const { void ScopDetection::getAnalysisUsage(AnalysisUsage &AU) const { AU.addRequired<LoopInfoWrapperPass>(); - AU.addRequired<ScalarEvolutionWrapperPass>(); + AU.addRequiredTransitive<ScalarEvolutionWrapperPass>(); AU.addRequired<DominatorTreeWrapperPass>(); // We also need AA and RegionInfo when we are verifying analysis. AU.addRequiredTransitive<AAResultsWrapperPass>(); diff --git a/polly/test/ScopDetect/dot-scops.ll b/polly/test/ScopDetect/dot-scops.ll new file mode 100644 index 00000000000..2e9f844422d --- /dev/null +++ b/polly/test/ScopDetect/dot-scops.ll @@ -0,0 +1,47 @@ +; RUN: opt %loadPolly -polly-scops -dot-scops -analyze < %s +; +; Check that the ScopPrinter does not crash. +; ScopPrinter needs the ScopDetection pass, which should depend on +; ScalarEvolution transitively. + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" + +define void @func(i32 %n, i32 %m, double* noalias nonnull %A) { +entry: + br label %outer.for + +outer.for: + %j = phi i32 [0, %entry], [%j.inc, %outer.inc] + %j.cmp = icmp slt i32 %j, %n + br i1 %j.cmp, label %inner.for, label %outer.exit + + inner.for: + %i = phi i32 [1, %outer.for], [%i.inc, %inner.inc] + %b = phi double [0.0, %outer.for], [%a, %inner.inc] + %i.cmp = icmp slt i32 %i, %m + br i1 %i.cmp, label %body1, label %inner.exit + + body1: + %A_idx = getelementptr inbounds double, double* %A, i32 %i + %a = load double, double* %A_idx + store double %a, double* %A_idx + br label %inner.inc + + inner.inc: + %i.inc = add nuw nsw i32 %i, 1 + br label %inner.for + + inner.exit: + br label %outer.inc + +outer.inc: + store double %b, double* %A + %j.inc = add nuw nsw i32 %j, 1 + br label %outer.for + +outer.exit: + br label %return + +return: + ret void +} |