Changes in directory llvm/include/llvm:
Pass.h updated: 1.58 -> 1.59 PassAnalysisSupport.h updated: 1.24 -> 1.25 PassManager.h updated: 1.35 -> 1.36 --- Log message: Add #ifdef switch toggle between old and new pass manager. However, continue to use old pass manager at the moment. To use new manager remove #define USE_OLD_PASSMANAGER 1 from Pass.h --- Diffs of the changes: (+53 -13) Pass.h | 10 ++++++++++ PassAnalysisSupport.h | 28 ++++++++++++++++++++++++++-- PassManager.h | 28 +++++++++++++++++----------- 3 files changed, 53 insertions(+), 13 deletions(-) Index: llvm/include/llvm/Pass.h diff -u llvm/include/llvm/Pass.h:1.58 llvm/include/llvm/Pass.h:1.59 --- llvm/include/llvm/Pass.h:1.58 Tue Dec 12 18:23:44 2006 +++ llvm/include/llvm/Pass.h Tue Dec 12 20:36:01 2006 @@ -36,6 +36,8 @@ #include <typeinfo> #include <cassert> +#define USE_OLD_PASSMANAGER 1 + namespace llvm { class Value; @@ -203,7 +205,9 @@ virtual bool runPass(Module &M) { return runOnModule(M); } virtual bool runPass(BasicBlock&) { return false; } +#ifdef USE_OLD_PASSMANAGER virtual void addToPassManager(ModulePassManager *PM, AnalysisUsage &AU); +#endif }; @@ -226,10 +230,12 @@ /// virtual bool runOnModule(Module &M) { return false; } +#ifdef USE_OLD_PASSMANAGER private: template<typename Trait> friend class PassManagerT; friend class ModulePassManager; virtual void addToPassManager(ModulePassManager *PM, AnalysisUsage &AU); +#endif }; //===----------------------------------------------------------------------===// @@ -269,6 +275,7 @@ /// bool run(Function &F); +#ifdef USE_OLD_PASSMANAGER protected: template<typename Trait> friend class PassManagerT; friend class ModulePassManager; @@ -276,6 +283,7 @@ friend class BasicBlockPassManager; virtual void addToPassManager(ModulePassManager *PM, AnalysisUsage &AU); virtual void addToPassManager(FunctionPassManagerT *PM, AnalysisUsage &AU); +#endif }; @@ -329,6 +337,7 @@ virtual bool runPass(Module &M) { return false; } virtual bool runPass(BasicBlock &BB); +#ifdef USE_OLD_PASSMANAGER private: template<typename Trait> friend class PassManagerT; friend class FunctionPassManagerT; @@ -338,6 +347,7 @@ } virtual void addToPassManager(FunctionPassManagerT *PM, AnalysisUsage &AU); virtual void addToPassManager(BasicBlockPassManager *PM,AnalysisUsage &AU); +#endif }; /// If the user specifies the -time-passes argument on an LLVM tool command line Index: llvm/include/llvm/PassAnalysisSupport.h diff -u llvm/include/llvm/PassAnalysisSupport.h:1.24 llvm/include/llvm/PassAnalysisSupport.h:1.25 --- llvm/include/llvm/PassAnalysisSupport.h:1.24 Tue Dec 12 18:23:44 2006 +++ llvm/include/llvm/PassAnalysisSupport.h Tue Dec 12 20:36:01 2006 @@ -189,10 +189,19 @@ /// template<typename AnalysisType> AnalysisType *Pass::getAnalysisToUpdate() const { +#ifdef USE_OLD_PASSMANAGER assert(Resolver && "Pass not resident in a PassManager object!"); +#else + assert(Resolver_New && "Pass not resident in a PassManager object!"); +#endif const PassInfo *PI = getClassPassInfo<AnalysisType>(); if (PI == 0) return 0; +#ifdef USE_OLD_PASSMANAGER return dynamic_cast<AnalysisType*>(Resolver->getAnalysisToUpdate(PI)); +#else + return dynamic_cast<AnalysisType*> + (Resolver_New->getAnalysisToUpdate(PI, true)); +#endif } /// getAnalysis<AnalysisType>() - This function is used by subclasses to get @@ -201,15 +210,20 @@ /// template<typename AnalysisType> AnalysisType &Pass::getAnalysis() const { +#ifdef USE_OLD_PASSMANAGER assert(Resolver && "Pass has not been inserted into a PassManager object!"); +#else + assert(Resolver_New && "Pass has not been inserted into a PassManager object!"); +#endif const PassInfo *PI = getClassPassInfo<AnalysisType>(); return getAnalysisID<AnalysisType>(PI); } template<typename AnalysisType> AnalysisType &Pass::getAnalysisID(const PassInfo *PI) const { - assert(Resolver && "Pass has not been inserted into a PassManager object!"); assert(PI && "getAnalysis for unregistered pass!"); +#ifdef USE_OLD_PASSMANAGER + assert(Resolver && "Pass has not been inserted into a PassManager object!"); // PI *must* appear in AnalysisImpls. Because the number of passes used // should be a small number, we just do a linear search over a (dense) @@ -224,7 +238,17 @@ break; } } - +#else + assert(Resolver_New && "Pass has not been inserted into a PassManager object!"); + // PI *must* appear in AnalysisImpls. Because the number of passes used + // should be a small number, we just do a linear search over a (dense) + // vector. + Pass *ResultPass = Resolver_New->findImplPass(PI); + assert (ResultPass && + "getAnalysis*() called on an analysis that was not " + "'required' by pass!"); + +#endif // Because the AnalysisType may not be a subclass of pass (for // AnalysisGroups), we must use dynamic_cast here to potentially adjust the // return pointer (because the class may multiply inherit, once from pass, Index: llvm/include/llvm/PassManager.h diff -u llvm/include/llvm/PassManager.h:1.35 llvm/include/llvm/PassManager.h:1.36 --- llvm/include/llvm/PassManager.h:1.35 Tue Dec 12 18:34:32 2006 +++ llvm/include/llvm/PassManager.h Tue Dec 12 20:36:01 2006 @@ -25,6 +25,9 @@ class ModulePass; class Module; class ModuleProvider; + +#ifdef USE_OLD_PASSMANAGER + class ModulePassManager; class FunctionPassManagerT; class BasicBlockPassManager; @@ -87,17 +90,19 @@ bool doFinalization(); }; -class ModulePassManager_New; +#else + +class ModulePassManager; class PassManagerImpl_New; class FunctionPassManagerImpl_New; -/// PassManager_New manages ModulePassManagers -class PassManager_New { +/// PassManager manages ModulePassManagers +class PassManager { public: - PassManager_New(); - ~PassManager_New(); + PassManager(); + ~PassManager(); /// add - Add a pass to the queue of passes to run. This passes ownership of /// the Pass to the PassManager. When the PassManager is destroyed, the pass @@ -111,18 +116,18 @@ private: - /// PassManagerImpl_New is the actual class. PassManager_New is just the + /// PassManagerImpl_New is the actual class. PassManager is just the /// wraper to publish simple pass manager interface PassManagerImpl_New *PM; }; -/// FunctionPassManager_New manages FunctionPasses and BasicBlockPassManagers. -class FunctionPassManager_New { +/// FunctionPassManager manages FunctionPasses and BasicBlockPassManagers. +class FunctionPassManager { public: - FunctionPassManager_New(ModuleProvider *P); - FunctionPassManager_New(); - ~FunctionPassManager_New(); + FunctionPassManager(ModuleProvider *P); + FunctionPassManager(); + ~FunctionPassManager(); /// add - Add a pass to the queue of passes to run. This passes /// ownership of the Pass to the PassManager. When the @@ -150,6 +155,7 @@ ModuleProvider *MP; }; +#endif } // End llvm namespace _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits