https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63184
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- Ok, on trunk we now lower addresses somewhat but that doesn't help as we are still faced with i.0_3 = i; _4 = (sizetype) i.0_3; _5 = _4 + 1; _6 = _5 * 4; _7 = &a[1] + _6; _8 = i.0_3 + 2; _12 = (sizetype) _8; _13 = _12 * 4; _9 = &a + _13; if (_7 != _9) where FRE/PRE cannot see any equivalences, reassoc doesn't do anything and SLSR does - _13 = _12 * 4; + _13 = _6 + 4; but that's too late or rather DOM doesn't figure out the equivalence of &a + _6 + 4 and &a[1] + _6 (not that I see how it could).