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

--- Comment #16 from Eric Botcazou <ebotcazou at gcc dot gnu.org> ---
> Other than that my view is that the GENERIC/GIMPLE side is correct.
> Besides even RTL "high-level" get's this consistent (may_trap_p_1),
> likewise simplify-rtx if my quick survey is correct.

Yes, the RTL middle-end indeed says that LTGT signals on NaNs.

> So IMHO siding with the non-target interpretation feels quite
> natural to me.  rtl.texi has no entry for LTGT and both tree.def
> and rtl.def agree.

IMO that's less clear for rtl.def:

/* This is an ordered NE, ie !UNEQ, ie false for NaN.  */

Do you read "ordered" as "signaling on NaNs"?  Then what about EQ?

And even less clear for tree.def:

/* This is the reverse of uneq_expr.  */

> The only disagreeing part is LTGT_EXPR in generic.texi which is "fuzzy" (says
> unordered but then "With the possible exception of @code{LTGT_EXPR}, all of
> these operations are guaranteed not to generate a floating point exception."
> So even that can be read as "agreement".

IMO it's just aligned with rtl.def/tree.def, i.e. it doesn't really take side.


So we need to modify rtl.def, tree.def and generic.texi to clearly state that
LTGT signals on NaNs, like GE/GT/LE/LT.  And actually fix generic.texi because
LTGT_EXPR is *not* an unordered comparison operator: as rtl.def says, it's the
ordered NE, i.e. it returns false for NaNs.

Reply via email to