From 0e52e3e2210ea06525218499a9422eecca7f5066 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 10 Apr 2002 20:30:44 +0000 Subject: [PATCH] Allow a pass to obtain an analysis result for updating. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2221 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Pass.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/llvm/Pass.h b/include/llvm/Pass.h index 6b2ad86a440..af68d42eb73 100644 --- a/include/llvm/Pass.h +++ b/include/llvm/Pass.h @@ -101,6 +101,19 @@ protected: return *(AnalysisType*)Resolver->getAnalysis(AID); } + // getAnalysisToUpdate() - 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 + AnalysisType *getAnalysisToUpdate(AnalysisID AID = AnalysisType::ID) { + assert(Resolver && "Pass not resident in a PassManager object!"); + return (AnalysisType*)Resolver->getAnalysisToUpdate(AID); + } + + private: friend class PassManagerT; friend class PassManagerT; @@ -249,6 +262,13 @@ struct AnalysisResolver { 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; -- 2.34.1