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);
|
bool runOnFunction(Function &F);
|
||||||
|
|
||||||
/// Pass Manager itself does not invalidate any analysis info.
|
/// Pass Manager itself does not invalidate any analysis info.
|
||||||
void getAnalysisUsage(AnalysisUsage &Info) const {
|
// LPPassManager needs LoopInfo.
|
||||||
// LPPassManager needs LoopInfo. In the long term LoopInfo class will
|
void getAnalysisUsage(AnalysisUsage &Info) const;
|
||||||
// be consumed by LPPassManager.
|
|
||||||
Info.addRequired<LoopInfo>();
|
|
||||||
Info.setPreservesAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual const char *getPassName() const {
|
virtual const char *getPassName() const {
|
||||||
return "Loop Pass Manager";
|
return "Loop Pass Manager";
|
||||||
|
|
|
@ -143,14 +143,22 @@ static void addLoopIntoQueue(Loop *L, std::deque<Loop *> &LQ) {
|
||||||
LQ.push_back(L);
|
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
|
/// 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.
|
/// whether any of the passes modifies the function, and if so, return true.
|
||||||
bool LPPassManager::runOnFunction(Function &F) {
|
bool LPPassManager::runOnFunction(Function &F) {
|
||||||
LoopInfo &LI = getAnalysis<LoopInfo>();
|
LI = &getAnalysis<LoopInfo>();
|
||||||
bool Changed = false;
|
bool Changed = false;
|
||||||
|
|
||||||
// Populate Loop Queue
|
// 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);
|
addLoopIntoQueue(*I, LQ);
|
||||||
|
|
||||||
// Initialization
|
// Initialization
|
||||||
|
@ -279,7 +287,7 @@ void LoopPass::assignPassManager(PMStack &PMS,
|
||||||
// [3] Assign manager to manage this new manager. This may create
|
// [3] Assign manager to manage this new manager. This may create
|
||||||
// and push new managers into PMS
|
// and push new managers into PMS
|
||||||
Pass *P = dynamic_cast<Pass *>(LPPM);
|
Pass *P = dynamic_cast<Pass *>(LPPM);
|
||||||
P->assignPassManager(PMS);
|
TPM->schedulePass(P);
|
||||||
|
|
||||||
// [4] Push new manager into PMS
|
// [4] Push new manager into PMS
|
||||||
PMS.push(LPPM);
|
PMS.push(LPPM);
|
||||||
|
|
Loading…
Reference in New Issue