From: Chandler Carruth Date: Mon, 23 Jan 2017 07:53:20 +0000 (+0000) Subject: [PM] Add a dedicated test case for the issue fixed in r292770. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4717ef2100d5d4309215a929be53b7c052f05ef4;p=llvm [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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@292772 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Transforms/Inline/clear-analyses.ll b/test/Transforms/Inline/clear-analyses.ll new file mode 100644 index 00000000000..1fde513f282 --- /dev/null +++ b/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 +}