Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit 49ae598

Browse files
committed
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 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@363091 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent af0dbee commit 49ae598

File tree

7 files changed

+27
-7
lines changed

7 files changed

+27
-7
lines changed

lib/Analysis/LoopAnalysisManager.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,6 @@ PreservedAnalyses llvm::getLoopPassPreservedAnalyses() {
141141
PA.preserve<LoopAnalysis>();
142142
PA.preserve<LoopAnalysisManagerFunctionProxy>();
143143
PA.preserve<ScalarEvolutionAnalysis>();
144-
if (EnableMSSALoopDependency)
145-
PA.preserve<MemorySSAAnalysis>();
146144
// FIXME: What we really want to do here is preserve an AA category, but that
147145
// concept doesn't exist yet.
148146
PA.preserve<AAManager>();

lib/Transforms/Scalar/LICM.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,8 @@ PreservedAnalyses LICMPass::run(Loop &L, LoopAnalysisManager &AM,
294294

295295
PA.preserve<DominatorTreeAnalysis>();
296296
PA.preserve<LoopAnalysis>();
297+
if (EnableMSSALoopDependency)
298+
PA.preserve<MemorySSAAnalysis>();
297299

298300
return PA;
299301
}

lib/Transforms/Scalar/LoopInstSimplify.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,8 @@ PreservedAnalyses LoopInstSimplifyPass::run(Loop &L, LoopAnalysisManager &AM,
233233

234234
auto PA = getLoopPassPreservedAnalyses();
235235
PA.preserveSet<CFGAnalyses>();
236+
if (EnableMSSALoopDependency)
237+
PA.preserve<MemorySSAAnalysis>();
236238
return PA;
237239
}
238240

lib/Transforms/Scalar/LoopRotation.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ PreservedAnalyses LoopRotatePass::run(Loop &L, LoopAnalysisManager &AM,
5454
if (AR.MSSA && VerifyMemorySSA)
5555
AR.MSSA->verifyMemorySSA();
5656

57-
return getLoopPassPreservedAnalyses();
57+
auto PA = getLoopPassPreservedAnalyses();
58+
if (EnableMSSALoopDependency)
59+
PA.preserve<MemorySSAAnalysis>();
60+
return PA;
5861
}
5962

6063
namespace {

lib/Transforms/Scalar/LoopSimplifyCFG.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -701,7 +701,10 @@ PreservedAnalyses LoopSimplifyCFGPass::run(Loop &L, LoopAnalysisManager &AM,
701701
if (DeleteCurrentLoop)
702702
LPMU.markLoopAsDeleted(L, "loop-simplifycfg");
703703

704-
return getLoopPassPreservedAnalyses();
704+
auto PA = getLoopPassPreservedAnalyses();
705+
if (EnableMSSALoopDependency)
706+
PA.preserve<MemorySSAAnalysis>();
707+
return PA;
705708
}
706709

707710
namespace {

lib/Transforms/Scalar/SimpleLoopUnswitch.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2861,7 +2861,11 @@ PreservedAnalyses SimpleLoopUnswitchPass::run(Loop &L, LoopAnalysisManager &AM,
28612861
// Historically this pass has had issues with the dominator tree so verify it
28622862
// in asserts builds.
28632863
assert(AR.DT.verify(DominatorTree::VerificationLevel::Fast));
2864-
return getLoopPassPreservedAnalyses();
2864+
2865+
auto PA = getLoopPassPreservedAnalyses();
2866+
if (EnableMSSALoopDependency)
2867+
PA.preserve<MemorySSAAnalysis>();
2868+
return PA;
28652869
}
28662870

28672871
namespace {

unittests/Transforms/Scalar/LoopPassManagerTest.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -396,11 +396,13 @@ TEST_F(LoopPassManagerTest, FunctionPassInvalidationOfLoopAnalyses) {
396396
// No need to re-run if we require again from a fresh loop pass manager.
397397
FPM.addPass(createFunctionToLoopPassAdaptor(
398398
RequireAnalysisLoopPass<MockLoopAnalysisHandle::Analysis>()));
399-
400399
// For 'f', preserve most things but not the specific loop analyses.
400+
auto PA = getLoopPassPreservedAnalyses();
401+
if (EnableMSSALoopDependency)
402+
PA.preserve<MemorySSAAnalysis>();
401403
EXPECT_CALL(MFPHandle, run(HasName("f"), _))
402404
.InSequence(FSequence)
403-
.WillOnce(Return(getLoopPassPreservedAnalyses()));
405+
.WillOnce(Return(PA));
404406
EXPECT_CALL(MLAHandle, invalidate(HasName("loop.0.0"), _, _))
405407
.InSequence(FSequence)
406408
.WillOnce(DoDefault());
@@ -475,6 +477,8 @@ TEST_F(LoopPassManagerTest, ModulePassInvalidationOfLoopAnalyses) {
475477
EXPECT_CALL(MMPHandle, run(_, _)).WillOnce(InvokeWithoutArgs([] {
476478
auto PA = getLoopPassPreservedAnalyses();
477479
PA.preserve<FunctionAnalysisManagerModuleProxy>();
480+
if (EnableMSSALoopDependency)
481+
PA.preserve<MemorySSAAnalysis>();
478482
return PA;
479483
}));
480484
// All the loop analyses from both functions get invalidated before we
@@ -803,6 +807,8 @@ TEST_F(LoopPassManagerTest, IndirectOuterPassInvalidation) {
803807
// the fact that they were preserved.
804808
EXPECT_CALL(MFPHandle, run(HasName("f"), _)).WillOnce(InvokeWithoutArgs([] {
805809
auto PA = getLoopPassPreservedAnalyses();
810+
if (EnableMSSALoopDependency)
811+
PA.preserve<MemorySSAAnalysis>();
806812
PA.preserveSet<AllAnalysesOn<Loop>>();
807813
return PA;
808814
}));
@@ -824,6 +830,8 @@ TEST_F(LoopPassManagerTest, IndirectOuterPassInvalidation) {
824830
// Which means that no extra invalidation occurs and cached values are used.
825831
EXPECT_CALL(MFPHandle, run(HasName("g"), _)).WillOnce(InvokeWithoutArgs([] {
826832
auto PA = getLoopPassPreservedAnalyses();
833+
if (EnableMSSALoopDependency)
834+
PA.preserve<MemorySSAAnalysis>();
827835
PA.preserveSet<AllAnalysesOn<Loop>>();
828836
return PA;
829837
}));

0 commit comments

Comments
 (0)