https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96109
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- OK, it's indeed wrong which means we'd fall through the checks that prevent SPARC from vectorizing here but then we'll create an unaligned access anyway (because VMAT_STRIDED_SLP is too lazy to figure out appropriate alignment). We're also assuming element alignment there. static double x[1024], y[1024]; void __attribute__((noipa)) foo () { for (int i = 0; i < 511; ++i) { x[2*i] = y[1022 - 2*i - 1]; x[2*i+1] = y[1022 - 2*i]; } } int main() { for (int i = 0; i < 1024; ++i) x[i] = 0, y[i] = i; foo (); for (int i = 0; i < 1022; ++i) if (x[i] != y[1022 - (i^1)]) __builtin_abort (); if (x[1022] != 0 || x[1023] != 0) __builtin_abort (); return 0; }