//
//-----------------------------------------------------------------------------
class RegClass {
- const Method *const Meth; // Method we are working on
+ const Function *const Meth; // Function we are working on
const MachineRegClassInfo *const MRC; // corresponding MRC
const unsigned RegClassID; // my int ID
const ReservedColorListType *const ReservedColorList;
//
// for passing registers that are pre-allocated and cannot be used by the
- // register allocator for this method.
+ // register allocator for this function.
bool *IsColorUsedArr;
//
public:
- RegClass(const Method *const M,
- const MachineRegClassInfo *const MRC,
- const ReservedColorListType *const RCL = NULL);
+ RegClass(const Function *M,
+ const MachineRegClassInfo *MRC,
+ const ReservedColorListType *RCL = 0);
- ~RegClass() { delete[] IsColorUsedArr; };
+ ~RegClass() { delete[] IsColorUsedArr; }
- inline void createInterferenceGraph()
- { IG.createGraph(); }
+ inline void createInterferenceGraph() { IG.createGraph(); }
inline InterferenceGraph &getIG() { return IG; }
// Define visitors for modules, methods and basic blocks...
//
void visit(Module *M) { visit(M->begin(), M->end()); }
- void visit(Method *M) { visit(M->begin(), M->end()); }
+ void visit(Function *F) { visit(F->begin(), F->end()); }
void visit(BasicBlock *BB) { visit(BB->begin(), BB->end()); }
// visit - Finally, code to visit an instruction...
inline const Function *getCalledFunction() const {
return dyn_cast<Function>(Operands[0].get());
}
- inline Method *getCalledFunction() {
- return dyn_cast<Method>(Operands[0].get());
+ inline Function *getCalledFunction() {
+ return dyn_cast<Function>(Operands[0].get());
}
// getCalledValue - Get a pointer to a method that is invoked by this inst.
-//===-- MethodLiveVarInfo.cpp - Live Variable Analysis for a Method -------===//
+//===-- MethodLiveVarInfo.cpp - Live Variable Analysis for a Function -----===//
//
// This is the interface to method level live variable information that is
// provided by live variable analysis.
// Performs live var analysis for a method
//-----------------------------------------------------------------------------
-bool MethodLiveVarInfo::runOnMethod(Method *Meth) {
+bool MethodLiveVarInfo::runOnMethod(Function *Meth) {
M = Meth;
if (DEBUG_LV) std::cerr << "Analysing live variables ...\n";
// constructs BBLiveVars and init Def and In sets
//-----------------------------------------------------------------------------
-void MethodLiveVarInfo::constructBBs(const Method *M) {
+void MethodLiveVarInfo::constructBBs(const Function *M) {
unsigned int POId = 0; // Reverse Depth-first Order ID
- for(po_iterator<const Method*> BBI = po_begin(M), BBE = po_end(M);
+ for(po_iterator<const Function*> BBI = po_begin(M), BBE = po_end(M);
BBI != BBE; ++BBI, ++POId) {
const BasicBlock *BB = *BBI; // get the current BB
// However, LV info is not correct for those blocks (they are not
// analyzed)
//
- for (Method::const_iterator BBRI = M->begin(), BBRE = M->end();
+ for (Function::const_iterator BBRI = M->begin(), BBRE = M->end();
BBRI != BBRE; ++BBRI, ++POId)
if (!BBLiveVar::GetFromBB(*BBRI)) // Not yet processed?
BBLiveVar::CreateOnBB(*BBRI, POId);
// do one backward pass over the CFG (for iterative analysis)
//-----------------------------------------------------------------------------
-bool MethodLiveVarInfo::doSingleBackwardPass(const Method *M, unsigned int iter) {
+bool MethodLiveVarInfo::doSingleBackwardPass(const Function *M, unsigned int iter) {
if (DEBUG_LV) std::cerr << "\n After Backward Pass " << iter << "...\n";
bool NeedAnotherIteration = false;
- for (po_iterator<const Method*> BBI = po_begin(M); BBI != po_end(M) ; ++BBI) {
+ for (po_iterator<const Function*> BBI = po_begin(M); BBI != po_end(M) ; ++BBI) {
BBLiveVar *LVBB = BBLiveVar::GetFromBB(*BBI);
assert(LVBB && "BasicBlock information not set for block!");
void MethodLiveVarInfo::releaseMemory() {
// First remove all BBLiveVar annotations created in constructBBs().
if (M)
- for (Method::const_iterator I = M->begin(), E = M->end(); I != E; ++I)
+ for (Function::const_iterator I = M->begin(), E = M->end(); I != E; ++I)
BBLiveVar::RemoveFromBB(*I);
M = 0;
//===----------------------------------------------------------------------===//
// cfg::LoopInfo implementation
//
-bool cfg::LoopInfo::runOnMethod(Method *M) {
+bool cfg::LoopInfo::runOnMethod(Function *F) {
BBMap.clear(); // Reset internal state of analysis
TopLevelLoops.clear();
Calculate(getAnalysis<DominatorSet>()); // Update
Destroyed.push_back(MethodLiveVarInfo::ID);
}
- bool runOnMethod(Method *M);
+ bool runOnMethod(Function *F);
};
} // end anonymous namespace
bool
-InstructionSchedulingWithSSA::runOnMethod(Method *M)
+InstructionSchedulingWithSSA::runOnMethod(Function *M)
{
if (SchedDebugLevel == Sched_Disable)
return false;
#include <iostream>
using std::cerr;
-SchedPriorities::SchedPriorities(const Method *method, const SchedGraph *G,
+SchedPriorities::SchedPriorities(const Function *, const SchedGraph *G,
MethodLiveVarInfo &LVI)
: curTime(0), graph(G), methodLiveVarInfo(LVI),
nodeDelayVec(G->getNumNodes(), INVALID_LATENCY), // make errors obvious
//----------------------------------------------------------------------------
// class PhyRegAlloc:
// Main class the register allocator. Call allocateRegisters() to allocate
-// registers for a Method.
+// registers for a Function.
//----------------------------------------------------------------------------
std::vector<RegClass *> RegClassList; // vector of register classes
const TargetMachine &TM; // target machine
- const Method* Meth; // name of the method we work on
+ const Function *Meth; // name of the function we work on
MachineCodeForMethod &mcInfo; // descriptor for method's native code
MethodLiveVarInfo *const LVI; // LV information for this method
// (already computed for BBs)
// currently not used
public:
- PhyRegAlloc(Method *M, const TargetMachine& TM, MethodLiveVarInfo *Lvi,
+ PhyRegAlloc(Function *F, const TargetMachine& TM, MethodLiveVarInfo *Lvi,
cfg::LoopInfo *LoopDepthCalc);
~PhyRegAlloc();
//
//-----------------------------------------------------------------------------
class RegClass {
- const Method *const Meth; // Method we are working on
+ const Function *const Meth; // Function we are working on
const MachineRegClassInfo *const MRC; // corresponding MRC
const unsigned RegClassID; // my int ID
const ReservedColorListType *const ReservedColorList;
//
// for passing registers that are pre-allocated and cannot be used by the
- // register allocator for this method.
+ // register allocator for this function.
bool *IsColorUsedArr;
//
public:
- RegClass(const Method *const M,
- const MachineRegClassInfo *const MRC,
- const ReservedColorListType *const RCL = NULL);
+ RegClass(const Function *M,
+ const MachineRegClassInfo *MRC,
+ const ReservedColorListType *RCL = 0);
- ~RegClass() { delete[] IsColorUsedArr; };
+ ~RegClass() { delete[] IsColorUsedArr; }
- inline void createInterferenceGraph()
- { IG.createGraph(); }
+ inline void createInterferenceGraph() { IG.createGraph(); }
inline InterferenceGraph &getIG() { return IG; }
Destroyed.push_back(MethodLiveVarInfo::ID);
}
- bool runOnMethod(Method *M);
+ bool runOnMethod(Function *F);
};
} // end anonymous namespace
bool
-InstructionSchedulingWithSSA::runOnMethod(Method *M)
+InstructionSchedulingWithSSA::runOnMethod(Function *M)
{
if (SchedDebugLevel == Sched_Disable)
return false;
#include <iostream>
using std::cerr;
-SchedPriorities::SchedPriorities(const Method *method, const SchedGraph *G,
+SchedPriorities::SchedPriorities(const Function *, const SchedGraph *G,
MethodLiveVarInfo &LVI)
: curTime(0), graph(G), methodLiveVarInfo(LVI),
nodeDelayVec(G->getNumNodes(), INVALID_LATENCY), // make errors obvious
-//===-- MethodLiveVarInfo.cpp - Live Variable Analysis for a Method -------===//
+//===-- MethodLiveVarInfo.cpp - Live Variable Analysis for a Function -----===//
//
// This is the interface to method level live variable information that is
// provided by live variable analysis.
// Performs live var analysis for a method
//-----------------------------------------------------------------------------
-bool MethodLiveVarInfo::runOnMethod(Method *Meth) {
+bool MethodLiveVarInfo::runOnMethod(Function *Meth) {
M = Meth;
if (DEBUG_LV) std::cerr << "Analysing live variables ...\n";
// constructs BBLiveVars and init Def and In sets
//-----------------------------------------------------------------------------
-void MethodLiveVarInfo::constructBBs(const Method *M) {
+void MethodLiveVarInfo::constructBBs(const Function *M) {
unsigned int POId = 0; // Reverse Depth-first Order ID
- for(po_iterator<const Method*> BBI = po_begin(M), BBE = po_end(M);
+ for(po_iterator<const Function*> BBI = po_begin(M), BBE = po_end(M);
BBI != BBE; ++BBI, ++POId) {
const BasicBlock *BB = *BBI; // get the current BB
// However, LV info is not correct for those blocks (they are not
// analyzed)
//
- for (Method::const_iterator BBRI = M->begin(), BBRE = M->end();
+ for (Function::const_iterator BBRI = M->begin(), BBRE = M->end();
BBRI != BBRE; ++BBRI, ++POId)
if (!BBLiveVar::GetFromBB(*BBRI)) // Not yet processed?
BBLiveVar::CreateOnBB(*BBRI, POId);
// do one backward pass over the CFG (for iterative analysis)
//-----------------------------------------------------------------------------
-bool MethodLiveVarInfo::doSingleBackwardPass(const Method *M, unsigned int iter) {
+bool MethodLiveVarInfo::doSingleBackwardPass(const Function *M, unsigned int iter) {
if (DEBUG_LV) std::cerr << "\n After Backward Pass " << iter << "...\n";
bool NeedAnotherIteration = false;
- for (po_iterator<const Method*> BBI = po_begin(M); BBI != po_end(M) ; ++BBI) {
+ for (po_iterator<const Function*> BBI = po_begin(M); BBI != po_end(M) ; ++BBI) {
BBLiveVar *LVBB = BBLiveVar::GetFromBB(*BBI);
assert(LVBB && "BasicBlock information not set for block!");
void MethodLiveVarInfo::releaseMemory() {
// First remove all BBLiveVar annotations created in constructBBs().
if (M)
- for (Method::const_iterator I = M->begin(), E = M->end(); I != E; ++I)
+ for (Function::const_iterator I = M->begin(), E = M->end(); I != E; ++I)
BBLiveVar::RemoveFromBB(*I);
M = 0;
//----------------------------------------------------------------------------
// class PhyRegAlloc:
// Main class the register allocator. Call allocateRegisters() to allocate
-// registers for a Method.
+// registers for a Function.
//----------------------------------------------------------------------------
std::vector<RegClass *> RegClassList; // vector of register classes
const TargetMachine &TM; // target machine
- const Method* Meth; // name of the method we work on
+ const Function *Meth; // name of the function we work on
MachineCodeForMethod &mcInfo; // descriptor for method's native code
MethodLiveVarInfo *const LVI; // LV information for this method
// (already computed for BBs)
// currently not used
public:
- PhyRegAlloc(Method *M, const TargetMachine& TM, MethodLiveVarInfo *Lvi,
+ PhyRegAlloc(Function *F, const TargetMachine& TM, MethodLiveVarInfo *Lvi,
cfg::LoopInfo *LoopDepthCalc);
~PhyRegAlloc();
//
//-----------------------------------------------------------------------------
class RegClass {
- const Method *const Meth; // Method we are working on
+ const Function *const Meth; // Function we are working on
const MachineRegClassInfo *const MRC; // corresponding MRC
const unsigned RegClassID; // my int ID
const ReservedColorListType *const ReservedColorList;
//
// for passing registers that are pre-allocated and cannot be used by the
- // register allocator for this method.
+ // register allocator for this function.
bool *IsColorUsedArr;
//
public:
- RegClass(const Method *const M,
- const MachineRegClassInfo *const MRC,
- const ReservedColorListType *const RCL = NULL);
+ RegClass(const Function *M,
+ const MachineRegClassInfo *MRC,
+ const ReservedColorListType *RCL = 0);
- ~RegClass() { delete[] IsColorUsedArr; };
+ ~RegClass() { delete[] IsColorUsedArr; }
- inline void createInterferenceGraph()
- { IG.createGraph(); }
+ inline void createInterferenceGraph() { IG.createGraph(); }
inline InterferenceGraph &getIG() { return IG; }
// returned in `minstrVec'. Any temporary registers (TmpInstruction)
// created are returned in `tempVec'.
//
- virtual void CreateCodeToLoadConst(Method* method,
+ virtual void CreateCodeToLoadConst(Function* method,
Value* val,
Instruction* dest,
std::vector<MachineInstr*>& minstrVec,
// The generated instructions are returned in `minstrVec'.
// Any temp. registers (TmpInstruction) created are returned in `tempVec'.
//
- virtual void CreateCodeToCopyIntToFloat(Method* method,
+ virtual void CreateCodeToCopyIntToFloat(Function* method,
Value* val,
Instruction* dest,
std::vector<MachineInstr*>& minstr,
// `val' to an integer value `dest' by copying to memory and back.
// See the previous function for information about return values.
//
- virtual void CreateCodeToCopyFloatToInt(Method* method,
+ virtual void CreateCodeToCopyFloatToInt(Function* method,
Value* val,
Instruction* dest,
std::vector<MachineInstr*>& minstr,
// create copy instruction(s)
virtual void CreateCopyInstructionsByType(const TargetMachine& target,
- Method* method,
+ Function* method,
Value* src,
Instruction* dest,
std::vector<MachineInstr*>& minstr) const;
// method args and return values etc.) with specific hardware registers
// as required. See SparcRegInfo.cpp for the implementation for Sparc.
//
- void suggestRegs4MethodArgs(const Method *Meth,
+ void suggestRegs4MethodArgs(const Function *Meth,
LiveRangeInfo& LRI) const;
void suggestRegs4CallArgs(const MachineInstr *CallMI,
LiveRangeInfo& LRI) const;
- void colorMethodArgs(const Method *Meth, LiveRangeInfo &LRI,
+ void colorMethodArgs(const Function *Meth, LiveRangeInfo &LRI,
AddedInstrns *FirstAI) const;
void colorCallArgs(const MachineInstr *CallMI, LiveRangeInfo &LRI,
// If the arg is passed on stack due to the lack of regs, NOTHING will be
// done - it will be colored (or spilled) as a normal live range.
//---------------------------------------------------------------------------
-void UltraSparcRegInfo::suggestRegs4MethodArgs(const Method *Meth,
+void UltraSparcRegInfo::suggestRegs4MethodArgs(const Function *Meth,
LiveRangeInfo& LRI) const
{
// get the argument list
- const Method::ArgumentListType& ArgList = Meth->getArgumentList();
+ const Function::ArgumentListType& ArgList = Meth->getArgumentList();
// get an iterator to arg list
- Method::ArgumentListType::const_iterator ArgIt = ArgList.begin();
+ Function::ArgumentListType::const_iterator ArgIt = ArgList.begin();
// for each argument
for( unsigned argNo=0; ArgIt != ArgList.end() ; ++ArgIt, ++argNo) {
// the correct hardware registers if they did not receive the correct
// (suggested) color through graph coloring.
//---------------------------------------------------------------------------
-void UltraSparcRegInfo::colorMethodArgs(const Method *Meth,
+void UltraSparcRegInfo::colorMethodArgs(const Function *Meth,
LiveRangeInfo &LRI,
AddedInstrns *FirstAI) const {
// get the argument list
- const Method::ArgumentListType& ArgList = Meth->getArgumentList();
+ const Function::ArgumentListType& ArgList = Meth->getArgumentList();
// get an iterator to arg list
- Method::ArgumentListType::const_iterator ArgIt = ArgList.begin();
-
+ Function::ArgumentListType::const_iterator ArgIt = ArgList.begin();
MachineInstr *AdMI;
for( unsigned argNo=0; ArgIt != ArgList.end() ; ++ArgIt, ++argNo) {
// get the LR of arg
- LiveRange *const LR = LRI.getLiveRangeForValue((const Value *) *ArgIt);
+ LiveRange *LR = LRI.getLiveRangeForValue(*ArgIt);
assert( LR && "No live range found for method arg");
I != E; ++I)
MachineCodeForInstruction::get(*I).dropAllReferences();
- for (Method::iterator FI = F->begin(), FE = F->end(); FI != FE; ++FI)
+ for (Function::iterator FI = F->begin(), FE = F->end(); FI != FE; ++FI)
for (BasicBlock::iterator I = (*FI)->begin(), E = (*FI)->end();
I != E; ++I)
freeMachineCode(*I);
//===-- BasicBlock.cpp - Implement BasicBlock related functions --*- C++ -*--=//
//
-// This file implements the Method class for the VMCore library.
+// This file implements the BasicBlock class for the VMCore library.
//
//===----------------------------------------------------------------------===//
// Instantiate Templates - This ugliness is the price we have to pay
// for having a ValueHolderImpl.h file seperate from ValueHolder.h! :(
//
-template class ValueHolder<Instruction, BasicBlock, Method>;
+template class ValueHolder<Instruction, BasicBlock, Function>;
-BasicBlock::BasicBlock(const std::string &name, Method *Parent)
+BasicBlock::BasicBlock(const std::string &name, Function *Parent)
: Value(Type::LabelTy, Value::BasicBlockVal, name), InstList(this, 0),
machineInstrVec(new MachineCodeForBasicBlock) {
if (Parent)
// Specialize setName to take care of symbol table majik
void BasicBlock::setName(const std::string &name, SymbolTable *ST) {
- Method *P;
+ Function *P;
assert((ST == 0 || (!getParent() || ST == getParent()->getSymbolTable())) &&
"Invalid symtab argument!");
if ((P = getParent()) && hasName()) P->getSymbolTable()->remove(this);
if (P && hasName()) P->getSymbolTable()->insert(this);
}
-void BasicBlock::setParent(Method *parent) {
+void BasicBlock::setParent(Function *parent) {
if (getParent() && hasName())
getParent()->getSymbolTable()->remove(this);
verifySymbolTable(M->getSymbolTable());
return false;
}
- bool runOnMethod(Method *M) { verifyMethod(M); return false; }
+ bool runOnMethod(Function *F) { verifyMethod(F); return false; }
};
}