diff options
author | Chris Lattner <sabre@nondot.org> | 2010-01-22 04:55:08 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2010-01-22 04:55:08 +0000 |
commit | 5e664b8f7c5ba877058a3a1cdfcce8e6b7388a6a (patch) | |
tree | d53bc415ff6069a1b98462e3893f15a4dd0a9401 | |
parent | c589e03865bb31da70e0037d5c32fdaaa5f79f24 (diff) | |
download | llvm-5e664b8f7c5ba877058a3a1cdfcce8e6b7388a6a.tar.gz llvm-5e664b8f7c5ba877058a3a1cdfcce8e6b7388a6a.tar.bz2 llvm-5e664b8f7c5ba877058a3a1cdfcce8e6b7388a6a.tar.xz |
eliminate a bunch of dynamic_cast's.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94154 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/Pass.h | 3 | ||||
-rw-r--r-- | lib/VMCore/PassManager.cpp | 15 |
2 files changed, 9 insertions, 9 deletions
diff --git a/include/llvm/Pass.h b/include/llvm/Pass.h index 8178598985..0a53cbf8d0 100644 --- a/include/llvm/Pass.h +++ b/include/llvm/Pass.h @@ -152,6 +152,7 @@ public: virtual void *getAdjustedAnalysisPointer(const PassInfo *PI) { return this; } + virtual ImmutablePass *getAsImmutablePass() { return 0; } /// verifyAnalysis() - This member can be implemented by a analysis pass to /// check state of analysis information. @@ -249,6 +250,8 @@ public: /// virtual void initializePass(); + virtual ImmutablePass *getAsImmutablePass() { return this; } + /// ImmutablePasses are never run. /// bool runOnModule(Module &) { return false; } diff --git a/lib/VMCore/PassManager.cpp b/lib/VMCore/PassManager.cpp index b37b2aeda8..7aa8cb3b01 100644 --- a/lib/VMCore/PassManager.cpp +++ b/lib/VMCore/PassManager.cpp @@ -202,9 +202,7 @@ public: } inline void addTopLevelPass(Pass *P) { - - if (ImmutablePass *IP = dynamic_cast<ImmutablePass *> (P)) { - + if (ImmutablePass *IP = P->getAsImmutablePass()) { // P is a immutable pass and it will be managed by this // top level manager. Set up analysis resolver to connect them. AnalysisResolver *AR = new AnalysisResolver(*this); @@ -333,8 +331,7 @@ public: } inline void addTopLevelPass(Pass *P) { - if (ImmutablePass *IP = dynamic_cast<ImmutablePass *> (P)) { - + if (ImmutablePass *IP = P->getAsImmutablePass()) { // P is a immutable pass and it will be managed by this // top level manager. Set up analysis resolver to connect them. AnalysisResolver *AR = new AnalysisResolver(*this); @@ -670,7 +667,7 @@ bool PMDataManager::preserveHigherLevelAnalysis(Pass *P) { for (SmallVector<Pass *, 8>::iterator I = HigherLevelAnalysis.begin(), E = HigherLevelAnalysis.end(); I != E; ++I) { Pass *P1 = *I; - if (!dynamic_cast<ImmutablePass*>(P1) && + if (P1->getAsImmutablePass() == 0 && std::find(PreservedSet.begin(), PreservedSet.end(), P1->getPassInfo()) == PreservedSet.end()) @@ -713,8 +710,8 @@ void PMDataManager::removeNotPreservedAnalysis(Pass *P) { for (std::map<AnalysisID, Pass*>::iterator I = AvailableAnalysis.begin(), E = AvailableAnalysis.end(); I != E; ) { std::map<AnalysisID, Pass*>::iterator Info = I++; - if (!dynamic_cast<ImmutablePass*>(Info->second) - && std::find(PreservedSet.begin(), PreservedSet.end(), Info->first) == + if (Info->second->getAsImmutablePass() == 0 && + std::find(PreservedSet.begin(), PreservedSet.end(), Info->first) == PreservedSet.end()) { // Remove this analysis if (PassDebugging >= Details) { @@ -737,7 +734,7 @@ void PMDataManager::removeNotPreservedAnalysis(Pass *P) { I = InheritedAnalysis[Index]->begin(), E = InheritedAnalysis[Index]->end(); I != E; ) { std::map<AnalysisID, Pass *>::iterator Info = I++; - if (!dynamic_cast<ImmutablePass*>(Info->second) && + if (Info->second->getAsImmutablePass() == 0 && std::find(PreservedSet.begin(), PreservedSet.end(), Info->first) == PreservedSet.end()) { // Remove this analysis |