diff --git a/llvm/lib/Transforms/Scalar/LoopPassManager.cpp b/llvm/lib/Transforms/Scalar/LoopPassManager.cpp index e390fdfb81e7b..4b26ce12a28db 100644 --- a/llvm/lib/Transforms/Scalar/LoopPassManager.cpp +++ b/llvm/lib/Transforms/Scalar/LoopPassManager.cpp @@ -349,10 +349,6 @@ PreservedAnalyses FunctionToLoopPassAdaptor::run(Function &F, PA.preserve(); PA.preserve(); PA.preserve(); - if (UseBlockFrequencyInfo && F.hasProfileData()) - PA.preserve(); - if (UseBranchProbabilityInfo && F.hasProfileData()) - PA.preserve(); if (UseMemorySSA) PA.preserve(); return PA; diff --git a/llvm/test/Other/loop-pm-invalidation.ll b/llvm/test/Other/loop-pm-invalidation.ll index 25552f7f139fd..4bead0b734eae 100644 --- a/llvm/test/Other/loop-pm-invalidation.ll +++ b/llvm/test/Other/loop-pm-invalidation.ll @@ -16,6 +16,11 @@ ; RUN: opt -disable-output -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager %s -aa-pipeline= 2>&1 \ ; RUN: -passes='loop(no-op-loop,loop-deletion),invalidate,loop(no-op-loop)' \ ; RUN: | FileCheck %s --check-prefix=CHECK-SCEV-INV-AFTER-DELETE +; +; Test that BFI is invalidated after the loop adapter if any of the loop passes +; invalidated it. +; RUN: opt -disable-output -disable-verify -verify-analysis-invalidation=0 -debug-pass-manager %s -aa-pipeline= 2>&1 \ +; RUN: -O1 | FileCheck %s --check-prefix=CHECK-BFI-INV define void @no_loops() { ; CHECK-LOOP-INV: Running pass: LoopSimplifyPass @@ -242,3 +247,28 @@ l0.header: exit: ret void } + +; CHECK-BFI-INV-LABEL: Running analysis: OuterAnalysisManagerProxy<{{.*}}> on loop %l0.header in function simplifiable_loop +; CHECK-BFI-INV-NEXT: Running pass: LoopInstSimplifyPass on loop %l0.header in function simplifiable_loop +; CHECK-BFI-INV-NEXT: Running pass: LoopSimplifyCFGPass on loop %l0.header in function simplifiable_loop +; CHECK-BFI-INV-NEXT: Running pass: LICMPass on loop %l0.header in function simplifiable_loop +; CHECK-BFI-INV-NEXT: Running pass: LoopRotatePass on loop %l0.header in function simplifiable_loop +; CHECK-BFI-INV-NEXT: Running pass: LICMPass on loop %l0.header in function simplifiable_loop +; CHECK-BFI-INV-NEXT: Running pass: SimpleLoopUnswitchPass on loop %l0.header in function simplifiable_loop +; CHECK-BFI-INV-NEXT: Invalidating analysis: PostDominatorTreeAnalysis on simplifiable_loop +; CHECK-BFI-INV-NEXT: Invalidating analysis: BranchProbabilityAnalysis on simplifiable_loop +; CHECK-BFI-INV-NEXT: Invalidating analysis: BlockFrequencyAnalysis on simplifiable_loop +; CHECK-BFI-INV-NEXT: Running pass: SimplifyCFGPass on simplifiable_loop (5 instructions) + +define void @simplifiable_loop(i1 %c) !prof !0 { +entry: + br label %l0.header + +l0.header: + br label %l0.latch + +l0.latch: + br i1 %c, label %l0.header, label %l0.latch +} + +!0 = !{!"function_entry_count", i64 1}