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

Uros Bizjak ubizjak@gmail.com
Sun May 10 18:04:47 GMT 2020


On Fri, May 8, 2020 at 4:38 PM Richard Biener <rguenther@suse.de> wrote:
>
> On May 8, 2020 4:28:24 PM GMT+02:00, Alexander Monakov <amonakov@ispras.ru> wrote:
> >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.
>
> The IFNs are supposed to match fmin and fmax from the C standard which IIRC have IEEE semantics.
>
> Note the ISA likely behaves this way because it matches open coded C semantics.
>
> Arm folks added the IFNs so I have to dig up what exactly they were after...
>
> I'd hate to add a third variant here...

So, I found [1], that tries to explain this issue.

[1] https://2pi.dk/2016/05/ieee-min-max

Uros.


More information about the Gcc-patches mailing list