diff --git a/src/amd/compiler/aco_spill.cpp b/src/amd/compiler/aco_spill.cpp index f6fac869e55..ca97f748f5e 100644 --- a/src/amd/compiler/aco_spill.cpp +++ b/src/amd/compiler/aco_spill.cpp @@ -486,7 +486,7 @@ init_live_in_vars(spill_ctx& ctx, Block* block, unsigned block_idx) RegisterDemand spilled_registers; /* first block, nothing was spilled before */ - if (block_idx == 0) + if (block->linear_preds.empty()) return {0, 0}; /* next use distances at the beginning of the current block */ @@ -1679,7 +1679,7 @@ end_unused_spill_vgprs(spill_ctx& ctx, Block& block, std::vector& vgpr_spi vgpr_spill_temps[i] = Temp(); } } - if (temps.empty()) + if (temps.empty() || block.linear_preds.empty()) return; aco_ptr destr{create_instruction( @@ -1743,7 +1743,7 @@ assign_spill_slots(spill_ctx& ctx, unsigned spills_to_vgpr) unsigned last_top_level_block_idx = 0; for (Block& block : ctx.program->blocks) { - if (block.kind & block_kind_top_level && !block.linear_preds.empty()) { + if (block.kind & block_kind_top_level) { last_top_level_block_idx = block.index; end_unused_spill_vgprs(ctx, block, vgpr_spill_temps, slots, ctx.spills_entry[block.index]);