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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |NEW
         Resolution|FIXED                       |---
   Target Milestone|9.0                         |---

--- Comment #8 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Well it was just this case that was fixed.
here is another one which is still broken:
unsigned int
adds_shift_ext ( unsigned long long a, unsigned short b, unsigned c)
{
 unsigned long long  d = (a - ((unsigned long long)b << 3));

  if (d == 0)
    return a + c + b;
  else
    return b + d + c;
}

Note I think there is a missed reassociation/code hoisting too.

  <bb 3> [local count: 536870913]:
  _3 = (unsigned int) a_11(D);
  _4 = _3 + c_13(D);
  _15 = _4 + _8;
  goto <bb 5>; [100.00%]

  <bb 4> [local count: 536870913]:
  _7 = (unsigned int) d_12;
  _17 = _8 + c_13(D);
  _14 = _7 + _17;

c_13(D) + _8 is full redundant here

Reply via email to