https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109154
--- Comment #31 from Jakub Jelinek <jakub at gcc dot gnu.org> --- On the #c28 testcase, my #c23 patch seems to improve something only visible in the details of the evrp dump: zone1_12 : [irange] int [0, 1] NONZERO 0x1 -2->3 (T) _1 : [frange] float [-Inf, -0.0 (-0x0.0p+0)] +2->3 (T) _1 : [frange] float [-Inf, -1.40129846432481707092372958328991613128026194187651577176e-45 (-0x0.8p-148)] +2->3 (T) _2 : [irange] _Bool [1, 1] 2->4 (F) _1 : [frange] float [-0.0 (-0x0.0p+0), +Inf] +-NAN So, at least it knows that _2 = _1 < 0.0; is true on that edge, which is a progress. But seems it doesn't know that zone1_12 = (int) _2; is also int [1, 1] there and so the # iftmp.0_8 = PHI <zone1_12(3), 1(2)> range would be int [1, 1] too. I think we are here outside of the frange stuff and into GORI. Andrew, could you please have a look?