[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.24 -> 1.25 --- Log message: CallGraphSCCPass manager may require other passes. Use schedulePass() to accomodate these requirement instead of directly assigning a manager to new CallGraph PassManager. --- Diffs of the changes: (+1 -1) CallGraphSCCPass.cpp |2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.24 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.25 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.24 Wed May 2 20:11:53 2007 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Thu Jun 21 17:29:02 2007 @@ -178,7 +178,7 @@ // [3] Assign manager to manage this new manager. This may create // and push new managers into PMS Pass *P = dynamic_cast(CGP); -P->assignPassManager(PMS); +TPM->schedulePass(P); // [4] Push new manager into PMS PMS.push(CGP); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.20 -> 1.21 --- Log message: Removed tabs everywhere except autogenerated & external files. Add make target for tabs checking. --- Diffs of the changes: (+11 -12) CallGraphSCCPass.cpp | 23 +++ 1 files changed, 11 insertions(+), 12 deletions(-) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.20 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.21 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.20 Mon Mar 5 14:01:30 2007 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Mon Apr 16 13:10:22 2007 @@ -82,8 +82,7 @@ I != E; ++I) { // Run all passes on current SCC -for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { - +for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { Pass *P = getContainedPass(Index); AnalysisUsage AnUsage; P->getAnalysisUsage(AnUsage); @@ -95,20 +94,20 @@ StartPassTimer(P); if (CallGraphSCCPass *CGSP = dynamic_cast(P)) - Changed |= CGSP->runOnSCC(*I); // TODO : What if CG is changed ? +Changed |= CGSP->runOnSCC(*I); // TODO : What if CG is changed ? else { - FPPassManager *FPP = dynamic_cast(P); - assert (FPP && "Invalid CGPassManager member"); +FPPassManager *FPP = dynamic_cast(P); +assert (FPP && "Invalid CGPassManager member"); - // Run pass P on all functions current SCC - std::vector &SCC = *I; - for (unsigned i = 0, e = SCC.size(); i != e; ++i) { - Function *F = SCC[i]->getFunction(); - if (F) { +// Run pass P on all functions current SCC +std::vector &SCC = *I; +for (unsigned i = 0, e = SCC.size(); i != e; ++i) { + Function *F = SCC[i]->getFunction(); + if (F) { dumpPassInfo(P, EXECUTION_MSG, ON_FUNCTION_MSG, F->getName()); Changed |= FPP->runOnFunction(*F); } - } +} } StopPassTimer(P); @@ -149,7 +148,7 @@ /// Assign pass manager to manage this pass. void CallGraphSCCPass::assignPassManager(PMStack &PMS, -PassManagerType PreferredType) { + PassManagerType PreferredType) { // Find CGPassManager while (!PMS.empty()) { if (PMS.top()->getPassManagerType() > PMT_CallGraphPassManager) ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.19 -> 1.20 --- Log message: Avoid constructing std::strings unless pass debugging is ON. --- Diffs of the changes: (+5 -10) CallGraphSCCPass.cpp | 15 +-- 1 files changed, 5 insertions(+), 10 deletions(-) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.19 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.20 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.19 Tue Feb 27 09:00:39 2007 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Mon Mar 5 14:01:30 2007 @@ -77,9 +77,6 @@ CallGraph &CG = getAnalysis(); bool Changed = doInitialization(CG); - std::string Msg1 = "Executing Pass '"; - std::string Msg3 = "' Made Modification '"; - // Walk SCC for (scc_iterator I = scc_begin(&CG), E = scc_end(&CG); I != E; ++I) { @@ -91,8 +88,7 @@ AnalysisUsage AnUsage; P->getAnalysisUsage(AnUsage); - std::string Msg2 = "' on Call Graph ...\n'"; - dumpPassInfo(P, Msg1, Msg2); + dumpPassInfo(P, EXECUTION_MSG, ON_CG_MSG, ""); dumpAnalysisSetInfo("Required", P, AnUsage.getRequiredSet()); initializeAnalysisImpl(P); @@ -109,21 +105,20 @@ for (unsigned i = 0, e = SCC.size(); i != e; ++i) { Function *F = SCC[i]->getFunction(); if (F) { -std::string Msg4 = "' on Function '" + F->getName() + "'...\n"; -dumpPassInfo(P, Msg1, Msg4); - Changed |= FPP->runOnFunction(*F); +dumpPassInfo(P, EXECUTION_MSG, ON_FUNCTION_MSG, F->getName()); +Changed |= FPP->runOnFunction(*F); } } } StopPassTimer(P); if (Changed) - dumpPassInfo(P, Msg3, Msg2); +dumpPassInfo(P, MODIFICATION_MSG, ON_CG_MSG, ""); dumpAnalysisSetInfo("Preserved", P, AnUsage.getPreservedSet()); removeNotPreservedAnalysis(P); recordAvailableAnalysis(P); - removeDeadPasses(P, Msg2); + removeDeadPasses(P, "", ON_CG_MSG); } } Changed |= doFinalization(CG); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.18 -> 1.19 --- Log message: Make getPassManagerType() const. --- Diffs of the changes: (+1 -1) CallGraphSCCPass.cpp |2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.18 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.19 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.18 Thu Feb 1 16:38:33 2007 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Tue Feb 27 09:00:39 2007 @@ -66,7 +66,7 @@ return FP; } - virtual PassManagerType getPassManagerType() { + virtual PassManagerType getPassManagerType() const { return PMT_CallGraphPassManager; } }; ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.17 -> 1.18 --- Log message: Dump function names when debug-pass=Executions is used. --- Diffs of the changes: (+5 -1) CallGraphSCCPass.cpp |6 +- 1 files changed, 5 insertions(+), 1 deletion(-) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.17 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.18 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.17 Thu Feb 1 16:09:37 2007 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Thu Feb 1 16:38:33 2007 @@ -19,6 +19,7 @@ #include "llvm/Analysis/CallGraph.h" #include "llvm/ADT/SCCIterator.h" #include "llvm/PassManagers.h" +#include "llvm/Function.h" using namespace llvm; //===--===// @@ -107,8 +108,11 @@ std::vector &SCC = *I; for (unsigned i = 0, e = SCC.size(); i != e; ++i) { Function *F = SCC[i]->getFunction(); - if (F) + if (F) { +std::string Msg4 = "' on Function '" + F->getName() + "'...\n"; +dumpPassInfo(P, Msg1, Msg4); Changed |= FPP->runOnFunction(*F); + } } } StopPassTimer(P); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.16 -> 1.17 --- Log message: Pretty print pass manager --- Diffs of the changes: (+4 -0) CallGraphSCCPass.cpp |4 1 files changed, 4 insertions(+) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.16 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.17 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.16 Mon Jan 29 17:29:54 2007 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Thu Feb 1 16:09:37 2007 @@ -45,6 +45,10 @@ Info.setPreservesAll(); } + virtual const char *getPassName() const { +return "CallGraph Pass Manager"; + } + // Print passes managed by this manager void dumpPassStructure(unsigned Offset) { llvm::cerr << std::string(Offset*2, ' ') << "Call Graph SCC Pass Manager\n"; ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.15 -> 1.16 --- Log message: Use StartPassTimer() and StopPassManager() --- Diffs of the changes: (+2 -3) CallGraphSCCPass.cpp |5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.15 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.16 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.15 Mon Jan 29 14:08:03 2007 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Mon Jan 29 17:29:54 2007 @@ -92,8 +92,7 @@ initializeAnalysisImpl(P); - TimingInfo *TheTimeInfo = llvm::getTheTimeInfo(); - if (TheTimeInfo) TheTimeInfo->passStarted(P); + StartPassTimer(P); if (CallGraphSCCPass *CGSP = dynamic_cast(P)) Changed |= CGSP->runOnSCC(*I); // TODO : What if CG is changed ? else { @@ -108,7 +107,7 @@ Changed |= FPP->runOnFunction(*F); } } - if (TheTimeInfo) TheTimeInfo->passEnded(P); + StopPassTimer(P); if (Changed) dumpPassInfo(P, Msg3, Msg2); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.14 -> 1.15 --- Log message: Measure timings. --- Diffs of the changes: (+3 -2) CallGraphSCCPass.cpp |5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.14 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.15 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.14 Thu Jan 25 19:08:18 2007 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Mon Jan 29 14:08:03 2007 @@ -92,7 +92,8 @@ initializeAnalysisImpl(P); - //if (TheTimeInfo) TheTimeInfo->passStarted(P); + TimingInfo *TheTimeInfo = llvm::getTheTimeInfo(); + if (TheTimeInfo) TheTimeInfo->passStarted(P); if (CallGraphSCCPass *CGSP = dynamic_cast(P)) Changed |= CGSP->runOnSCC(*I); // TODO : What if CG is changed ? else { @@ -107,7 +108,7 @@ Changed |= FPP->runOnFunction(*F); } } - //if (TheTimeInfo) TheTimeInfo->passEnded(MP); + if (TheTimeInfo) TheTimeInfo->passEnded(P); if (Changed) dumpPassInfo(P, Msg3, Msg2); ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.13 -> 1.14 --- Log message: Remove dead code. CallGraphSCCPass does not need to implement runOnModule(). It supports runOnSCC(). --- Diffs of the changes: (+0 -9) CallGraphSCCPass.cpp |9 - 1 files changed, 9 deletions(-) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.13 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.14 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.13 Tue Jan 23 15:55:17 2007 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Thu Jan 25 19:08:18 2007 @@ -189,12 +189,3 @@ AU.addRequired(); AU.addPreserved(); } - -bool CallGraphSCCPass::runOnModule(Module &M) { - CallGraph &CG = getAnalysis(); - bool Changed = doInitialization(CG); - for (scc_iterator I = scc_begin(&CG), E = scc_end(&CG); - I != E; ++I) -Changed = runOnSCC(*I); - return Changed | doFinalization(CG); -} ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.12 -> 1.13 --- Log message: Fix typo. --- Diffs of the changes: (+1 -1) CallGraphSCCPass.cpp |2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.12 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.13 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.12 Tue Jan 23 15:52:35 2007 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Tue Jan 23 15:55:17 2007 @@ -144,7 +144,7 @@ return Changed; } -/// Assign pass manager to manager this pass +/// Assign pass manager to manage this pass. void CallGraphSCCPass::assignPassManager(PMStack &PMS, PassManagerType PreferredType) { // Find CGPassManager ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.11 -> 1.12 --- Log message: Add CallGraphSCCPass::assignPassManager(). This enables CalLGraphPassManager. --- Diffs of the changes: (+38 -0) CallGraphSCCPass.cpp | 38 ++ 1 files changed, 38 insertions(+) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.11 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.12 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.11 Wed Jan 17 15:45:01 2007 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Tue Jan 23 15:52:35 2007 @@ -144,6 +144,44 @@ return Changed; } +/// Assign pass manager to manager this pass +void CallGraphSCCPass::assignPassManager(PMStack &PMS, +PassManagerType PreferredType) { + // Find CGPassManager + while (!PMS.empty()) { +if (PMS.top()->getPassManagerType() > PMT_CallGraphPassManager) + PMS.pop(); +else; +break; + } + + CGPassManager *CGP = dynamic_cast(PMS.top()); + + // Create new Call Graph SCC Pass Manager if it does not exist. + if (!CGP) { + +assert (!PMS.empty() && "Unable to create Call Graph Pass Manager"); +PMDataManager *PMD = PMS.top(); + +// [1] Create new Call Graph Pass Manager +CGP = new CGPassManager(PMD->getDepth() + 1); + +// [2] Set up new manager's top level manager +PMTopLevelManager *TPM = PMD->getTopLevelManager(); +TPM->addIndirectPassManager(CGP); + +// [3] Assign manager to manage this new manager. This may create +// and push new managers into PMS +Pass *P = dynamic_cast(CGP); +P->assignPassManager(PMS); + +// [4] Push new manager into PMS +PMS.push(CGP); + } + + CGP->add(this); +} + /// getAnalysisUsage - For this class, we declare that we require and preserve /// the call graph. If the derived class implements this method, it should /// always explicitly call the implementation here. ___ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
[llvm-commits] CVS: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp
Changes in directory llvm/lib/Analysis/IPA: CallGraphSCCPass.cpp updated: 1.10 -> 1.11 --- Log message: Add CGPassManager. --- Diffs of the changes: (+124 -0) CallGraphSCCPass.cpp | 124 +++ 1 files changed, 124 insertions(+) Index: llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp diff -u llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.10 llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.11 --- llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp:1.10 Thu Apr 21 16:08:44 2005 +++ llvm/lib/Analysis/IPA/CallGraphSCCPass.cpp Wed Jan 17 15:45:01 2007 @@ -18,8 +18,132 @@ #include "llvm/CallGraphSCCPass.h" #include "llvm/Analysis/CallGraph.h" #include "llvm/ADT/SCCIterator.h" +#include "llvm/PassManagers.h" using namespace llvm; +//===--===// +// CGPassManager +// +/// CGPassManager manages FPPassManagers and CalLGraphSCCPasses. + +class CGPassManager : public ModulePass, public PMDataManager { + +public: + CGPassManager(int Depth) : PMDataManager(Depth) { } + + /// 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. + bool runOnModule(Module &M); + + bool doInitialization(CallGraph &CG); + bool doFinalization(CallGraph &CG); + + /// Pass Manager itself does not invalidate any analysis info. + void getAnalysisUsage(AnalysisUsage &Info) const { +// CGPassManager walks SCC and it needs CallGraph. +Info.addRequired(); +Info.setPreservesAll(); + } + + // Print passes managed by this manager + void dumpPassStructure(unsigned Offset) { +llvm::cerr << std::string(Offset*2, ' ') << "Call Graph SCC Pass Manager\n"; +for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { + Pass *P = getContainedPass(Index); + P->dumpPassStructure(Offset + 1); + dumpLastUses(P, Offset+1); +} + } + + Pass *getContainedPass(unsigned N) { +assert ( N < PassVector.size() && "Pass number out of range!"); +Pass *FP = static_cast(PassVector[N]); +return FP; + } + + virtual PassManagerType getPassManagerType() { +return PMT_CallGraphPassManager; + } +}; + +/// 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. +bool CGPassManager::runOnModule(Module &M) { + CallGraph &CG = getAnalysis(); + bool Changed = doInitialization(CG); + + std::string Msg1 = "Executing Pass '"; + std::string Msg3 = "' Made Modification '"; + + // Walk SCC + for (scc_iterator I = scc_begin(&CG), E = scc_end(&CG); + I != E; ++I) { + +// Run all passes on current SCC +for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { + + Pass *P = getContainedPass(Index); + AnalysisUsage AnUsage; + P->getAnalysisUsage(AnUsage); + + std::string Msg2 = "' on Call Graph ...\n'"; + dumpPassInfo(P, Msg1, Msg2); + dumpAnalysisSetInfo("Required", P, AnUsage.getRequiredSet()); + + initializeAnalysisImpl(P); + + //if (TheTimeInfo) TheTimeInfo->passStarted(P); + if (CallGraphSCCPass *CGSP = dynamic_cast(P)) + Changed |= CGSP->runOnSCC(*I); // TODO : What if CG is changed ? + else { + FPPassManager *FPP = dynamic_cast(P); + assert (FPP && "Invalid CGPassManager member"); + + // Run pass P on all functions current SCC + std::vector &SCC = *I; + for (unsigned i = 0, e = SCC.size(); i != e; ++i) { + Function *F = SCC[i]->getFunction(); + if (F) + Changed |= FPP->runOnFunction(*F); + } + } + //if (TheTimeInfo) TheTimeInfo->passEnded(MP); + + if (Changed) + dumpPassInfo(P, Msg3, Msg2); + dumpAnalysisSetInfo("Preserved", P, AnUsage.getPreservedSet()); + + removeNotPreservedAnalysis(P); + recordAvailableAnalysis(P); + removeDeadPasses(P, Msg2); +} + } + Changed |= doFinalization(CG); + return Changed; +} + +/// 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(P)) + Changed |= CGSP->doInitialization(CG); + } + return Changed; +} + +/// 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(P)) + Changed |= CGSP->doFinalization(CG); + } + return Changed; +} + /// getAnalysisUsage - For this class, we declare that we require and preserve /// the call graph. If the derived class implements this method, it should /// always explicitly call the implementation here. _