From 61a6d84679f696ec787aefba43f77aadd8baac9f Mon Sep 17 00:00:00 2001 From: Ilia Mirkin Date: Fri, 19 Aug 2016 00:41:59 -0400 Subject: [PATCH] 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 Reviewed-by: Samuel Pitoiset Cc: mesa-stable@lists.freedesktop.org (cherry picked from commit 092f994a034b718f6170c631655ccaba8d2aa768) --- src/gallium/drivers/nouveau/codegen/nv50_ir_graph.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_graph.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_graph.cpp index 23414d54ab1..b1076cf4129 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_graph.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_graph.cpp @@ -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(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); } } -- 2.11.0