Add AnalysisResolver_New. It is a replacement for existing
authorDevang Patel <dpatel@apple.com>
Fri, 8 Dec 2006 23:28:54 +0000 (23:28 +0000)
committerDevang Patel <dpatel@apple.com>
Fri, 8 Dec 2006 23:28:54 +0000 (23:28 +0000)
AnalysisResolver.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@32383 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/PassAnalysisSupport.h
lib/VMCore/PassManager.cpp

index 892d203ba3ac980c58936aa1e0b68fe18dcfb2f5..3ef43fdcb7f37798d2aa3ab7c4008621758d4558 100644 (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
index 25e8cbff421fcd9b96bcab87efd17a6936108ff8..3fd2103007addf718b423db2da1c40ab87ae0242 100644 (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