nv50/ir: make sure cfg iterator always hits all blocks
In some very specially-crafted cases, we could attempt to visit a node that has already been visited, and then run out of bb's to visit, while there were still cross blocks on the list. Make sure that those get moved over in that case. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=96274 Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Cc: mesa-stable@lists.freedesktop.org
This commit is contained in:
parent
7bdccd104b
commit
092f994a03
|
@ -287,7 +287,10 @@ private:
|
|||
|
||||
bb.push(node);
|
||||
|
||||
while (bb.getSize()) {
|
||||
while (bb.getSize() || cross.getSize()) {
|
||||
if (bb.getSize() == 0)
|
||||
cross.moveTo(bb);
|
||||
|
||||
node = reinterpret_cast<Graph::Node *>(bb.pop().u.p);
|
||||
assert(node);
|
||||
if (!node->visit(sequence))
|
||||
|
@ -314,9 +317,6 @@ private:
|
|||
}
|
||||
}
|
||||
nodes[count++] = node;
|
||||
|
||||
if (bb.getSize() == 0)
|
||||
cross.moveTo(bb);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue