Mesa (main): aco/spill: Change worklist to a single integer

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Oct 1 09:57:12 UTC 2021


Module: Mesa
Branch: main
Commit: a6bcda6a01ffefe8e23357b2da742b8fe89bc63b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a6bcda6a01ffefe8e23357b2da742b8fe89bc63b

Author: Tony Wasserka <tony.wasserka at gmx.de>
Date:   Thu Jul 15 16:36:09 2021 +0200

aco/spill: Change worklist to a single integer

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 | 18 +++++++-----------
 1 file changed, 7 insertions(+), 11 deletions(-)

diff --git a/src/amd/compiler/aco_spill.cpp b/src/amd/compiler/aco_spill.cpp
index fbd396f3579..bf4c8c9da0d 100644
--- a/src/amd/compiler/aco_spill.cpp
+++ b/src/amd/compiler/aco_spill.cpp
@@ -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);
    }
 }



More information about the mesa-commit mailing list