pan/midgard: Do not repeatedly spill same value
It doesn't make sense. You already spilled it once, and it didn't help. Don't try again, or you'll end up in a loop. Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
This commit is contained in:
@@ -1206,15 +1206,27 @@ static void mir_spill_register(
|
||||
|
||||
/* 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. */
|
||||
* you're at the point of optimizing spilling, it's too late.
|
||||
*
|
||||
* We also can't double-spill. */
|
||||
|
||||
mir_foreach_block(ctx, block) {
|
||||
mir_foreach_bundle_in_block(block, bun) {
|
||||
bool no_spill = false;
|
||||
|
||||
for (unsigned i = 0; i < bun->instruction_count; ++i)
|
||||
for (unsigned i = 0; i < bun->instruction_count; ++i) {
|
||||
no_spill |= bun->instructions[i]->no_spill;
|
||||
|
||||
if (bun->instructions[i]->no_spill) {
|
||||
mir_foreach_src(bun->instructions[i], s) {
|
||||
unsigned src = bun->instructions[i]->src[s];
|
||||
|
||||
if (src < ctx->temp_count)
|
||||
ra_set_node_spill_cost(g, src, -1.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!no_spill)
|
||||
continue;
|
||||
|
||||
|
Reference in New Issue
Block a user