From e73de4e1d820d4c22a0528eeef8c3dbeef74eb5f Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Wed, 30 Oct 2019 18:00:36 +0000 Subject: [PATCH] aco: fix new_demand calculation for first instructions MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Reviewed-by: Daniel Schürmann --- src/amd/compiler/aco_spill.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/amd/compiler/aco_spill.cpp b/src/amd/compiler/aco_spill.cpp index 6959895..60a99aa 100644 --- a/src/amd/compiler/aco_spill.cpp +++ b/src/amd/compiler/aco_spill.cpp @@ -1033,11 +1033,14 @@ void process_block(spill_ctx& ctx, unsigned block_idx, Block* block, RegisterDemand new_demand = ctx.register_demand[block_idx][idx]; if (idx == 0) { - for (const Definition& def : instr->definitions) { - if (!def.isTemp()) - continue; - new_demand += def.getTemp(); + RegisterDemand demand_before = new_demand; + for (const Definition& def : instr->definitions) + demand_before -= def.getTemp(); + for (const Operand& op : instr->operands) { + if (op.isFirstKill()) + demand_before += op.getTemp(); } + new_demand.update(demand_before); } else { new_demand.update(ctx.register_demand[block_idx][idx - 1]); } -- 2.7.4