Allow a pass to obtain an analysis result for updating.
authorChris Lattner <sabre@nondot.org>
Wed, 10 Apr 2002 20:30:44 +0000 (20:30 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 10 Apr 2002 20:30:44 +0000 (20:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2221 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Pass.h

index 6b2ad86a44091ac7390109b25eb630f4bb54c495..af68d42eb73caf01e9da2a570894ebf789ef6384 100644 (file)
@@ -101,6 +101,19 @@ protected:
     return *(AnalysisType*)Resolver->getAnalysis(AID);
   }
 
     return *(AnalysisType*)Resolver->getAnalysis(AID);
   }
 
+  // getAnalysisToUpdate<AnalysisType>() - This function is used by subclasses
+  // to get to the analysis information that might be around that needs to be
+  // updated.  This is different than getAnalysis in that it can fail (ie the
+  // analysis results haven't been computed), so should only be used if you
+  // provide the capability to update an analysis that exists.
+  //
+  template<typename AnalysisType>
+  AnalysisType *getAnalysisToUpdate(AnalysisID AID = AnalysisType::ID) {
+    assert(Resolver && "Pass not resident in a PassManager object!");
+    return (AnalysisType*)Resolver->getAnalysisToUpdate(AID);
+  }
+
+
 private:
   friend class PassManagerT<Module>;
   friend class PassManagerT<Function>;
 private:
   friend class PassManagerT<Module>;
   friend class PassManagerT<Function>;
@@ -249,6 +262,13 @@ struct AnalysisResolver {
     assert(Result && "Pass has an incorrect analysis uses set!");
     return Result;
   }
     assert(Result && "Pass has an incorrect analysis uses set!");
     return Result;
   }
+
+  // getAnalysisToUpdate - Return an analysis result or null if it doesn't exist
+  Pass *getAnalysisToUpdate(AnalysisID ID) {
+    Pass *Result = getAnalysisOrNullUp(ID);
+    return Result;
+  }
+
   virtual unsigned getDepth() const = 0;
 
   virtual void markPassUsed(AnalysisID P, Pass *User) = 0;
   virtual unsigned getDepth() const = 0;
 
   virtual void markPassUsed(AnalysisID P, Pass *User) = 0;