From 125ce0f909ee91368eac9d2ea8639aee22d2173a Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Wed, 3 Sep 2025 23:39:59 +0200 Subject: [PATCH] r600/sfh: Handle 64 bit comparisons in predicate optimization Signed-off-by: Gert Wollny Part-of: --- src/gallium/drivers/r600/sfn/sfn_instr_alu.h | 1 + src/gallium/drivers/r600/sfn/sfn_peephole.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/gallium/drivers/r600/sfn/sfn_instr_alu.h b/src/gallium/drivers/r600/sfn/sfn_instr_alu.h index 65a1457788c..35e037ca56b 100644 --- a/src/gallium/drivers/r600/sfn/sfn_instr_alu.h +++ b/src/gallium/drivers/r600/sfn/sfn_instr_alu.h @@ -151,6 +151,7 @@ public: static bool from_nir(nir_alu_instr *alu, Shader& shader); int alu_slots() const { return m_alu_slots; } + void set_alu_slots(unsigned slots) { m_alu_slots = slots; } bool split(AluGroup& dest_group); diff --git a/src/gallium/drivers/r600/sfn/sfn_peephole.cpp b/src/gallium/drivers/r600/sfn/sfn_peephole.cpp index 8f57d758dae..b389baf46e1 100644 --- a/src/gallium/drivers/r600/sfn/sfn_peephole.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_peephole.cpp @@ -309,6 +309,13 @@ pred_from_op(EAluOp pred_op, EAluOp op) return op2_prede_int; case op2_setne_int: return op2_pred_setne_int; + + case op2_setge_64: + return op2_pred_setge_64; + case op2_setgt_64: + return op2_pred_setgt_64; + case op2_sete_64: + return op2_pred_sete_64; default: return op0_nop; } @@ -402,6 +409,11 @@ ReplacePredicate::visit(AluInstr *alu) } } + if (alu->alu_slots() > 1) { + m_pred->set_alu_slots(alu->alu_slots()); + m_pred->set_allowed_dest_chan_mask(5); + } + success = true; }