mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-17 04:24:00 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1816 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user