From: Andreas Baierl Date: Wed, 2 Sep 2020 09:27:10 +0000 (+0200) Subject: lima/ppir: Skip instruction merge when having more than one successor X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=13e00512f230534cdb8295d5473f594891640f33;p=mesa.git 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 Signed-off-by: Andreas Baierl Part-of: --- 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;