summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/Inline
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2017-01-23 07:53:20 +0000
committerChandler Carruth <chandlerc@gmail.com>2017-01-23 07:53:20 +0000
commit5144703664b2d040544dfc032836234edad01a93 (patch)
tree8b0082143e7aafebec867584d14bfe43df28845a /llvm/test/Transforms/Inline
parentf73f21315399359b5ed2cec0c4ecc7d4c1ab5df7 (diff)
downloadbcm5719-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.ll33
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
+}
OpenPOWER on IntegriCloud