[PATCH] make minmax detection work with FMIN/FMAX IFNs

Alexander Monakov amonakov@ispras.ru
Fri May 8 14:28:24 GMT 2020


On Fri, 8 May 2020, Uros Bizjak wrote:

> > Am I missing something?
> 
> Is the above enough to declare min/max as IEEE compliant?

No. SSE min/max instructions semantics match C expression x < y ? x : y.
IEEE min/max operations are commutative when exactly one operand is a NaN,
and so are C fmin/fmax functions:

    fmin(x, NaN) == fmin(NaN, x) == x   // x is not a NaN

In contrast, (x < y ? x : y) always returns y when x or y is a NaN, and
likewise the corresponding SSE instructions are not commutative.

Therefore they are explicitly non-compliant in presence of NaNs.

I don't know how GCC defines the semantics of GIMPLE min/max IFNs.

Alexander


More information about the Gcc-patches mailing list