From: Alyssa Rosenzweig Date: Sat, 26 Oct 2019 14:08:18 +0000 (-0400) Subject: pan/midgard: Compute spill costs X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=23c83f3f05d95c9ee519914a5798fd72d880d8bc;p=mesa.git pan/midgard: Compute spill costs Signed-off-by: Alyssa Rosenzweig --- diff --git a/src/panfrost/midgard/midgard_schedule.c b/src/panfrost/midgard/midgard_schedule.c index e5ec8f87225..588f7c6302e 100644 --- a/src/panfrost/midgard/midgard_schedule.c +++ b/src/panfrost/midgard/midgard_schedule.c @@ -1195,10 +1195,21 @@ static void mir_spill_register( * spill node. All nodes are equal in spill cost, but we can't spill * nodes written to from an unspill */ - for (unsigned i = 0; i < ctx->temp_count; ++i) { - lcra_set_node_spill_cost(l, i, 1); + unsigned *cost = calloc(ctx->temp_count, sizeof(cost[0])); + + mir_foreach_instr_global(ctx, ins) { + if (ins->dest < ctx->temp_count) + cost[ins->dest]++; + + mir_foreach_src(ins, s) { + if (ins->src[s] < ctx->temp_count) + cost[ins->src[s]]++; + } } + for (unsigned i = 0; i < ctx->temp_count; ++i) + lcra_set_node_spill_cost(l, i, cost[i]); + /* We can't spill any bundles that contain unspills. This could be * optimized to allow use of r27 to spill twice per bundle, but if * you're at the point of optimizing spilling, it's too late.