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

            Bug ID: 111876
           Summary: aarch64: Wrong code for bf16 complex mul/div when the
                    target has +fp16 support.
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: iains at gcc dot gnu.org
  Target Milestone: ---

this is somewhat similar to PR111867, but in this case the issue seems to
happen at expand time.

---- reduced from "bfloat16-complex.c"

volatile __bf16 a = 1.0bf16;
typedef _Complex float __cbf16 __attribute__((__mode__(__BC__)));
volatile __cbf16 b = __builtin_complex (2.0bf16, 3.0bf16);

int main (void)
{
  volatile __cbf16 r ;
  r = a + b;
  r *= r;
  return 0;
}

----

For -march=armv8.4-a+fp16

This lowers to calls to (non-existent libgcc) ___mulbc3 (and __divbc3, when
division is included).

For -march=armv8.4-a

This promotes the bf16 -> float and calls __mulsc3 (which exists)

Reply via email to