summaryrefslogtreecommitdiffstats
path: root/llvm/lib/VMCore/PassManager.cpp
diff options
context:
space:
mode:
authorDevang Patel <dpatel@apple.com>2007-02-17 03:53:44 +0000
committerDevang Patel <dpatel@apple.com>2007-02-17 03:53:44 +0000
commit98354dabc112f60b47826fce6a957b95c60f1a52 (patch)
treeba82878ef61a4c18ea53905ff7432f1e667e253f /llvm/lib/VMCore/PassManager.cpp
parent100502d256e1c42c9c347635abfe19b964dea2bc (diff)
downloadbcm5719-llvm-98354dabc112f60b47826fce6a957b95c60f1a52.tar.gz
bcm5719-llvm-98354dabc112f60b47826fce6a957b95c60f1a52.zip
Use inverted map to speedup collectLastUses().
llvm-svn: 34364
Diffstat (limited to 'llvm/lib/VMCore/PassManager.cpp')
-rw-r--r--llvm/lib/VMCore/PassManager.cpp20
1 files changed, 16 insertions, 4 deletions
diff --git a/llvm/lib/VMCore/PassManager.cpp b/llvm/lib/VMCore/PassManager.cpp
index bc85967ee1c..6c1f2360d83 100644
--- a/llvm/lib/VMCore/PassManager.cpp
+++ b/llvm/lib/VMCore/PassManager.cpp
@@ -362,13 +362,19 @@ void PMTopLevelManager::setLastUser(std::vector<Pass *> &AnalysisPasses,
}
}
+// Walk LastUser map and create inverted map. This should be done
+// after all passes are added and before running first pass.
+void PMTopLevelManager::collectInvertedLU() {
+ for (std::map<Pass *, Pass *>::iterator LUI = LastUser.begin(),
+ LUE = LastUser.end(); LUI != LUE; ++LUI)
+ InvertedLU[LUI->second].push_back(LUI->first);
+}
+
/// Collect passes whose last user is P
void PMTopLevelManager::collectLastUses(std::vector<Pass *> &LastUses,
Pass *P) {
- for (std::map<Pass *, Pass *>::iterator LUI = LastUser.begin(),
- LUE = LastUser.end(); LUI != LUE; ++LUI)
- if (LUI->second == P)
- LastUses.push_back(LUI->first);
+ std::vector<Pass *>&LU = InvertedLU[P];
+ LastUses.insert(LastUses.end(), LU.begin(), LU.end());
}
/// Schedule pass P for execution. Make sure that passes required by
@@ -938,6 +944,9 @@ bool FunctionPassManagerImpl::run(Function &F) {
dumpArguments();
dumpPasses();
+ // Collect inverted map of LastUsers. This improves speed of
+ // collectLastUses().
+ TPM->collectInvertedLU();
initializeAllAnalysisInfo();
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {
FPPassManager *FP = getContainedManager(Index);
@@ -1086,6 +1095,9 @@ bool PassManagerImpl::run(Module &M) {
dumpArguments();
dumpPasses();
+ // Collect inverted map of LastUsers. This improves speed of
+ // collectLastUses().
+ TPM->collectInvertedLU();
initializeAllAnalysisInfo();
for (unsigned Index = 0; Index < getNumContainedManagers(); ++Index) {
MPPassManager *MP = getContainedManager(Index);
OpenPOWER on IntegriCloud