forked from OSchip/llvm-project
[NewPM] Don't mark AA analyses as preserved
Currently all AA analyses marked as preserved are stateless, not taking into account their dependent analyses. So there's no need to mark them as preserved, they won't be invalidated unless their analyses are. SCEVAAResults was the one exception to this, it was treated like a typical analysis result. Make it like the others and don't invalidate unless SCEV is invalidated. Reviewed By: asbirlea Differential Revision: https://reviews.llvm.org/D102032
This commit is contained in:
parent
fd5e79ff12
commit
6b9524a05b
|
@ -33,6 +33,9 @@ public:
|
|||
AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB,
|
||||
AAQueryInfo &AAQI);
|
||||
|
||||
bool invalidate(Function &F, const PreservedAnalyses &PA,
|
||||
FunctionAnalysisManager::Invalidator &Inv);
|
||||
|
||||
private:
|
||||
Value *GetBaseValue(const SCEV *S);
|
||||
};
|
||||
|
|
|
@ -143,11 +143,5 @@ PreservedAnalyses llvm::getLoopPassPreservedAnalyses() {
|
|||
PA.preserve<LoopAnalysis>();
|
||||
PA.preserve<LoopAnalysisManagerFunctionProxy>();
|
||||
PA.preserve<ScalarEvolutionAnalysis>();
|
||||
// FIXME: What we really want to do here is preserve an AA category, but that
|
||||
// concept doesn't exist yet.
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<BasicAA>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<SCEVAA>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
|
||||
#include "llvm/Analysis/ScalarEvolution.h"
|
||||
#include "llvm/InitializePasses.h"
|
||||
using namespace llvm;
|
||||
|
||||
|
@ -117,6 +118,13 @@ Value *SCEVAAResult::GetBaseValue(const SCEV *S) {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
bool SCEVAAResult::invalidate(Function &Fn, const PreservedAnalyses &PA,
|
||||
FunctionAnalysisManager::Invalidator &Inv) {
|
||||
// We don't care if this analysis itself is preserved, it has no state. But
|
||||
// we need to check that the analyses it depends on have been.
|
||||
return Inv.invalidate<ScalarEvolutionAnalysis>(Fn, PA);
|
||||
}
|
||||
|
||||
AnalysisKey SCEVAA::Key;
|
||||
|
||||
SCEVAAResult SCEVAA::run(Function &F, FunctionAnalysisManager &AM) {
|
||||
|
|
|
@ -205,11 +205,9 @@ PreservedAnalyses ReplaceWithVeclib::run(Function &F,
|
|||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<TargetLibraryAnalysis>();
|
||||
PA.preserve<ScalarEvolutionAnalysis>();
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<LoopAccessAnalysis>();
|
||||
PA.preserve<DemandedBitsAnalysis>();
|
||||
PA.preserve<OptimizationRemarkEmitterAnalysis>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
} else {
|
||||
// The pass did not replace any calls, hence it preserves all analyses.
|
||||
|
|
|
@ -431,8 +431,6 @@ PreservedAnalyses AggressiveInstCombinePass::run(Function &F,
|
|||
// Mark all the analyses that instcombine updates as preserved.
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -4045,9 +4045,6 @@ PreservedAnalyses InstCombinePass::run(Function &F,
|
|||
// Mark all the analyses that instcombine updates as preserved.
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<BasicAA>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "llvm/IR/Dominators.h"
|
||||
#include "llvm/IR/IRBuilder.h"
|
||||
#include "llvm/IR/MDBuilder.h"
|
||||
#include "llvm/IR/PassManager.h"
|
||||
#include "llvm/InitializePasses.h"
|
||||
#include "llvm/Support/BranchProbability.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
|
@ -2095,9 +2096,7 @@ PreservedAnalyses ControlHeightReductionPass::run(
|
|||
bool Changed = CHR(F, BFI, DT, PSI, RI, ORE).run();
|
||||
if (!Changed)
|
||||
return PreservedAnalyses::all();
|
||||
auto PA = PreservedAnalyses();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
return PreservedAnalyses::none();
|
||||
}
|
||||
|
||||
} // namespace llvm
|
||||
|
|
|
@ -541,7 +541,6 @@ PreservedAnalyses PGOMemOPSizeOpt::run(Function &F,
|
|||
if (!Changed)
|
||||
return PreservedAnalyses::all();
|
||||
auto PA = PreservedAnalyses();
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -700,7 +700,6 @@ PreservedAnalyses ADCEPass::run(Function &F, FunctionAnalysisManager &FAM) {
|
|||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<PostDominatorTreeAnalysis>();
|
||||
}
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -352,8 +352,6 @@ AlignmentFromAssumptionsPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<ScalarEvolutionAnalysis>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -170,7 +170,6 @@ PreservedAnalyses BDCEPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -475,7 +475,6 @@ PreservedAnalyses ConstraintEliminationPass::run(Function &F,
|
|||
|
||||
PreservedAnalyses PA;
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -1118,7 +1118,6 @@ CorrelatedValuePropagationPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
if (!Changed) {
|
||||
PA = PreservedAnalyses::all();
|
||||
} else {
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<LazyValueAnalysis>();
|
||||
}
|
||||
|
|
|
@ -2028,7 +2028,6 @@ PreservedAnalyses DSEPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -394,6 +394,5 @@ PreservedAnalyses DivRemPairsPass::run(Function &F,
|
|||
// TODO: This pass just hoists/replaces math ops - all analyses are preserved?
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -1616,7 +1616,6 @@ PreservedAnalyses EarlyCSEPass::run(Function &F,
|
|||
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
if (UseMemorySSA)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
return PA;
|
||||
|
|
|
@ -544,7 +544,6 @@ PreservedAnalyses Float2IntPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
} // End namespace llvm
|
||||
|
|
|
@ -677,7 +677,6 @@ PreservedAnalyses GVN::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
return PreservedAnalyses::all();
|
||||
PreservedAnalyses PA;
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<TargetLibraryAnalysis>();
|
||||
if (MSSA)
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
|
|
|
@ -1243,7 +1243,6 @@ PreservedAnalyses GVNHoistPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
PreservedAnalyses PA;
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -912,10 +912,7 @@ PreservedAnalyses GVNSinkPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
GVNSink G;
|
||||
if (!G.run(F))
|
||||
return PreservedAnalyses::all();
|
||||
|
||||
PreservedAnalyses PA;
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
return PreservedAnalyses::none();
|
||||
}
|
||||
|
||||
char GVNSinkLegacyPass::ID = 0;
|
||||
|
|
|
@ -371,7 +371,6 @@ PreservedAnalyses JumpThreadingPass::run(Function &F,
|
|||
if (!Changed)
|
||||
return PreservedAnalyses::all();
|
||||
PreservedAnalyses PA;
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<LazyValueAnalysis>();
|
||||
return PA;
|
||||
|
|
|
@ -1068,7 +1068,6 @@ PreservedAnalyses LoopDistributePass::run(Function &F,
|
|||
PreservedAnalyses PA;
|
||||
PA.preserve<LoopAnalysis>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -327,12 +327,6 @@ PreservedAnalyses FunctionToLoopPassAdaptor::run(Function &F,
|
|||
PA.preserve<BlockFrequencyAnalysis>();
|
||||
if (UseMemorySSA)
|
||||
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>();
|
||||
PA.preserve<BasicAA>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<SCEVAA>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -151,7 +151,6 @@ LowerConstantIntrinsicsPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
if (lowerConstantIntrinsics(F, AM.getCachedResult<TargetLibraryAnalysis>(F),
|
||||
AM.getCachedResult<DominatorTreeAnalysis>(F))) {
|
||||
PreservedAnalyses PA;
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -1724,7 +1724,6 @@ PreservedAnalyses MemCpyOptPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
if (MD)
|
||||
PA.preserve<MemoryDependenceAnalysis>();
|
||||
if (MSSA)
|
||||
|
|
|
@ -938,7 +938,6 @@ PreservedAnalyses MergeICmpsPass::run(Function &F,
|
|||
if (!MadeChanges)
|
||||
return PreservedAnalyses::all();
|
||||
PreservedAnalyses PA;
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -418,6 +418,5 @@ MergedLoadStoreMotionPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
PreservedAnalyses PA;
|
||||
if (!Options.SplitFooterBB)
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -4222,6 +4222,5 @@ PreservedAnalyses NewGVNPass::run(Function &F, AnalysisManager<Function> &AM) {
|
|||
return PreservedAnalyses::all();
|
||||
PreservedAnalyses PA;
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -2568,9 +2568,6 @@ PreservedAnalyses ReassociatePass::run(Function &F, FunctionAnalysisManager &) {
|
|||
if (MadeChange) {
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<BasicAA>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -242,7 +242,6 @@ PreservedAnalyses SCCPPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
return PreservedAnalyses::all();
|
||||
|
||||
auto PA = PreservedAnalyses();
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -4780,7 +4780,6 @@ PreservedAnalyses SROA::runImpl(Function &F, DominatorTree &RunDT,
|
|||
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -323,7 +323,6 @@ PreservedAnalyses SimplifyCFGPass::run(Function &F,
|
|||
PreservedAnalyses PA;
|
||||
if (RequireAndPreserveDomTree)
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -343,7 +343,6 @@ PreservedAnalyses SpeculativeExecutionPass::run(Function &F,
|
|||
if (!Changed)
|
||||
return PreservedAnalyses::all();
|
||||
PreservedAnalyses PA;
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -896,7 +896,6 @@ PreservedAnalyses TailCallElimPass::run(Function &F,
|
|||
if (!Changed)
|
||||
return PreservedAnalyses::all();
|
||||
PreservedAnalyses PA;
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<PostDominatorTreeAnalysis>();
|
||||
return PA;
|
||||
|
|
|
@ -503,9 +503,6 @@ PreservedAnalyses LCSSAPass::run(Function &F, FunctionAnalysisManager &AM) {
|
|||
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<BasicAA>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<SCEVAA>();
|
||||
PA.preserve<ScalarEvolutionAnalysis>();
|
||||
// BPI maps terminators to probabilities, since we don't modify the CFG, no
|
||||
// updates are needed to preserve it.
|
||||
|
|
|
@ -555,7 +555,6 @@ PreservedAnalyses LibCallsShrinkWrapPass::run(Function &F,
|
|||
if (!runImpl(F, TLI, DT))
|
||||
return PreservedAnalyses::all();
|
||||
auto PA = PreservedAnalyses();
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -865,9 +865,6 @@ PreservedAnalyses LoopSimplifyPass::run(Function &F,
|
|||
PreservedAnalyses PA;
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<LoopAnalysis>();
|
||||
PA.preserve<BasicAA>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<SCEVAA>();
|
||||
PA.preserve<ScalarEvolutionAnalysis>();
|
||||
PA.preserve<DependenceAnalysis>();
|
||||
if (MSSAAnalysis)
|
||||
|
|
|
@ -10283,8 +10283,6 @@ PreservedAnalyses LoopVectorizePass::run(Function &F,
|
|||
PA.preserve<LoopAnalysis>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
}
|
||||
PA.preserve<BasicAA>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
if (!Result.MadeCFGChange)
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
return PA;
|
||||
|
|
|
@ -6339,8 +6339,6 @@ PreservedAnalyses SLPVectorizerPass::run(Function &F, FunctionAnalysisManager &A
|
|||
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
return PA;
|
||||
}
|
||||
|
||||
|
|
|
@ -917,8 +917,5 @@ PreservedAnalyses VectorCombinePass::run(Function &F,
|
|||
return PreservedAnalyses::all();
|
||||
PreservedAnalyses PA;
|
||||
PA.preserveSet<CFGAnalyses>();
|
||||
PA.preserve<GlobalsAA>();
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<BasicAA>();
|
||||
return PA;
|
||||
}
|
||||
|
|
|
@ -610,7 +610,6 @@ TEST_F(LoopPassManagerTest, InvalidationOfBundledAnalyses) {
|
|||
|
||||
EXPECT_CALL(MFPHandle, run(HasName("f"), _)).WillOnce(InvokeWithoutArgs([] {
|
||||
auto PA = PreservedAnalyses::none();
|
||||
PA.preserve<AAManager>();
|
||||
// Not preserving `DominatorTreeAnalysis`.
|
||||
PA.preserve<LoopAnalysis>();
|
||||
PA.preserve<LoopAnalysisManagerFunctionProxy>();
|
||||
|
@ -626,7 +625,6 @@ TEST_F(LoopPassManagerTest, InvalidationOfBundledAnalyses) {
|
|||
|
||||
EXPECT_CALL(MFPHandle, run(HasName("f"), _)).WillOnce(InvokeWithoutArgs([] {
|
||||
auto PA = PreservedAnalyses::none();
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
// Not preserving the `LoopAnalysis`.
|
||||
PA.preserve<LoopAnalysisManagerFunctionProxy>();
|
||||
|
@ -642,7 +640,6 @@ TEST_F(LoopPassManagerTest, InvalidationOfBundledAnalyses) {
|
|||
|
||||
EXPECT_CALL(MFPHandle, run(HasName("f"), _)).WillOnce(InvokeWithoutArgs([] {
|
||||
auto PA = PreservedAnalyses::none();
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<LoopAnalysis>();
|
||||
// Not preserving the `LoopAnalysisManagerFunctionProxy`.
|
||||
|
@ -658,7 +655,6 @@ TEST_F(LoopPassManagerTest, InvalidationOfBundledAnalyses) {
|
|||
|
||||
EXPECT_CALL(MFPHandle, run(HasName("f"), _)).WillOnce(InvokeWithoutArgs([] {
|
||||
auto PA = PreservedAnalyses::none();
|
||||
PA.preserve<AAManager>();
|
||||
PA.preserve<DominatorTreeAnalysis>();
|
||||
PA.preserve<LoopAnalysis>();
|
||||
PA.preserve<LoopAnalysisManagerFunctionProxy>();
|
||||
|
|
Loading…
Reference in New Issue