aco: fix new_demand calculation for first instructions

Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
This commit is contained in:
Rhys Perry 2019-10-30 18:00:36 +00:00 committed by Daniel Schürmann
parent 93b42a1907
commit e73de4e1d8
1 changed files with 7 additions and 4 deletions

View File

@ -1033,11 +1033,14 @@ void process_block(spill_ctx& ctx, unsigned block_idx, Block* block,
RegisterDemand new_demand = ctx.register_demand[block_idx][idx]; RegisterDemand new_demand = ctx.register_demand[block_idx][idx];
if (idx == 0) { if (idx == 0) {
for (const Definition& def : instr->definitions) { RegisterDemand demand_before = new_demand;
if (!def.isTemp()) for (const Definition& def : instr->definitions)
continue; demand_before -= def.getTemp();
new_demand += def.getTemp(); for (const Operand& op : instr->operands) {
if (op.isFirstKill())
demand_before += op.getTemp();
} }
new_demand.update(demand_before);
} else { } else {
new_demand.update(ctx.register_demand[block_idx][idx - 1]); new_demand.update(ctx.register_demand[block_idx][idx - 1]);
} }