https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65270
--- Comment #10 from Jan Hubicka <hubicka at gcc dot gnu.org> --- Hi, while looking for a testcase that would trigger with tree-tail-merge (because gimple-fold seems to also miss MEM_REF merging) I noticed following oddity: struct a { int a[100000]; }; typedef struct a b __attribute__ ((aligned (32))); typedef struct a c __attribute__ ((aligned (8))); typedef struct a d __attribute__ ((aligned (32))); __attribute__ ((used)) t(b *a, int aligned, b *d) { int i,v; c *ptr = a; for (i=0;i<100000;i++) { ptr->a[i]++; } } main() { } here the loop gets vectorized with assumed alignmen 32. Changing declaretion to: t(c *a, int aligned, b *d) produces correct 8 byte alignment loop. Alignment of the type of variable A shall not be used.