https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80248
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2017-03-29 CC| |jakub at gcc dot gnu.org Blocks| |53947 Summary|sparse access to Array of |sparse access to Array of |structures does not |structures does not |vectorize |vectorize using gathers Ever confirmed|0 |1 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- t.cc:20:17: note: not vectorized: not suitable for gather load _2 = f3[_1].x; t.cc:20:17: note: bad data references. that's because vect_check_gather_scatter computes a scale of 12 which isn't supported by the HW (index _1, scale 12). It seems to force a SSA name info->offset (_1) and thus doesn't handle _1 * 3 to make scale == 4 supported. In aos2 you conveniently expose that as a SSA name yourself. Looks like we need to split up scale by eventually emitting a multiplication of the index vector separately. Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53947 [Bug 53947] [meta-bug] vectorizer missed-optimizations