http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55614
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2012-12-07 CC| |ebotcazou at gcc dot | |gnu.org, jakub at gcc dot | |gnu.org, jamborm at gcc dot | |gnu.org Target Milestone|--- |4.6.4 Summary|vector extensions cause |[4.6/4.7 Regression] vector |movdqa to be generated for |extensions cause movdqa to |memcpy on unaligned buffer |be generated for memcpy on | |unaligned buffer Ever Confirmed|0 |1 --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-12-07 14:05:29 UTC --- Reduced testcase: typedef unsigned int T __attribute__ ((vector_size (16))); extern int rand (); void foo (unsigned char *x, unsigned long y) { union { T v; } r; T e = { 0, rand (), 0, 0 }; r.v = e; while (y >= 16) { __builtin_memcpy (x, &r, 16); x += 16; y -= 16; } } int main () { unsigned char b[32]; foo (b + 1, 16); return b[16]; } Works on trunk, likely (haven't bisected it to the last few revs, so it is range r161958 (last known good) and r161976 (first broken)) introduced by http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=161974 and fixed by http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=186501 (or just made latent?). CCing authors of corresponding changes.