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

--- Comment #3 from Wilco <wilco at gcc dot gnu.org> ---
This is a latent issue with zero handling for decimal float, this looks wrong:

/* Return TRUE if rtx X is immediate constant 0.0 (but not in Decimal
   Floating Point).  */
bool
aarch64_float_const_zero_rtx_p (rtx x)
{
  /* 0.0 in Decimal Floating Point cannot be represented by #0 or
     zr as our callers expect, so no need to check the actual
     value if X is of Decimal Floating Point type.  */
  if (GET_MODE_CLASS (GET_MODE (x)) == MODE_DECIMAL_FLOAT)
    return false;

When I comment out this if-statement, it correctly emits a movi s15, 0 as using
alt 0 in movsd. With this fixed, I think the if (!DECIMAL_FLOAT_MODE_P (mode))
in aarch64_valid_fp_move() may no longer be necessary as a workaround.

Reply via email to