https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92039
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |needs-reduction --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- _1235 = numsize.165_444 - densize_607; _1236 = retval[_1235]; we compute _1235 to be in [-4,-1]. Directly after unrolling it was [../stdlib/strtod_l.c:1675:9] if (empty_1004 <= i_1232) goto <bb 499>; [80.00%] <bb 499> [local count: 284953]: [../stdlib/strtod_l.c:1676:25] _1235 = i_1232 - empty_1004; [../stdlib/strtod_l.c:1676:22] _1236 = [../stdlib/strtod_l.c:1676:22] retval[_1235]; and forwprop "mangles" it to the above because empty_1004 = densize_425 - numsize.165_444; and i_1232 is zero here. That means the last unrolled iteration isn't reachable. Note we do complete peeling here (keeping the exit checks). I had the impression I disabled this for early unrolling... hmm, I kept it for UL_NO_GROWTH, see PR83202.