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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2024-01-29
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed.   This is a missed phiopt (or operation sinking) of

  if (r.1_90 < 0)
    goto <bb 6>; [41.00%]
  else
    goto <bb 7>; [59.00%]

  <bb 6> [local count: 391324129]:
  _91 = _89 ^ 79764919;

  <bb 7> [local count: 954449104]:
  # prephitmp_92 = PHI <_91(6), _89(5)>

to sth like

  if (r.1_90 < 0)
    goto <bb 6>; [41.00%]
  else
    goto <bb 7>; [59.00%]

  <bb 6> [local count: 391324129]:

  <bb 7> [local count: 954449104]:
  # prephitmp_91 = PHI <79764919(6), 0(5)>
  _92 = _89 ^ prephitmp_xx;

on some archs the conditional constant might be generated by a
conditional add of 79764919 to zero.

Whether this is better suited for GIMPLE or RTL if-conversion remains to be
seen.

That splitting the expression helps is just luck.

Reply via email to