https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65310
Bug ID: 65310 Summary: vectorizer uses wrong alignment Product: gcc Version: 5.0 Status: UNCONFIRMED Keywords: wrong-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: rguenth at gcc dot gnu.org Noticed by Jan Hubicka in PR65270: 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.