aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorGuochun Shi <gshi1@uiuc.edu>2003-06-02 17:48:56 +0000
committerGuochun Shi <gshi1@uiuc.edu>2003-06-02 17:48:56 +0000
commit099b064a464d091f6800e2cd19e67cb4354952ec (patch)
tree993b8f9df232782cc87b48ba8fe4a98dedcf26a8 /lib
parentb84388937cbe7d5cb32a39e649ef020d4d7e5cb5 (diff)
downloadexternal_llvm-099b064a464d091f6800e2cd19e67cb4354952ec.zip
external_llvm-099b064a464d091f6800e2cd19e67cb4354952ec.tar.gz
external_llvm-099b064a464d091f6800e2cd19e67cb4354952ec.tar.bz2
compiled with the new SchedGraphCommon
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6545 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/CodeGen/ModuloScheduling/ModuloSchedGraph.cpp35
-rw-r--r--lib/CodeGen/ModuloScheduling/ModuloSchedGraph.h28
-rw-r--r--lib/CodeGen/ModuloScheduling/ModuloScheduling.h2
-rw-r--r--lib/Target/SparcV9/ModuloScheduling/ModuloSchedGraph.cpp35
-rw-r--r--lib/Target/SparcV9/ModuloScheduling/ModuloSchedGraph.h28
-rw-r--r--lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.h2
6 files changed, 76 insertions, 54 deletions
diff --git a/lib/CodeGen/ModuloScheduling/ModuloSchedGraph.cpp b/lib/CodeGen/ModuloScheduling/ModuloSchedGraph.cpp
index 8bc78ad..ebbb499 100644
--- a/lib/CodeGen/ModuloScheduling/ModuloSchedGraph.cpp
+++ b/lib/CodeGen/ModuloScheduling/ModuloSchedGraph.cpp
@@ -50,12 +50,12 @@ struct ValueToDefVecMap:public hash_map<const Instruction*,RefVec> {
// class Modulo SchedGraphNode
-ModuloSchedGraphNode::ModuloSchedGraphNode(unsigned int _nodeId,
- const BasicBlock * _bb,
- const Instruction * _inst,
+ModuloSchedGraphNode::ModuloSchedGraphNode(unsigned int in_nodeId,
+ const BasicBlock * in_bb,
+ const Instruction * in_inst,
int indexInBB,
const TargetMachine & target)
-:SchedGraphNodeCommon(_nodeId, _bb, indexInBB), inst(_inst)
+:SchedGraphNodeCommon(in_nodeId, indexInBB), inst(in_inst)
{
if (inst) {
//FIXME: find the latency
@@ -298,8 +298,7 @@ bool ModuloSchedGraph::isLoop() {
//only if the last instruction in the basicblock is branch instruction and
//there is at least an option to branch itself
- assert(bbVec.size() == 1 && "only 1 basicblock in a graph");
- const BasicBlock *bb = bbVec[0];
+ assert(this->bb&& "the basicblock is not empty");
const Instruction *inst = &(bb->back());
if (BranchInst::classof(inst))
for (unsigned i = 0; i < ((BranchInst *) inst)->getNumSuccessors();
@@ -308,7 +307,7 @@ bool ModuloSchedGraph::isLoop() {
if (sb == bb)
return true;
}
-
+
return false;
}
@@ -674,7 +673,6 @@ void ModuloSchedGraph::orderNodes() {
oNodes.clear();
std::vector < ModuloSchedGraphNode * >set;
- const BasicBlock *bb = bbVec[0];
unsigned numNodes = bb->size();
// first order all the sets
@@ -873,9 +871,8 @@ void ModuloSchedGraph::orderNodes() {
void ModuloSchedGraph::buildGraph(const TargetMachine & target)
{
- const BasicBlock *bb = bbVec[0];
- assert(bbVec.size() == 1 && "only handling a single basic block here");
+ assert(this->bb && "The basicBlock is NULL?");
// Use this data structure to note all machine operands that compute
// ordinary LLVM values. These must be computed defs (i.e., instructions).
@@ -1277,10 +1274,9 @@ void ModuloSchedGraph::dump(const BasicBlock * bb, std::ostream & os)
void ModuloSchedGraph::dump() const
{
DEBUG(std::cerr << " ModuloSchedGraph for basic Blocks:");
- for (unsigned i = 0, N = bbVec.size(); i < N; i++) {
- DEBUG(std::cerr << (bbVec[i]->hasName()? bbVec[i]->getName() : "block")
- << " (" << bbVec[i] << ")" << ((i == N - 1) ? "" : ", "));
- }
+
+ DEBUG(std::cerr << (bb->hasName()? bb->getName() : "block")
+ << " (" << bb << ")" << "");
DEBUG(std::cerr << "\n\n Actual Root nodes : ");
for (unsigned i = 0, N = graphRoot->outEdges.size(); i < N; i++)
@@ -1290,7 +1286,7 @@ void ModuloSchedGraph::dump() const
DEBUG(std::cerr << "\n Graph Nodes:\n");
//for (const_iterator I=begin(); I != end(); ++I)
//DEBUG(std::cerr << "\n" << *I->second;
- unsigned numNodes = bbVec[0]->size();
+ unsigned numNodes = bb->size();
for (unsigned i = 2; i < numNodes + 2; i++) {
ModuloSchedGraphNode *node = getNode(i);
DEBUG(std::cerr << "\n" << *node);
@@ -1301,7 +1297,7 @@ void ModuloSchedGraph::dump() const
void ModuloSchedGraph::dumpNodeProperty() const
{
- const BasicBlock *bb = bbVec[0];
+
unsigned numNodes = bb->size();
for (unsigned i = 2; i < numNodes + 2; i++) {
ModuloSchedGraphNode *node = getNode(i);
@@ -1317,8 +1313,11 @@ void ModuloSchedGraph::dumpNodeProperty() const
void ModuloSchedGraphSet::buildGraphsForMethod(const Function *F,
const TargetMachine &target)
{
- for (Function::const_iterator BI = F->begin(); BI != F->end(); ++BI)
- addGraph(new ModuloSchedGraph(BI, target));
+ for (Function::const_iterator BI = F->begin(); BI != F->end(); ++BI){
+ const BasicBlock* local_bb;
+ local_bb=BI;
+ addGraph(new ModuloSchedGraph((BasicBlock*)local_bb, target));
+ }
}
std::ostream& operator<<(std::ostream &os,
diff --git a/lib/CodeGen/ModuloScheduling/ModuloSchedGraph.h b/lib/CodeGen/ModuloScheduling/ModuloSchedGraph.h
index 9fe40f2..7cdfdd9 100644
--- a/lib/CodeGen/ModuloScheduling/ModuloSchedGraph.h
+++ b/lib/CodeGen/ModuloScheduling/ModuloSchedGraph.h
@@ -56,6 +56,7 @@ public:
const unsigned getInstOpcode() const {
return inst->getOpcode();
}
+
//return whether the node is NULL
bool isNullNode() const {
return (inst == NULL);
@@ -138,6 +139,9 @@ class ModuloSchedGraph :
protected hash_map<const Instruction*,ModuloSchedGraphNode*> {
private:
+
+ BasicBlock* bb;
+
//iteration Interval
int MII;
@@ -153,14 +157,14 @@ private:
typedef std::vector<ModuloSchedGraphNode*> NodeVec;
//the function to compute properties
- void computeNodeASAP(const BasicBlock *bb);
- void computeNodeALAP(const BasicBlock *bb);
- void computeNodeMov(const BasicBlock *bb);
- void computeNodeDepth(const BasicBlock *bb);
- void computeNodeHeight(const BasicBlock *bb);
+ void computeNodeASAP(const BasicBlock * in_bb);
+ void computeNodeALAP(const BasicBlock * in_bb);
+ void computeNodeMov(const BasicBlock * in_bb);
+ void computeNodeDepth(const BasicBlock * in_bb);
+ void computeNodeHeight(const BasicBlock * in_bb);
//the function to compute node property
- void computeNodeProperty(const BasicBlock *bb);
+ void computeNodeProperty(const BasicBlock * in_bb);
//the function to sort nodes
void orderNodes();
@@ -220,6 +224,13 @@ public:
const TargetMachine & getTarget() {
return target;
}
+
+ //get the basic block
+ BasicBlock* getBasicBlock() const {
+ return bb;
+ }
+
+
//get the iteration interval
const int getMII() {
return MII;
@@ -265,8 +276,9 @@ private:
friend class ModuloSchedGraphSet; //give access to ctor
public:
- ModuloSchedGraph(const BasicBlock *bb, const TargetMachine &_target)
- :SchedGraphCommon(bb), target(_target)
+ ModuloSchedGraph(BasicBlock * in_bb,
+ const TargetMachine & in_target)
+ :SchedGraphCommon(), bb(in_bb),target(in_target)
{
buildGraph(target);
}
diff --git a/lib/CodeGen/ModuloScheduling/ModuloScheduling.h b/lib/CodeGen/ModuloScheduling/ModuloScheduling.h
index 782476e..5e1e53e 100644
--- a/lib/CodeGen/ModuloScheduling/ModuloScheduling.h
+++ b/lib/CodeGen/ModuloScheduling/ModuloScheduling.h
@@ -65,7 +65,7 @@ public:
graph(_graph), target(graph.getTarget()), oNodes(graph.getONodes())
{
II = graph.getMII();
- bb = (BasicBlock *) graph.getBasicBlocks()[0];
+ bb = graph.getBasicBlock();
instrScheduling();
};
diff --git a/lib/Target/SparcV9/ModuloScheduling/ModuloSchedGraph.cpp b/lib/Target/SparcV9/ModuloScheduling/ModuloSchedGraph.cpp
index 8bc78ad..ebbb499 100644
--- a/lib/Target/SparcV9/ModuloScheduling/ModuloSchedGraph.cpp
+++ b/lib/Target/SparcV9/ModuloScheduling/ModuloSchedGraph.cpp
@@ -50,12 +50,12 @@ struct ValueToDefVecMap:public hash_map<const Instruction*,RefVec> {
// class Modulo SchedGraphNode
-ModuloSchedGraphNode::ModuloSchedGraphNode(unsigned int _nodeId,
- const BasicBlock * _bb,
- const Instruction * _inst,
+ModuloSchedGraphNode::ModuloSchedGraphNode(unsigned int in_nodeId,
+ const BasicBlock * in_bb,
+ const Instruction * in_inst,
int indexInBB,
const TargetMachine & target)
-:SchedGraphNodeCommon(_nodeId, _bb, indexInBB), inst(_inst)
+:SchedGraphNodeCommon(in_nodeId, indexInBB), inst(in_inst)
{
if (inst) {
//FIXME: find the latency
@@ -298,8 +298,7 @@ bool ModuloSchedGraph::isLoop() {
//only if the last instruction in the basicblock is branch instruction and
//there is at least an option to branch itself
- assert(bbVec.size() == 1 && "only 1 basicblock in a graph");
- const BasicBlock *bb = bbVec[0];
+ assert(this->bb&& "the basicblock is not empty");
const Instruction *inst = &(bb->back());
if (BranchInst::classof(inst))
for (unsigned i = 0; i < ((BranchInst *) inst)->getNumSuccessors();
@@ -308,7 +307,7 @@ bool ModuloSchedGraph::isLoop() {
if (sb == bb)
return true;
}
-
+
return false;
}
@@ -674,7 +673,6 @@ void ModuloSchedGraph::orderNodes() {
oNodes.clear();
std::vector < ModuloSchedGraphNode * >set;
- const BasicBlock *bb = bbVec[0];
unsigned numNodes = bb->size();
// first order all the sets
@@ -873,9 +871,8 @@ void ModuloSchedGraph::orderNodes() {
void ModuloSchedGraph::buildGraph(const TargetMachine & target)
{
- const BasicBlock *bb = bbVec[0];
- assert(bbVec.size() == 1 && "only handling a single basic block here");
+ assert(this->bb && "The basicBlock is NULL?");
// Use this data structure to note all machine operands that compute
// ordinary LLVM values. These must be computed defs (i.e., instructions).
@@ -1277,10 +1274,9 @@ void ModuloSchedGraph::dump(const BasicBlock * bb, std::ostream & os)
void ModuloSchedGraph::dump() const
{
DEBUG(std::cerr << " ModuloSchedGraph for basic Blocks:");
- for (unsigned i = 0, N = bbVec.size(); i < N; i++) {
- DEBUG(std::cerr << (bbVec[i]->hasName()? bbVec[i]->getName() : "block")
- << " (" << bbVec[i] << ")" << ((i == N - 1) ? "" : ", "));
- }
+
+ DEBUG(std::cerr << (bb->hasName()? bb->getName() : "block")
+ << " (" << bb << ")" << "");
DEBUG(std::cerr << "\n\n Actual Root nodes : ");
for (unsigned i = 0, N = graphRoot->outEdges.size(); i < N; i++)
@@ -1290,7 +1286,7 @@ void ModuloSchedGraph::dump() const
DEBUG(std::cerr << "\n Graph Nodes:\n");
//for (const_iterator I=begin(); I != end(); ++I)
//DEBUG(std::cerr << "\n" << *I->second;
- unsigned numNodes = bbVec[0]->size();
+ unsigned numNodes = bb->size();
for (unsigned i = 2; i < numNodes + 2; i++) {
ModuloSchedGraphNode *node = getNode(i);
DEBUG(std::cerr << "\n" << *node);
@@ -1301,7 +1297,7 @@ void ModuloSchedGraph::dump() const
void ModuloSchedGraph::dumpNodeProperty() const
{
- const BasicBlock *bb = bbVec[0];
+
unsigned numNodes = bb->size();
for (unsigned i = 2; i < numNodes + 2; i++) {
ModuloSchedGraphNode *node = getNode(i);
@@ -1317,8 +1313,11 @@ void ModuloSchedGraph::dumpNodeProperty() const
void ModuloSchedGraphSet::buildGraphsForMethod(const Function *F,
const TargetMachine &target)
{
- for (Function::const_iterator BI = F->begin(); BI != F->end(); ++BI)
- addGraph(new ModuloSchedGraph(BI, target));
+ for (Function::const_iterator BI = F->begin(); BI != F->end(); ++BI){
+ const BasicBlock* local_bb;
+ local_bb=BI;
+ addGraph(new ModuloSchedGraph((BasicBlock*)local_bb, target));
+ }
}
std::ostream& operator<<(std::ostream &os,
diff --git a/lib/Target/SparcV9/ModuloScheduling/ModuloSchedGraph.h b/lib/Target/SparcV9/ModuloScheduling/ModuloSchedGraph.h
index 9fe40f2..7cdfdd9 100644
--- a/lib/Target/SparcV9/ModuloScheduling/ModuloSchedGraph.h
+++ b/lib/Target/SparcV9/ModuloScheduling/ModuloSchedGraph.h
@@ -56,6 +56,7 @@ public:
const unsigned getInstOpcode() const {
return inst->getOpcode();
}
+
//return whether the node is NULL
bool isNullNode() const {
return (inst == NULL);
@@ -138,6 +139,9 @@ class ModuloSchedGraph :
protected hash_map<const Instruction*,ModuloSchedGraphNode*> {
private:
+
+ BasicBlock* bb;
+
//iteration Interval
int MII;
@@ -153,14 +157,14 @@ private:
typedef std::vector<ModuloSchedGraphNode*> NodeVec;
//the function to compute properties
- void computeNodeASAP(const BasicBlock *bb);
- void computeNodeALAP(const BasicBlock *bb);
- void computeNodeMov(const BasicBlock *bb);
- void computeNodeDepth(const BasicBlock *bb);
- void computeNodeHeight(const BasicBlock *bb);
+ void computeNodeASAP(const BasicBlock * in_bb);
+ void computeNodeALAP(const BasicBlock * in_bb);
+ void computeNodeMov(const BasicBlock * in_bb);
+ void computeNodeDepth(const BasicBlock * in_bb);
+ void computeNodeHeight(const BasicBlock * in_bb);
//the function to compute node property
- void computeNodeProperty(const BasicBlock *bb);
+ void computeNodeProperty(const BasicBlock * in_bb);
//the function to sort nodes
void orderNodes();
@@ -220,6 +224,13 @@ public:
const TargetMachine & getTarget() {
return target;
}
+
+ //get the basic block
+ BasicBlock* getBasicBlock() const {
+ return bb;
+ }
+
+
//get the iteration interval
const int getMII() {
return MII;
@@ -265,8 +276,9 @@ private:
friend class ModuloSchedGraphSet; //give access to ctor
public:
- ModuloSchedGraph(const BasicBlock *bb, const TargetMachine &_target)
- :SchedGraphCommon(bb), target(_target)
+ ModuloSchedGraph(BasicBlock * in_bb,
+ const TargetMachine & in_target)
+ :SchedGraphCommon(), bb(in_bb),target(in_target)
{
buildGraph(target);
}
diff --git a/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.h b/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.h
index 782476e..5e1e53e 100644
--- a/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.h
+++ b/lib/Target/SparcV9/ModuloScheduling/ModuloScheduling.h
@@ -65,7 +65,7 @@ public:
graph(_graph), target(graph.getTarget()), oNodes(graph.getONodes())
{
II = graph.getMII();
- bb = (BasicBlock *) graph.getBasicBlocks()[0];
+ bb = graph.getBasicBlock();
instrScheduling();
};