https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79119
--- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Hmm: # RANGE [irange] long unsigned int [0, 2305843009213693951][16140901064495857664, +INF] iftmp.0_7 = (long unsigned intD.10) _19; if (iftmp.0_7 > 2305843009213693951) So that is _19 < 0 If I read this correctly. The only reason why it was not converted is because of the /4 that was before. So we have a hole in the range.