| ; Test that when a pass like correlated-propagation populates an analysis such |
| ; as LVI with references back into the IR of a function that the inliner will |
| ; delete, this doesn't crash or go awry despite the inliner clearing the analyses |
| ; separately from when it deletes the function. |
| ; |
| ; 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 |
| } |