diff options
author | Chris Lattner <sabre@nondot.org> | 2010-01-22 05:46:59 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-01-22 05:46:59 +0000 |
commit | 0b1c7235aa954c3bf5d53d72fbd45a5c8847c1b4 (patch) | |
tree | c452d5f5828222737fe59aaffa0f753028810fd8 /llvm/lib | |
parent | 9efd4fcceb95b12cfc59cf1a9df6f4c7a855d040 (diff) | |
download | bcm5719-llvm-0b1c7235aa954c3bf5d53d72fbd45a5c8847c1b4.tar.gz bcm5719-llvm-0b1c7235aa954c3bf5d53d72fbd45a5c8847c1b4.zip |
eliminate dynamic_cast from this file.
llvm-svn: 94157
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp | 37 |
1 files changed, 20 insertions, 17 deletions
diff --git a/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp b/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp index d31d814153b..0e333d17745 100644 --- a/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp +++ b/llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp @@ -93,7 +93,10 @@ char CGPassManager::ID = 0; bool CGPassManager::RunPassOnSCC(Pass *P, std::vector<CallGraphNode*> &CurSCC, CallGraph &CG, bool &CallGraphUpToDate) { bool Changed = false; - if (CallGraphSCCPass *CGSP = dynamic_cast<CallGraphSCCPass*>(P)) { + PMDataManager *PM = P->getAsPMDataManager(); + + if (PM == 0) { + CallGraphSCCPass *CGSP = (CallGraphSCCPass*)P; if (!CallGraphUpToDate) { RefreshCallGraph(CurSCC, CG, false); CallGraphUpToDate = true; @@ -113,8 +116,10 @@ bool CGPassManager::RunPassOnSCC(Pass *P, std::vector<CallGraphNode*> &CurSCC, return Changed; } - FPPassManager *FPP = dynamic_cast<FPPassManager *>(P); - assert(FPP && "Invalid CGPassManager member"); + + assert(PM->getPassManagerType() == PMT_FunctionPassManager && + "Invalid CGPassManager member"); + FPPassManager *FPP = (FPPassManager*)P; // Run pass P on all functions in the current SCC. for (unsigned i = 0, e = CurSCC.size(); i != e; ++i) { @@ -363,14 +368,13 @@ bool CGPassManager::runOnModule(Module &M) { /// Initialize CG bool CGPassManager::doInitialization(CallGraph &CG) { bool Changed = false; - for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { - Pass *P = getContainedPass(Index); - if (CallGraphSCCPass *CGSP = dynamic_cast<CallGraphSCCPass *>(P)) { - Changed |= CGSP->doInitialization(CG); + for (unsigned i = 0, e = getNumContainedPasses(); i != e; ++i) { + if (PMDataManager *PM = getContainedPass(i)->getAsPMDataManager()) { + assert(PM->getPassManagerType() == PMT_FunctionPassManager && + "Invalid CGPassManager member"); + Changed |= ((FPPassManager*)PM)->doInitialization(CG.getModule()); } else { - FPPassManager *FP = dynamic_cast<FPPassManager *>(P); - assert (FP && "Invalid CGPassManager member"); - Changed |= FP->doInitialization(CG.getModule()); + Changed |= ((CallGraphSCCPass*)getContainedPass(i))->doInitialization(CG); } } return Changed; @@ -379,14 +383,13 @@ bool CGPassManager::doInitialization(CallGraph &CG) { /// Finalize CG bool CGPassManager::doFinalization(CallGraph &CG) { bool Changed = false; - for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { - Pass *P = getContainedPass(Index); - if (CallGraphSCCPass *CGSP = dynamic_cast<CallGraphSCCPass *>(P)) { - Changed |= CGSP->doFinalization(CG); + for (unsigned i = 0, e = getNumContainedPasses(); i != e; ++i) { + if (PMDataManager *PM = getContainedPass(i)->getAsPMDataManager()) { + assert(PM->getPassManagerType() == PMT_FunctionPassManager && + "Invalid CGPassManager member"); + Changed |= ((FPPassManager*)PM)->doFinalization(CG.getModule()); } else { - FPPassManager *FP = dynamic_cast<FPPassManager *>(P); - assert (FP && "Invalid CGPassManager member"); - Changed |= FP->doFinalization(CG.getModule()); + Changed |= ((CallGraphSCCPass*)getContainedPass(i))->doFinalization(CG); } } return Changed; |