https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107591
--- Comment #13 from Andrew Macleod <amacleod at redhat dot com> --- (In reply to Jakub Jelinek from comment #12) > (In reply to Andrew Macleod from comment #11) > > no, I meant in addition to the VREL_EQ. so > > if (rel == VREL_EQ && op1_range != op2_range) > > then you know you have something like if (x == y) z=x*y and may have > > to check for various signed zero cobinations in each range, > > whereas is op1_range == op2_range in this case, it should be perfectly > > safe.. > > I don't understand. Let's modify the testcase to: > I'd expect that fold_range on the x * y should see trio.op1_op2 () == VREL_EQ > because of the guarding x == y condition. And the ranges of both are > [-13.f, 26.f] +-NAN too. Still, x could be -0.0f and y 0.0f or vice versa, > and so > x * y could be -0.0f, so we need [-0.f, 676.f] +-NAN. While if it is x * x, > we know the result will have always sign bit of 0 (except if NAN), so [0.f, > 676.f] +-NAN. gah. Clearly it is I who does not understand. -0.0 and +0.0 interactions remind me of all the signed single bit crud we (ie Aldy) went thru. The same team must have come up with both concepts :-P At least they deserve the same award. Move along and ignore me.