Mesa (master): lima/ppir: Skip instruction merge when having more than one successor

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Sep 7 10:00:33 UTC 2020


Module: Mesa
Branch: master
Commit: 4c5f5d238b953baab5a3017f76c0b0cb322fea9a
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=4c5f5d238b953baab5a3017f76c0b0cb322fea9a

Author: Andreas Baierl <ichgeh at imkreisrum.de>
Date:   Wed Sep  2 11:27:10 2020 +0200

lima/ppir: Skip instruction merge when having more than one successor

ppir_do_one_node_to_instr merges instructions and uses a pipeline reg
to save a reg. It tests if ppir_node_has_single_src_succ, but it should
check if ppir_node_has_single_succ.

The following deqp tests run into this issue because they have a node
with 2 successors in different blocks, where one was merged into the same
instruction and the second one is pointing to a missing predecessor then.

Fixes the following deqp tests:
dEQP-GLES2.functional.shaders.loops.do_while_dynamic_iterations.vector_counter_fragment
dEQP-GLES2.functional.shaders.loops.for_dynamic_iterations.vector_counter_fragment
dEQP-GLES2.functional.shaders.loops.while_dynamic_iterations.vector_counter_fragment

Reviewed-by: Erico Nunes <nunes.erico at gmail.com>
Signed-off-by: Andreas Baierl <ichgeh at imkreisrum.de>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6555>

---

 src/gallium/drivers/lima/ir/pp/node_to_instr.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gallium/drivers/lima/ir/pp/node_to_instr.c b/src/gallium/drivers/lima/ir/pp/node_to_instr.c
index efbde11d05e..a54be74ccfc 100644
--- a/src/gallium/drivers/lima/ir/pp/node_to_instr.c
+++ b/src/gallium/drivers/lima/ir/pp/node_to_instr.c
@@ -88,7 +88,7 @@ static bool ppir_do_one_node_to_instr(ppir_block *block, ppir_node *node)
        * by using pipeline reg ^vmul/^fmul */
       ppir_alu_node *alu = ppir_node_to_alu(node);
       if (alu->dest.type == ppir_target_ssa &&
-          ppir_node_has_single_src_succ(node)) {
+          ppir_node_has_single_succ(node)) {
          ppir_node *succ = ppir_node_first_succ(node);
          if (succ->instr_pos == PPIR_INSTR_SLOT_ALU_VEC_ADD) {
             node->instr_pos = PPIR_INSTR_SLOT_ALU_VEC_MUL;



More information about the mesa-commit mailing list