]> granicus.if.org Git - llvm/commitdiff
[PM] Add a dedicated test case for the issue fixed in r292770.
authorChandler Carruth <chandlerc@gmail.com>
Mon, 23 Jan 2017 07:53:20 +0000 (07:53 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Mon, 23 Jan 2017 07:53:20 +0000 (07:53 +0000)
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292772 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/Inline/clear-analyses.ll [new file with mode: 0644]

diff --git a/test/Transforms/Inline/clear-analyses.ll b/test/Transforms/Inline/clear-analyses.ll
new file mode 100644 (file)
index 0000000..1fde513
--- /dev/null
@@ -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
+}