mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[PM] Split the LoopInfo object apart from the legacy pass, creating
a LoopInfoWrapperPass to wire the object up to the legacy pass manager. This switches all the clients of LoopInfo over and paves the way to port LoopInfo to the new pass manager. No functionality change is intended with this iteration. llvm-svn: 226373
This commit is contained in:
parent
470187b350
commit
c47432114d
@ -853,7 +853,7 @@ Example implementations of ``getAnalysisUsage``
|
||||
// This example modifies the program, but does not modify the CFG
|
||||
void LICM::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesCFG();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
}
|
||||
|
||||
.. _writing-an-llvm-pass-getAnalysis:
|
||||
@ -870,7 +870,7 @@ you want, and returns a reference to that pass. For example:
|
||||
.. code-block:: c++
|
||||
|
||||
bool LICM::runOnFunction(Function &F) {
|
||||
LoopInfo &LI = getAnalysis<LoopInfo>();
|
||||
LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
//...
|
||||
}
|
||||
|
||||
|
@ -495,6 +495,7 @@ class LoopInfoBase {
|
||||
std::vector<LoopT *> TopLevelLoops;
|
||||
friend class LoopBase<BlockT, LoopT>;
|
||||
friend class LoopInfo;
|
||||
friend class LoopInfoWrapperPass;
|
||||
|
||||
void operator=(const LoopInfoBase &) LLVM_DELETED_FUNCTION;
|
||||
LoopInfoBase(const LoopInfo &) LLVM_DELETED_FUNCTION;
|
||||
@ -626,18 +627,15 @@ public:
|
||||
__extension__ extern template class LoopInfoBase<BasicBlock, Loop>;
|
||||
#endif
|
||||
|
||||
class LoopInfo : public FunctionPass {
|
||||
class LoopInfo {
|
||||
LoopInfoBase<BasicBlock, Loop> LI;
|
||||
friend class LoopBase<BasicBlock, Loop>;
|
||||
friend class LoopInfoWrapperPass;
|
||||
|
||||
void operator=(const LoopInfo &) LLVM_DELETED_FUNCTION;
|
||||
LoopInfo(const LoopInfo &) LLVM_DELETED_FUNCTION;
|
||||
public:
|
||||
static char ID; // Pass identification, replacement for typeid
|
||||
|
||||
LoopInfo() : FunctionPass(ID) {
|
||||
initializeLoopInfoPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
LoopInfo() {}
|
||||
|
||||
LoopInfoBase<BasicBlock, Loop>& getBase() { return LI; }
|
||||
|
||||
@ -677,18 +675,6 @@ public:
|
||||
return LI.isLoopHeader(BB);
|
||||
}
|
||||
|
||||
/// runOnFunction - Calculate the natural loop information.
|
||||
///
|
||||
bool runOnFunction(Function &F) override;
|
||||
|
||||
void verifyAnalysis() const override;
|
||||
|
||||
void releaseMemory() override { LI.releaseMemory(); }
|
||||
|
||||
void print(raw_ostream &O, const Module* M = nullptr) const override;
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override;
|
||||
|
||||
/// removeLoop - This removes the specified top-level loop from this loop info
|
||||
/// object. The loop is not deleted, as it will presumably be inserted into
|
||||
/// another loop.
|
||||
@ -720,6 +706,8 @@ public:
|
||||
LI.removeBlock(BB);
|
||||
}
|
||||
|
||||
void releaseMemory() { LI.releaseMemory(); }
|
||||
|
||||
/// updateUnloop - Update LoopInfo after removing the last backedge from a
|
||||
/// loop--now the "unloop". This updates the loop forest and parent loops for
|
||||
/// each block so that Unloop is no longer referenced, but the caller must
|
||||
@ -748,7 +736,6 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// Allow clients to walk the list of nested loops...
|
||||
template <> struct GraphTraits<const Loop*> {
|
||||
typedef const Loop NodeType;
|
||||
@ -776,6 +763,32 @@ template <> struct GraphTraits<Loop*> {
|
||||
}
|
||||
};
|
||||
|
||||
/// \brief The legacy pass manager's analysis pass to compute loop information.
|
||||
class LoopInfoWrapperPass : public FunctionPass {
|
||||
LoopInfo LI;
|
||||
|
||||
public:
|
||||
static char ID; // Pass identification, replacement for typeid
|
||||
|
||||
LoopInfoWrapperPass() : FunctionPass(ID) {
|
||||
initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
|
||||
}
|
||||
|
||||
LoopInfo &getLoopInfo() { return LI; }
|
||||
const LoopInfo &getLoopInfo() const { return LI; }
|
||||
|
||||
/// \brief Calculate the natural loop information for a given function.
|
||||
bool runOnFunction(Function &F) override;
|
||||
|
||||
void verifyAnalysis() const override;
|
||||
|
||||
void releaseMemory() override { LI.releaseMemory(); }
|
||||
|
||||
void print(raw_ostream &O, const Module *M = nullptr) const override;
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override;
|
||||
};
|
||||
|
||||
} // End llvm namespace
|
||||
|
||||
#endif
|
||||
|
@ -167,7 +167,7 @@ void initializeLoaderPassPass(PassRegistry&);
|
||||
void initializeLocalStackSlotPassPass(PassRegistry&);
|
||||
void initializeLoopDeletionPass(PassRegistry&);
|
||||
void initializeLoopExtractorPass(PassRegistry&);
|
||||
void initializeLoopInfoPass(PassRegistry&);
|
||||
void initializeLoopInfoWrapperPassPass(PassRegistry&);
|
||||
void initializeLoopInstSimplifyPass(PassRegistry&);
|
||||
void initializeLoopRotatePass(PassRegistry&);
|
||||
void initializeLoopSimplifyPass(PassRegistry&);
|
||||
|
@ -53,7 +53,7 @@ void llvm::initializeAnalysis(PassRegistry &Registry) {
|
||||
initializeLazyValueInfoPass(Registry);
|
||||
initializeLibCallAliasAnalysisPass(Registry);
|
||||
initializeLintPass(Registry);
|
||||
initializeLoopInfoPass(Registry);
|
||||
initializeLoopInfoWrapperPassPass(Registry);
|
||||
initializeMemDepPrinterPass(Registry);
|
||||
initializeMemoryDependenceAnalysisPass(Registry);
|
||||
initializeModuleDebugInfoPrinterPass(Registry);
|
||||
|
@ -1436,7 +1436,8 @@ bool BasicAliasAnalysis::isValueEqualInPotentialCycles(const Value *V,
|
||||
DominatorTreeWrapperPass *DTWP =
|
||||
getAnalysisIfAvailable<DominatorTreeWrapperPass>();
|
||||
DominatorTree *DT = DTWP ? &DTWP->getDomTree() : nullptr;
|
||||
LoopInfo *LI = getAnalysisIfAvailable<LoopInfo>();
|
||||
auto *LIWP = getAnalysisIfAvailable<LoopInfoWrapperPass>();
|
||||
LoopInfo *LI = LIWP ? &LIWP->getLoopInfo() : nullptr;
|
||||
|
||||
// Make sure that the visited phis cannot reach the Value. This ensures that
|
||||
// the Values cannot come from different iterations of a potential cycle the
|
||||
|
@ -108,7 +108,7 @@ struct DOTGraphTraits<BlockFrequencyInfo*> : public DefaultDOTGraphTraits {
|
||||
INITIALIZE_PASS_BEGIN(BlockFrequencyInfo, "block-freq",
|
||||
"Block Frequency Analysis", true, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(BranchProbabilityInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_END(BlockFrequencyInfo, "block-freq",
|
||||
"Block Frequency Analysis", true, true)
|
||||
|
||||
@ -123,13 +123,13 @@ BlockFrequencyInfo::~BlockFrequencyInfo() {}
|
||||
|
||||
void BlockFrequencyInfo::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addRequired<BranchProbabilityInfo>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.setPreservesAll();
|
||||
}
|
||||
|
||||
bool BlockFrequencyInfo::runOnFunction(Function &F) {
|
||||
BranchProbabilityInfo &BPI = getAnalysis<BranchProbabilityInfo>();
|
||||
LoopInfo &LI = getAnalysis<LoopInfo>();
|
||||
LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
if (!BFI)
|
||||
BFI.reset(new ImplType);
|
||||
BFI->doFunction(&F, &BPI, &LI);
|
||||
|
@ -28,7 +28,7 @@ using namespace llvm;
|
||||
|
||||
INITIALIZE_PASS_BEGIN(BranchProbabilityInfo, "branch-prob",
|
||||
"Branch Probability Analysis", false, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_END(BranchProbabilityInfo, "branch-prob",
|
||||
"Branch Probability Analysis", false, true)
|
||||
|
||||
@ -484,7 +484,7 @@ bool BranchProbabilityInfo::calcInvokeHeuristics(BasicBlock *BB) {
|
||||
}
|
||||
|
||||
void BranchProbabilityInfo::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.setPreservesAll();
|
||||
}
|
||||
|
||||
@ -492,7 +492,7 @@ bool BranchProbabilityInfo::runOnFunction(Function &F) {
|
||||
DEBUG(dbgs() << "---- Branch Probability Info : " << F.getName()
|
||||
<< " ----\n\n");
|
||||
LastF = &F; // Store the last function we ran on for printing.
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
assert(PostDominatedByUnreachable.empty());
|
||||
assert(PostDominatedByColdCall.empty());
|
||||
|
||||
|
@ -59,14 +59,14 @@ public:
|
||||
|
||||
void Delinearization::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addRequired<ScalarEvolution>();
|
||||
}
|
||||
|
||||
bool Delinearization::runOnFunction(Function &F) {
|
||||
this->F = &F;
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -141,7 +141,7 @@ char Delinearization::ID = 0;
|
||||
static const char delinearization_name[] = "Delinearization";
|
||||
INITIALIZE_PASS_BEGIN(Delinearization, DL_NAME, delinearization_name, true,
|
||||
true)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_END(Delinearization, DL_NAME, delinearization_name, true, true)
|
||||
|
||||
FunctionPass *llvm::createDelinearizationPass() { return new Delinearization; }
|
||||
|
@ -114,7 +114,7 @@ Delinearize("da-delinearize", cl::init(false), cl::Hidden, cl::ZeroOrMore,
|
||||
|
||||
INITIALIZE_PASS_BEGIN(DependenceAnalysis, "da",
|
||||
"Dependence Analysis", true, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(DependenceAnalysis, "da",
|
||||
@ -132,7 +132,7 @@ bool DependenceAnalysis::runOnFunction(Function &F) {
|
||||
this->F = &F;
|
||||
AA = &getAnalysis<AliasAnalysis>();
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -145,7 +145,7 @@ void DependenceAnalysis::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
AU.addRequiredTransitive<AliasAnalysis>();
|
||||
AU.addRequiredTransitive<ScalarEvolution>();
|
||||
AU.addRequiredTransitive<LoopInfo>();
|
||||
AU.addRequiredTransitive<LoopInfoWrapperPass>();
|
||||
}
|
||||
|
||||
|
||||
|
@ -33,7 +33,7 @@ using namespace llvm;
|
||||
char IVUsers::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(IVUsers, "iv-users",
|
||||
"Induction Variable Users", false, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_END(IVUsers, "iv-users",
|
||||
@ -241,7 +241,7 @@ IVUsers::IVUsers()
|
||||
}
|
||||
|
||||
void IVUsers::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<ScalarEvolution>();
|
||||
AU.setPreservesAll();
|
||||
@ -250,7 +250,7 @@ void IVUsers::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
bool IVUsers::runOnLoop(Loop *l, LPPassManager &LPM) {
|
||||
|
||||
L = l;
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
|
@ -45,11 +45,6 @@ static cl::opt<bool,true>
|
||||
VerifyLoopInfoX("verify-loop-info", cl::location(VerifyLoopInfo),
|
||||
cl::desc("Verify loop info (time consuming)"));
|
||||
|
||||
char LoopInfo::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(LoopInfo, "loops", "Natural Loop Information", true, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_END(LoopInfo, "loops", "Natural Loop Information", true, true)
|
||||
|
||||
// Loop identifier metadata name.
|
||||
static const char *const LoopMDName = "llvm.loop";
|
||||
|
||||
@ -609,15 +604,6 @@ Loop *UnloopUpdater::getNearestLoop(BasicBlock *BB, Loop *BBLoop) {
|
||||
return NearLoop;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// LoopInfo implementation
|
||||
//
|
||||
bool LoopInfo::runOnFunction(Function &) {
|
||||
releaseMemory();
|
||||
LI.Analyze(getAnalysis<DominatorTreeWrapperPass>().getDomTree());
|
||||
return false;
|
||||
}
|
||||
|
||||
/// updateUnloop - The last backedge has been removed from a loop--now the
|
||||
/// "unloop". Find a new parent for the blocks contained within unloop and
|
||||
/// update the loop tree. We don't necessarily have valid dominators at this
|
||||
@ -680,36 +666,54 @@ void LoopInfo::updateUnloop(Loop *Unloop) {
|
||||
}
|
||||
}
|
||||
|
||||
void LoopInfo::verifyAnalysis() const {
|
||||
// LoopInfo is a FunctionPass, but verifying every loop in the function
|
||||
// each time verifyAnalysis is called is very expensive. The
|
||||
//===----------------------------------------------------------------------===//
|
||||
// LoopInfo implementation
|
||||
//
|
||||
|
||||
char LoopInfoWrapperPass::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(LoopInfoWrapperPass, "loops", "Natural Loop Information",
|
||||
true, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_END(LoopInfoWrapperPass, "loops", "Natural Loop Information",
|
||||
true, true)
|
||||
|
||||
bool LoopInfoWrapperPass::runOnFunction(Function &) {
|
||||
releaseMemory();
|
||||
LI.getBase().Analyze(getAnalysis<DominatorTreeWrapperPass>().getDomTree());
|
||||
return false;
|
||||
}
|
||||
|
||||
void LoopInfoWrapperPass::verifyAnalysis() const {
|
||||
// LoopInfoWrapperPass is a FunctionPass, but verifying every loop in the
|
||||
// function each time verifyAnalysis is called is very expensive. The
|
||||
// -verify-loop-info option can enable this. In order to perform some
|
||||
// checking by default, LoopPass has been taught to call verifyLoop
|
||||
// manually during loop pass sequences.
|
||||
// checking by default, LoopPass has been taught to call verifyLoop manually
|
||||
// during loop pass sequences.
|
||||
|
||||
if (!VerifyLoopInfo) return;
|
||||
|
||||
DenseSet<const Loop*> Loops;
|
||||
for (iterator I = begin(), E = end(); I != E; ++I) {
|
||||
for (LoopInfo::iterator I = LI.begin(), E = LI.end(); I != E; ++I) {
|
||||
assert(!(*I)->getParentLoop() && "Top-level loop has a parent!");
|
||||
(*I)->verifyLoopNest(&Loops);
|
||||
}
|
||||
|
||||
// Verify that blocks are mapped to valid loops.
|
||||
for (DenseMap<BasicBlock*, Loop*>::const_iterator I = LI.BBMap.begin(),
|
||||
E = LI.BBMap.end(); I != E; ++I) {
|
||||
assert(Loops.count(I->second) && "orphaned loop");
|
||||
assert(I->second->contains(I->first) && "orphaned block");
|
||||
for (auto &Entry : LI.LI.BBMap) {
|
||||
BasicBlock *BB = Entry.first;
|
||||
Loop *L = Entry.second;
|
||||
assert(Loops.count(L) && "orphaned loop");
|
||||
assert(L->contains(BB) && "orphaned block");
|
||||
}
|
||||
}
|
||||
|
||||
void LoopInfo::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
void LoopInfoWrapperPass::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
}
|
||||
|
||||
void LoopInfo::print(raw_ostream &OS, const Module*) const {
|
||||
LI.print(OS);
|
||||
void LoopInfoWrapperPass::print(raw_ostream &OS, const Module *) const {
|
||||
LI.LI.print(OS);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -187,14 +187,15 @@ static void addLoopIntoQueue(Loop *L, std::deque<Loop *> &LQ) {
|
||||
void LPPassManager::getAnalysisUsage(AnalysisUsage &Info) const {
|
||||
// LPPassManager needs LoopInfo. In the long term LoopInfo class will
|
||||
// become part of LPPassManager.
|
||||
Info.addRequired<LoopInfo>();
|
||||
Info.addRequired<LoopInfoWrapperPass>();
|
||||
Info.setPreservesAll();
|
||||
}
|
||||
|
||||
/// run - Execute all of the passes scheduled for execution. Keep track of
|
||||
/// whether any of the passes modifies the function, and if so, return true.
|
||||
bool LPPassManager::runOnFunction(Function &F) {
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
auto &LIWP = getAnalysis<LoopInfoWrapperPass>();
|
||||
LI = &LIWP.getLoopInfo();
|
||||
bool Changed = false;
|
||||
|
||||
// Collect inherited analysis from Module level pass manager.
|
||||
@ -262,7 +263,7 @@ bool LPPassManager::runOnFunction(Function &F) {
|
||||
// loop in the function every time. That level of checking can be
|
||||
// enabled with the -verify-loop-info option.
|
||||
{
|
||||
TimeRegion PassTimer(getPassTimer(LI));
|
||||
TimeRegion PassTimer(getPassTimer(&LIWP));
|
||||
CurrentLoop->verifyLoop();
|
||||
}
|
||||
|
||||
|
@ -117,7 +117,7 @@ VerifySCEV("verify-scev",
|
||||
INITIALIZE_PASS_BEGIN(ScalarEvolution, "scalar-evolution",
|
||||
"Scalar Evolution Analysis", false, true)
|
||||
INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
|
||||
INITIALIZE_PASS_END(ScalarEvolution, "scalar-evolution",
|
||||
@ -7867,7 +7867,7 @@ ScalarEvolution::ScalarEvolution()
|
||||
bool ScalarEvolution::runOnFunction(Function &F) {
|
||||
this->F = &F;
|
||||
AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
@ -7908,7 +7908,7 @@ void ScalarEvolution::releaseMemory() {
|
||||
void ScalarEvolution::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
AU.addRequired<AssumptionCacheTracker>();
|
||||
AU.addRequiredTransitive<LoopInfo>();
|
||||
AU.addRequiredTransitive<LoopInfoWrapperPass>();
|
||||
AU.addRequiredTransitive<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<TargetLibraryInfoWrapperPass>();
|
||||
}
|
||||
|
@ -94,8 +94,8 @@ namespace {
|
||||
bool runOnFunction(Function &F) override;
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<ScalarEvolution>();
|
||||
@ -146,7 +146,7 @@ namespace {
|
||||
INITIALIZE_PASS_BEGIN(PPCCTRLoops, "ppc-ctr-loops", "PowerPC CTR Loops",
|
||||
false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_END(PPCCTRLoops, "ppc-ctr-loops", "PowerPC CTR Loops",
|
||||
false, false)
|
||||
@ -168,7 +168,7 @@ FunctionPass *llvm::createPPCCTRLoopsVerify() {
|
||||
#endif // NDEBUG
|
||||
|
||||
bool PPCCTRLoops::runOnFunction(Function &F) {
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
|
@ -799,8 +799,9 @@ Instruction *InstCombiner::FoldOpIntoPhi(Instruction &I) {
|
||||
// If the incoming non-constant value is in I's block, we will remove one
|
||||
// instruction, but insert another equivalent one, leading to infinite
|
||||
// instcombine.
|
||||
auto *LIWP = getAnalysisIfAvailable<LoopInfoWrapperPass>();
|
||||
if (isPotentiallyReachable(I.getParent(), NonConstBB, DT,
|
||||
getAnalysisIfAvailable<LoopInfo>()))
|
||||
LIWP ? &LIWP->getLoopInfo() : nullptr))
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -58,7 +58,7 @@ struct AlignmentFromAssumptions : public FunctionPass {
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
|
||||
AU.setPreservesCFG();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
AU.addPreserved<ScalarEvolution>();
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ namespace {
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addRequired<ScalarEvolution>();
|
||||
AU.addRequiredID(LoopSimplifyID);
|
||||
AU.addRequiredID(LCSSAID);
|
||||
@ -126,7 +126,7 @@ char IndVarSimplify::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(IndVarSimplify, "indvars",
|
||||
"Induction Variable Simplification", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
@ -1929,7 +1929,7 @@ bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
if (!L->isLoopSimplifyForm())
|
||||
return false;
|
||||
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
|
@ -169,7 +169,7 @@ public:
|
||||
}
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addRequiredID(LoopSimplifyID);
|
||||
AU.addRequiredID(LCSSAID);
|
||||
AU.addRequired<ScalarEvolution>();
|
||||
@ -1176,7 +1176,8 @@ bool InductiveRangeCheckElimination::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
if (!SafeIterRange.hasValue())
|
||||
return false;
|
||||
|
||||
LoopConstrainer LC(*L, getAnalysis<LoopInfo>(), SE, SafeIterRange.getValue());
|
||||
LoopConstrainer LC(*L, getAnalysis<LoopInfoWrapperPass>().getLoopInfo(), SE,
|
||||
SafeIterRange.getValue());
|
||||
bool Changed = LC.run();
|
||||
|
||||
if (Changed) {
|
||||
|
@ -86,7 +86,7 @@ namespace {
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.setPreservesCFG();
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addRequiredID(LoopSimplifyID);
|
||||
AU.addPreservedID(LoopSimplifyID);
|
||||
AU.addRequiredID(LCSSAID);
|
||||
@ -210,7 +210,7 @@ namespace {
|
||||
char LICM::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(LICM, "licm", "Loop Invariant Code Motion", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
@ -231,7 +231,7 @@ bool LICM::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
Changed = false;
|
||||
|
||||
// Get our Loop and Alias Analysis information...
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
AA = &getAnalysis<AliasAnalysis>();
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
|
||||
|
@ -39,14 +39,14 @@ namespace {
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addRequired<ScalarEvolution>();
|
||||
AU.addRequiredID(LoopSimplifyID);
|
||||
AU.addRequiredID(LCSSAID);
|
||||
|
||||
AU.addPreserved<ScalarEvolution>();
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
AU.addPreservedID(LoopSimplifyID);
|
||||
AU.addPreservedID(LCSSAID);
|
||||
}
|
||||
@ -63,7 +63,7 @@ char LoopDeletion::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(LoopDeletion, "loop-deletion",
|
||||
"Delete dead loops", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
@ -236,7 +236,7 @@ bool LoopDeletion::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
|
||||
// Finally, the blocks from loopinfo. This has to happen late because
|
||||
// otherwise our loop iterators won't work.
|
||||
LoopInfo &loopInfo = getAnalysis<LoopInfo>();
|
||||
LoopInfo &loopInfo = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
SmallPtrSet<BasicBlock*, 8> blocks;
|
||||
blocks.insert(L->block_begin(), L->block_end());
|
||||
for (BasicBlock *BB : blocks)
|
||||
|
@ -163,8 +163,8 @@ namespace {
|
||||
/// loop preheaders be inserted into the CFG.
|
||||
///
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
AU.addRequiredID(LoopSimplifyID);
|
||||
AU.addPreservedID(LoopSimplifyID);
|
||||
AU.addRequiredID(LCSSAID);
|
||||
@ -218,7 +218,7 @@ namespace {
|
||||
char LoopIdiomRecognize::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(LoopIdiomRecognize, "loop-idiom", "Recognize loop idioms",
|
||||
false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
@ -669,7 +669,7 @@ bool LoopIdiomRecognize::runOnCountableLoop() {
|
||||
// set DT
|
||||
(void)getDominatorTree();
|
||||
|
||||
LoopInfo &LI = getAnalysis<LoopInfo>();
|
||||
LoopInfo &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
|
||||
// set TLI
|
||||
|
@ -43,7 +43,7 @@ namespace {
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.setPreservesCFG();
|
||||
AU.addRequired<AssumptionCacheTracker>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addRequiredID(LoopSimplifyID);
|
||||
AU.addPreservedID(LoopSimplifyID);
|
||||
AU.addPreservedID(LCSSAID);
|
||||
@ -59,7 +59,7 @@ INITIALIZE_PASS_BEGIN(LoopInstSimplify, "loop-instsimplify",
|
||||
INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
|
||||
INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_PASS_END(LoopInstSimplify, "loop-instsimplify",
|
||||
"Simplify instructions in loops", false, false)
|
||||
@ -75,7 +75,7 @@ bool LoopInstSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
DominatorTreeWrapperPass *DTWP =
|
||||
getAnalysisIfAvailable<DominatorTreeWrapperPass>();
|
||||
DominatorTree *DT = DTWP ? &DTWP->getDomTree() : nullptr;
|
||||
LoopInfo *LI = &getAnalysis<LoopInfo>();
|
||||
LoopInfo *LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
const DataLayout *DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
const TargetLibraryInfo *TLI =
|
||||
|
@ -130,8 +130,8 @@ namespace {
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequired<AliasAnalysis>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<ScalarEvolution>();
|
||||
@ -339,7 +339,7 @@ protected:
|
||||
char LoopReroll::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(LoopReroll, "loop-reroll", "Reroll loops", false, false)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
|
||||
@ -1129,7 +1129,7 @@ bool LoopReroll::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
return false;
|
||||
|
||||
AA = &getAnalysis<AliasAnalysis>();
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
|
@ -56,8 +56,8 @@ namespace {
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequired<AssumptionCacheTracker>();
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
AU.addRequiredID(LoopSimplifyID);
|
||||
AU.addPreservedID(LoopSimplifyID);
|
||||
AU.addRequiredID(LCSSAID);
|
||||
@ -82,7 +82,7 @@ char LoopRotate::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(LoopRotate, "loop-rotate", "Rotate Loops", false, false)
|
||||
INITIALIZE_AG_DEPENDENCY(TargetTransformInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_PASS_END(LoopRotate, "loop-rotate", "Rotate Loops", false, false)
|
||||
@ -100,7 +100,7 @@ bool LoopRotate::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
// Save the loop metadata.
|
||||
MDNode *LoopMD = L->getLoopID();
|
||||
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
TTI = &getAnalysis<TargetTransformInfo>();
|
||||
AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(
|
||||
*L->getHeader()->getParent());
|
||||
|
@ -4863,7 +4863,7 @@ LSRInstance::ImplementSolution(const SmallVectorImpl<const Formula *> &Solution,
|
||||
LSRInstance::LSRInstance(Loop *L, Pass *P)
|
||||
: IU(P->getAnalysis<IVUsers>()), SE(P->getAnalysis<ScalarEvolution>()),
|
||||
DT(P->getAnalysis<DominatorTreeWrapperPass>().getDomTree()),
|
||||
LI(P->getAnalysis<LoopInfo>()),
|
||||
LI(P->getAnalysis<LoopInfoWrapperPass>().getLoopInfo()),
|
||||
TTI(P->getAnalysis<TargetTransformInfo>()), L(L), Changed(false),
|
||||
IVIncInsertPos(nullptr) {
|
||||
// If LoopSimplify form is not available, stay out of trouble.
|
||||
@ -5045,7 +5045,7 @@ INITIALIZE_AG_DEPENDENCY(TargetTransformInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_DEPENDENCY(IVUsers)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_END(LoopStrengthReduce, "loop-reduce",
|
||||
"Loop Strength Reduction", false, false)
|
||||
@ -5064,8 +5064,8 @@ void LoopStrengthReduce::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
// many analyses if they are around.
|
||||
AU.addPreservedID(LoopSimplifyID);
|
||||
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
AU.addRequiredID(LoopSimplifyID);
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
|
@ -105,8 +105,8 @@ namespace {
|
||||
///
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequired<AssumptionCacheTracker>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
AU.addRequiredID(LoopSimplifyID);
|
||||
AU.addPreservedID(LoopSimplifyID);
|
||||
AU.addRequiredID(LCSSAID);
|
||||
@ -188,7 +188,7 @@ INITIALIZE_PASS_BEGIN(LoopUnroll, "loop-unroll", "Unroll loops", false, false)
|
||||
INITIALIZE_AG_DEPENDENCY(TargetTransformInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
|
||||
INITIALIZE_PASS_DEPENDENCY(FunctionTargetTransformInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
@ -363,7 +363,7 @@ bool LoopUnroll::runOnLoop(Loop *L, LPPassManager &LPM) {
|
||||
if (skipOptnoneFunction(L))
|
||||
return false;
|
||||
|
||||
LoopInfo *LI = &getAnalysis<LoopInfo>();
|
||||
LoopInfo *LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
ScalarEvolution *SE = &getAnalysis<ScalarEvolution>();
|
||||
const TargetTransformInfo &TTI = getAnalysis<TargetTransformInfo>();
|
||||
const FunctionTargetTransformInfo &FTTI =
|
||||
|
@ -170,8 +170,8 @@ namespace {
|
||||
AU.addRequired<AssumptionCacheTracker>();
|
||||
AU.addRequiredID(LoopSimplifyID);
|
||||
AU.addPreservedID(LoopSimplifyID);
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
AU.addRequiredID(LCSSAID);
|
||||
AU.addPreservedID(LCSSAID);
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
@ -336,7 +336,7 @@ INITIALIZE_PASS_BEGIN(LoopUnswitch, "loop-unswitch", "Unswitch loops",
|
||||
INITIALIZE_AG_DEPENDENCY(TargetTransformInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_PASS_END(LoopUnswitch, "loop-unswitch", "Unswitch loops",
|
||||
false, false)
|
||||
@ -387,7 +387,7 @@ bool LoopUnswitch::runOnLoop(Loop *L, LPPassManager &LPM_Ref) {
|
||||
|
||||
AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(
|
||||
*L->getHeader()->getParent());
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
LPM = &LPM_Ref;
|
||||
DominatorTreeWrapperPass *DTWP =
|
||||
getAnalysisIfAvailable<DominatorTreeWrapperPass>();
|
||||
|
@ -95,7 +95,7 @@ public:
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.setPreservesCFG();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<PostDominatorTree>();
|
||||
}
|
||||
@ -731,7 +731,7 @@ INITIALIZE_PASS_BEGIN(SampleProfileLoader, "sample-profile",
|
||||
"Sample Profile loader", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(PostDominatorTree)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(AddDiscriminators)
|
||||
INITIALIZE_PASS_END(SampleProfileLoader, "sample-profile",
|
||||
"Sample Profile loader", false, false)
|
||||
@ -762,7 +762,7 @@ bool SampleProfileLoader::runOnFunction(Function &F) {
|
||||
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
PDT = &getAnalysis<PostDominatorTree>();
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
Ctx = &F.getParent()->getContext();
|
||||
Samples = Reader->getSamplesFor(F);
|
||||
if (!Samples->empty())
|
||||
|
@ -50,9 +50,9 @@ namespace {
|
||||
FunctionPass::getAnalysisUsage(AU);
|
||||
AU.addRequired<AliasAnalysis>();
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
}
|
||||
private:
|
||||
bool ProcessBlock(BasicBlock &BB);
|
||||
@ -64,7 +64,7 @@ namespace {
|
||||
|
||||
char Sinking::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(Sinking, "sink", "Code sinking", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
|
||||
INITIALIZE_PASS_END(Sinking, "sink", "Code sinking", false, false)
|
||||
@ -98,7 +98,7 @@ bool Sinking::AllUsesDominatedByBlock(Instruction *Inst,
|
||||
|
||||
bool Sinking::runOnFunction(Function &F) {
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
AA = &getAnalysis<AliasAnalysis>();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
|
@ -249,7 +249,7 @@ public:
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addRequiredID(LowerSwitchID);
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
RegionPass::getAnalysisUsage(AU);
|
||||
}
|
||||
@ -866,7 +866,7 @@ bool StructurizeCFG::runOnRegion(Region *R, RGPassManager &RGM) {
|
||||
ParentRegion = R;
|
||||
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
|
||||
orderNodes();
|
||||
collectInfos();
|
||||
|
@ -180,8 +180,8 @@ bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, Pass *P) {
|
||||
DT.eraseNode(BB);
|
||||
}
|
||||
|
||||
if (LoopInfo *LI = P->getAnalysisIfAvailable<LoopInfo>())
|
||||
LI->removeBlock(BB);
|
||||
if (auto *LIWP = P->getAnalysisIfAvailable<LoopInfoWrapperPass>())
|
||||
LIWP->getLoopInfo().removeBlock(BB);
|
||||
|
||||
if (MemoryDependenceAnalysis *MD =
|
||||
P->getAnalysisIfAvailable<MemoryDependenceAnalysis>())
|
||||
@ -290,9 +290,11 @@ BasicBlock *llvm::SplitBlock(BasicBlock *Old, Instruction *SplitPt, Pass *P) {
|
||||
|
||||
// The new block lives in whichever loop the old one did. This preserves
|
||||
// LCSSA as well, because we force the split point to be after any PHI nodes.
|
||||
if (LoopInfo *LI = P->getAnalysisIfAvailable<LoopInfo>())
|
||||
if (Loop *L = LI->getLoopFor(Old))
|
||||
L->addBasicBlockToLoop(New, LI->getBase());
|
||||
if (auto *LIWP = P->getAnalysisIfAvailable<LoopInfoWrapperPass>()) {
|
||||
LoopInfo &LI = LIWP->getLoopInfo();
|
||||
if (Loop *L = LI.getLoopFor(Old))
|
||||
L->addBasicBlockToLoop(New, LI.getBase());
|
||||
}
|
||||
|
||||
if (DominatorTreeWrapperPass *DTWP =
|
||||
P->getAnalysisIfAvailable<DominatorTreeWrapperPass>()) {
|
||||
@ -321,7 +323,8 @@ static void UpdateAnalysisInformation(BasicBlock *OldBB, BasicBlock *NewBB,
|
||||
Pass *P, bool &HasLoopExit) {
|
||||
if (!P) return;
|
||||
|
||||
LoopInfo *LI = P->getAnalysisIfAvailable<LoopInfo>();
|
||||
auto *LIWP = P->getAnalysisIfAvailable<LoopInfoWrapperPass>();
|
||||
LoopInfo *LI = LIWP ? &LIWP->getLoopInfo() : nullptr;
|
||||
Loop *L = LI ? LI->getLoopFor(OldBB) : nullptr;
|
||||
|
||||
// If we need to preserve loop analyses, collect some information about how
|
||||
|
@ -48,7 +48,7 @@ namespace {
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const override {
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
|
||||
// No loop canonicalization guarantees are broken by this pass.
|
||||
AU.addPreservedID(LoopSimplifyID);
|
||||
@ -199,7 +199,8 @@ BasicBlock *llvm::SplitCriticalEdge(TerminatorInst *TI, unsigned SuccNum,
|
||||
DominatorTreeWrapperPass *DTWP =
|
||||
P->getAnalysisIfAvailable<DominatorTreeWrapperPass>();
|
||||
DominatorTree *DT = DTWP ? &DTWP->getDomTree() : nullptr;
|
||||
LoopInfo *LI = P->getAnalysisIfAvailable<LoopInfo>();
|
||||
auto *LIWP = P->getAnalysisIfAvailable<LoopInfoWrapperPass>();
|
||||
LoopInfo *LI = LIWP ? &LIWP->getLoopInfo() : nullptr;
|
||||
|
||||
// If we have nothing to update, just return.
|
||||
if (!DT && !LI)
|
||||
|
@ -294,7 +294,7 @@ struct LCSSA : public FunctionPass {
|
||||
AU.setPreservesCFG();
|
||||
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addPreservedID(LoopSimplifyID);
|
||||
AU.addPreserved<AliasAnalysis>();
|
||||
AU.addPreserved<ScalarEvolution>();
|
||||
@ -308,7 +308,7 @@ private:
|
||||
char LCSSA::ID = 0;
|
||||
INITIALIZE_PASS_BEGIN(LCSSA, "lcssa", "Loop-Closed SSA Form Pass", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_END(LCSSA, "lcssa", "Loop-Closed SSA Form Pass", false, false)
|
||||
|
||||
Pass *llvm::createLCSSAPass() { return new LCSSA(); }
|
||||
@ -318,7 +318,7 @@ char &llvm::LCSSAID = LCSSA::ID;
|
||||
/// Process all loops in the function, inner-most out.
|
||||
bool LCSSA::runOnFunction(Function &F) {
|
||||
bool Changed = false;
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
SE = getAnalysisIfAvailable<ScalarEvolution>();
|
||||
|
||||
|
@ -762,8 +762,8 @@ namespace {
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
|
||||
AU.addPreserved<AliasAnalysis>();
|
||||
AU.addPreserved<ScalarEvolution>();
|
||||
@ -781,7 +781,7 @@ INITIALIZE_PASS_BEGIN(LoopSimplify, "loop-simplify",
|
||||
"Canonicalize natural loops", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(AssumptionCacheTracker)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_END(LoopSimplify, "loop-simplify",
|
||||
"Canonicalize natural loops", false, false)
|
||||
|
||||
@ -795,7 +795,7 @@ Pass *llvm::createLoopSimplifyPass() { return new LoopSimplify(); }
|
||||
bool LoopSimplify::runOnFunction(Function &F) {
|
||||
bool Changed = false;
|
||||
AA = getAnalysisIfAvailable<AliasAnalysis>();
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
SE = getAnalysisIfAvailable<ScalarEvolution>();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
|
@ -55,15 +55,10 @@ namespace {
|
||||
bool Changed;
|
||||
|
||||
public:
|
||||
SimplifyIndvar(Loop *Loop, ScalarEvolution *SE, LPPassManager *LPM,
|
||||
SmallVectorImpl<WeakVH> &Dead, IVUsers *IVU = nullptr) :
|
||||
L(Loop),
|
||||
LI(LPM->getAnalysisIfAvailable<LoopInfo>()),
|
||||
SE(SE),
|
||||
DeadInsts(Dead),
|
||||
Changed(false) {
|
||||
DataLayoutPass *DLP = LPM->getAnalysisIfAvailable<DataLayoutPass>();
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
SimplifyIndvar(Loop *Loop, ScalarEvolution *SE, LoopInfo *LI,
|
||||
const DataLayout *DL, SmallVectorImpl<WeakVH> &Dead,
|
||||
IVUsers *IVU = nullptr)
|
||||
: L(Loop), LI(LI), SE(SE), DL(DL), DeadInsts(Dead), Changed(false) {
|
||||
assert(LI && "IV simplification requires LoopInfo");
|
||||
}
|
||||
|
||||
@ -562,8 +557,10 @@ void IVVisitor::anchor() { }
|
||||
bool simplifyUsersOfIV(PHINode *CurrIV, ScalarEvolution *SE, LPPassManager *LPM,
|
||||
SmallVectorImpl<WeakVH> &Dead, IVVisitor *V)
|
||||
{
|
||||
LoopInfo *LI = &LPM->getAnalysis<LoopInfo>();
|
||||
SimplifyIndvar SIV(LI->getLoopFor(CurrIV->getParent()), SE, LPM, Dead);
|
||||
DataLayoutPass *DLP = LPM->getAnalysisIfAvailable<DataLayoutPass>();
|
||||
LoopInfo *LI = &LPM->getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
SimplifyIndvar SIV(LI->getLoopFor(CurrIV->getParent()), SE, LI,
|
||||
DLP ? &DLP->getDataLayout() : nullptr, Dead);
|
||||
SIV.simplifyUsers(CurrIV, V);
|
||||
return SIV.hasChanged();
|
||||
}
|
||||
|
@ -1277,7 +1277,7 @@ struct LoopVectorize : public FunctionPass {
|
||||
SE = &getAnalysis<ScalarEvolution>();
|
||||
DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
|
||||
DL = DLP ? &DLP->getDataLayout() : nullptr;
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
TTI = &getAnalysis<TargetTransformInfo>();
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
BFI = &getAnalysis<BlockFrequencyInfo>();
|
||||
@ -1496,11 +1496,11 @@ struct LoopVectorize : public FunctionPass {
|
||||
AU.addRequiredID(LCSSAID);
|
||||
AU.addRequired<BlockFrequencyInfo>();
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addRequired<ScalarEvolution>();
|
||||
AU.addRequired<TargetTransformInfo>();
|
||||
AU.addRequired<AliasAnalysis>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
AU.addPreserved<AliasAnalysis>();
|
||||
}
|
||||
@ -6160,7 +6160,7 @@ INITIALIZE_PASS_DEPENDENCY(BlockFrequencyInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(ScalarEvolution)
|
||||
INITIALIZE_PASS_DEPENDENCY(LCSSA)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
|
||||
INITIALIZE_PASS_END(LoopVectorize, LV_NAME, lv_name, false, false)
|
||||
|
||||
|
@ -2893,7 +2893,7 @@ struct SLPVectorizer : public FunctionPass {
|
||||
auto *TLIP = getAnalysisIfAvailable<TargetLibraryInfoWrapperPass>();
|
||||
TLI = TLIP ? &TLIP->getTLI() : nullptr;
|
||||
AA = &getAnalysis<AliasAnalysis>();
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
AC = &getAnalysis<AssumptionCacheTracker>().getAssumptionCache(F);
|
||||
|
||||
@ -2952,9 +2952,9 @@ struct SLPVectorizer : public FunctionPass {
|
||||
AU.addRequired<ScalarEvolution>();
|
||||
AU.addRequired<AliasAnalysis>();
|
||||
AU.addRequired<TargetTransformInfo>();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
AU.addPreserved<LoopInfo>();
|
||||
AU.addPreserved<LoopInfoWrapperPass>();
|
||||
AU.addPreserved<DominatorTreeWrapperPass>();
|
||||
AU.setPreservesCFG();
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ protected:
|
||||
PassInfo *PI = new PassInfo("isPotentiallyReachable testing pass",
|
||||
"", &ID, nullptr, true, true);
|
||||
PassRegistry::getPassRegistry()->registerPass(*PI, false);
|
||||
initializeLoopInfoPass(*PassRegistry::getPassRegistry());
|
||||
initializeLoopInfoWrapperPassPass(*PassRegistry::getPassRegistry());
|
||||
initializeDominatorTreeWrapperPassPass(
|
||||
*PassRegistry::getPassRegistry());
|
||||
return 0;
|
||||
@ -80,7 +80,7 @@ protected:
|
||||
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
AU.addRequired<LoopInfo>();
|
||||
AU.addRequired<LoopInfoWrapperPass>();
|
||||
AU.addRequired<DominatorTreeWrapperPass>();
|
||||
}
|
||||
|
||||
@ -88,7 +88,7 @@ protected:
|
||||
if (!F.hasName() || F.getName() != "test")
|
||||
return false;
|
||||
|
||||
LoopInfo *LI = &getAnalysis<LoopInfo>();
|
||||
LoopInfo *LI = &getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
|
||||
DominatorTree *DT =
|
||||
&getAnalysis<DominatorTreeWrapperPass>().getDomTree();
|
||||
EXPECT_EQ(isPotentiallyReachable(A, B, nullptr, nullptr),
|
||||
|
@ -554,6 +554,6 @@ INITIALIZE_PASS_DEPENDENCY(CallGraphWrapperPass)
|
||||
INITIALIZE_PASS_END(CGPass, "cgp","cgp", false, false)
|
||||
INITIALIZE_PASS(FPass, "fp","fp", false, false)
|
||||
INITIALIZE_PASS_BEGIN(LPass, "lp","lp", false, false)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfo)
|
||||
INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
|
||||
INITIALIZE_PASS_END(LPass, "lp","lp", false, false)
|
||||
INITIALIZE_PASS(BPass, "bp","bp", false, false)
|
||||
|
Loading…
Reference in New Issue
Block a user