From df9ec1052b089f7c7520823addd74b3fd97ba674 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 29 Aug 2003 14:26:51 +0000 Subject: [PATCH] Move getAnalysisToUpdate to after the definition of AnalysisResolver. GCC 3.4 apparently wants classes to be DEFINED before they are USED. What is it smoking. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8213 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Pass.h | 7 +------ include/llvm/PassAnalysisSupport.h | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/include/llvm/Pass.h b/include/llvm/Pass.h index a0fa060fbf9..9e43b5e0a3a 100644 --- a/include/llvm/Pass.h +++ b/include/llvm/Pass.h @@ -136,12 +136,7 @@ public: /// automatically as the transform is performed. /// template - AnalysisType *getAnalysisToUpdate() const { - assert(Resolver && "Pass not resident in a PassManager object!"); - const PassInfo *PI = getClassPassInfo(); - if (PI == 0) return 0; - return dynamic_cast(Resolver->getAnalysisToUpdate(PI)); - } + AnalysisType *getAnalysisToUpdate() const; // Defined in PassAnalysisSupport.h /// mustPreserveAnalysisID - This method serves the same function as /// getAnalysisToUpdate, but works if you just have an AnalysisID. This diff --git a/include/llvm/PassAnalysisSupport.h b/include/llvm/PassAnalysisSupport.h index 97588c3ae34..d27d6696497 100644 --- a/include/llvm/PassAnalysisSupport.h +++ b/include/llvm/PassAnalysisSupport.h @@ -110,4 +110,20 @@ protected: void setAnalysisResolver(Pass *P, AnalysisResolver *AR); }; +/// 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. This method is +/// often used by transformation APIs to update analysis results for a pass +/// automatically as the transform is performed. +/// +template +AnalysisType *Pass::getAnalysisToUpdate() const { + assert(Resolver && "Pass not resident in a PassManager object!"); + const PassInfo *PI = getClassPassInfo(); + if (PI == 0) return 0; + return dynamic_cast(Resolver->getAnalysisToUpdate(PI)); +} + #endif -- 2.34.1