https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114607

            Bug ID: 114607
           Summary: aarch64: Incorrect expansion of svsudot
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Keywords: wrong-code
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rsandifo at gcc dot gnu.org
  Target Milestone: ---
            Target: aarch64*-*-*

svsudot is supposed to expand to USDOT with the second and third arguments
swapped.  However, there is a thinko in the code that does the reversal, making
it a no-op.  Unfortunately, the tests simply accept the buggy form. :-(

For example, gcc.target/aarch64/sve/acle/asm/sudot_s32.c contains:

/*
** sudot_s32_tied1:
**      usdot   z0\.s, z2\.b, z4\.b
**      ret
*/
TEST_TRIPLE_Z (sudot_s32_tied1, svint32_t, svint8_t, svuint8_t,
               z0 = svsudot_s32 (z0, z2, z4),
               z0 = svsudot (z0, z2, z4))

where the usdot z2 and z4 operands should be in the opposite order.

Reply via email to