http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49628
--- Comment #7 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-07-05 08:53:46 UTC --- (In reply to comment #5) > (In reply to comment #4) > > > I wonder where we are supposed to set GROUP_SIZE here > In vect_analyze_data_ref_access(), > but your patch does this: > > /* Allow invariant loads in loops. */ > if (loop_vinfo && dr_step == 0) > return DR_IS_READ (dr); > > preventing detection of interleaving groups for invariant loads. Which is ok, > since you don't support them anyway. Yeah, I noticed we don't vectorize loops similar to struct X { float values[4]; }; void foo (struct X * dst, struct X * src, int n) { int i; for (i = 0; i < n; ++i) { dst->values[i*4] = src->values[0]; dst->values[i*4+1] = src->values[1]; dst->values[i*4+2] = src->values[2]; dst->values[i*4+3] = src->values[3]; } } with different reasons based on the signedness of i (ugh). We do vectorize the above with SLP when LIM/PRE move the loads from src out of the loop though.