| ; Basic test to check that DominatorTreeAnalysis is preserved by IPSCCP and |
| ; the following analysis can re-use it. The test contains two trivial functions |
| ; IPSCCP can simplify, so we can test the case where IPSCCP makes changes. |
| |
| ; RUN: opt -disable-verify -debug-pass-manager \ |
| ; RUN: -passes='function(require<domtree>,require<postdomtree>),ipsccp,function(require<domtree>,require<postdomtree>)' -S %s 2>&1 \ |
| ; RUN: | FileCheck -check-prefixes='IR,NEW-PM' %s |
| |
| ; RUN: opt -passes='function(require<postdomtree>),ipsccp,function(verify<domtree>)' -S %s | FileCheck -check-prefixes='IR' %s |
| |
| ; NEW-PM: Running analysis: DominatorTreeAnalysis on f1 |
| ; NEW-PM: Running analysis: PostDominatorTreeAnalysis on f1 |
| ; NEW-PM: Running analysis: DominatorTreeAnalysis on f2 |
| ; NEW-PM: Running analysis: PostDominatorTreeAnalysis on f2 |
| ; NEW-PM: Running pass: IPSCCPPass |
| ; NEW-PM-DAG: Running analysis: AssumptionAnalysis on f1 |
| ; NEW-PM-DAG: Running analysis: AssumptionAnalysis on f2 |
| ; NEW-PM-NOT: Running analysis: AssumptionAnalysis |
| |
| ; IR-LABEL: @f1 |
| ; IR-LABEL: entry: |
| ; IR-NEXT: br label %bb2 |
| ; IR-LABEL: bb2: |
| ; IR-NEXT: undef |
| |
| ; IR-LABEL: @f2 |
| ; IR-NOT: icmp |
| ; IR: br label %bbtrue |
| ; IR-LABEL: bbtrue: |
| ; IR-NEXT: ret i32 0 |
| define internal i32 @f1() readnone { |
| entry: |
| br i1 false, label %bb1, label %bb2 |
| bb1: |
| ret i32 10 |
| bb2: |
| ret i32 10 |
| } |
| |
| define i32 @f2(i32 %n) { |
| %i = call i32 @f1() |
| %cmp = icmp eq i32 %i, 10 |
| br i1 %cmp, label %bbtrue, label %bbfalse |
| |
| bbtrue: |
| ret i32 0 |
| |
| bbfalse: |
| %res = add i32 %n, %i |
| ret i32 %res |
| } |