65 lines · plain
1; Test that access-info gets invalidated when the analyses it depends on are2; invalidated.3 4; This is a reproducer for https://github.com/llvm/llvm-project/issues/61324.5; We want to see that LoopAccessAnalysis+AAManger is being updated at the end,6; instead of crashing when using a stale AAManager.7;8; RUN: opt < %s -disable-output -debug-pass-manager -passes='function(require<access-info>,invalidate<aa>),print<access-info>' 2>&1 | FileCheck %s --check-prefix=CHECK-AA9;10; CHECK-AA: Running pass: RequireAnalysisPass11; CHECK-AA-NEXT: Running analysis: LoopAccessAnalysis on foo12; CHECK-AA: Running pass: InvalidateAnalysisPass13; CHECK-AA-NEXT: Invalidating analysis: AAManager on foo14; CHECK-AA-NEXT: Invalidating analysis: LoopAccessAnalysis on foo15; CHECK-AA-NEXT: Running pass: LoopAccessInfoPrinterPass on foo16; CHECK-AA-NEXT: Running analysis: LoopAccessAnalysis on foo17; CHECK-AA-NEXT: Running analysis: AAManager on foo18 19 20; Verify that an explicit invalidate request for access-info result in an21; invalidation.22;23; RUN: opt < %s -disable-output -debug-pass-manager -passes='function(require<access-info>,invalidate<access-info>)' 2>&1 | FileCheck %s --check-prefix=CHECK-INV-AA24;25; CHECK-INV-AA: Running pass: RequireAnalysisPass26; CHECK-INV-AA-NEXT: Running analysis: LoopAccessAnalysis on foo27; CHECK-INV-AA: Running pass: InvalidateAnalysisPass28; CHECK-INV-AA-NEXT: Invalidating analysis: LoopAccessAnalysis on foo29 30 31; Invalidation of scalar-evolution should transitively invalidate access-info.32;33; RUN: opt < %s -disable-output -debug-pass-manager -passes='function(require<access-info>,invalidate<scalar-evolution>)' 2>&1 | FileCheck %s --check-prefix=CHECK-SCEV34;35; CHECK-SCEV: Running pass: RequireAnalysisPass36; CHECK-SCEV-NEXT: Running analysis: LoopAccessAnalysis on foo37; CHECK-SCEV: Running pass: InvalidateAnalysisPass38; CHECK-SCEV-NEXT: Invalidating analysis: ScalarEvolutionAnalysis on foo39; CHECK-SCEV-NEXT: Invalidating analysis: LoopAccessAnalysis on foo40 41 42; Invalidation of domtree should transitively invalidate access-info.43;44; RUN: opt < %s -disable-output -debug-pass-manager -passes='function(require<access-info>,invalidate<domtree>)' 2>&1 | FileCheck %s --check-prefix=CHECK-DT45;46; CHECK-DT: Running pass: RequireAnalysisPass47; CHECK-DT-NEXT: Running analysis: LoopAccessAnalysis on foo48; CHECK-DT: Running pass: InvalidateAnalysisPass49; CHECK-DT-NEXT: Invalidating analysis: DominatorTreeAnalysis on foo50; CHECK-DT: Invalidating analysis: LoopAccessAnalysis on foo51 52 53define void @foo(ptr nocapture writeonly %a, ptr nocapture writeonly %b) memory(argmem: write) {54entry:55 br label %for.cond156 57for.cond1:58 store i16 0, ptr %b, align 159 store i16 0, ptr %a, align 160 br i1 true, label %for.end6, label %for.cond161 62for.end6:63 ret void64}65