Mesa (main): aco: fix RA validation of 16-bit fma_mix operands

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Mar 28 10:24:48 UTC 2022


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

Author: Rhys Perry <pendingchaos02 at gmail.com>
Date:   Wed Mar 23 18:32:06 2022 +0000

aco: fix RA validation of 16-bit fma_mix operands

Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
Reviewed-by: Daniel Schürmann <daniel at schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15562>

---

 src/amd/compiler/aco_validate.cpp | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/amd/compiler/aco_validate.cpp b/src/amd/compiler/aco_validate.cpp
index 695f3c3c67b..6f76b42995d 100644
--- a/src/amd/compiler/aco_validate.cpp
+++ b/src/amd/compiler/aco_validate.cpp
@@ -774,9 +774,13 @@ validate_subdword_operand(chip_class chip, const aco_ptr<Instruction>& instr, un
    if (instr->isSDWA())
       return byte + instr->sdwa().sel[index].offset() + instr->sdwa().sel[index].size() <= 4 &&
              byte % instr->sdwa().sel[index].size() == 0;
-   if (instr->isVOP3P())
+   if (instr->isVOP3P()) {
+      bool fma_mix = instr->opcode == aco_opcode::v_fma_mixlo_f16 ||
+                     instr->opcode == aco_opcode::v_fma_mixhi_f16 ||
+                     instr->opcode == aco_opcode::v_fma_mix_f32;
       return ((instr->vop3p().opsel_lo >> index) & 1) == (byte >> 1) &&
-             ((instr->vop3p().opsel_hi >> index) & 1) == (byte >> 1);
+             ((instr->vop3p().opsel_hi >> index) & 1) == (fma_mix || (byte >> 1));
+   }
    if (byte == 2 && can_use_opsel(chip, instr->opcode, index))
       return true;
 



More information about the mesa-commit mailing list