https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59124
--- Comment #22 from Manuel López-Ibáñez <manu at gcc dot gnu.org> --- (In reply to baoshan from comment #21) > Don't you think the range value is strange? how it is possible the range > value is so big according the code? j = i - 1 is actually j = i + 4294967295 because of unsigned. Thus the problematic ranges: [test.c:9:13] # RANGE [4294967291, 4294967295] _51 = i_2 + 4294967290; are actually: [test.c:9:13] # RANGE [-5, -1] _51 = i_2 - 6; but this code should have not been generated. Those ranges do seem suspicious. Finding out how that block ends up with those ranges would be helpful. You probably need to debug vrp or (using -fopt-info) the point where gcc gives: test.c:7:3: note: loop turned into non-loop; it never loops. test.c:7:3: note: loop with 5 iterations completely unrolled