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

--- Comment #4 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Martin Liška from comment #3)
> Started with r236440 and was fixed with r263875.

Thanks Martin - this means both the * 0 added by reassoc and the SLSR issue
are latent.

Found * 0, removing all other ops
Width = 1 was chosen for reassociation
Transforming _12 = _10 * 83886080;
 into _12 = b_lsm.9_34 * 0;

GIMPLE testcase that shows the above on trunk:

unsigned long a;
unsigned b;
long int __GIMPLE (startwith("reassoc"))
f ()
{
  unsigned int _4;
  unsigned int _6;
  unsigned int _10;
  unsigned int _12;
  unsigned int _19;
  unsigned int _33;
  unsigned int _36;
  unsigned long g_21;
  unsigned int b_lsm9_34;

  bb_2:
  b_lsm9_34 = b;
  _36 = b_lsm9_34 * 83886080u;
  _33 = _36 * 83886080u;
  _4 = _33 * 83886080u;
  _10 = _4 * 83886080u;
  _12 = _10 * 83886080u;
  _19 = _12 * 2u;
  _6 = -_19;
  g_21 = (long unsigned int) _6;
  a = g_21;
  return 0l;

}

Reply via email to