cleanups, factor some code out to a helper function

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80542 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-08-31 06:01:21 +00:00
parent 46ca76f6bb
commit f3a1c15b75

View File

@ -31,7 +31,6 @@ using namespace llvm;
namespace { namespace {
class CGPassManager : public ModulePass, public PMDataManager { class CGPassManager : public ModulePass, public PMDataManager {
public: public:
static char ID; static char ID;
explicit CGPassManager(int Depth) explicit CGPassManager(int Depth)
@ -73,11 +72,41 @@ public:
virtual PassManagerType getPassManagerType() const { virtual PassManagerType getPassManagerType() const {
return PMT_CallGraphPassManager; return PMT_CallGraphPassManager;
} }
private:
bool RunPassOnSCC(Pass *P, std::vector<CallGraphNode*> &CurSCC);
}; };
} } // end anonymous namespace.
char CGPassManager::ID = 0; char CGPassManager::ID = 0;
bool CGPassManager::RunPassOnSCC(Pass *P, std::vector<CallGraphNode*> &CurSCC) {
bool Changed = false;
if (CallGraphSCCPass *CGSP = dynamic_cast<CallGraphSCCPass*>(P)) {
StartPassTimer(P);
Changed = CGSP->runOnSCC(CurSCC);
StopPassTimer(P);
return Changed;
}
StartPassTimer(P);
FPPassManager *FPP = dynamic_cast<FPPassManager *>(P);
assert(FPP && "Invalid CGPassManager member");
// Run pass P on all functions in the current SCC.
for (unsigned i = 0, e = CurSCC.size(); i != e; ++i) {
if (Function *F = CurSCC[i]->getFunction()) {
dumpPassInfo(P, EXECUTION_MSG, ON_FUNCTION_MSG, F->getName());
Changed |= FPP->runOnFunction(*F);
}
}
StopPassTimer(P);
return Changed;
}
/// 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 module, and if so, return true. /// whether any of the passes modifies the module, and if so, return true.
bool CGPassManager::runOnModule(Module &M) { bool CGPassManager::runOnModule(Module &M) {
@ -86,7 +115,7 @@ bool CGPassManager::runOnModule(Module &M) {
std::vector<CallGraphNode*> CurSCC; std::vector<CallGraphNode*> CurSCC;
// Walk SCC // Walk the callgraph in bottom-up SCC order.
for (scc_iterator<CallGraph*> CGI = scc_begin(&CG), E = scc_end(&CG); for (scc_iterator<CallGraph*> CGI = scc_begin(&CG), E = scc_end(&CG);
CGI != E;) { CGI != E;) {
// Copy the current SCC and increment past it so that the pass can hack // Copy the current SCC and increment past it so that the pass can hack
@ -94,31 +123,19 @@ bool CGPassManager::runOnModule(Module &M) {
CurSCC = *CGI; CurSCC = *CGI;
++CGI; ++CGI;
// Run all passes on current SCC
for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { // Run all passes on current SCC.
Pass *P = getContainedPass(Index); for (unsigned PassNo = 0, e = getNumContainedPasses();
PassNo != e; ++PassNo) {
Pass *P = getContainedPass(PassNo);
dumpPassInfo(P, EXECUTION_MSG, ON_CG_MSG, ""); dumpPassInfo(P, EXECUTION_MSG, ON_CG_MSG, "");
dumpRequiredSet(P); dumpRequiredSet(P);
initializeAnalysisImpl(P); initializeAnalysisImpl(P);
StartPassTimer(P); // Actually run this pass on the current SCC.
if (CallGraphSCCPass *CGSP = dynamic_cast<CallGraphSCCPass *>(P)) Changed |= RunPassOnSCC(P, CurSCC);
Changed |= CGSP->runOnSCC(CurSCC);
else {
FPPassManager *FPP = dynamic_cast<FPPassManager *>(P);
assert (FPP && "Invalid CGPassManager member");
// Run pass P on all functions current SCC
for (unsigned i = 0, e = CurSCC.size(); i != e; ++i) {
if (Function *F = CurSCC[i]->getFunction()) {
dumpPassInfo(P, EXECUTION_MSG, ON_FUNCTION_MSG, F->getName());
Changed |= FPP->runOnFunction(*F);
}
}
}
StopPassTimer(P);
if (Changed) if (Changed)
dumpPassInfo(P, MODIFICATION_MSG, ON_CG_MSG, ""); dumpPassInfo(P, MODIFICATION_MSG, ON_CG_MSG, "");