From: Erico Nunes Date: Tue, 16 Jul 2019 23:30:55 +0000 (+0200) Subject: lima/ppir: branch regalloc fixes X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2292f0c4b5216624768b7f990c449556a624f45d;p=mesa.git 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 --- diff --git a/src/gallium/drivers/lima/ir/pp/regalloc.c b/src/gallium/drivers/lima/ir/pp/regalloc.c index dee530ca2b6..62401150e3e 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; }