Pass *createMachineCodeDestructionPass();
class MachineFunction : private Annotation {
- const Function *method;
+ const Function *Fn;
+ const TargetMachine &Target;
// List of machine basic blocks in function
iplist<MachineBasicBlock> BasicBlocks;
bool automaticVarsAreaFrozen;
public:
- MachineFunction(const Function* function,
- const TargetMachine& target);
+ MachineFunction(const Function *Fn, const TargetMachine& target);
+
+ /// getFunction - Return the LLVM function that this machine code represents
+ ///
+ const Function *getFunction() const { return Fn; }
+
+ /// getTarget - Return the target machine this machine code is compiled with
+ ///
+ const TargetMachine &getTarget() const { return Target; }
// The next two methods are used to construct and to retrieve
// the MachineFunction object for the given method.
// This should not be called before "construct()"
// for a given Method.
//
- static MachineFunction& construct(const Function *method,
- const TargetMachine &target);
+ static MachineFunction& construct(const Function *Fn,
+ const TargetMachine &target);
static void destruct(const Function *F);
static MachineFunction& get(const Function *F);
// for a given Function.
//
MachineFunction&
-MachineFunction::construct(const Function *M, const TargetMachine &Tar)
+MachineFunction::construct(const Function *Fn, const TargetMachine &Tar)
{
- assert(M->getAnnotation(MCFM_AID) == 0 &&
+ assert(Fn->getAnnotation(MCFM_AID) == 0 &&
"Object already exists for this function!");
- MachineFunction* mcInfo = new MachineFunction(M, Tar);
- M->addAnnotation(mcInfo);
+ MachineFunction* mcInfo = new MachineFunction(Fn, Tar);
+ Fn->addAnnotation(mcInfo);
return *mcInfo;
}
void
-MachineFunction::destruct(const Function *M)
+MachineFunction::destruct(const Function *Fn)
{
- bool Deleted = M->deleteAnnotation(MCFM_AID);
+ bool Deleted = Fn->deleteAnnotation(MCFM_AID);
assert(Deleted && "Machine code did not exist for function!");
}
-MachineFunction&
-MachineFunction::get(const Function *F)
+MachineFunction& MachineFunction::get(const Function *F)
{
MachineFunction *mc = (MachineFunction*)F->getAnnotation(MCFM_AID);
assert(mc && "Call construct() method first to allocate the object");
/*ctor*/
MachineFunction::MachineFunction(const Function *F,
- const TargetMachine& target)
+ const TargetMachine& target)
: Annotation(MCFM_AID),
- method(F), staticStackSize(0),
+ Fn(F), Target(target), staticStackSize(0),
automaticVarsSize(0), regSpillsSize(0),
maxOptionalArgsSize(0), maxOptionalNumArgs(0),
currentTmpValuesSize(0), maxTmpValuesSize(0), compiledAsLeaf(false),
spillsAreaFrozen(false), automaticVarsAreaFrozen(false)
{
- maxOptionalArgsSize = ComputeMaxOptionalArgsSize(target, method,
+ maxOptionalArgsSize = ComputeMaxOptionalArgsSize(target, Fn,
maxOptionalNumArgs);
staticStackSize = maxOptionalArgsSize
+ target.getFrameInfo().getMinStackFrameSize();
void
MachineFunction::dump() const
{
- std::cerr << "\n" << method->getReturnType()
- << " \"" << method->getName() << "\"\n";
+ std::cerr << "\n" << Fn->getReturnType()
+ << " \"" << Fn->getName() << "\"\n";
- for (Function::const_iterator BB = method->begin(); BB != method->end(); ++BB)
+ for (Function::const_iterator BB = Fn->begin(); BB != Fn->end(); ++BB)
{
std::cerr << "\n" << BB->getName() << " (" << (const void*)BB
<< ")" << ":" << "\n";
for (unsigned i=0; i < mvec.size(); i++)
std::cerr << "\t" << *mvec[i];
}
- std::cerr << "\nEnd function \"" << method->getName() << "\"\n\n";
+ std::cerr << "\nEnd function \"" << Fn->getName() << "\"\n\n";
}