diff options
| author | Chandler Carruth <chandlerc@gmail.com> | 2017-01-23 07:53:20 +0000 |
|---|---|---|
| committer | Chandler Carruth <chandlerc@gmail.com> | 2017-01-23 07:53:20 +0000 |
| commit | 5144703664b2d040544dfc032836234edad01a93 (patch) | |
| tree | 8b0082143e7aafebec867584d14bfe43df28845a /llvm/test/Transforms/Inline | |
| parent | f73f21315399359b5ed2cec0c4ecc7d4c1ab5df7 (diff) | |
| download | bcm5719-llvm-5144703664b2d040544dfc032836234edad01a93.tar.gz bcm5719-llvm-5144703664b2d040544dfc032836234edad01a93.zip | |
[PM] Add a dedicated test case for the issue fixed in r292770.
While this is covered by a clang test case, we should have something
locally to LLVM that immediately checks the inliner doesn't leave
analyses to dangling IR bodies.
llvm-svn: 292772
Diffstat (limited to 'llvm/test/Transforms/Inline')
| -rw-r--r-- | llvm/test/Transforms/Inline/clear-analyses.ll | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/llvm/test/Transforms/Inline/clear-analyses.ll b/llvm/test/Transforms/Inline/clear-analyses.ll new file mode 100644 index 00000000000..1fde513f282 --- /dev/null +++ b/llvm/test/Transforms/Inline/clear-analyses.ll @@ -0,0 +1,33 @@ +; Test that the inliner clears analyses which may hold references to function +; bodies when it decides to delete them after inlining the last caller. +; We check this by using correlated-propagation to populate LVI with basic +; block references that would dangle if we failed to clear the inlined function +; body. +; +; RUN: opt -debug-pass-manager -S < %s 2>&1 \ +; RUN: -passes='cgscc(inline,function(correlated-propagation))' \ +; RUN: | FileCheck %s +; +; CHECK-LABEL: Starting llvm::Module pass manager run. +; CHECK: Running pass: InlinerPass on (callee) +; CHECK: Running pass: CorrelatedValuePropagationPass on callee +; CHECK: Running analysis: LazyValueAnalysis +; CHECK: Running pass: InlinerPass on (caller) +; CHECK: Clearing all analysis results for: callee +; CHECK: Running pass: CorrelatedValuePropagationPass on caller +; CHECK: Running analysis: LazyValueAnalysis + +define internal i32 @callee(i32 %x) { +; CHECK-NOT: @callee +entry: + ret i32 %x +} + +define i32 @caller(i32 %x) { +; CHECK-LABEL: define i32 @caller +entry: + %call = call i32 @callee(i32 %x) +; CHECK-NOT: call + ret i32 %call +; CHECK: ret i32 %x +} |

