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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
  Attachment #39469|0                           |1
        is obsolete|                            |

--- Comment #12 from Richard Biener <rguenth at gcc dot gnu.org> ---
Created attachment 40508
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=40508&action=edit
updated patch

Well, updated patch avoids to regress existing testcases (where they make
sense).

But it doesn't fix the s390 testcase (added as split-path-9.c) given we have

  <bb 4> [85.00%]:
  # i_15 = PHI <i_11(8), 0(3)>
  # prephitmp_19 = PHI <prephitmp_17(8), pretmp_18(3)>
  _2 = prephitmp_19 & 1;
  if (_2 != 0)
    goto <bb 5>; [50.00%]
  else
    goto <bb 6>; [50.00%]

  <bb 5> [42.50%]:
  _3 = prephitmp_19 ^ 1;
  *state_9(D) = _3;

  <bb 6> [85.00%]:
  # prephitmp_17 = PHI <prephitmp_19(4), _3(5)>
  i_11 = i_15 + 1;
  if (i_11 != size_8(D))
    goto <bb 8>; [85.00%]
  else
    goto <bb 7>; [15.00%]

  <bb 8> [72.25%]:
  goto <bb 4>; [100.00%]

where clearly threading is possible (and wanted).  Unfortunately we do a pretty
bad job as followup (for whatever reason).  We fail to transform this to an
early exit of the loop.  Jump threading fails to thread away the & 1 check
as well.

Reply via email to