Add AnalysisResolver_New. It is a replacement for existing

AnalysisResolver.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32383 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Devang Patel 2006-12-08 23:28:54 +00:00
parent 591b1b7526
commit f3dc6d9f95
2 changed files with 52 additions and 0 deletions

View File

@ -100,7 +100,51 @@ public:
const std::vector<AnalysisID> &getPreservedSet() const { return Preserved; }
};
//===----------------------------------------------------------------------===//
// AnalysisResolver - Simple interface used by Pass objects to pull all
// analysis information out of pass manager that is responsible to manage
// the pass.
//
class PMDataManager;
class AnalysisResolver_New {
private:
AnalysisResolver_New(); // DO NOT IMPLEMENT
public:
AnalysisResolver_New(PMDataManager &P) : PM(P) { }
inline PMDataManager &getPMDataManager() { return PM; }
// Find pass that is implementing PI.
Pass *findImplPass(const PassInfo *PI) {
Pass *ResultPass = 0;
for (unsigned i = 0; i < AnalysisImpls.size() ; ++i) {
if (AnalysisImpls[i].first == PI) {
ResultPass = AnalysisImpls[i].second;
break;
}
}
return ResultPass;
}
void addAnalysisImplsPair(const PassInfo *PI, Pass *P) {
std::pair<const PassInfo*, Pass*> pir = std::make_pair(PI,P);
AnalysisImpls.push_back(pir);
}
// getAnalysisToUpdate - Return an analysis result or null if it doesn't exist
Pass *getAnalysisToUpdate(AnalysisID ID, bool Direction) const;
// AnalysisImpls - This keeps track of which passes implements the interfaces
// that are required by the current pass (to implement getAnalysis()).
// NOTE : Remove AnalysisImpls from class Pass, when AnalysisResolver_New
// replaces AnalysisResolver
std::vector<std::pair<const PassInfo*, Pass*> > AnalysisImpls;
private:
// PassManager that is used to resolve analysis info
PMDataManager &PM;
};
//===----------------------------------------------------------------------===//
// AnalysisResolver - Simple interface implemented by PassManager objects that

View File

@ -675,6 +675,14 @@ Pass *PMDataManager::findAnalysisPass(AnalysisID AID, bool SearchParent) {
return P;
}
//===----------------------------------------------------------------------===//
// NOTE: Is this the right place to define this method ?
// getAnalysisToUpdate - Return an analysis result or null if it doesn't exist
Pass *AnalysisResolver_New::getAnalysisToUpdate(AnalysisID ID, bool dir) const {
return PM.findAnalysisPass(ID, dir);
}
//===----------------------------------------------------------------------===//
// BasicBlockPassManager_New implementation