mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-27 07:45:35 +00:00
[MemorySSA] LCSSA preserves MemorySSA.
Summary: Enabling MemorySSA in the old pass manager leads to MemorySSA being run twice due to the fact that LCSSA and LoopSimplify do not preserve MemorySSA. This is the first step to address that: target LCSSA. LCSSA does not make any changes that invalidate MemorySSA, so it preserves it by design. It must preserve AA as well, for this to hold. After this patch, MemorySSA is still run twice in the old pass manager. Step two follows: target LoopSimplify. Subscribers: mehdi_amini, jlebar, Prazek, llvm-commits, george.burgess.iv, chandlerc Tags: #llvm Differential Revision: https://reviews.llvm.org/D60832 llvm-svn: 359032
This commit is contained in:
parent
8ded2883b1
commit
0c4071b186
@ -61,9 +61,6 @@ struct LoopStandardAnalysisResults {
|
||||
MemorySSA *MSSA;
|
||||
};
|
||||
|
||||
/// Enables memory ssa as a dependency for loop passes.
|
||||
extern cl::opt<bool> EnableMSSALoopDependency;
|
||||
|
||||
/// Extern template declaration for the analysis set for this IR unit.
|
||||
extern template class AllAnalysesOn<Loop>;
|
||||
|
||||
|
@ -104,6 +104,9 @@
|
||||
|
||||
namespace llvm {
|
||||
|
||||
/// Enables memory ssa as a dependency for loop passes.
|
||||
extern cl::opt<bool> EnableMSSALoopDependency;
|
||||
|
||||
class Function;
|
||||
class Instruction;
|
||||
class MemoryAccess;
|
||||
|
@ -18,11 +18,6 @@
|
||||
using namespace llvm;
|
||||
|
||||
namespace llvm {
|
||||
/// Enables memory ssa as a dependency for loop passes in legacy pass manager.
|
||||
cl::opt<bool> EnableMSSALoopDependency(
|
||||
"enable-mssa-loop-dependency", cl::Hidden, cl::init(false),
|
||||
cl::desc("Enable MemorySSA dependency for loop pass manager"));
|
||||
|
||||
// Explicit template instantiations and specialization definitions for core
|
||||
// template typedefs.
|
||||
template class AllAnalysesOn<Loop>;
|
||||
|
@ -81,6 +81,11 @@ bool llvm::VerifyMemorySSA = true;
|
||||
#else
|
||||
bool llvm::VerifyMemorySSA = false;
|
||||
#endif
|
||||
/// Enables memory ssa as a dependency for loop passes in legacy pass manager.
|
||||
cl::opt<bool> llvm::EnableMSSALoopDependency(
|
||||
"enable-mssa-loop-dependency", cl::Hidden, cl::init(false),
|
||||
cl::desc("Enable MemorySSA dependency for loop pass manager"));
|
||||
|
||||
static cl::opt<bool, true>
|
||||
VerifyMemorySSAX("verify-memoryssa", cl::location(VerifyMemorySSA),
|
||||
cl::Hidden, cl::desc("Enable verification of MemorySSA."));
|
||||
|
@ -34,9 +34,9 @@
|
||||
#include "llvm/Analysis/BranchProbabilityInfo.h"
|
||||
#include "llvm/Analysis/GlobalsModRef.h"
|
||||
#include "llvm/Analysis/LoopPass.h"
|
||||
#include "llvm/Analysis/MemorySSA.h"
|
||||
#include "llvm/Analysis/ScalarEvolution.h"
|
||||
#include "llvm/Analysis/ScalarEvolutionAliasAnalysis.h"
|
||||
#include "llvm/Transforms/Utils/Local.h"
|
||||
#include "llvm/IR/Constants.h"
|
||||
#include "llvm/IR/Dominators.h"
|
||||
#include "llvm/IR/Function.h"
|
||||
@ -45,6 +45,7 @@
|
||||
#include "llvm/IR/PredIteratorCache.h"
|
||||
#include "llvm/Pass.h"
|
||||
#include "llvm/Transforms/Utils.h"
|
||||
#include "llvm/Transforms/Utils/Local.h"
|
||||
#include "llvm/Transforms/Utils/LoopUtils.h"
|
||||
#include "llvm/Transforms/Utils/SSAUpdater.h"
|
||||
using namespace llvm;
|
||||
@ -444,6 +445,7 @@ struct LCSSAWrapperPass : public FunctionPass {
|
||||
AU.addPreserved<ScalarEvolutionWrapperPass>();
|
||||
AU.addPreserved<SCEVAAWrapperPass>();
|
||||
AU.addPreserved<BranchProbabilityInfoWrapperPass>();
|
||||
AU.addPreserved<MemorySSAWrapperPass>();
|
||||
|
||||
// This is needed to perform LCSSA verification inside LPPassManager
|
||||
AU.addRequired<LCSSAVerificationPass>();
|
||||
@ -490,5 +492,6 @@ PreservedAnalyses LCSSAPass::run(Function &F, FunctionAnalysisManager &AM) {
|
||||
// BPI maps terminators to probabilities, since we don't modify the CFG, no
|
||||
// updates are needed to preserve it.
|
||||
PA.preserve<BranchProbabilityAnalysis>();
|
||||
PA.preserve<MemorySSAAnalysis>();
|
||||
return PA;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user