forked from OSchip/llvm-project
LPPassManager : Add initialization and finalizatino hooks.
llvm-svn: 34968
This commit is contained in:
parent
8b8cac289b
commit
84ffc223f1
|
@ -36,6 +36,15 @@ class LoopPass : public Pass {
|
|||
return false;
|
||||
}
|
||||
|
||||
// Initialization and finalization hooks.
|
||||
virtual bool doInitialization(Loop *L, LPPassManager &LPM) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Finalization hook does not supply Loop because at this time
|
||||
// loop nest is completely different.
|
||||
virtual bool doFinalization() { return false; }
|
||||
|
||||
/// Assign pass manager to manager this pass
|
||||
virtual void assignPassManager(PMStack &PMS,
|
||||
PassManagerType PMT = PMT_LoopPassManager);
|
||||
|
|
|
@ -57,6 +57,18 @@ bool LPPassManager::runOnFunction(Function &F) {
|
|||
for (LoopInfo::iterator I = LI.begin(), E = LI.end(); I != E; ++I)
|
||||
addLoopIntoQueue(*I, LQ);
|
||||
|
||||
// Initialization
|
||||
for (std::deque<Loop *>::const_iterator I = LQ.begin(), E = LQ.end();
|
||||
I != E; ++I) {
|
||||
Loop *L = *I;
|
||||
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
|
||||
Pass *P = getContainedPass(Index);
|
||||
LoopPass *LP = dynamic_cast<LoopPass *>(P);
|
||||
if (LP)
|
||||
Changed |= LP->doInitialization(L, *this);
|
||||
}
|
||||
}
|
||||
|
||||
// Walk Loops
|
||||
while (!LQ.empty()) {
|
||||
|
||||
|
@ -101,6 +113,14 @@ bool LPPassManager::runOnFunction(Function &F) {
|
|||
if (redoThisLoop)
|
||||
LQ.push_back(L);
|
||||
}
|
||||
|
||||
// Finalization
|
||||
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) {
|
||||
Pass *P = getContainedPass(Index);
|
||||
LoopPass *LP = dynamic_cast <LoopPass *>(P);
|
||||
if (LP)
|
||||
Changed |= LP->doFinalization();
|
||||
}
|
||||
|
||||
return Changed;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue