On Tue, Aug 20, 2019 at 11:18:38AM +0200, Ilya Leoshkevich wrote: > Currently it's not clear whether or not min, max and ltgt should raise > floating point exceptions when dealing with qNaNs. > > Right now a lot of code assumes that LTGT is signaling: in particular, > it's generated for ((x < y) || (x > y)), which is signaling. The > behavior of MIN/MAX is (intentionally?) left unspecified, according to > commit 64dd117734d0 ("Unconditionally use MAX_EXPR/MIN_EXPR for MAX/MIN > intrinsics").
Btw, this is not the difference between LTGT and NE, which is exactly the same difference as that between LT and UNLT: if NaNs are allowed, the first is false for unordered, while the second is true. If NaNs are not allowed, only one of the two is generated. (0 UNORD) LT UNLT EQ UNEQ LE UNLE GT UNGT LTGT NE GE UNGE (ORD 1) There is currently no way to say (in trees or gimple or rtl) whether comparisons are signaling ("ordered", generate a trap on an unordered result). I am working on this, but :-) Segher