diff options
| author | Chris Lattner <sabre@nondot.org> | 2002-02-26 21:46:54 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2002-02-26 21:46:54 +0000 |
| commit | 04805fa29cfed84fd748ff2f97da3968282ee3b1 (patch) | |
| tree | 7f2bfbac67628f247c8929af9f6a6e352936e7d5 /llvm/lib/Transforms/Scalar/LowerAllocations.cpp | |
| parent | b67f732b8cc2e1817a1318d596a9665d5c5c5057 (diff) | |
| download | bcm5719-llvm-04805fa29cfed84fd748ff2f97da3968282ee3b1.tar.gz bcm5719-llvm-04805fa29cfed84fd748ff2f97da3968282ee3b1.zip | |
Change over to use new style pass mechanism, now passes only expose small
creation functions in their public header file, unless they can help it.
llvm-svn: 1816
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LowerAllocations.cpp')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/LowerAllocations.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/LowerAllocations.cpp b/llvm/lib/Transforms/Scalar/LowerAllocations.cpp index ff7a3674ec1..dc5137e1ff8 100644 --- a/llvm/lib/Transforms/Scalar/LowerAllocations.cpp +++ b/llvm/lib/Transforms/Scalar/LowerAllocations.cpp @@ -15,9 +15,57 @@ #include "llvm/iOther.h" #include "llvm/SymbolTable.h" #include "llvm/ConstantVals.h" +#include "llvm/Pass.h" #include "TransformInternals.h" using std::vector; +namespace { + +// LowerAllocations - Turn malloc and free instructions into %malloc and %free +// calls. +// +class LowerAllocations : public BasicBlockPass { + Method *MallocMeth; // Methods in the module we are processing + Method *FreeMeth; // Initialized by doInitialization + + const TargetData &DataLayout; +public: + inline LowerAllocations(const TargetData &TD) : DataLayout(TD) { + MallocMeth = FreeMeth = 0; + } + + // doPassInitialization - For the lower allocations pass, this ensures that a + // module contains a declaration for a malloc and a free function. + // + bool doInitialization(Module *M); + + // runOnBasicBlock - This method does the actual work of converting + // instructions over, assuming that the pass has already been initialized. + // + bool runOnBasicBlock(BasicBlock *BB); +}; + +// RaiseAllocations - Turn %malloc and %free calls into the appropriate +// instruction. +// +class RaiseAllocations : public BasicBlockPass { + Method *MallocMeth; // Methods in the module we are processing + Method *FreeMeth; // Initialized by doPassInitializationVirt +public: + inline RaiseAllocations() : MallocMeth(0), FreeMeth(0) {} + + // doPassInitialization - For the raise allocations pass, this finds a + // declaration for malloc and free if they exist. + // + bool doInitialization(Module *M); + + // runOnBasicBlock - This method does the actual work of converting + // instructions over, assuming that the pass has already been initialized. + // + bool runOnBasicBlock(BasicBlock *BB); +}; + +} // end anonymous namespace // doInitialization - For the lower allocations pass, this ensures that a // module contains a declaration for a malloc and a free function. @@ -181,3 +229,12 @@ bool RaiseAllocations::runOnBasicBlock(BasicBlock *BB) { return Changed; } + +Pass *createLowerAllocationsPass(const TargetData &TD) { + return new LowerAllocations(TD); +} +Pass *createRaiseAllocationsPass() { + return new RaiseAllocations(); +} + + |

