https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70729
--- Comment #7 from rguenther at suse dot de <rguenther at suse dot de> --- On Tue, 19 Apr 2016, ienkovich at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70729 > > Ilya Enkovich <ienkovich at gcc dot gnu.org> changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > CC| |ienkovich at gcc dot gnu.org > > --- Comment #5 from Ilya Enkovich <ienkovich at gcc dot gnu.org> --- > (In reply to Richard Biener from comment #2) > > Index: gcc/tree-ssa-loop-im.c > > =================================================================== > > --- gcc/tree-ssa-loop-im.c (revision 235201) > > +++ gcc/tree-ssa-loop-im.c (working copy) > > @@ -2198,6 +2198,9 @@ ref_indep_loop_p (struct loop *loop, im_ > > { > > gcc_checking_assert (MEM_ANALYZABLE (ref)); > > > > + if (loop->safelen == INT_MAX) > > + return true; > > + > > return ref_indep_loop_p_2 (loop, ref, false); > > } > > > > > > fixes this. But better abstract loop->safelen == INT_MAX into a predicate > > in cfgloop.h. > > > > I believe any nonzero value should be good enough. Any positive value I suppose. But yes, if the reference address is invariant then if safelen is > 0 it doesn't conflict with any iteration. I will test a patch.