http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45833
rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rsandifo at gcc dot gnu.org --- Comment #3 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> --- Same thing without a union: struct v { int v[4]; } __attribute__ ((aligned (4 * sizeof (int)))); void f (struct v *x, struct v *y, struct v *z) { for (int i = 0; i < 4; i++) x->v[i] = y->v[i] + z->v[i]; } produces (with -msee4.2): leaq 16(%rsi), %rcx leaq 16(%rdi), %rax cmpq %rcx, %rdi setae %r8b cmpq %rsi, %rax setbe %cl orb %cl, %r8b je .L5 leaq 16(%rdx), %rcx cmpq %rcx, %rdi setae %cl cmpq %rdx, %rax setbe %al orb %al, %cl je .L5 vmovdqa (%rsi), %xmm0 vpaddd (%rdx), %xmm0, %xmm0 vmovaps %xmm0, (%rdi) ret ...