https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109154
--- Comment #10 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- (In reply to Andrew Macleod from comment #9) > (In reply to Richard Biener from comment #7) > > (In reply to Richard Biener from comment #6) > > > ah, probably it's the missing CSE there: > > > > > > <bb 3> : > > > _1 = (float) l_10; > > > _2 = _1 < 0.0; > > > zone1_17 = (int) _2; > > > if (_1 < 0.0) BTW, I don't think it helps at all here, but casting from l_10 to a float, we know _1 can't be either -0.0 or +-INF or +-NAN. We could add a range-op entry for NOP_EXPR / CONVERT_EXPR to expose this fact. Well, at the very least that it can't be a NAN...in the current representation for frange's.