From fc6b5be666fc9b842a0b0b0f068dd5f098c96ccb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Sch=C3=BCrmann?= Date: Mon, 15 Feb 2021 11:31:13 +0100 Subject: [PATCH] aco: fix assertion in insert_exec_mask pass Fixes: a56ddca4e80a6ef7bb0c44edb4e5b6169510aaca ('aco: make all exec accesses non-temporaries ') Reviewed-by: Rhys Perry Part-of: --- 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; } -- 2.34.1