Changes in directory llvm/include/llvm:
Pass.h updated: 1.80 -> 1.81 PassManagers.h updated: 1.12 -> 1.13 --- Log message: Keep track of inherited analysis. For example, if a loop pass does not preserve dominator info then it should update parent FPPassManager's available analysis info to reflect this. --- Diffs of the changes: (+23 -1) Pass.h | 3 ++- PassManagers.h | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) Index: llvm/include/llvm/Pass.h diff -u llvm/include/llvm/Pass.h:1.80 llvm/include/llvm/Pass.h:1.81 --- llvm/include/llvm/Pass.h:1.80 Mon Mar 5 19:06:16 2007 +++ llvm/include/llvm/Pass.h Mon Mar 5 19:55:46 2007 @@ -64,7 +64,8 @@ PMT_CallGraphPassManager, /// CGPassManager PMT_FunctionPassManager, /// FPPassManager PMT_LoopPassManager, /// LPPassManager - PMT_BasicBlockPassManager /// BBPassManager + PMT_BasicBlockPassManager, /// BBPassManager + PMT_Last }; typedef enum PassManagerType PassManagerType; Index: llvm/include/llvm/PassManagers.h diff -u llvm/include/llvm/PassManagers.h:1.12 llvm/include/llvm/PassManagers.h:1.13 --- llvm/include/llvm/PassManagers.h:1.12 Mon Mar 5 16:57:49 2007 +++ llvm/include/llvm/PassManagers.h Mon Mar 5 19:55:46 2007 @@ -197,6 +197,7 @@ /// used by pass managers. class PMDataManager { public: + PMDataManager(int Depth) : TPM(NULL), Depth(Depth) { initializeAnalysisInfo(); } @@ -223,6 +224,8 @@ /// Initialize available analysis information. void initializeAnalysisInfo() { AvailableAnalysis.clear(); + for (unsigned i = 0; i < PMT_Last; ++i) + InheritedAnalysis[i] = NULL; } /// Populate RequiredPasses with the analysis pass that are required by @@ -262,6 +265,19 @@ assert ( 0 && "Invalid use of getPassManagerType"); return PMT_Unknown; } + + std::map<AnalysisID, Pass*> *getAvailableAnalysis() { + return &AvailableAnalysis; + } + + // Collect AvailableAnalysis from all the active Pass Managers. + void populateInheritedAnalysis(PMStack &PMS) { + unsigned Index = 0; + for (PMStack::iterator I = PMS.begin(), E = PMS.end(); + I != E; ++I) + InheritedAnalysis[Index++] = (*I)->getAvailableAnalysis(); + } + protected: // Top level manager. @@ -270,6 +286,11 @@ // Collection of pass that are managed by this manager std::vector<Pass *> PassVector; + // Collection of Analysis provided by Parent pass manager and + // used by current pass manager. At at time there can not be more + // then PMT_Last active pass mangers. + std::map<AnalysisID, Pass *> *InheritedAnalysis[PMT_Last]; + private: // Set of available Analysis. This information is used while scheduling // pass. If a pass requires an analysis which is not not available then _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits