Mesa (main): aco/spill: Avoid copying current_spills when not needed
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Oct 1 09:57:12 UTC 2021
Module: Mesa
Branch: main
Commit: 05163fd4f4b0144a01ac0e55e75d053ad48f2514
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=05163fd4f4b0144a01ac0e55e75d053ad48f2514
Author: Tony Wasserka <tony.wasserka at gmx.de>
Date: Sat Jul 10 14:06:50 2021 +0200
aco/spill: Avoid copying current_spills when not needed
Reviewed-by: Daniel Schürmann <daniel at schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11925>
---
src/amd/compiler/aco_spill.cpp | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/src/amd/compiler/aco_spill.cpp b/src/amd/compiler/aco_spill.cpp
index 35a532dea72..cc4b9a54fd3 100644
--- a/src/amd/compiler/aco_spill.cpp
+++ b/src/amd/compiler/aco_spill.cpp
@@ -1144,8 +1144,7 @@ add_coupling_code(spill_ctx& ctx, Block* block, unsigned block_idx)
}
void
-process_block(spill_ctx& ctx, unsigned block_idx, Block* block,
- std::map<Temp, uint32_t>& current_spills, RegisterDemand spilled_registers)
+process_block(spill_ctx& ctx, unsigned block_idx, Block* block, RegisterDemand spilled_registers)
{
assert(!ctx.processed[block_idx]);
@@ -1164,6 +1163,8 @@ process_block(spill_ctx& ctx, unsigned block_idx, Block* block,
/* We won't use local_next_use_distance, so no initialization needed */
}
+ auto& current_spills = ctx.spills_exit[block_idx];
+
while (idx < block->instructions.size()) {
aco_ptr<Instruction>& instr = block->instructions[idx];
@@ -1214,9 +1215,7 @@ process_block(spill_ctx& ctx, unsigned block_idx, Block* block,
bool can_rematerialize = ctx.remat.count(pair.first);
if (((pair.second > distance && can_rematerialize == do_rematerialize) ||
(can_rematerialize && !do_rematerialize && pair.second > idx)) &&
- current_spills.find(pair.first) == current_spills.end() &&
- ctx.spills_exit[block_idx].find(pair.first) ==
- ctx.spills_exit[block_idx].end()) {
+ current_spills.find(pair.first) == current_spills.end()) {
to_spill = pair.first;
distance = pair.second;
do_rematerialize = can_rematerialize;
@@ -1260,7 +1259,6 @@ process_block(spill_ctx& ctx, unsigned block_idx, Block* block,
}
block->instructions = std::move(instructions);
- ctx.spills_exit[block_idx].insert(current_spills.begin(), current_spills.end());
}
void
@@ -1284,7 +1282,7 @@ spill_block(spill_ctx& ctx, unsigned block_idx)
add_coupling_code(ctx, block, block_idx);
}
- std::map<Temp, uint32_t> current_spills = ctx.spills_entry[block_idx];
+ const std::map<Temp, uint32_t>& current_spills = ctx.spills_entry[block_idx];
/* check conditions to process this block */
bool process = (block->register_demand - spilled_registers).exceeds(ctx.target_pressure) ||
@@ -1295,10 +1293,11 @@ spill_block(spill_ctx& ctx, unsigned block_idx)
process = true;
}
- if (process)
- process_block(ctx, block_idx, block, current_spills, spilled_registers);
- else
- ctx.spills_exit[block_idx].insert(current_spills.begin(), current_spills.end());
+ assert(ctx.spills_exit[block_idx].empty());
+ ctx.spills_exit[block_idx] = current_spills;
+ if (process) {
+ process_block(ctx, block_idx, block, spilled_registers);
+ }
ctx.processed[block_idx] = true;
More information about the mesa-commit
mailing list