https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116213
--- Comment #5 from Richard Biener <rguenth at gcc dot gnu.org> --- So the main issue is that vrange::~vrange keeps D.3193 aliased as it escapes there. Then we do not disambiguate it against a call to free () (in the reduced testcase - probably a bit more complicated in the original). And for PRE there's still a loop that's not unrolled where we cannot look through possibly aliasing refs. The original testcase hardly resembles the situation in the reduced one besides the initial slew of clobbers from an unrolled loop.