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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |NEW

--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
if-combine is combining parts of

            if( (red_cost < 0 && arc->ident == 1)
                || (red_cost > 0 && arc->ident == 2) )
            {

to

  if (red_cost_86 < 0)
    goto <bb 17>;
  else
    goto <bb 18>;

  <bb 17>:
  if (_23 == 1)
    goto <bb 19>;
  else
    goto <bb 20>;

  <bb 18>:
  _340 = _23 == 2;
  _341 = red_cost_86 > 0;
  _338 = _340 & _341;
  if (_338 != 0)
    goto <bb 19>;
  else
    goto <bb 20>;

the guard could be written as

  red_cost != 0 && arc->ident == 1 + (red_cost > 0)

before if-combine we see

  red_cost_86 = _27 + _29;
  if (red_cost_86 < 0)
    goto <bb 17>;
  else
    goto <bb 18>;

  <bb 17>:
  if (_23 == 1)
    goto <bb 20>;
  else
    goto <bb 21>;

  <bb 18>:
  if (red_cost_86 > 0)
    goto <bb 19>;
  else
    goto <bb 21>;

  <bb 19>:
  if (_23 == 2)
    goto <bb 20>;
  else
    goto <bb 21>;

Reply via email to