From 87a17039496c70165e15608d2ea14c331adafc4a Mon Sep 17 00:00:00 2001 From: Erico Nunes Date: Sun, 30 Jul 2023 19:12:53 +0200 Subject: [PATCH] lima/ppir: don't optimize loads with different block successors Even if loads are initially duplicated for each user, with new optimizations such as folding modifiers, it may happen that loads end up with only users in different blocks. Handle that and don't delete or pipeline those nodes. Signed-off-by: Erico Nunes Reviewed-by: Vasily Khoruzhick Part-of: --- src/gallium/drivers/lima/ir/pp/lower.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/lima/ir/pp/lower.c b/src/gallium/drivers/lima/ir/pp/lower.c index 6170297c1aa..ecc19b79c2c 100644 --- a/src/gallium/drivers/lima/ir/pp/lower.c +++ b/src/gallium/drivers/lima/ir/pp/lower.c @@ -98,7 +98,8 @@ static bool ppir_lower_swap_args(ppir_block *block, ppir_node *node) static bool ppir_lower_load(ppir_block *block, ppir_node *node) { ppir_dest *dest = ppir_node_get_dest(node); - if (ppir_node_is_root(node) && dest->type == ppir_target_ssa) { + if (ppir_node_is_root(node) && !node->succ_different_block && + dest->type == ppir_target_ssa) { ppir_node_delete(node); return true; } @@ -107,7 +108,8 @@ static bool ppir_lower_load(ppir_block *block, ppir_node *node) * that has load node in source */ if ((ppir_node_has_single_src_succ(node) || ppir_node_is_root(node)) && - dest->type != ppir_target_register) { + !node->succ_different_block && + dest->type != ppir_target_register) { ppir_node *succ = ppir_node_first_succ(node); switch (succ->type) { case ppir_node_type_alu: