From d46825c6a1fa903ad8d9ec2d1890535e3afdd8d4 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Thu, 8 Mar 2007 19:05:01 +0000 Subject: [PATCH] Speed Up Pass Manager. - Check Immutableness before searching PreservedSet. - Avoid unnecessary traversal while setting Last User. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35028 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/PassManager.cpp | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp index 60c002cd280..cdeb2564725 100644 --- a/lib/VMCore/PassManager.cpp +++ b/lib/VMCore/PassManager.cpp @@ -353,6 +353,10 @@ void PMTopLevelManager::setLastUser(std::vector &AnalysisPasses, E = AnalysisPasses.end(); I != E; ++I) { Pass *AP = *I; LastUser[AP] = P; + + if (P == AP) + continue; + // If AP is the last user of other passes then make P last user of // such passes. for (std::map::iterator LUI = LastUser.begin(), @@ -546,11 +550,10 @@ bool PMDataManager::preserveHigherLevelAnalysis(Pass *P) { for (std::vector::iterator I = HigherLevelAnalysis.begin(), E = HigherLevelAnalysis.end(); I != E; ++I) { Pass *P1 = *I; - if (std::find(PreservedSet.begin(), PreservedSet.end(), P1->getPassInfo()) == - PreservedSet.end()) { - if (!dynamic_cast(P1)) - return false; - } + if (!dynamic_cast(P1) + && std::find(PreservedSet.begin(), PreservedSet.end(), P1->getPassInfo()) == + PreservedSet.end()) + return false; } return true; @@ -568,12 +571,11 @@ void PMDataManager::removeNotPreservedAnalysis(Pass *P) { for (std::map::iterator I = AvailableAnalysis.begin(), E = AvailableAnalysis.end(); I != E; ) { std::map::iterator Info = I++; - if (std::find(PreservedSet.begin(), PreservedSet.end(), Info->first) == - PreservedSet.end()) { + if (!dynamic_cast(Info->second) + && std::find(PreservedSet.begin(), PreservedSet.end(), Info->first) == + PreservedSet.end()) // Remove this analysis - if (!dynamic_cast(Info->second)) - AvailableAnalysis.erase(Info); - } + AvailableAnalysis.erase(Info); } // Check inherited analysis also. If P is not preserving analysis @@ -587,12 +589,11 @@ void PMDataManager::removeNotPreservedAnalysis(Pass *P) { I = InheritedAnalysis[Index]->begin(), E = InheritedAnalysis[Index]->end(); I != E; ) { std::map::iterator Info = I++; - if (std::find(PreservedSet.begin(), PreservedSet.end(), Info->first) == - PreservedSet.end()) { + if (!dynamic_cast(Info->second) + && std::find(PreservedSet.begin(), PreservedSet.end(), Info->first) == + PreservedSet.end()) // Remove this analysis - if (!dynamic_cast(Info->second)) - InheritedAnalysis[Index]->erase(Info); - } + InheritedAnalysis[Index]->erase(Info); } }