https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89726
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I believe the ix86_expand_floorceildf_32 changes of https://gcc.gnu.org/ml/gcc-patches/2006-10/msg01611.html meant to fix this, but it isn't clear why it actually didn't fail the test. Certainly I don't see how: if (x2 < x) - x2 += 1; + x2 -= -1; could make a difference, when x2 is -1.0 and x is less than -0.0 and greater than -1.0, it is the x - x = x + (-x) = +0.0 case for any finite x. We could certainly add another ix86_sse_copysign_to_positive call for the ceil case after the compensation, which would be just another ior, the question is if we can do better.