mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-01 17:32:36 +00:00
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:
parent
591b1b7526
commit
f3dc6d9f95
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user