summaryrefslogtreecommitdiffstats
path: root/src/amd/compiler
diff options
context:
space:
mode:
authorRhys Perry <[email protected]>2019-10-30 18:00:36 +0000
committerDaniel Schürmann <[email protected]>2019-10-30 19:48:33 +0000
commite73de4e1d820d4c22a0528eeef8c3dbeef74eb5f (patch)
treea82ec94248574119419ac468a7c3b9ce1111a93b /src/amd/compiler
parent93b42a190762dee01bd2b95be105add2d1bd529a (diff)
aco: fix new_demand calculation for first instructions
Reviewed-by: Daniel Schürmann <[email protected]>
Diffstat (limited to 'src/amd/compiler')
-rw-r--r--src/amd/compiler/aco_spill.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/amd/compiler/aco_spill.cpp b/src/amd/compiler/aco_spill.cpp
index 6959895d858..60a99aa9247 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]);
}