summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorChristoph Bumiller <[email protected]>2013-02-28 22:08:36 +0100
committerChristoph Bumiller <[email protected]>2013-03-12 12:55:36 +0100
commitac9f19e485a15b2c58680d5c884597f60d6f1b1b (patch)
tree6737399194a1ae1da32378cc4c5409a43ccb2052 /src
parentf07c46a4f425d1075e79ad1bba424f6921e37cc8 (diff)
nvc0/ir: skip back edges when determining latest sched value
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp b/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp
index 7fd9b86884b..04081cf1177 100644
--- a/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp
+++ b/src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp
@@ -2623,15 +2623,16 @@ SchedDataCalculator::visit(BasicBlock *bb)
score = &scoreBoards.at(bb->getId());
for (Graph::EdgeIterator ei = bb->cfg.incident(); !ei.end(); ei.next()) {
+ // back branches will wait until all target dependencies are satisfied
+ if (ei.getType() == Graph::Edge::BACK) // sched would be uninitialized
+ continue;
BasicBlock *in = BasicBlock::get(ei.getNode());
if (in->getExit()) {
if (prevData != 0x04)
prevData = in->getExit()->sched;
prevOp = in->getExit()->op;
}
- if (ei.getType() != Graph::Edge::BACK)
- score->setMax(&scoreBoards.at(in->getId()));
- // back branches will wait until all target dependencies are satisfied
+ score->setMax(&scoreBoards.at(in->getId()));
}
if (bb->cfg.incidentCount() > 1)
prevOp = OP_NOP;