diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Pass.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/include/llvm/Pass.h b/include/llvm/Pass.h index 6b2ad86..af68d42 100644 --- a/include/llvm/Pass.h +++ b/include/llvm/Pass.h @@ -101,6 +101,19 @@ protected: 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>; @@ -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; |