From 2292f0c4b5216624768b7f990c449556a624f45d Mon Sep 17 00:00:00 2001 From: Erico Nunes Date: Wed, 17 Jul 2019 01:30:55 +0200 Subject: [PATCH] lima/ppir: branch regalloc fixes The branch instruction has sources which must be handled in src handling paths so that regalloc assigns registers to them properly. Signed-off-by: Erico Nunes Reviewed-by: Vasily Khoruzhick --- src/gallium/drivers/lima/ir/pp/regalloc.c | 33 +++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/gallium/drivers/lima/ir/pp/regalloc.c b/src/gallium/drivers/lima/ir/pp/regalloc.c index dee530c..6240115 100644 --- a/src/gallium/drivers/lima/ir/pp/regalloc.c +++ b/src/gallium/drivers/lima/ir/pp/regalloc.c @@ -239,6 +239,16 @@ static ppir_reg *ppir_regalloc_build_liveness_info(ppir_compiler *comp) reg->live_out = node->instr->seq; break; } + case ppir_node_type_branch: + { + ppir_branch_node *branch = ppir_node_to_branch(node); + for (int i = 0; i < 2; i++) { + ppir_reg *reg = get_src_reg(branch->src + i); + if (reg && node->instr->seq > reg->live_out) + reg->live_out = node->instr->seq; + } + break; + } default: break; } @@ -315,6 +325,17 @@ static void ppir_regalloc_print_result(ppir_compiler *comp) printf("%d", ppir_target_get_src_reg_index(&load_tex->src_coords)); break; } + case ppir_node_type_branch: + { + ppir_branch_node *branch = ppir_node_to_branch(node); + for (int j = 0; j < 2; j++) { + if (j) + printf(" "); + + printf("%d", ppir_target_get_src_reg_index(branch->src + j)); + } + break; + } default: break; } @@ -610,6 +631,18 @@ static bool ppir_regalloc_spill_reg(ppir_compiler *comp, ppir_reg *chosen) } break; } + case ppir_node_type_branch: + { + ppir_branch_node *branch = ppir_node_to_branch(node); + for (int i = 0; i < 2; i++) { + reg = get_src_reg(branch->src + i); + if (reg == chosen) { + ppir_update_spilled_src(comp, block, node, + branch->src + i, NULL); + } + } + break; + } default: break; } -- 2.7.4