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.

Reply via email to