https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89008
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |wschmidt at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Eventually the issue also just became latent. SLSR does Replacing: _7 = _12 * 83886080; With: _7 = _12; Replacing: _19 = _12 * 2; With: _19 = _2; where the latter is bogus replacing 0 with 4. Eventually SLSR is confused by _12 = b_lsm.9_34 * 0; being present in the IL, not sure. IL before SLSR: _12 = b_lsm.9_34 * 0; ... _2 = _12 + 4; ... _19 = _12 * 2; _6 = -_19; g_21 = (long unsigned int) _6; a = g_21; possibly checks some multiple-of which breaks down with zero. On trunk the * 0 is gone (possibly the "fix").