From 0dabb7e8f3e371cf0d6a9747b5bd4b555cc32c95 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 8 Aug 2008 15:14:09 +0000 Subject: [PATCH] Don't call getAnalysisUsage unless -debug-pass is enabled. This speeds up the passmgr by avoiding useless work. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54528 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/PassManagers.h | 7 +++- lib/Analysis/IPA/CallGraphSCCPass.cpp | 6 +-- lib/Analysis/LoopPass.cpp | 6 +-- lib/VMCore/PassManager.cpp | 59 ++++++++++++++++----------- 4 files changed, 45 insertions(+), 33 deletions(-) diff --git a/include/llvm/PassManagers.h b/include/llvm/PassManagers.h index c9944b5c87f..5d90a229202 100644 --- a/include/llvm/PassManagers.h +++ b/include/llvm/PassManagers.h @@ -308,8 +308,8 @@ public: void dumpPassArguments() const; void dumpPassInfo(Pass *P, enum PassDebuggingString S1, enum PassDebuggingString S2, const char *Msg); - void dumpAnalysisSetInfo(const char *Msg, Pass *P, - const AnalysisUsage::VectorType &Set) const; + void dumpRequiredSet(const Pass *P) const; + void dumpPreservedSet(const Pass *P) const; virtual unsigned getNumContainedPasses() const { return (unsigned)PassVector.size(); @@ -346,6 +346,9 @@ protected: std::map *InheritedAnalysis[PMT_Last]; private: + void dumpAnalysisUsage(const char *Msg, const Pass *P, + const AnalysisUsage::VectorType &Set) const; + // Set of available Analysis. This information is used while scheduling // pass. If a pass requires an analysis which is not not available then // equired analysis pass is scheduled to run before the pass itself is diff --git a/lib/Analysis/IPA/CallGraphSCCPass.cpp b/lib/Analysis/IPA/CallGraphSCCPass.cpp index 112f9c2e5df..4a0e4cfe057 100644 --- a/lib/Analysis/IPA/CallGraphSCCPass.cpp +++ b/lib/Analysis/IPA/CallGraphSCCPass.cpp @@ -91,11 +91,9 @@ bool CGPassManager::runOnModule(Module &M) { // Run all passes on current SCC for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { Pass *P = getContainedPass(Index); - AnalysisUsage AnUsage; - P->getAnalysisUsage(AnUsage); dumpPassInfo(P, EXECUTION_MSG, ON_CG_MSG, ""); - dumpAnalysisSetInfo("Required", P, AnUsage.getRequiredSet()); + dumpRequiredSet(P); initializeAnalysisImpl(P); @@ -120,7 +118,7 @@ bool CGPassManager::runOnModule(Module &M) { if (Changed) dumpPassInfo(P, MODIFICATION_MSG, ON_CG_MSG, ""); - dumpAnalysisSetInfo("Preserved", P, AnUsage.getPreservedSet()); + dumpPreservedSet(P); verifyPreservedAnalysis(P); removeNotPreservedAnalysis(P); diff --git a/lib/Analysis/LoopPass.cpp b/lib/Analysis/LoopPass.cpp index 460a1b04f70..b9e5f99f07c 100644 --- a/lib/Analysis/LoopPass.cpp +++ b/lib/Analysis/LoopPass.cpp @@ -214,11 +214,9 @@ bool LPPassManager::runOnFunction(Function &F) { for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { Pass *P = getContainedPass(Index); - AnalysisUsage AnUsage; - P->getAnalysisUsage(AnUsage); dumpPassInfo(P, EXECUTION_MSG, ON_LOOP_MSG, ""); - dumpAnalysisSetInfo("Required", P, AnUsage.getRequiredSet()); + dumpRequiredSet(P); initializeAnalysisImpl(P); @@ -230,7 +228,7 @@ bool LPPassManager::runOnFunction(Function &F) { if (Changed) dumpPassInfo(P, MODIFICATION_MSG, ON_LOOP_MSG, ""); - dumpAnalysisSetInfo("Preserved", P, AnUsage.getPreservedSet()); + dumpPreservedSet(P); verifyPreservedAnalysis(LP); removeNotPreservedAnalysis(P); diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp index e48ea81ea03..fc3621a7345 100644 --- a/lib/VMCore/PassManager.cpp +++ b/lib/VMCore/PassManager.cpp @@ -954,17 +954,38 @@ void PMDataManager::dumpPassInfo(Pass *P, enum PassDebuggingString S1, } } -void PMDataManager::dumpAnalysisSetInfo(const char *Msg, Pass *P, +void PMDataManager::dumpRequiredSet(const Pass *P) + const { + if (PassDebugging < Details) + return; + + AnalysisUsage analysisUsage; + P->getAnalysisUsage(analysisUsage); + dumpAnalysisUsage("Required", P, analysisUsage.getRequiredSet()); +} + +void PMDataManager::dumpPreservedSet(const Pass *P) + const { + if (PassDebugging < Details) + return; + + AnalysisUsage analysisUsage; + P->getAnalysisUsage(analysisUsage); + dumpAnalysisUsage("Preserved", P, analysisUsage.getPreservedSet()); +} + +void PMDataManager::dumpAnalysisUsage(const char *Msg, const Pass *P, const AnalysisUsage::VectorType &Set) const { - if (PassDebugging >= Details && !Set.empty()) { - cerr << (void*)P << std::string(getDepth()*2+3, ' ') << Msg << " Analyses:"; - for (unsigned i = 0; i != Set.size(); ++i) { - if (i) cerr << ","; - cerr << " " << Set[i]->getPassName(); - } - cerr << "\n"; - } + assert(PassDebugging >= Details); + if (Set.empty()) + return; + cerr << (void*)P << std::string(getDepth()*2+3, ' ') << Msg << " Analyses:"; + for (unsigned i = 0; i != Set.size(); ++i) { + if (i) cerr << ","; + cerr << " " << Set[i]->getPassName(); + } + cerr << "\n"; } /// Add RequiredPass into list of lower level passes required by pass P. @@ -1031,11 +1052,9 @@ BBPassManager::runOnFunction(Function &F) { for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { BasicBlockPass *BP = getContainedPass(Index); - AnalysisUsage AnUsage; - BP->getAnalysisUsage(AnUsage); dumpPassInfo(BP, EXECUTION_MSG, ON_BASICBLOCK_MSG, I->getNameStart()); - dumpAnalysisSetInfo("Required", BP, AnUsage.getRequiredSet()); + dumpRequiredSet(BP); initializeAnalysisImpl(BP); @@ -1046,7 +1065,7 @@ BBPassManager::runOnFunction(Function &F) { if (Changed) dumpPassInfo(BP, MODIFICATION_MSG, ON_BASICBLOCK_MSG, I->getNameStart()); - dumpAnalysisSetInfo("Preserved", BP, AnUsage.getPreservedSet()); + dumpPreservedSet(BP); verifyPreservedAnalysis(BP); removeNotPreservedAnalysis(BP); @@ -1232,11 +1251,8 @@ bool FPPassManager::runOnFunction(Function &F) { for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { FunctionPass *FP = getContainedPass(Index); - AnalysisUsage AnUsage; - FP->getAnalysisUsage(AnUsage); - dumpPassInfo(FP, EXECUTION_MSG, ON_FUNCTION_MSG, F.getNameStart()); - dumpAnalysisSetInfo("Required", FP, AnUsage.getRequiredSet()); + dumpRequiredSet(FP); initializeAnalysisImpl(FP); @@ -1246,7 +1262,7 @@ bool FPPassManager::runOnFunction(Function &F) { if (Changed) dumpPassInfo(FP, MODIFICATION_MSG, ON_FUNCTION_MSG, F.getNameStart()); - dumpAnalysisSetInfo("Preserved", FP, AnUsage.getPreservedSet()); + dumpPreservedSet(FP); verifyPreservedAnalysis(FP); removeNotPreservedAnalysis(FP); @@ -1304,12 +1320,9 @@ MPPassManager::runOnModule(Module &M) { for (unsigned Index = 0; Index < getNumContainedPasses(); ++Index) { ModulePass *MP = getContainedPass(Index); - AnalysisUsage AnUsage; - MP->getAnalysisUsage(AnUsage); - dumpPassInfo(MP, EXECUTION_MSG, ON_MODULE_MSG, M.getModuleIdentifier().c_str()); - dumpAnalysisSetInfo("Required", MP, AnUsage.getRequiredSet()); + dumpRequiredSet(MP); initializeAnalysisImpl(MP); @@ -1320,7 +1333,7 @@ MPPassManager::runOnModule(Module &M) { if (Changed) dumpPassInfo(MP, MODIFICATION_MSG, ON_MODULE_MSG, M.getModuleIdentifier().c_str()); - dumpAnalysisSetInfo("Preserved", MP, AnUsage.getPreservedSet()); + dumpPreservedSet(MP); verifyPreservedAnalysis(MP); removeNotPreservedAnalysis(MP); -- 2.34.1