nvc0/ir: skip back edges when determining latest sched value

This commit is contained in:
Christoph Bumiller 2013-02-28 22:08:36 +01:00
parent f07c46a4f4
commit ac9f19e485

View file

@ -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;