https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107569
--- Comment #5 from Andrew Macleod <amacleod at redhat dot com> --- (In reply to Jakub Jelinek from comment #4) > The cdce case is something I've mentioned today: > https://gcc.gnu.org/pipermail/gcc-patches/2022-November/605338.html > The comparisons in there are artificial and so unlike user comparisons we > should (if they were marked somehow) be able to optimize them away if frange > can prove their result. > But that isn't something happening on the #c0 testcase, is it? in vrp2 I see: 384 range_of_stmt () at stmt if (_9 u>= 0.0) 385 range_of_expr(_9) at stmt if (_9 u>= 0.0) TRUE : (385) range_of_expr (_9) [frange] double [-0.0 (-0x0.0p+0), +Inf] +-NAN TRUE : (384) range_of_stmt () [irange] bool VARYING so we think that [frange] double [-0.0 (-0x0.0p+0), +Inf] +-NAN u>= 0.0 does not fold. possibly some signalling NaN thing not allowing us to remove it?