Mesa (master): aco: fix assertion in insert_exec_mask pass

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Feb 15 20:02:11 UTC 2021


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

Author: Daniel Schürmann <daniel at schuermann.dev>
Date:   Mon Feb 15 11:31:13 2021 +0100

aco: fix assertion in insert_exec_mask pass

Fixes: a56ddca4e80a6ef7bb0c44edb4e5b6169510aaca ('aco: make all exec accesses non-temporaries ')
Reviewed-by: Rhys Perry <pendingchaos02 at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9047>

---

 src/amd/compiler/aco_insert_exec_mask.cpp | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/amd/compiler/aco_insert_exec_mask.cpp b/src/amd/compiler/aco_insert_exec_mask.cpp
index 6974e576673..d6f7f921756 100644
--- a/src/amd/compiler/aco_insert_exec_mask.cpp
+++ b/src/amd/compiler/aco_insert_exec_mask.cpp
@@ -579,8 +579,11 @@ unsigned add_coupling_code(exec_ctx& ctx, Block* block,
       for (unsigned i = 0; i < num_exec_masks; i++) {
          /* skip trivial phis */
          if (ctx.info[preds[0]].exec[i].first == ctx.info[preds[1]].exec[i].first) {
-            assert(ctx.info[preds[0]].exec[i].second == ctx.info[preds[1]].exec[i].second);
-            ctx.info[idx].exec.emplace_back(ctx.info[preds[0]].exec[i]);
+            Temp t = ctx.info[preds[0]].exec[i].first;
+            /* discard/demote can change the state of the current exec mask */
+            assert(!t.id() || ctx.info[preds[0]].exec[i].second == ctx.info[preds[1]].exec[i].second);
+            uint8_t mask = ctx.info[preds[0]].exec[i].second & ctx.info[preds[1]].exec[i].second;
+            ctx.info[idx].exec.emplace_back(t, mask);
             continue;
          }
 



More information about the mesa-commit mailing list