diff options
-rw-r--r-- | src/gallium/drivers/lima/ir/pp/regalloc.c | 33 |
1 files changed, 33 insertions, 0 deletions
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; } |