extern cl::Enum<LiveVarDebugLevel_t> DEBUG_LV;
-class MethodLiveVarInfo : public FunctionPass {
+class FunctionLiveVarInfo : public FunctionPass {
// Machine Instr to LiveVarSet Map for providing LVset BEFORE each inst
std::map<const MachineInstr *, const ValueSet *> MInst2LVSetBI;
public:
static AnalysisID ID; // We are an analysis, we must have an ID
- MethodLiveVarInfo(AnalysisID id = ID) { assert(id == ID); }
+ FunctionLiveVarInfo(AnalysisID id = ID) { assert(id == ID); }
// --------- Implement the FunctionPass interface ----------------------
extern cl::Enum<LiveVarDebugLevel_t> DEBUG_LV;
-class MethodLiveVarInfo : public FunctionPass {
+class FunctionLiveVarInfo : public FunctionPass {
// Machine Instr to LiveVarSet Map for providing LVset BEFORE each inst
std::map<const MachineInstr *, const ValueSet *> MInst2LVSetBI;
public:
static AnalysisID ID; // We are an analysis, we must have an ID
- MethodLiveVarInfo(AnalysisID id = ID) { assert(id == ID); }
+ FunctionLiveVarInfo(AnalysisID id = ID) { assert(id == ID); }
// --------- Implement the FunctionPass interface ----------------------
//===----------------------------------------------------------------------===//
#include "BBLiveVar.h"
-#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/BasicBlock.h"
#include "llvm/Support/CFG.h"
//
//===----------------------------------------------------------------------===//
-#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h"
#include "BBLiveVar.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/BasicBlock.h"
#include "Support/SetOperations.h"
#include <iostream>
-AnalysisID MethodLiveVarInfo::ID(AnalysisID::create<MethodLiveVarInfo>());
+AnalysisID FunctionLiveVarInfo::ID(AnalysisID::create<FunctionLiveVarInfo>());
cl::Enum<LiveVarDebugLevel_t> DEBUG_LV("dlivevar", cl::NoFlags,
"enable live-variable debugging information",
//-----------------------------------------------------------------------------
// gets OutSet of a BB
-const ValueSet &MethodLiveVarInfo::getOutSetOfBB(const BasicBlock *BB) const {
+const ValueSet &FunctionLiveVarInfo::getOutSetOfBB(const BasicBlock *BB) const {
return BBLiveVar::GetFromBB(BB)->getOutSet();
}
// gets InSet of a BB
-const ValueSet &MethodLiveVarInfo::getInSetOfBB(const BasicBlock *BB) const {
+const ValueSet &FunctionLiveVarInfo::getInSetOfBB(const BasicBlock *BB) const {
return BBLiveVar::GetFromBB(BB)->getInSet();
}
// Performs live var analysis for a function
//-----------------------------------------------------------------------------
-bool MethodLiveVarInfo::runOnFunction(Function *Meth) {
+bool FunctionLiveVarInfo::runOnFunction(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 Function *M) {
+void FunctionLiveVarInfo::constructBBs(const Function *M) {
unsigned int POId = 0; // Reverse Depth-first Order ID
for(po_iterator<const Function*> BBI = po_begin(M), BBE = po_end(M);
// do one backward pass over the CFG (for iterative analysis)
//-----------------------------------------------------------------------------
-bool MethodLiveVarInfo::doSingleBackwardPass(const Function *M, unsigned iter) {
+bool FunctionLiveVarInfo::doSingleBackwardPass(const Function *M,
+ unsigned iter) {
if (DEBUG_LV) std::cerr << "\n After Backward Pass " << iter << "...\n";
bool NeedAnotherIteration = false;
}
-void MethodLiveVarInfo::releaseMemory() {
+void FunctionLiveVarInfo::releaseMemory() {
// First remove all BBLiveVar annotations created in constructBBs().
if (M)
for (Function::const_iterator I = M->begin(), E = M->end(); I != E; ++I)
//-----------------------------------------------------------------------------
const ValueSet &
-MethodLiveVarInfo::getLiveVarSetBeforeMInst(const MachineInstr *MInst,
- const BasicBlock *BB) {
+FunctionLiveVarInfo::getLiveVarSetBeforeMInst(const MachineInstr *MInst,
+ const BasicBlock *BB) {
if (const ValueSet *LVSet = MInst2LVSetBI[MInst]) {
return *LVSet; // if found, just return the set
} else {
// Gives live variable information after a machine instruction
//-----------------------------------------------------------------------------
const ValueSet &
-MethodLiveVarInfo::getLiveVarSetAfterMInst(const MachineInstr *MI,
- const BasicBlock *BB) {
+FunctionLiveVarInfo::getLiveVarSetAfterMInst(const MachineInstr *MI,
+ const BasicBlock *BB) {
if (const ValueSet *LVSet = MInst2LVSetAI[MI]) {
return *LVSet; // if found, just return the set
// variable sets into a the caches (MInst2LVSetAI, MInst2LVSetBI)
//-----------------------------------------------------------------------------
-void MethodLiveVarInfo::calcLiveVarSetsForBB(const BasicBlock *BB) {
+void FunctionLiveVarInfo::calcLiveVarSetsForBB(const BasicBlock *BB) {
const MachineCodeForBasicBlock &MIVec = BB->getMachineInstrVec();
if (DEBUG_LV >= LV_DEBUG_Instr)
//===----------------------------------------------------------------------===//
#include "llvm/Analysis/Dominators.h"
-#include "llvm/Transforms/UnifyMethodExitNodes.h"
+#include "llvm/Transforms/UnifyFunctionExitNodes.h"
#include "llvm/Function.h"
#include "llvm/Support/CFG.h"
#include "Support/DepthFirstIterator.h"
// that there can be at most one return instruction in the function left.
// Get it.
//
- Root = getAnalysis<UnifyMethodExitNodes>().getExitNode();
+ Root = getAnalysis<UnifyFunctionExitNodes>().getExitNode();
if (Root == 0) { // No exit node for the function? Postdomsets are all empty
for (Function::const_iterator MI = M->begin(), ME = M->end(); MI!=ME; ++MI)
AU.setPreservesAll();
if (isPostDominator()) {
AU.addProvided(PostDomID);
- AU.addRequired(UnifyMethodExitNodes::ID);
+ AU.addRequired(UnifyFunctionExitNodes::ID);
} else {
AU.addProvided(ID);
}
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/CodeGen/MachineCodeForMethod.h"
-#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h" // FIXME: Remove when AnalysisUsage sets can be symbolic!
+#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h" // FIXME: Remove when modularized better
#include "llvm/Target/TargetMachine.h"
#include "llvm/BasicBlock.h"
#include "llvm/Instruction.h"
// getAnalysisUsage - We use LiveVarInfo...
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
- AU.addRequired(MethodLiveVarInfo::ID);
+ AU.addRequired(FunctionLiveVarInfo::ID);
}
bool runOnFunction(Function *F);
cerr << "\n*** TRACE OF INSTRUCTION SCHEDULING OPERATIONS\n\n";
// expensive!
- SchedPriorities schedPrio(M, graph,getAnalysis<MethodLiveVarInfo>());
+ SchedPriorities schedPrio(M, graph,getAnalysis<FunctionLiveVarInfo>());
SchedulingManager S(target, graph, schedPrio);
ChooseInstructionsForDelaySlots(S, bb, graph); // modifies graph
//**************************************************************************/
#include "SchedPriorities.h"
-#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h"
#include "llvm/Support/CFG.h"
#include "Support/PostOrderIterator.h"
#include <iostream>
using std::cerr;
SchedPriorities::SchedPriorities(const Function *, const SchedGraph *G,
- MethodLiveVarInfo &LVI)
+ FunctionLiveVarInfo &LVI)
: curTime(0), graph(G), methodLiveVarInfo(LVI),
nodeDelayVec(G->getNumNodes(), INVALID_LATENCY), // make errors obvious
earliestForNode(G->getNumNodes(), 0),
bool
-SchedPriorities::instructionHasLastUse(MethodLiveVarInfo& methodLiveVarInfo,
+SchedPriorities::instructionHasLastUse(FunctionLiveVarInfo &LVI,
const SchedGraphNode* graphNode) {
const MachineInstr *MI = graphNode->getMachineInstr();
// else check if instruction is a last use and save it in the hash_map
bool hasLastUse = false;
const BasicBlock* bb = graphNode->getBB();
- const ValueSet &LVs = methodLiveVarInfo.getLiveVarSetBeforeMInst(MI, bb);
+ const ValueSet &LVs = LVI.getLiveVarSetBeforeMInst(MI, bb);
for (MachineInstr::const_val_op_iterator OI = MI->begin(), OE = MI->end();
OI != OE; ++OI)
class Function;
class MachineInstr;
class SchedulingManager;
-class MethodLiveVarInfo;
+class FunctionLiveVarInfo;
//---------------------------------------------------------------------------
// Debug option levels for instruction scheduling
class SchedPriorities: public NonCopyable {
public:
SchedPriorities(const Function *F, const SchedGraph *G,
- MethodLiveVarInfo &LVI);
+ FunctionLiveVarInfo &LVI);
// This must be called before scheduling begins.
private:
cycles_t curTime;
const SchedGraph* graph;
- MethodLiveVarInfo &methodLiveVarInfo;
+ FunctionLiveVarInfo &methodLiveVarInfo;
std::hash_map<const MachineInstr*, bool> lastUseMap;
std::vector<cycles_t> nodeDelayVec;
std::vector<cycles_t> earliestForNode;
void initializeReadyHeap (const SchedGraph* graph);
- bool instructionHasLastUse (MethodLiveVarInfo& methodLiveVarInfo,
+ bool instructionHasLastUse (FunctionLiveVarInfo& LVI,
const SchedGraphNode* graphNode);
// NOTE: The next two return references to the actual vector entries.
#include "llvm/CodeGen/PhyRegAlloc.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineCodeForMethod.h"
-#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/MachineFrameInfo.h"
cerr << "\n******************** Function "<< F->getName()
<< " ********************\n";
- PhyRegAlloc PRA(F, Target, &getAnalysis<MethodLiveVarInfo>(),
+ PhyRegAlloc PRA(F, Target, &getAnalysis<FunctionLiveVarInfo>(),
&getAnalysis<cfg::LoopInfo>());
PRA.allocateRegisters();
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired(cfg::LoopInfo::ID);
- AU.addRequired(MethodLiveVarInfo::ID);
+ AU.addRequired(FunctionLiveVarInfo::ID);
}
};
}
//----------------------------------------------------------------------------
PhyRegAlloc::PhyRegAlloc(Function *F,
const TargetMachine& tm,
- MethodLiveVarInfo *Lvi,
+ FunctionLiveVarInfo *Lvi,
cfg::LoopInfo *LDC)
: TM(tm), Meth(F),
mcInfo(MachineCodeForMethod::get(F)),
Register allocation must be done as:
- MethodLiveVarInfo LVI(*MethodI ); // compute LV info
+ FunctionLiveVarInfo LVI(*FunctionI ); // compute LV info
LVI.analyze();
TargetMachine &target = ....
- PhyRegAlloc PRA(*MethodI, target, &LVI); // allocate regs
+ PhyRegAlloc PRA(*FunctionI, target, &LVI); // allocate regs
PRA.allocateRegisters();
*/
#include <deque>
class MachineCodeForMethod;
class MachineRegInfo;
-class MethodLiveVarInfo;
+class FunctionLiveVarInfo;
class MachineInstr;
namespace cfg { class LoopInfo; }
const TargetMachine &TM; // target machine
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
+ FunctionLiveVarInfo *const LVI; // LV information for this method
// (already computed for BBs)
LiveRangeInfo LRI; // LR info (will be computed)
const MachineRegInfo &MRI; // Machine Register information
// currently not used
public:
- PhyRegAlloc(Function *F, const TargetMachine& TM, MethodLiveVarInfo *Lvi,
+ PhyRegAlloc(Function *F, const TargetMachine& TM, FunctionLiveVarInfo *Lvi,
cfg::LoopInfo *LoopDepthCalc);
~PhyRegAlloc();
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineCodeForInstruction.h"
#include "llvm/CodeGen/MachineCodeForMethod.h"
-#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h" // FIXME: Remove when AnalysisUsage sets can be symbolic!
+#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h" // FIXME: Remove when modularized better
#include "llvm/Target/TargetMachine.h"
#include "llvm/BasicBlock.h"
#include "llvm/Instruction.h"
// getAnalysisUsage - We use LiveVarInfo...
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
- AU.addRequired(MethodLiveVarInfo::ID);
+ AU.addRequired(FunctionLiveVarInfo::ID);
}
bool runOnFunction(Function *F);
cerr << "\n*** TRACE OF INSTRUCTION SCHEDULING OPERATIONS\n\n";
// expensive!
- SchedPriorities schedPrio(M, graph,getAnalysis<MethodLiveVarInfo>());
+ SchedPriorities schedPrio(M, graph,getAnalysis<FunctionLiveVarInfo>());
SchedulingManager S(target, graph, schedPrio);
ChooseInstructionsForDelaySlots(S, bb, graph); // modifies graph
//**************************************************************************/
#include "SchedPriorities.h"
-#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h"
#include "llvm/Support/CFG.h"
#include "Support/PostOrderIterator.h"
#include <iostream>
using std::cerr;
SchedPriorities::SchedPriorities(const Function *, const SchedGraph *G,
- MethodLiveVarInfo &LVI)
+ FunctionLiveVarInfo &LVI)
: curTime(0), graph(G), methodLiveVarInfo(LVI),
nodeDelayVec(G->getNumNodes(), INVALID_LATENCY), // make errors obvious
earliestForNode(G->getNumNodes(), 0),
bool
-SchedPriorities::instructionHasLastUse(MethodLiveVarInfo& methodLiveVarInfo,
+SchedPriorities::instructionHasLastUse(FunctionLiveVarInfo &LVI,
const SchedGraphNode* graphNode) {
const MachineInstr *MI = graphNode->getMachineInstr();
// else check if instruction is a last use and save it in the hash_map
bool hasLastUse = false;
const BasicBlock* bb = graphNode->getBB();
- const ValueSet &LVs = methodLiveVarInfo.getLiveVarSetBeforeMInst(MI, bb);
+ const ValueSet &LVs = LVI.getLiveVarSetBeforeMInst(MI, bb);
for (MachineInstr::const_val_op_iterator OI = MI->begin(), OE = MI->end();
OI != OE; ++OI)
class Function;
class MachineInstr;
class SchedulingManager;
-class MethodLiveVarInfo;
+class FunctionLiveVarInfo;
//---------------------------------------------------------------------------
// Debug option levels for instruction scheduling
class SchedPriorities: public NonCopyable {
public:
SchedPriorities(const Function *F, const SchedGraph *G,
- MethodLiveVarInfo &LVI);
+ FunctionLiveVarInfo &LVI);
// This must be called before scheduling begins.
private:
cycles_t curTime;
const SchedGraph* graph;
- MethodLiveVarInfo &methodLiveVarInfo;
+ FunctionLiveVarInfo &methodLiveVarInfo;
std::hash_map<const MachineInstr*, bool> lastUseMap;
std::vector<cycles_t> nodeDelayVec;
std::vector<cycles_t> earliestForNode;
void initializeReadyHeap (const SchedGraph* graph);
- bool instructionHasLastUse (MethodLiveVarInfo& methodLiveVarInfo,
+ bool instructionHasLastUse (FunctionLiveVarInfo& LVI,
const SchedGraphNode* graphNode);
// NOTE: The next two return references to the actual vector entries.
//===----------------------------------------------------------------------===//
#include "BBLiveVar.h"
-#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/BasicBlock.h"
#include "llvm/Support/CFG.h"
//
//===----------------------------------------------------------------------===//
-#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h"
#include "BBLiveVar.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/BasicBlock.h"
#include "Support/SetOperations.h"
#include <iostream>
-AnalysisID MethodLiveVarInfo::ID(AnalysisID::create<MethodLiveVarInfo>());
+AnalysisID FunctionLiveVarInfo::ID(AnalysisID::create<FunctionLiveVarInfo>());
cl::Enum<LiveVarDebugLevel_t> DEBUG_LV("dlivevar", cl::NoFlags,
"enable live-variable debugging information",
//-----------------------------------------------------------------------------
// gets OutSet of a BB
-const ValueSet &MethodLiveVarInfo::getOutSetOfBB(const BasicBlock *BB) const {
+const ValueSet &FunctionLiveVarInfo::getOutSetOfBB(const BasicBlock *BB) const {
return BBLiveVar::GetFromBB(BB)->getOutSet();
}
// gets InSet of a BB
-const ValueSet &MethodLiveVarInfo::getInSetOfBB(const BasicBlock *BB) const {
+const ValueSet &FunctionLiveVarInfo::getInSetOfBB(const BasicBlock *BB) const {
return BBLiveVar::GetFromBB(BB)->getInSet();
}
// Performs live var analysis for a function
//-----------------------------------------------------------------------------
-bool MethodLiveVarInfo::runOnFunction(Function *Meth) {
+bool FunctionLiveVarInfo::runOnFunction(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 Function *M) {
+void FunctionLiveVarInfo::constructBBs(const Function *M) {
unsigned int POId = 0; // Reverse Depth-first Order ID
for(po_iterator<const Function*> BBI = po_begin(M), BBE = po_end(M);
// do one backward pass over the CFG (for iterative analysis)
//-----------------------------------------------------------------------------
-bool MethodLiveVarInfo::doSingleBackwardPass(const Function *M, unsigned iter) {
+bool FunctionLiveVarInfo::doSingleBackwardPass(const Function *M,
+ unsigned iter) {
if (DEBUG_LV) std::cerr << "\n After Backward Pass " << iter << "...\n";
bool NeedAnotherIteration = false;
}
-void MethodLiveVarInfo::releaseMemory() {
+void FunctionLiveVarInfo::releaseMemory() {
// First remove all BBLiveVar annotations created in constructBBs().
if (M)
for (Function::const_iterator I = M->begin(), E = M->end(); I != E; ++I)
//-----------------------------------------------------------------------------
const ValueSet &
-MethodLiveVarInfo::getLiveVarSetBeforeMInst(const MachineInstr *MInst,
- const BasicBlock *BB) {
+FunctionLiveVarInfo::getLiveVarSetBeforeMInst(const MachineInstr *MInst,
+ const BasicBlock *BB) {
if (const ValueSet *LVSet = MInst2LVSetBI[MInst]) {
return *LVSet; // if found, just return the set
} else {
// Gives live variable information after a machine instruction
//-----------------------------------------------------------------------------
const ValueSet &
-MethodLiveVarInfo::getLiveVarSetAfterMInst(const MachineInstr *MI,
- const BasicBlock *BB) {
+FunctionLiveVarInfo::getLiveVarSetAfterMInst(const MachineInstr *MI,
+ const BasicBlock *BB) {
if (const ValueSet *LVSet = MInst2LVSetAI[MI]) {
return *LVSet; // if found, just return the set
// variable sets into a the caches (MInst2LVSetAI, MInst2LVSetBI)
//-----------------------------------------------------------------------------
-void MethodLiveVarInfo::calcLiveVarSetsForBB(const BasicBlock *BB) {
+void FunctionLiveVarInfo::calcLiveVarSetsForBB(const BasicBlock *BB) {
const MachineCodeForBasicBlock &MIVec = BB->getMachineInstrVec();
if (DEBUG_LV >= LV_DEBUG_Instr)
#include "llvm/CodeGen/PhyRegAlloc.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineCodeForMethod.h"
-#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Target/MachineFrameInfo.h"
cerr << "\n******************** Function "<< F->getName()
<< " ********************\n";
- PhyRegAlloc PRA(F, Target, &getAnalysis<MethodLiveVarInfo>(),
+ PhyRegAlloc PRA(F, Target, &getAnalysis<FunctionLiveVarInfo>(),
&getAnalysis<cfg::LoopInfo>());
PRA.allocateRegisters();
virtual void getAnalysisUsage(AnalysisUsage &AU) const {
AU.addRequired(cfg::LoopInfo::ID);
- AU.addRequired(MethodLiveVarInfo::ID);
+ AU.addRequired(FunctionLiveVarInfo::ID);
}
};
}
//----------------------------------------------------------------------------
PhyRegAlloc::PhyRegAlloc(Function *F,
const TargetMachine& tm,
- MethodLiveVarInfo *Lvi,
+ FunctionLiveVarInfo *Lvi,
cfg::LoopInfo *LDC)
: TM(tm), Meth(F),
mcInfo(MachineCodeForMethod::get(F)),
Register allocation must be done as:
- MethodLiveVarInfo LVI(*MethodI ); // compute LV info
+ FunctionLiveVarInfo LVI(*FunctionI ); // compute LV info
LVI.analyze();
TargetMachine &target = ....
- PhyRegAlloc PRA(*MethodI, target, &LVI); // allocate regs
+ PhyRegAlloc PRA(*FunctionI, target, &LVI); // allocate regs
PRA.allocateRegisters();
*/
#include <deque>
class MachineCodeForMethod;
class MachineRegInfo;
-class MethodLiveVarInfo;
+class FunctionLiveVarInfo;
class MachineInstr;
namespace cfg { class LoopInfo; }
const TargetMachine &TM; // target machine
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
+ FunctionLiveVarInfo *const LVI; // LV information for this method
// (already computed for BBs)
LiveRangeInfo LRI; // LR info (will be computed)
const MachineRegInfo &MRI; // Machine Register information
// currently not used
public:
- PhyRegAlloc(Function *F, const TargetMachine& TM, MethodLiveVarInfo *Lvi,
+ PhyRegAlloc(Function *F, const TargetMachine& TM, FunctionLiveVarInfo *Lvi,
cfg::LoopInfo *LoopDepthCalc);
~PhyRegAlloc();
#include "llvm/CodeGen/MachineCodeForMethod.h"
#include "llvm/CodeGen/PhyRegAlloc.h"
#include "llvm/CodeGen/MachineInstr.h"
-#include "llvm/Analysis/LiveVar/MethodLiveVarInfo.h"
+#include "llvm/Analysis/LiveVar/FunctionLiveVarInfo.h"
#include "llvm/iTerminators.h"
#include "llvm/iOther.h"
#include "llvm/Function.h"
//
//===----------------------------------------------------------------------===//
-#include "llvm/Transforms/MethodInlining.h"
+#include "llvm/Transforms/FunctionInlining.h"
#include "llvm/Module.h"
#include "llvm/Function.h"
#include "llvm/Pass.h"
//===----------------------------------------------------------------------===//
#include "llvm/Transforms/Instrumentation/ProfilePaths.h"
-#include "llvm/Transforms/UnifyMethodExitNodes.h"
+#include "llvm/Transforms/UnifyFunctionExitNodes.h"
#include "llvm/Support/CFG.h"
#include "llvm/Function.h"
#include "llvm/BasicBlock.h"
// entry and only one exit node for the function in the CFG of the function
//
void ProfilePaths::getAnalysisUsage(AnalysisUsage &AU) const {
- AU.addRequired(UnifyMethodExitNodes::ID);
+ AU.addRequired(UnifyFunctionExitNodes::ID);
}
};
//Per function pass for inserting counters and trigger code
bool ProfilePaths::runOnFunction(Function *M){
- //Transform the cfg s.t. we have just one exit node
- BasicBlock *ExitNode =
- getAnalysis<UnifyMethodExitNodes>().getExitNode();
+ // Transform the cfg s.t. we have just one exit node
+ BasicBlock *ExitNode = getAnalysis<UnifyFunctionExitNodes>().getExitNode();
- //iterating over BBs and making graph
+ // iterating over BBs and making graph
std::set<Node *> nodes;
std::set<Edge> edges;
Node *tmp;
Node *exitNode, *startNode;
- //The nodes must be uniquesly identified:
- //That is, no two nodes must hav same BB*
+ // The nodes must be uniquesly identified:
+ // That is, no two nodes must hav same BB*
- //First enter just nodes: later enter edges
+ // First enter just nodes: later enter edges
for (Function::iterator BB = M->begin(), BE=M->end(); BB != BE; ++BB){
Node *nd=new Node(*BB);
nodes.insert(nd);
startNode=nd;
}
- //now do it againto insert edges
+ // now do it againto insert edges
for (Function::iterator BB = M->begin(), BE=M->end(); BB != BE; ++BB){
Node *nd=findBB(nodes, *BB);
assert(nd && "No node for this edge!");
BasicBlock *fr=M->front();
- //If only one BB, don't instrument
+ // If only one BB, don't instrument
if (M->getBasicBlocks().size() == 1) {
- //The graph is made acyclic: this is done
- //by removing back edges for now, and adding them later on
+ // The graph is made acyclic: this is done
+ // by removing back edges for now, and adding them later on
vector<Edge> be;
g.getBackEdges(be);
#ifdef DEBUG_PATH_PROFILES
cerr<<"Backedges:"<<be.size()<<endl;
#endif
- //Now we need to reflect the effect of back edges
- //This is done by adding dummy edges
- //If a->b is a back edge
- //Then we add 2 back edges for it:
- //1. from root->b (in vector stDummy)
- //and 2. from a->exit (in vector exDummy)
+ // Now we need to reflect the effect of back edges
+ // This is done by adding dummy edges
+ // If a->b is a back edge
+ // Then we add 2 back edges for it:
+ // 1. from root->b (in vector stDummy)
+ // and 2. from a->exit (in vector exDummy)
vector<Edge> stDummy;
vector<Edge> exDummy;
addDummyEdges(stDummy, exDummy, g, be);
- //Now, every edge in the graph is assigned a weight
- //This weight later adds on to assign path
- //numbers to different paths in the graph
- // All paths for now are acyclic,
- //since no back edges in the graph now
- //numPaths is the number of acyclic paths in the graph
+ // Now, every edge in the graph is assigned a weight
+ // This weight later adds on to assign path
+ // numbers to different paths in the graph
+ // All paths for now are acyclic,
+ // since no back edges in the graph now
+ // numPaths is the number of acyclic paths in the graph
int numPaths=valueAssignmentToEdges(g);
- //create instruction allocation r and count
- //r is the variable that'll act like an accumulator
- //all along the path, we just add edge values to r
- //and at the end, r reflects the path number
- //count is an array: count[x] would store
- //the number of executions of path numbered x
+ // create instruction allocation r and count
+ // r is the variable that'll act like an accumulator
+ // all along the path, we just add edge values to r
+ // and at the end, r reflects the path number
+ // count is an array: count[x] would store
+ // the number of executions of path numbered x
Instruction *rVar=new
AllocaInst(PointerType::get(Type::IntTy),
ConstantUInt::get(Type::UIntTy,1),"R");
AllocaInst(PointerType::get(Type::IntTy),
ConstantUInt::get(Type::UIntTy, numPaths), "Count");
- //insert initialization code in first (entry) BB
- //this includes initializing r and count
+ // insert initialization code in first (entry) BB
+ // this includes initializing r and count
insertInTopBB(M->getEntryNode(),numPaths, rVar, countVar);
- //now process the graph: get path numbers,
- //get increments along different paths,
- //and assign "increments" and "updates" (to r and count)
- //"optimally". Finally, insert llvm code along various edges
+ // now process the graph: get path numbers,
+ // get increments along different paths,
+ // and assign "increments" and "updates" (to r and count)
+ // "optimally". Finally, insert llvm code along various edges
processGraph(g, rVar, countVar, be, stDummy, exDummy);
}
#include "llvm/Instruction.h"
#include <map>
-// FIXME: This should be merged with MethodInlining
+// FIXME: This should be merged with FunctionInlining
// RemapInstruction - Convert the instruction operands from referencing the
// current values into those specified by ValueMap.
//
//===----------------------------------------------------------------------===//
-#include "llvm/Transforms/UnifyMethodExitNodes.h"
+#include "llvm/Transforms/UnifyFunctionExitNodes.h"
#include "llvm/BasicBlock.h"
#include "llvm/Function.h"
#include "llvm/iTerminators.h"
#include "llvm/Type.h"
using std::vector;
-AnalysisID UnifyMethodExitNodes::ID(AnalysisID::create<UnifyMethodExitNodes>());
+AnalysisID UnifyFunctionExitNodes::ID(AnalysisID::create<UnifyFunctionExitNodes>());
// UnifyAllExitNodes - Unify all exit nodes of the CFG by creating a new
//
// If there are no return stmts in the Function, a null pointer is returned.
//
-bool UnifyMethodExitNodes::doit(Function *M, BasicBlock *&ExitNode) {
+bool UnifyFunctionExitNodes::doit(Function *M, BasicBlock *&ExitNode) {
// Loop over all of the blocks in a function, tracking all of the blocks that
// return.
//
//===----------------------------------------------------------------------===//
#include "llvm/Analysis/Dominators.h"
-#include "llvm/Transforms/UnifyMethodExitNodes.h"
+#include "llvm/Transforms/UnifyFunctionExitNodes.h"
#include "llvm/Function.h"
#include "llvm/Support/CFG.h"
#include "Support/DepthFirstIterator.h"
// that there can be at most one return instruction in the function left.
// Get it.
//
- Root = getAnalysis<UnifyMethodExitNodes>().getExitNode();
+ Root = getAnalysis<UnifyFunctionExitNodes>().getExitNode();
if (Root == 0) { // No exit node for the function? Postdomsets are all empty
for (Function::const_iterator MI = M->begin(), ME = M->end(); MI!=ME; ++MI)
AU.setPreservesAll();
if (isPostDominator()) {
AU.addProvided(PostDomID);
- AU.addRequired(UnifyMethodExitNodes::ID);
+ AU.addRequired(UnifyFunctionExitNodes::ID);
} else {
AU.addProvided(ID);
}
#include "llvm/Bytecode/WriteBytecodePass.h"
#include "llvm/Assembly/PrintModulePass.h"
#include "llvm/Analysis/Verifier.h"
-#include "llvm/Transforms/UnifyMethodExitNodes.h"
+#include "llvm/Transforms/UnifyFunctionExitNodes.h"
#include "llvm/Transforms/ConstantMerge.h"
#include "llvm/Transforms/CleanupGCCOutput.h"
#include "llvm/Transforms/LevelChange.h"
-#include "llvm/Transforms/MethodInlining.h"
+#include "llvm/Transforms/FunctionInlining.h"
#include "llvm/Transforms/SymbolStripping.h"
#include "llvm/Transforms/ChangeAllocations.h"
#include "llvm/Transforms/IPO/SimpleStructMutation.h"
{ constmerge , createConstantMergePass },
{ strip , createSymbolStrippingPass },
{ mstrip , createFullSymbolStrippingPass },
- { mergereturn, createUnifyMethodExitNodesPass },
+ { mergereturn, createUnifyFunctionExitNodesPass },
{ indvars , createIndVarSimplifyPass },
{ instcombine, createInstructionCombiningPass },