https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68130
--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> --- Ok. The FRE2 difference is interesting but ok. We CSE _7 = __builtin_signbit (1.2999999523162841796875e+0); if (_7 != 0) goto <bb 4>; else goto <bb 3>; <bb 3>: <bb 4>: # iftmp.9_8 = PHI <-1.0e+0(2), 1.0e+0(3)> ... <bb 14>: if (_7 != 0) goto <bb 16>; else goto <bb 15>; <bb 15>: <bb 16>: # iftmp.13_15 = PHI <-1.0e+0(14), 1.0e+0(15)> _16 = __builtin_copysignf (-1.2999999523162841796875e+0, iftmp.13_15); to use iftmp.9_8 in the last copysignf statement, removing the PHI node preceeding it as well as the redundant test of _7 != 0. We do this for five cases. The PRE dump difference is pretty unreadable already. So I wonder if the issue reproduces with -fno-tree-pre added. If not I wonder if it reproduces with -fdisable-tree-fre2 or at least -fno-tree-tail-merge. AFAIK x86_64-darwin uses SSE math even with -m32, correct? On x86_64-linux I can't fully get rid of the use of the FP stack (library calls).