[llvm-commits] CVS: llvm/lib/CodeGen/InstrSched/SchedGraph.cpp
Vikram Adve
vadve at cs.uiuc.edu
Sat Oct 12 19:40:00 PDT 2002
Changes in directory llvm/lib/CodeGen/InstrSched:
SchedGraph.cpp updated: 1.34 -> 1.35
---
Log message:
Major bug fix: was not adding CD edges for RETURNs!
---
Diffs of the changes:
Index: llvm/lib/CodeGen/InstrSched/SchedGraph.cpp
diff -u llvm/lib/CodeGen/InstrSched/SchedGraph.cpp:1.34 llvm/lib/CodeGen/InstrSched/SchedGraph.cpp:1.35
--- llvm/lib/CodeGen/InstrSched/SchedGraph.cpp:1.34 Fri Aug 9 13:55:18 2002
+++ llvm/lib/CodeGen/InstrSched/SchedGraph.cpp Sat Oct 12 19:39:22 2002
@@ -341,15 +341,16 @@
// Find the first branch instr in the sequence of machine instrs for term
//
unsigned first = 0;
- while (!mii.isBranch(termMvec[first]->getOpCode()))
+ while (! mii.isBranch(termMvec[first]->getOpCode()) &&
+ ! mii.isReturn(termMvec[first]->getOpCode()))
++first;
assert(first < termMvec.size() &&
- "No branch instructions for BR? Ok, but weird! Delete assertion.");
+ "No branch instructions for terminator? Ok, but weird!");
if (first == termMvec.size())
return;
-
+
SchedGraphNode* firstBrNode = getGraphNodeForInstr(termMvec[first]);
-
+
// Add CD edges from each instruction in the sequence to the
// *last preceding* branch instr. in the sequence
// Use a latency of 0 because we only need to prevent out-of-order issue.
@@ -357,13 +358,14 @@
for (unsigned i = termMvec.size(); i > first+1; --i)
{
SchedGraphNode* toNode = getGraphNodeForInstr(termMvec[i-1]);
- assert(toNode && "No node for instr generated for branch?");
+ assert(toNode && "No node for instr generated for branch/ret?");
for (unsigned j = i-1; j != 0; --j)
- if (mii.isBranch(termMvec[j-1]->getOpCode()))
+ if (mii.isBranch(termMvec[j-1]->getOpCode()) ||
+ mii.isReturn(termMvec[j-1]->getOpCode()))
{
SchedGraphNode* brNode = getGraphNodeForInstr(termMvec[j-1]);
- assert(brNode && "No node for instr generated for branch?");
+ assert(brNode && "No node for instr generated for branch/ret?");
(void) new SchedGraphEdge(brNode, toNode, SchedGraphEdge::CtrlDep,
SchedGraphEdge::NonDataDep, 0);
break; // only one incoming edge is enough
@@ -388,7 +390,7 @@
const MachineCodeForBasicBlock& mvec = MachineCodeForBasicBlock::get(bb);
for (unsigned i=0, N=mvec.size(); i < N; i++)
{
- if (mvec[i] == termMvec[first]) // reached the first branch
+ if (mvec[i] == termMvec[first]) // reached the first branch
break;
SchedGraphNode* fromNode = this->getGraphNodeForInstr(mvec[i]);
More information about the llvm-commits
mailing list