diff --git a/src/freedreno/ir3/ir3_merge_regs.c b/src/freedreno/ir3/ir3_merge_regs.c index 49c197cc052..fe7bd0a3ff1 100644 --- a/src/freedreno/ir3/ir3_merge_regs.c +++ b/src/freedreno/ir3/ir3_merge_regs.c @@ -590,6 +590,25 @@ dump_merge_sets(struct ir3 *ir) ralloc_free(merge_sets); } +void +ir3_aggressive_coalesce(struct ir3_liveness *live, + struct ir3_instruction *instr) +{ + switch (instr->opc) { + case OPC_META_SPLIT: + aggressive_coalesce_split(live, instr); + break; + case OPC_META_COLLECT: + aggressive_coalesce_collect(live, instr); + break; + case OPC_META_PARALLEL_COPY: + aggressive_coalesce_parallel_copy(live, instr); + break; + default: + break; + } +} + void ir3_merge_regs(struct ir3_liveness *live, struct ir3 *ir) { @@ -606,19 +625,7 @@ ir3_merge_regs(struct ir3_liveness *live, struct ir3 *ir) /* Second pass: aggressively coalesce parallelcopy, split, collect */ foreach_block (block, &ir->block_list) { foreach_instr (instr, &block->instr_list) { - switch (instr->opc) { - case OPC_META_SPLIT: - aggressive_coalesce_split(live, instr); - break; - case OPC_META_COLLECT: - aggressive_coalesce_collect(live, instr); - break; - case OPC_META_PARALLEL_COPY: - aggressive_coalesce_parallel_copy(live, instr); - break; - default: - break; - } + ir3_aggressive_coalesce(live, instr); } } diff --git a/src/freedreno/ir3/ir3_ra.h b/src/freedreno/ir3/ir3_ra.h index 96af83697dc..03ae9a27deb 100644 --- a/src/freedreno/ir3/ir3_ra.h +++ b/src/freedreno/ir3/ir3_ra.h @@ -154,6 +154,8 @@ bool ir3_def_live_after(struct ir3_liveness *live, struct ir3_register *def, void ir3_create_parallel_copies(struct ir3 *ir); void ir3_merge_regs(struct ir3_liveness *live, struct ir3 *ir); +void ir3_aggressive_coalesce(struct ir3_liveness *live, + struct ir3_instruction *instr); void ir3_force_merge(struct ir3_register *a, struct ir3_register *b, int b_offset);