aco/spill: Change worklist to a single integer

Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11925>
This commit is contained in:
Tony Wasserka 2021-07-15 16:36:09 +02:00 committed by Marge Bot
parent e60a70dde0
commit a6bcda6a01

View file

@ -168,7 +168,7 @@ get_dominator(int idx_a, int idx_b, Program* program, bool is_linear)
}
void
next_uses_per_block(spill_ctx& ctx, unsigned block_idx, std::set<uint32_t>& worklist)
next_uses_per_block(spill_ctx& ctx, unsigned block_idx, uint32_t& worklist)
{
Block* block = &ctx.program->blocks[block_idx];
std::unordered_map<Temp, std::pair<uint32_t, uint32_t>> next_uses =
@ -228,7 +228,7 @@ next_uses_per_block(spill_ctx& ctx, unsigned block_idx, std::set<uint32_t>& work
const bool inserted = insert_result.second;
std::pair<uint32_t, uint32_t>& entry_distance = insert_result.first->second;
if (inserted || entry_distance != distance)
worklist.insert(pred_idx);
worklist = std::max(worklist, pred_idx + 1);
entry_distance = distance;
}
}
@ -254,7 +254,7 @@ next_uses_per_block(spill_ctx& ctx, unsigned block_idx, std::set<uint32_t>& work
distance = std::min(entry_distance.second, distance);
}
if (entry_distance != std::pair<uint32_t, uint32_t>{dom, distance}) {
worklist.insert(pred_idx);
worklist = std::max(worklist, pred_idx + 1);
entry_distance = {dom, distance};
}
}
@ -266,14 +266,10 @@ compute_global_next_uses(spill_ctx& ctx)
{
ctx.next_use_distances_start.resize(ctx.program->blocks.size());
ctx.next_use_distances_end.resize(ctx.program->blocks.size());
std::set<uint32_t> worklist;
for (Block& block : ctx.program->blocks)
worklist.insert(block.index);
while (!worklist.empty()) {
std::set<unsigned>::reverse_iterator b_it = worklist.rbegin();
unsigned block_idx = *b_it;
worklist.erase(block_idx);
uint32_t worklist = ctx.program->blocks.size();
while (worklist) {
unsigned block_idx = --worklist;
next_uses_per_block(ctx, block_idx, worklist);
}
}