diff options
Diffstat (limited to 'llvm/test/Transforms/GVN/preserve-analysis.ll')
-rw-r--r-- | llvm/test/Transforms/GVN/preserve-analysis.ll | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/llvm/test/Transforms/GVN/preserve-analysis.ll b/llvm/test/Transforms/GVN/preserve-analysis.ll new file mode 100644 index 00000000000..2454bb1a63d --- /dev/null +++ b/llvm/test/Transforms/GVN/preserve-analysis.ll @@ -0,0 +1,56 @@ +; RUN: opt < %s -debug-pass=Structure -indvars -gvn -indvars 2>&1 -S | FileCheck --check-prefix=CHECK --check-prefix=IR %s +; RUN: opt < %s -debug-pass-manager -passes='require<domtree>,loop(simplify-cfg),gvn,loop(indvars)' 2>&1 -S | FileCheck --check-prefix=NEW-PM --check-prefix=IR %s + +; Check CFG-only analysis are preserved by SCCP by running it between 2 +; loop-vectorize runs. + +; CHECK: Dominator Tree Construction +; CHECK: Natural Loop Information +; CHECK: Canonicalize natural loops +; CHECK: LCSSA Verifier +; CHECK: Loop-Closed SSA Form Pass +; CHECK: Global Value Numbering +; CHECK-NOT: Dominator Tree Construction +; CHECK-NOT: Natural Loop Information +; CHECK-NOT: Canonicalize natural loops + +; NEW-PM-DAG: Running analysis: LoopAnalysis on test +; NEW-PM-DAG: Running analysis: DominatorTreeAnalysis on test +; NEW-PM: Running pass: GVN on test +; NEW-PM-NOT: Running analysis: LoopAnalysis on test +; NEW-PM-NOT: Running analysis: DominatorTreeAnalysis on test + +declare i1 @cond() +declare void @dostuff() + +define i32 @test() { +; IR-LABEL: define i32 @test() +; IR-LABEL: header: +; IR: br i1 false, label %then, label %latch +; IR-LABEL: then: +; IR-NEXT: call void @dostuff() +; IR-NEXT: br label %latch +entry: + %res = add i32 1, 10 + br label %header + +header: + %iv = phi i32 [ %res, %entry ], [ 0, %latch ] + %ic = icmp eq i32 %res, 99 + br i1 %ic, label %then, label %latch + +then: + br label %then.2 + +then.2: + call void @dostuff() + br label %latch + + +latch: + %ec = call i1 @cond() + br i1 %ec, label %exit, label %header + +exit: + ret i32 %iv +} |