From 1f2813e103b5e65a26c01c81e1e85953bea7a840 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Thu, 26 Sep 2019 15:38:09 +0100 Subject: [PATCH] aco: don't remove the loop exec mask in transition_to_Exact() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit No pipeline-db changes. Signed-off-by: Rhys Perry Reviewed-by: Daniel Schürmann --- src/amd/compiler/aco_insert_exec_mask.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/amd/compiler/aco_insert_exec_mask.cpp b/src/amd/compiler/aco_insert_exec_mask.cpp index b423c5b9190..155c21a5aa4 100644 --- a/src/amd/compiler/aco_insert_exec_mask.cpp +++ b/src/amd/compiler/aco_insert_exec_mask.cpp @@ -313,7 +313,11 @@ void transition_to_Exact(exec_ctx& ctx, Builder bld, unsigned idx) { if (ctx.info[idx].exec.back().second & mask_type_exact) return; - if (ctx.info[idx].exec.back().second & mask_type_global) { + /* We can't remove the loop exec mask, because that can cause exec.size() to + * be less than num_exec_masks. The loop exec mask also needs to be kept + * around for various uses. */ + if ((ctx.info[idx].exec.back().second & mask_type_global) && + !(ctx.info[idx].exec.back().second & mask_type_loop)) { ctx.info[idx].exec.pop_back(); assert(ctx.info[idx].exec.back().second & mask_type_exact); ctx.info[idx].exec.back().first = bld.pseudo(aco_opcode::p_parallelcopy, bld.def(s2, exec), -- 2.30.2