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; }