From 528aabb05634e8b014486ba05224f6c60c4d4819 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Thu, 2 Apr 2026 14:29:20 +0100 Subject: [PATCH] aco/ra: fix compact_relocate_vars path for get_reg_for_operand MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rhys Perry Reviewed-by: Daniel Schürmann Part-of: --- src/amd/compiler/aco_register_allocation.cpp | 38 ++++++++++---------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/amd/compiler/aco_register_allocation.cpp b/src/amd/compiler/aco_register_allocation.cpp index 92a717b5853..e99b53fd560 100644 --- a/src/amd/compiler/aco_register_allocation.cpp +++ b/src/amd/compiler/aco_register_allocation.cpp @@ -2004,27 +2004,29 @@ get_reg(ra_ctx& ctx, const RegisterFile& reg_file, Temp temp, unsigned def_size = info.rc.size(); std::vector def_vars; - for (Definition def : instr->definitions) { - if (def.isPrecolored()) { - assert(!regs.contains({def.physReg(), def.size()})); - continue; - } - if (ctx.assignments[def.tempId()].assigned && def.regClass().type() == info.rc.type()) { - def_size += def.regClass().size(); - def_vars.emplace_back(def.tempId(), def.regClass()); - } - } - unsigned killed_op_size = 0; std::vector killed_op_vars; - for (Operand op : instr->operands) { - if (op.isPrecolored()) { - assert(!regs.contains({op.physReg(), op.size()})); - continue; + if (operand_index < 0) { + for (Definition def : instr->definitions) { + if (def.isPrecolored()) { + assert(!regs.contains({def.physReg(), def.size()})); + continue; + } + if (ctx.assignments[def.tempId()].assigned && def.regClass().type() == info.rc.type()) { + def_size += def.regClass().size(); + def_vars.emplace_back(def.tempId(), def.regClass()); + } } - if (op.isTemp() && op.isFirstKillBeforeDef() && op.regClass().type() == info.rc.type()) { - killed_op_size += op.regClass().size(); - killed_op_vars.emplace_back(op.tempId(), op.regClass()); + + for (Operand op : instr->operands) { + if (op.isPrecolored()) { + assert(!regs.contains({op.physReg(), op.size()})); + continue; + } + if (op.isTemp() && op.isFirstKillBeforeDef() && op.regClass().type() == info.rc.type()) { + killed_op_size += op.regClass().size(); + killed_op_vars.emplace_back(op.tempId(), op.regClass()); + } } }