diff options
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Transforms/GVN/PRE/2011-06-01-NonLocalMemdepMiscompile.ll | 10 | ||||
-rw-r--r-- | llvm/test/Transforms/GVN/preserve-analysis.ll | 56 |
2 files changed, 64 insertions, 2 deletions
diff --git a/llvm/test/Transforms/GVN/PRE/2011-06-01-NonLocalMemdepMiscompile.ll b/llvm/test/Transforms/GVN/PRE/2011-06-01-NonLocalMemdepMiscompile.ll index 05dc79db95a..6592c69b027 100644 --- a/llvm/test/Transforms/GVN/PRE/2011-06-01-NonLocalMemdepMiscompile.ll +++ b/llvm/test/Transforms/GVN/PRE/2011-06-01-NonLocalMemdepMiscompile.ll @@ -50,8 +50,14 @@ bb15: %tmp18 = icmp eq i8 %tmp17, 0 br label %bb19 -; CHECK: bb15: -; CHECK: %tmp17 = phi i8 [ %tmp17.pre, %bb1.bb15_crit_edge ], [ %tmp8, %bb6 ] +; CHECK-LABEL: bb6: +; CHECK: br i1 undef, label %bb15split, label %bb10 + +; CHECK-LABEL: bb15split: ; preds = %bb6 +; CHECK-NEXT: br label %bb15 + +; CHECK-LABEL: bb15: +; CHECK: %tmp17 = phi i8 [ %tmp8, %bb15split ], [ %tmp17.pre, %bb1.bb15_crit_edge ] bb19: ; preds = %bb15 ret i1 %tmp18 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 +} |