https://gcc.gnu.org/bugzilla/show_bug.cgi?id=76490
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- Found new range for isize_3: [1, +INF] Found new range for isize_20: [1, +INF] Found new range for isize_5: [1, +INF] Found new range for _12: [0, 2147483646] Found new range for _4: [1, 2147483646] Found new range for isize_3: [1, +INF(OVF)] Found new range for isize_20: [1, +INF(OVF)] Found new range for isize_5: [1, +INF(OVF)] Found new range for _12: [0, +INF(OVF)] Found new range for _4: [0, +INF] Found new range for isize_3: [1, +INF] Found new range for isize_20: [1, +INF] Found new range for isize_5: [1, +INF] Found new range for _12: [0, 2147483646] Found new range for _4: [1, 2147483646] Found new range for isize_3: [1, +INF(OVF)] Found new range for isize_20: [1, +INF(OVF)] ... this happens because intersect_ranges doesn't handle +INF vs. +INF(OVF) correctly (operand_equal_p treats them as equal). I have a patch.