Changes in directory llvm/lib/VMCore:
PassManager.cpp updated: 1.31 -> 1.32 --- Log message: Add run(Function &F) support in FunctionPassManager_New --- Diffs of the changes: (+41 -6) PassManager.cpp | 47 +++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 41 insertions(+), 6 deletions(-) Index: llvm/lib/VMCore/PassManager.cpp diff -u llvm/lib/VMCore/PassManager.cpp:1.31 llvm/lib/VMCore/PassManager.cpp:1.32 --- llvm/lib/VMCore/PassManager.cpp:1.31 Tue Nov 14 19:48:14 2006 +++ llvm/lib/VMCore/PassManager.cpp Wed Nov 15 13:39:54 2006 @@ -17,6 +17,7 @@ #include "llvm/ModuleProvider.h" #include <vector> #include <map> +#include <iostream> using namespace llvm; @@ -158,6 +159,7 @@ /// track of whether any of the passes modifies the function, and if /// so, return true. bool runOnModule(Module &M); + bool runOnFunction(Function &F); /// Return true IFF AnalysisID AID is currently available. Pass *getAnalysisPassFromManager(AnalysisID AID); @@ -423,19 +425,31 @@ /// PassManager_X is destroyed, the pass will be destroyed as well, so /// there is no need to delete the pass. (TODO delete passes.) /// This implies that all passes MUST be allocated with 'new'. -void -FunctionPassManager_New::add(Pass *P) { +void FunctionPassManager_New::add(Pass *P) { FPM->add(P); } /// Execute all of the passes scheduled for execution. Keep /// track of whether any of the passes modifies the function, and if /// so, return true. -bool -FunctionPassManager_New::runOnModule(Module &M) { +bool FunctionPassManager_New::runOnModule(Module &M) { return FPM->runOnModule(M); } +/// run - Execute all of the passes scheduled for execution. Keep +/// track of whether any of the passes modifies the function, and if +/// so, return true. +/// +bool FunctionPassManager_New::run(Function &F) { + std::string errstr; + if (MP->materializeFunction(&F, &errstr)) { + std::cerr << "Error reading bytecode file: " << errstr << "\n"; + abort(); + } + return FPM->runOnFunction(F); +} + + /// doInitialization - Run all of the initializers for the function passes. /// bool FunctionPassManager_New::doInitialization() { @@ -489,8 +503,7 @@ /// Execute all of the passes scheduled for execution by invoking /// runOnFunction method. Keep track of whether any of the passes modifies /// the function, and if so, return true. -bool -FunctionPassManagerImpl_New::runOnModule(Module &M) { +bool FunctionPassManagerImpl_New::runOnModule(Module &M) { bool Changed = false; clearAnalysis(); @@ -509,6 +522,28 @@ return Changed; } +/// Execute all of the passes scheduled for execution by invoking +/// runOnFunction method. Keep track of whether any of the passes modifies +/// the function, and if so, return true. +bool FunctionPassManagerImpl_New::runOnFunction(Function &F) { + + bool Changed = false; + clearAnalysis(); + + for (std::vector<Pass *>::iterator itr = passVectorBegin(), + e = passVectorEnd(); itr != e; ++itr) { + Pass *P = *itr; + + noteDownAvailableAnalysis(P); + FunctionPass *FP = dynamic_cast<FunctionPass*>(P); + Changed |= FP->runOnFunction(F); + removeNotPreservedAnalysis(P); + removeDeadPasses(P); + } + return Changed; +} + + /// Return true IFF AnalysisID AID is currently available. Pass *FunctionPassManagerImpl_New::getAnalysisPassFromManager(AnalysisID AID) { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits