summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Schürmann <daniel@schuermann.dev>2021-02-15 11:31:13 +0100
committerMarge Bot <eric+marge@anholt.net>2021-02-15 19:50:16 +0000
commitfc6b5be666fc9b842a0b0b0f068dd5f098c96ccb (patch)
tree876b166ef013d8d969d3b8597cc5fd7913d4a71f
parentddce1ec5f58a3b9a57810a170c95beae0b6a817f (diff)
aco: fix assertion in insert_exec_mask pass
Fixes: a56ddca4e80a6ef7bb0c44edb4e5b6169510aaca ('aco: make all exec accesses non-temporaries ') Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9047>
-rw-r--r--src/amd/compiler/aco_insert_exec_mask.cpp7
1 files 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;
}