Keep track if analysis made available by the pass.
authorDevang Patel <dpatel@apple.com>
Sat, 11 Nov 2006 01:10:19 +0000 (01:10 +0000)
committerDevang Patel <dpatel@apple.com>
Sat, 11 Nov 2006 01:10:19 +0000 (01:10 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31664 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 075a572fb33fcead46519c152a0d4490e3d5a539..667fa7050af775cbf789db9272f86289c80245df 100644 (file)
@@ -19,6 +19,7 @@
 
 #include "llvm/Pass.h"
 #include <vector>
+#include <set>
 
 namespace llvm {
 
@@ -106,9 +107,12 @@ public:
   /// Return true IFF AnalysisID AID is currently available.
   bool analysisCurrentlyAvailable(AnalysisID AID);
 
-  /// Augment RequiredSet by adding analysis required by pass P.
+  /// Augment RequiredAnalysis by adding analysis required by pass P.
   void noteDownRequiredAnalysis(Pass *P);
 
+  /// Augment AvailableAnalysis by adding analysis made available by pass P.
+  void noteDownAvailableAnalysis(Pass *P);
+
   /// Remove AnalysisID from the RequiredSet
   void removeAnalysis(AnalysisID AID);
 
@@ -121,6 +125,9 @@ public:
 private:
    // Analysis required by the passes managed by this manager
   std::vector<AnalysisID> RequiredAnalysis;
+
+  // set of available Analysis
+  std::set<AnalysisID> AvailableAnalysis;
 };
 
 /// PassManager_New manages ModulePassManagers
index 27a86b65a686e2294ae674b04de0eeb5fd0b69d7..157a9aa56e6a9737f8d1842c69140efaf38db583 100644 (file)
@@ -164,7 +164,7 @@ bool CommonPassManagerImpl::analysisCurrentlyAvailable(AnalysisID AID) {
   return false;
 }
 
-/// Augment RequiredSet by adding analysis required by pass P.
+/// Augment RequiredAnalysis by adding analysis required by pass P.
 void CommonPassManagerImpl::noteDownRequiredAnalysis(Pass *P) {
   AnalysisUsage AnUsage;
   P->getAnalysisUsage(AnUsage);
@@ -174,6 +174,21 @@ void CommonPassManagerImpl::noteDownRequiredAnalysis(Pass *P) {
   RequiredAnalysis.insert(RequiredAnalysis.end(), RequiredSet.begin(), RequiredSet.end());
 }
 
+/// Augement AvailableAnalysis by adding analysis made available by pass P.
+void CommonPassManagerImpl::noteDownAvailableAnalysis(Pass *P) {
+  
+  if (const PassInfo *PI = P->getPassInfo()) {
+    AvailableAnalysis.insert(PI);
+
+    //TODO This pass is the current implementation of all of the interfaces it
+    //TODO implements as well.
+    //TODO
+    //TODO const std::vector<const PassInfo*> &II = PI->getInterfacesImplemented();
+    //TODO for (unsigned i = 0, e = II.size(); i != e; ++i)
+    //TODO CurrentAnalyses[II[i]] = P;
+  }
+}
+
 /// Remove AnalysisID from the RequiredSet
 void CommonPassManagerImpl::removeAnalysis(AnalysisID AID) {
 
@@ -202,8 +217,9 @@ BasicBlockPassManager_New::addPass(Pass *P) {
   if (!manageablePass(P))
     return false;
 
-  // Take a note of analysis required by this pass.
+  // Take a note of analysis required and made available by this pass
   noteDownRequiredAnalysis(P);
+  noteDownAvailableAnalysis(P);
 
   // Add pass
   PassVector.push_back(BP);
@@ -285,8 +301,9 @@ FunctionPassManagerImpl_New::addPass(Pass *P) {
   if (!manageablePass(P))
     return false;
 
-  // Take a note of analysis required by this pass.
+  // Take a note of analysis required and made available by this pass
   noteDownRequiredAnalysis(P);
+  noteDownAvailableAnalysis(P);
 
   PassVector.push_back(FP);
   activeBBPassManager = NULL;
@@ -345,8 +362,9 @@ ModulePassManager_New::addPass(Pass *P) {
   if (!manageablePass(P))
     return false;
 
-  // Take a note of analysis required by this pass.
+  // Take a note of analysis required and made available by this pass
   noteDownRequiredAnalysis(P);
+  noteDownAvailableAnalysis(P);
 
   PassVector.push_back(MP);
   activeFunctionPassManager = NULL;