http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43225
--- Comment #4 from Alexander Strange <astrange at ithinksw dot com> 2011-03-29 20:39:28 UTC --- Better source: #include <emmintrin.h> struct a1 { char l[16];} __attribute__((aligned)); struct a2 { __m128i l; } __attribute__((aligned)); void f1(struct a1 *a, struct a1 *b) { *a = *b; } void f2(struct a2 *a, struct a2 *b) { *a = *b; } void f3(__m128i *a, __m128i *b) { *a = *b; } Code is the same as above in svn. LLVM uses movaps for all three functions.