Fixed bug where instructions in the kernel were not ordered right to preserve dependencies in a cycle.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18314 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp b/lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp
index a3b02f7..5a415e7 100644
--- a/lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp
+++ b/lib/Target/SparcV9/ModuloScheduling/MSchedGraph.cpp
@@ -22,9 +22,9 @@
using namespace llvm;
MSchedGraphNode::MSchedGraphNode(const MachineInstr* inst,
- MSchedGraph *graph,
+ MSchedGraph *graph, unsigned idx,
unsigned late, bool isBranch)
- : Inst(inst), Parent(graph), latency(late), isBranchInstr(isBranch) {
+ : Inst(inst), Parent(graph), index(idx), latency(late), isBranchInstr(isBranch) {
//Add to the graph
graph->addNode(inst, this);
@@ -113,7 +113,7 @@
//Save PHI instructions to deal with later
std::vector<const MachineInstr*> phiInstrs;
-
+ unsigned index = 0;
//Loop over instructions in MBB and add nodes and edges
for (MachineBasicBlock::const_iterator MI = BB->begin(), e = BB->end(); MI != e; ++MI) {
//Get each instruction of machine basic block, get the delay
@@ -149,7 +149,7 @@
isBranch = true;
//Node is created and added to the graph automatically
- MSchedGraphNode *node = new MSchedGraphNode(MI, this, delay, isBranch);
+ MSchedGraphNode *node = new MSchedGraphNode(MI, this, index, delay, isBranch);
DEBUG(std::cerr << "Created Node: " << *node << "\n");
@@ -211,6 +211,7 @@
}
}
}
+ ++index;
}
addMemEdges(memInstructions);
addMachRegEdges(regNumtoNodeMap);