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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |missed-optimization
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2018-07-20
            Summary|Compiler can't think of     |phiopt missed optimization
                   |smaller variable ranges     |of conditional add
     Ever confirmed|0                           |1

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
Sure it does but we 1) cannot make the dereference of t unconditional because
it
may trap, 2) we do not implement the transform

  if ([0, 1] var == 0)
    othervar += 1;

to

  othervar += var ^ 1;

that's a missed optimization in phiopt.  value_replacement handles some
cases but not (for unanalyzed reason):

#define __builtin_guarantee(a) \
    if (!(a)) {                    \
        __builtin_unreachable();   \
    }

void CreateChecksum(int isTestNet, int *t)
{
  __builtin_guarantee(isTestNet == 0 || isTestNet == 1);
  int tem = *t;
  if (isTestNet == 1)
    tem += 1;
  *t = tem;
}

where it could replace the conditional with

  tem += isTestNet;

Reply via email to