summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/SCCP/ipsccp-preserve-domtree.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/Transforms/SCCP/ipsccp-preserve-domtree.ll')
-rw-r--r--llvm/test/Transforms/SCCP/ipsccp-preserve-domtree.ll63
1 files changed, 63 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SCCP/ipsccp-preserve-domtree.ll b/llvm/test/Transforms/SCCP/ipsccp-preserve-domtree.ll
new file mode 100644
index 00000000000..1b3cdd6051e
--- /dev/null
+++ b/llvm/test/Transforms/SCCP/ipsccp-preserve-domtree.ll
@@ -0,0 +1,63 @@
+; 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='ipsccp,globalopt' -S %s 2>&1 \
+; RUN: | FileCheck -check-prefixes='IR,NEW-PM' %s
+
+; RUN: opt -passes='ipsccp,function(verify<domtree>)' -S %s | FileCheck -check-prefixes='IR' %s
+
+; NEW-PM: Starting llvm::Module pass manager run.
+; NEW-PM-NEXT: Running pass: IPSCCPPass
+; NEW-PM-DAG: Running analysis: TargetLibraryAnalysis
+; NEW-PM-DAG: Running analysis: InnerAnalysisManagerProxy
+; NEW-PM-DAG: Running analysis: AssumptionAnalysis on f1
+; NEW-PM-DAG: Running analysis: DominatorTreeAnalysis on f1
+; NEW-PM-DAG: Running analysis: PassInstrumentationAnalysis on f1
+; NEW-PM-DAG: Running analysis: DominatorTreeAnalysis on f2
+; NEW-PM-DAG: Running analysis: AssumptionAnalysis on f2
+; NEW-PM-DAG: Running analysis: PassInstrumentationAnalysis on f2
+; NEW-PM-NEXT: Invalidating all non-preserved analyses for:
+; NEW-PM-NEXT: Invalidating all non-preserved analyses for: f1
+; NEW-PM-NEXT: Invalidating all non-preserved analyses for: f2
+; NEW-PM-NEXT: Running pass: GlobalOptPass on
+; NEW-PM-DAG: Running analysis: BlockFrequencyAnalysis on f2
+; NEW-PM-DAG: Running analysis: LoopAnalysis on f2
+; NEW-PM-DAG: Running analysis: BranchProbabilityAnalysis on f2
+; NEW-PM-DAG: Running analysis: TargetLibraryAnalysis on f2
+; NEW-PM-NEXT: Running analysis: TargetIRAnalysis on f1
+; NEW-PM-NEXT: Invalidating all non-preserved analyses for:
+
+; 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
+}
OpenPOWER on IntegriCloud