From 343d1731ea6cab1c8874ee7a1af859fd7c9b149a Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Wed, 28 Feb 2024 18:01:07 +0100 Subject: [PATCH] aco/ssa_elimination: check if pseudo scratch reg overwrittes regs used for v_cmpx opt MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: mesa-stable Reviewed-by: Timur Kristóf Reviewed-by: Daniel Schürmann Part-of: (cherry picked from commit 482137402ad12876a47e61536ddc27ef67c170be) --- .pick_status.json | 2 +- src/amd/compiler/aco_ssa_elimination.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 4f846163eed..2912735560d 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -954,7 +954,7 @@ "description": "aco/ssa_elimination: check if pseudo scratch reg overwrittes regs used for v_cmpx opt", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/amd/compiler/aco_ssa_elimination.cpp b/src/amd/compiler/aco_ssa_elimination.cpp index 8229001168d..477b59ba6be 100644 --- a/src/amd/compiler/aco_ssa_elimination.cpp +++ b/src/amd/compiler/aco_ssa_elimination.cpp @@ -398,6 +398,10 @@ try_optimize_branching_sequence(ssa_elimination_ctx& ctx, Block& block, const in regs_intersect(Definition(exec, ctx.program->lane_mask), def); })) break; + + if (instr->isPseudo() && instr->pseudo().needs_scratch_reg && + regs_intersect(exec_copy_def, Definition(instr->pseudo().scratch_sgpr, s1))) + break; } } @@ -437,6 +441,9 @@ try_optimize_branching_sequence(ssa_elimination_ctx& ctx, Block& block, const in for (const Definition& def : instr->definitions) if (regs_intersect(exec_copy_def, def)) return; + if (instr->isPseudo() && instr->pseudo().needs_scratch_reg && + regs_intersect(exec_copy_def, Definition(instr->pseudo().scratch_sgpr, s1))) + return; } /* Check if the instruction may implicitly read VCC, eg. v_cndmask or add with carry.