https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114589

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Blocks|                            |85316

--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> ---
So when doing the sinking it's too late since there's no VRP between early
sinking and late unrolling and also threadfull doesn't figure out

  <bb 3> [local count: 105119324]:
  _11 = &o_3(D)->val;
  _12 = 1;
  _13 = 4;
  _10 = _11 + 4;
  ivtmp.11_14 = (unsigned long) _11;

  <bb 4> [local count: 955630224]:
  # ivtmp.11_17 = PHI <ivtmp.11_2(6), ivtmp.11_14(3)>
  _18 = (void *) ivtmp.11_17;
  i_6 = MEM[(const int *)_18];
  f (i_6);
  ivtmp.11_2 = ivtmp.11_17 + 4;
  __for_begin_19 = (const int *) ivtmp.11_2;
  if (__for_begin_19 != _10)
    goto <bb 6>; [89.00%]
  else
    goto <bb 5>; [11.00%]

  <bb 6> [local count: 850510900]:
  goto <bb 4>; [100.00%]

but IIRC it doesn't consider the loop entry "fallthru" as "threading" source.

Nevertheless I have a fix for the sinking issue.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85316
[Bug 85316] [meta-bug] VRP range propagation missed cases

Reply via email to