From ac9f19e485a15b2c58680d5c884597f60d6f1b1b Mon Sep 17 00:00:00 2001 From: Christoph Bumiller Date: Thu, 28 Feb 2013 22:08:36 +0100 Subject: [PATCH] nvc0/ir: skip back edges when determining latest sched value --- src/gallium/drivers/nvc0/codegen/nv50_ir_emit_nvc0.cpp | 7 ++++--- 1 file 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; -- 2.30.2