From 9e5f311efec13a13f27641df3b153f3fcfad741c Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Mon, 15 Aug 2022 13:26:23 +0200 Subject: [PATCH] aco: Check that we don't override exec_val operands during branching sequence optimization. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes: baab6f18c91 ("aco: Optimize branching sequence during SSA elimination.") Signed-off-by: Georg Lehmann Reviewed-by: Timur Kristóf Part-of: --- src/amd/compiler/aco_ssa_elimination.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/amd/compiler/aco_ssa_elimination.cpp b/src/amd/compiler/aco_ssa_elimination.cpp index ff74585cc67..f82058a6c44 100644 --- a/src/amd/compiler/aco_ssa_elimination.cpp +++ b/src/amd/compiler/aco_ssa_elimination.cpp @@ -417,6 +417,13 @@ try_optimize_branching_sequence(ssa_elimination_ctx& ctx, Block& block, const in } } + if (save_original_exec) { + /* We insert the exec copy before exec_val, so exec_val can't use those registers. */ + for (const Operand& op : exec_val->operands) + if (regs_intersect(exec_copy_def, op)) + return; + } + /* Reassign the instruction to write exec directly. */ exec_val->definitions[0] = Definition(exec, ctx.program->lane_mask);