From 58e3b1f930feb70f3294180847aa758f0e76fb26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Thu, 7 Mar 2024 15:20:11 +0100 Subject: [PATCH] aco: Allow passing constant operand to is_overwritten_since. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is to make it more intuitive and also consistent with last_writer_idx which does allow constant operands. Signed-off-by: Timur Kristóf Reviewed-by: Georg Lehmann Part-of: --- src/amd/compiler/aco_optimizer_postRA.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/amd/compiler/aco_optimizer_postRA.cpp b/src/amd/compiler/aco_optimizer_postRA.cpp index e67f56e056d..5a5cd293283 100644 --- a/src/amd/compiler/aco_optimizer_postRA.cpp +++ b/src/amd/compiler/aco_optimizer_postRA.cpp @@ -230,11 +230,19 @@ is_overwritten_since(pr_opt_ctx& ctx, PhysReg reg, RegClass rc, const Idx& since return false; } -template bool -is_overwritten_since(pr_opt_ctx& ctx, const T& t, const Idx& idx, bool inclusive = false) +is_overwritten_since(pr_opt_ctx& ctx, const Definition& def, const Idx& idx, bool inclusive = false) { - return is_overwritten_since(ctx, t.physReg(), t.regClass(), idx, inclusive); + return is_overwritten_since(ctx, def.physReg(), def.regClass(), idx, inclusive); +} + +bool +is_overwritten_since(pr_opt_ctx& ctx, const Operand& op, const Idx& idx, bool inclusive = false) +{ + if (op.isConstant()) + return false; + + return is_overwritten_since(ctx, op.physReg(), op.regClass(), idx, inclusive); } void @@ -382,7 +390,7 @@ try_optimize_scc_nocompare(pr_opt_ctx& ctx, aco_ptr& instr) /* Check whether the operands of the writer are overwritten. */ for (const Operand& op : wr_instr->operands) { - if (!op.isConstant() && is_overwritten_since(ctx, op, wr_idx)) + if (is_overwritten_since(ctx, op, wr_idx)) return; } @@ -523,7 +531,7 @@ try_eliminate_scc_copy(pr_opt_ctx& ctx, aco_ptr& instr) /* Verify that the operands of the producer instruction haven't been overwritten. */ for (const Operand& op : producer_instr->operands) { - if (!op.isConstant() && is_overwritten_since(ctx, op, producer_idx, true)) + if (is_overwritten_since(ctx, op, producer_idx, true)) return; }