https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103683
--- Comment #1 from joseph at codesourcery dot com <joseph at codesourcery dot com> --- (x > 1) is expected to raise invalid for a quiet NaN, so the two functions are different in the absence of -fno-trapping-math, whether or not signaling NaNs are enabled. ((!__builtin_isnan (x)) && x > 1) is equivalent to __builtin_isgreater (x, 1.0) and could be optimized accordingly for -fno-signaling-nans, however. (With signaling NaNs, you have the issue that the first expression doesn't raise invalid for a signaling NaN but the second does.)