Module: Mesa
Branch: main
Commit: fd3ea4ffc288002f0f0084d4d2776ed3c18c5cb8
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=fd3ea4ffc288002f0f0084d4d2776ed3c18c5cb8

Author: Georg Lehmann <[email protected]>
Date:   Fri Mar 24 12:43:35 2023 +0100

aco: clean up to_mad_mix

These instructions are 32bit, so they don't support opsel anyway.

Reviewed-by: Rhys Perry <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22103>

---

 src/amd/compiler/aco_optimizer.cpp | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/src/amd/compiler/aco_optimizer.cpp 
b/src/amd/compiler/aco_optimizer.cpp
index 68f72ca7eb1..3081975b957 100644
--- a/src/amd/compiler/aco_optimizer.cpp
+++ b/src/amd/compiler/aco_optimizer.cpp
@@ -3920,10 +3920,7 @@ can_use_mad_mix(opt_ctx& ctx, aco_ptr<Instruction>& 
instr)
        instr->definitions[0].isPrecise())
       return false;
 
-   if (instr->isVOP3())
-      return !instr->valu().omod && !instr->valu().opsel[3];
-
-   return instr->format == Format::VOP2;
+   return !instr->valu().omod && !instr->isSDWA() && !instr->isDPP();
 }
 
 void
@@ -3934,20 +3931,15 @@ to_mad_mix(opt_ctx& ctx, aco_ptr<Instruction>& instr)
    aco_ptr<VALU_instruction> vop3p{
       create_instruction<VALU_instruction>(aco_opcode::v_fma_mix_f32, 
Format::VOP3P, 3, 1)};
 
-   vop3p->opsel_lo = instr->isVOP3() ? ((instr->valu().opsel & 0x7) << (is_add 
? 1 : 0)) : 0x0;
-   vop3p->opsel_hi = 0x0;
    for (unsigned i = 0; i < instr->operands.size(); i++) {
       vop3p->operands[is_add + i] = instr->operands[i];
       vop3p->neg_lo[is_add + i] = instr->valu().neg[i];
       vop3p->neg_hi[is_add + i] = instr->valu().abs[i];
-      vop3p->opsel_lo |= (instr->isSDWA() && instr->sdwa().sel[i].offset()) << 
(is_add + i);
    }
    if (instr->opcode == aco_opcode::v_mul_f32) {
-      vop3p->opsel_hi &= 0x3;
       vop3p->operands[2] = Operand::zero();
       vop3p->neg_lo[2] = true;
    } else if (is_add) {
-      vop3p->opsel_hi &= 0x6;
       vop3p->operands[0] = Operand::c32(0x3f800000);
       if (instr->opcode == aco_opcode::v_sub_f32)
          vop3p->neg_lo[2] ^= true;
@@ -3955,7 +3947,7 @@ to_mad_mix(opt_ctx& ctx, aco_ptr<Instruction>& instr)
          vop3p->neg_lo[1] ^= true;
    }
    vop3p->definitions[0] = instr->definitions[0];
-   vop3p->clamp = instr->isVOP3() && instr->valu().clamp;
+   vop3p->clamp = instr->valu().clamp;
    instr = std::move(vop3p);
 
    ctx.info[instr->definitions[0].tempId()].label &= label_f2f16 | label_clamp 
| label_mul;

Reply via email to