forked from OSchip/llvm-project
Only passes that preserve MemorySSA must mark it as preserved.
Summary: The method `getLoopPassPreservedAnalyses` should not mark MemorySSA as preserved, because it's being called in a lot of passes that do not preserve MemorySSA. Instead, mark the MemorySSA analysis as preserved by each pass that does preserve it. These changes only affect the new pass mananger. Reviewers: chandlerc Subscribers: mehdi_amini, jlebar, Prazek, george.burgess.iv, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D62536 llvm-svn: 363091
This commit is contained in:
parent
e20865c387
commit
3cef1f7d64
|
@ -141,8 +141,6 @@ PreservedAnalyses llvm::getLoopPassPreservedAnalyses() {
|
|||
PA.preserve<LoopAnalysis>();
|
||||
PA.preserve<LoopAnalysisManagerFunctionProxy>();
|
||||
PA.preserve<ScalarEvolutionAnalysis>();
|
||||
if (EnableMSSALoopDependency)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
// FIXME: What we really want to do here is preserve an AA category, but that
|
||||
// concept doesn't exist yet.
|
||||
PA.preserve<AAManager>();
|
||||
|
|
|
@ -294,6 +294,8 @@ PreservedAnalyses LICMPass::run(Loop &L, LoopAnalysisManager &AM,
|
|||
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<LoopAnalysis>();
|
||||
if (EnableMSSALoopDependency)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -233,6 +233,8 @@ PreservedAnalyses LoopInstSimplifyPass::run(Loop &L, LoopAnalysisManager &AM,
|
|||
|
||||
auto PA = getLoopPassPreservedAnalyses();
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
if (EnableMSSALoopDependency)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -54,7 +54,10 @@ PreservedAnalyses LoopRotatePass::run(Loop &L, LoopAnalysisManager &AM,
|
|||
if (AR.MSSA && VerifyMemorySSA)
|
||||
AR.MSSA->verifyMemorySSA();
|
||||
|
||||
return getLoopPassPreservedAnalyses();
|
||||
auto PA = getLoopPassPreservedAnalyses();
|
||||
if (EnableMSSALoopDependency)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
|
@ -701,7 +701,10 @@ PreservedAnalyses LoopSimplifyCFGPass::run(Loop &L, LoopAnalysisManager &AM,
|
|||
if (DeleteCurrentLoop)
|
||||
LPMU.markLoopAsDeleted(L, "loop-simplifycfg");
|
||||
|
||||
return getLoopPassPreservedAnalyses();
|
||||
auto PA = getLoopPassPreservedAnalyses();
|
||||
if (EnableMSSALoopDependency)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
|
@ -2861,7 +2861,11 @@ PreservedAnalyses SimpleLoopUnswitchPass::run(Loop &L, LoopAnalysisManager &AM,
|
|||
// Historically this pass has had issues with the dominator tree so verify it
|
||||
// in asserts builds.
|
||||
assert(AR.DT.verify(DominatorTree::VerificationLevel::Fast));
|
||||
return getLoopPassPreservedAnalyses();
|
||||
|
||||
auto PA = getLoopPassPreservedAnalyses();
|
||||
if (EnableMSSALoopDependency)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
|
|
@ -396,11 +396,13 @@ TEST_F(LoopPassManagerTest, FunctionPassInvalidationOfLoopAnalyses) {
|
|||
// No need to re-run if we require again from a fresh loop pass manager.
|
||||
FPM.addPass(createFunctionToLoopPassAdaptor(
|
||||
RequireAnalysisLoopPass<MockLoopAnalysisHandle::Analysis>()));
|
||||
|
||||
// For 'f', preserve most things but not the specific loop analyses.
|
||||
auto PA = getLoopPassPreservedAnalyses();
|
||||
if (EnableMSSALoopDependency)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
EXPECT_CALL(MFPHandle, run(HasName("f"), _))
|
||||
.InSequence(FSequence)
|
||||
.WillOnce(Return(getLoopPassPreservedAnalyses()));
|
||||
.WillOnce(Return(PA));
|
||||
EXPECT_CALL(MLAHandle, invalidate(HasName("loop.0.0"), _, _))
|
||||
.InSequence(FSequence)
|
||||
.WillOnce(DoDefault());
|
||||
|
@ -475,6 +477,8 @@ TEST_F(LoopPassManagerTest, ModulePassInvalidationOfLoopAnalyses) {
|
|||
EXPECT_CALL(MMPHandle, run(_, _)).WillOnce(InvokeWithoutArgs([] {
|
||||
auto PA = getLoopPassPreservedAnalyses();
|
||||
PA.preserve<FunctionAnalysisManagerModuleProxy>();
|
||||
if (EnableMSSALoopDependency)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
return PA;
|
||||
}));
|
||||
// All the loop analyses from both functions get invalidated before we
|
||||
|
@ -803,6 +807,8 @@ TEST_F(LoopPassManagerTest, IndirectOuterPassInvalidation) {
|
|||
// the fact that they were preserved.
|
||||
EXPECT_CALL(MFPHandle, run(HasName("f"), _)).WillOnce(InvokeWithoutArgs([] {
|
||||
auto PA = getLoopPassPreservedAnalyses();
|
||||
if (EnableMSSALoopDependency)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
PA.preserveSet<AllAnalysesOn<Loop>>();
|
||||
return PA;
|
||||
}));
|
||||
|
@ -824,6 +830,8 @@ TEST_F(LoopPassManagerTest, IndirectOuterPassInvalidation) {
|
|||
// Which means that no extra invalidation occurs and cached values are used.
|
||||
EXPECT_CALL(MFPHandle, run(HasName("g"), _)).WillOnce(InvokeWithoutArgs([] {
|
||||
auto PA = getLoopPassPreservedAnalyses();
|
||||
if (EnableMSSALoopDependency)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
PA.preserveSet<AllAnalysesOn<Loop>>();
|
||||
return PA;
|
||||
}));
|
||||
|
|
Loading…
Reference in New Issue