forked from OSchip/llvm-project
Use schedulePass() instead of assignPassManager() to add new LPPassManager.
This ensures that require analysis info is available. llvm-svn: 34980
This commit is contained in:
parent
ef7ac13406
commit
4a8725cf2f
|
@ -69,12 +69,8 @@ public:
|
|||
bool runOnFunction(Function &F);
|
||||
|
||||
/// Pass Manager itself does not invalidate any analysis info.
|
||||
void getAnalysisUsage(AnalysisUsage &Info) const {
|
||||
// LPPassManager needs LoopInfo. In the long term LoopInfo class will
|
||||
// be consumed by LPPassManager.
|
||||
Info.addRequired<LoopInfo>();
|
||||
Info.setPreservesAll();
|
||||
}
|
||||
// LPPassManager needs LoopInfo.
|
||||
void getAnalysisUsage(AnalysisUsage &Info) const;
|
||||
|
||||
virtual const char *getPassName() const {
|
||||
return "Loop Pass Manager";
|
||||
|
|
|
@ -143,14 +143,22 @@ static void addLoopIntoQueue(Loop *L, std::deque<Loop *> &LQ) {
|
|||
LQ.push_back(L);
|
||||
}
|
||||
|
||||
/// Pass Manager itself does not invalidate any analysis info.
|
||||
void LPPassManager::getAnalysisUsage(AnalysisUsage &Info) const {
|
||||
// LPPassManager needs LoopInfo. In the long term LoopInfo class will
|
||||
// become part of LPPassManager.
|
||||
Info.addRequired<LoopInfo>();
|
||||
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) {
|
||||
LoopInfo &LI = getAnalysis<LoopInfo>();
|
||||
LI = &getAnalysis<LoopInfo>();
|
||||
bool Changed = false;
|
||||
|
||||
// Populate Loop Queue
|
||||
for (LoopInfo::iterator I = LI.begin(), E = LI.end(); I != E; ++I)
|
||||
for (LoopInfo::iterator I = LI->begin(), E = LI->end(); I != E; ++I)
|
||||
addLoopIntoQueue(*I, LQ);
|
||||
|
||||
// Initialization
|
||||
|
@ -279,7 +287,7 @@ void LoopPass::assignPassManager(PMStack &PMS,
|
|||
// [3] Assign manager to manage this new manager. This may create
|
||||
// and push new managers into PMS
|
||||
Pass *P = dynamic_cast<Pass *>(LPPM);
|
||||
P->assignPassManager(PMS);
|
||||
TPM->schedulePass(P);
|
||||
|
||||
// [4] Push new manager into PMS
|
||||
PMS.push(LPPM);
|
||||
|
|
Loading…
Reference in New Issue