https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63387
--- Comment #5 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- On Mon, 13 Apr 2015, burnus at gcc dot gnu.org wrote: > I am not sure about signalling NAN issues, but doesn't it otherwise also apply > to code like the following? At least in terms of generated assembler, the > result looks the same. > > _Bool foo(float x, float y) { return x != x || y != y; } That's also equivalent in the absence of signaling NaNs (but it won't raise invalid if x is a quiet NaN and y signaling, whereas isunordered should do so if either is signaling, and the pair of isnan tests shouldn't raise invalid at all). If a non-short-circuit OR were used, it would be exactly equivalent to the isunordered call in all cases.