diff options
author | Brian Gaeke <gaeke@uiuc.edu> | 2003-08-12 17:22:39 +0000 |
---|---|---|
committer | Brian Gaeke <gaeke@uiuc.edu> | 2003-08-12 17:22:39 +0000 |
commit | 8ab1ef265a6547ab13c10a26c994610bd3ad9d9e (patch) | |
tree | d7918240cc1a0fb35cca4aec6e72e356b6d17c62 | |
parent | 20a3be3ba832947d1dc5e6b26ae68335a7914aff (diff) | |
download | external_llvm-8ab1ef265a6547ab13c10a26c994610bd3ad9d9e.zip external_llvm-8ab1ef265a6547ab13c10a26c994610bd3ad9d9e.tar.gz external_llvm-8ab1ef265a6547ab13c10a26c994610bd3ad9d9e.tar.bz2 |
Add FunctionPassManager - it's like a PassManager, but it only deals in
FunctionPasses.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7778 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/PassManager.h | 26 | ||||
-rw-r--r-- | lib/VMCore/Pass.cpp | 10 |
2 files changed, 35 insertions, 1 deletions
diff --git a/include/llvm/PassManager.h b/include/llvm/PassManager.h index f67d9da..5a313d5 100644 --- a/include/llvm/PassManager.h +++ b/include/llvm/PassManager.h @@ -28,9 +28,33 @@ public: void add(Pass *P); /// run - Execute all of the passes scheduled for execution. Keep track of - /// whether any of the functions modifies the program, and if so, return true. + /// whether any of the passes modifies the module, and if so, return true. /// bool run(Module &M); }; +class FunctionPass; +class Function; + +class FunctionPassManager { + PassManagerT<Function> *PM; // This is a straightforward Pimpl class +public: + FunctionPassManager(); + ~FunctionPassManager(); + + /// add - Add a pass to the queue of passes to run. This passes + /// ownership of the FunctionPass to the PassManager. When the + /// PassManager is destroyed, the pass will be destroyed as well, so + /// there is no need to delete the pass. This implies that all + /// passes MUST be allocated with 'new'. + /// + void add(FunctionPass *P); + + /// 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 run(Function &M); +}; + #endif diff --git a/lib/VMCore/Pass.cpp b/lib/VMCore/Pass.cpp index ec193de..6535d10 100644 --- a/lib/VMCore/Pass.cpp +++ b/lib/VMCore/Pass.cpp @@ -70,6 +70,16 @@ PassManager::~PassManager() { delete PM; } void PassManager::add(Pass *P) { PM->add(P); } bool PassManager::run(Module &M) { return PM->run(M); } +//===----------------------------------------------------------------------===// +// FunctionPassManager implementation - The FunctionPassManager class +// is a simple Pimpl class that wraps the PassManagerT template. It +// is like PassManager, but only deals in FunctionPasses. +// +FunctionPassManager::FunctionPassManager() : PM(new PassManagerT<Function>()) {} +FunctionPassManager::~FunctionPassManager() { delete PM; } +void FunctionPassManager::add(FunctionPass *P) { PM->add(P); } +bool FunctionPassManager::run(Function &F) { return PM->run(F); } + //===----------------------------------------------------------------------===// // TimingInfo Class - This class is used to calculate information about the |