diff options
| author | Florian Hahn <florian.hahn@arm.com> | 2018-06-21 07:15:08 +0000 |
|---|---|---|
| committer | Florian Hahn <florian.hahn@arm.com> | 2018-06-21 07:15:08 +0000 |
| commit | d36aa1f7633b5450c9939fe8aaa0da1605042868 (patch) | |
| tree | 72ed1152e56e05d1c8275366b950c661a0b14017 /llvm/test | |
| parent | 57b33f6aac852d6f8d154d574b05b7689afc8e2b (diff) | |
| download | bcm5719-llvm-d36aa1f7633b5450c9939fe8aaa0da1605042868.tar.gz bcm5719-llvm-d36aa1f7633b5450c9939fe8aaa0da1605042868.zip | |
Recommit r333268: [IPSCCP] Use PredicateInfo to propagate facts from cmp instructions.
r335150 should resolve the issues with the clang-with-thin-lto-ubuntu
and clang-with-lto-ubuntu builders.
Original message:
This patch updates IPSCCP to use PredicateInfo to propagate
facts to true branches predicated by EQ and to false branches
predicated by NE.
As a follow up, we should be able to extend it to also propagate additional
facts about nonnull.
Reviewers: davide, mssimpso, dberlin, efriedma
Reviewed By: davide, dberlin
llvm-svn: 335206
Diffstat (limited to 'llvm/test')
| -rw-r--r-- | llvm/test/Other/new-pm-lto-defaults.ll | 4 | ||||
| -rw-r--r-- | llvm/test/Other/opt-O2-pipeline.ll | 4 | ||||
| -rw-r--r-- | llvm/test/Other/opt-O3-pipeline.ll | 4 | ||||
| -rw-r--r-- | llvm/test/Other/opt-Os-pipeline.ll | 4 | ||||
| -rw-r--r-- | llvm/test/Transforms/IPConstantProp/musttail-call.ll | 4 | ||||
| -rw-r--r-- | llvm/test/Transforms/SCCP/ipsccp-predicated.ll | 68 |
6 files changed, 84 insertions, 4 deletions
diff --git a/llvm/test/Other/new-pm-lto-defaults.ll b/llvm/test/Other/new-pm-lto-defaults.ll index 0633db5bb84..f78c3e8e9fa 100644 --- a/llvm/test/Other/new-pm-lto-defaults.ll +++ b/llvm/test/Other/new-pm-lto-defaults.ll @@ -41,6 +41,8 @@ ; CHECK-O2-NEXT: Running analysis: ProfileSummaryAnalysis ; CHECK-O2-NEXT: Running analysis: OptimizationRemarkEmitterAnalysis ; CHECK-O2-NEXT: Running pass: IPSCCPPass +; CHECK-O2-DAG: Running analysis: AssumptionAnalysis on foo +; CHECK-O2-DAG: Running analysis: DominatorTreeAnalysis on foo ; CHECK-O2-NEXT: Running pass: CalledValuePropagationPass ; CHECK-O-NEXT: Running pass: ModuleToPostOrderCGSCCPassAdaptor<{{.*}}PostOrderFunctionAttrsPass> ; CHECK-O-NEXT: Running analysis: InnerAnalysisManagerProxy<{{.*}}SCC @@ -56,8 +58,6 @@ ; CHECK-O-NEXT: Running pass: WholeProgramDevirtPass ; CHECK-O2-NEXT: Running pass: GlobalOptPass ; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PromotePass> -; CHECK-O2-NEXT: Running analysis: DominatorTreeAnalysis -; CHECK-O2-NEXT: Running analysis: AssumptionAnalysis ; CHECK-O2-NEXT: Running pass: ConstantMergePass ; CHECK-O2-NEXT: Running pass: DeadArgumentEliminationPass ; CHECK-O2-NEXT: Running pass: ModuleToFunctionPassAdaptor<{{.*}}PassManager{{.*}}> diff --git a/llvm/test/Other/opt-O2-pipeline.ll b/llvm/test/Other/opt-O2-pipeline.ll index 96d9f22cc01..6586149a9e7 100644 --- a/llvm/test/Other/opt-O2-pipeline.ll +++ b/llvm/test/Other/opt-O2-pipeline.ll @@ -28,6 +28,7 @@ ; CHECK-NEXT: Force set function attributes ; CHECK-NEXT: Infer set function attributes ; CHECK-NEXT: Interprocedural Sparse Conditional Constant Propagation +; CHECK-NEXT: Unnamed pass: implement Pass::getPassName() ; CHECK-NEXT: Called Value Propagation ; CHECK-NEXT: Global Variable Optimizer ; CHECK-NEXT: Unnamed pass: implement Pass::getPassName() @@ -273,6 +274,9 @@ ; CHECK-NEXT: Module Verifier ; CHECK-NEXT: Bitcode Writer ; CHECK-NEXT: Pass Arguments: +; CHECK-NEXT: FunctionPass Manager +; CHECK-NEXT: Dominator Tree Construction +; CHECK-NEXT: Pass Arguments: ; CHECK-NEXT: Target Library Information ; CHECK-NEXT: FunctionPass Manager ; CHECK-NEXT: Dominator Tree Construction diff --git a/llvm/test/Other/opt-O3-pipeline.ll b/llvm/test/Other/opt-O3-pipeline.ll index fc9f4fd6b31..9a2eb1bfde3 100644 --- a/llvm/test/Other/opt-O3-pipeline.ll +++ b/llvm/test/Other/opt-O3-pipeline.ll @@ -30,6 +30,7 @@ ; CHECK-NEXT: FunctionPass Manager ; CHECK-NEXT: Call-site splitting ; CHECK-NEXT: Interprocedural Sparse Conditional Constant Propagation +; CHECK-NEXT: Unnamed pass: implement Pass::getPassName() ; CHECK-NEXT: Called Value Propagation ; CHECK-NEXT: Global Variable Optimizer ; CHECK-NEXT: Unnamed pass: implement Pass::getPassName() @@ -277,6 +278,9 @@ ; CHECK-NEXT: Module Verifier ; CHECK-NEXT: Bitcode Writer ; CHECK-NEXT: Pass Arguments: +; CHECK-NEXT: FunctionPass Manager +; CHECK-NEXT: Dominator Tree Construction +; CHECK-NEXT: Pass Arguments: ; CHECK-NEXT: Target Library Information ; CHECK-NEXT: FunctionPass Manager ; CHECK-NEXT: Dominator Tree Construction diff --git a/llvm/test/Other/opt-Os-pipeline.ll b/llvm/test/Other/opt-Os-pipeline.ll index 206a20a598e..0c1b275e4d7 100644 --- a/llvm/test/Other/opt-Os-pipeline.ll +++ b/llvm/test/Other/opt-Os-pipeline.ll @@ -28,6 +28,7 @@ ; CHECK-NEXT: Force set function attributes ; CHECK-NEXT: Infer set function attributes ; CHECK-NEXT: Interprocedural Sparse Conditional Constant Propagation +; CHECK-NEXT: Unnamed pass: implement Pass::getPassName() ; CHECK-NEXT: Called Value Propagation ; CHECK-NEXT: Global Variable Optimizer ; CHECK-NEXT: Unnamed pass: implement Pass::getPassName() @@ -259,6 +260,9 @@ ; CHECK-NEXT: Module Verifier ; CHECK-NEXT: Bitcode Writer ; CHECK-NEXT: Pass Arguments: +; CHECK-NEXT: FunctionPass Manager +; CHECK-NEXT: Dominator Tree Construction +; CHECK-NEXT: Pass Arguments: ; CHECK-NEXT: Target Library Information ; CHECK-NEXT: FunctionPass Manager ; CHECK-NEXT: Dominator Tree Construction diff --git a/llvm/test/Transforms/IPConstantProp/musttail-call.ll b/llvm/test/Transforms/IPConstantProp/musttail-call.ll index 75877585710..567ca408099 100644 --- a/llvm/test/Transforms/IPConstantProp/musttail-call.ll +++ b/llvm/test/Transforms/IPConstantProp/musttail-call.ll @@ -9,7 +9,7 @@ define i8* @start(i8 %v) { %c1 = icmp eq i8 %v, 0 br i1 %c1, label %true, label %false true: - ; CHECK: %ca = musttail call i8* @side_effects(i8 %v) + ; CHECK: %ca = musttail call i8* @side_effects(i8 0) ; CHECK: ret i8* %ca %ca = musttail call i8* @side_effects(i8 %v) ret i8* %ca @@ -34,7 +34,7 @@ define internal i8* @side_effects(i8 %v) { ; is always `null`. ; The call can't be removed due to `external` call above, though. - ; CHECK: %ca = musttail call i8* @start(i8 %v) + ; CHECK: %ca = musttail call i8* @start(i8 0) %ca = musttail call i8* @start(i8 %v) ; Thus the result must be returned anyway diff --git a/llvm/test/Transforms/SCCP/ipsccp-predicated.ll b/llvm/test/Transforms/SCCP/ipsccp-predicated.ll new file mode 100644 index 00000000000..531fbba8f70 --- /dev/null +++ b/llvm/test/Transforms/SCCP/ipsccp-predicated.ll @@ -0,0 +1,68 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt < %s -ipsccp -S | FileCheck %s + +define i32 @test1(i32 %v) { +; CHECK-LABEL: @test1( +; CHECK-NEXT: Entry: +; CHECK-NEXT: [[TOBOOL1:%.*]] = icmp eq i32 [[V:%.*]], 10 +; CHECK-NEXT: br i1 [[TOBOOL1]], label [[T:%.*]], label [[F:%.*]] +; CHECK: T: +; CHECK-NEXT: [[R:%.*]] = call i32 @callee(i32 20) +; CHECK-NEXT: ret i32 [[R]] +; CHECK: F: +; CHECK-NEXT: [[X:%.*]] = call i32 @callee(i32 [[V]]) +; CHECK-NEXT: ret i32 [[X]] +; +Entry: + %tobool1 = icmp eq i32 %v, 10 + br i1 %tobool1, label %T, label %F + +T: + %a = add i32 %v, 10 + %r = call i32 @callee(i32 %a) + ret i32 %r + +F: + %x = call i32 @callee(i32 %v) + ret i32 %x +} + + +define internal i32 @test2(i32 %v, i32 %c) { +; CHECK-LABEL: @test2( +; CHECK-NEXT: Entry: +; CHECK-NEXT: [[TOBOOL1:%.*]] = icmp eq i32 [[V:%.*]], 99 +; CHECK-NEXT: br i1 [[TOBOOL1]], label [[T:%.*]], label [[F:%.*]] +; CHECK: T: +; CHECK-NEXT: [[R:%.*]] = call i32 @callee(i32 109) +; CHECK-NEXT: ret i32 [[R]] +; CHECK: F: +; CHECK-NEXT: [[X:%.*]] = call i32 @callee(i32 [[V]]) +; CHECK-NEXT: ret i32 [[X]] +; +Entry: + %tobool1 = icmp eq i32 %v, %c + br i1 %tobool1, label %T, label %F + +T: + %a = add i32 %v, 10 + %r = call i32 @callee(i32 %a) + ret i32 %r + +F: + %x = call i32 @callee(i32 %v) + ret i32 %x +} + +define i32 @caller_test2(i32 %v) { +; CHECK-LABEL: @caller_test2( +; CHECK-NEXT: entry: +; CHECK-NEXT: [[R:%.*]] = call i32 @test2(i32 [[V:%.*]], i32 99) +; CHECK-NEXT: ret i32 [[R]] +; +entry: + %r = call i32 @test2(i32 %v, i32 99) + ret i32 %r +} + +declare i32 @callee(i32) |

