https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56511
H.J. Lu <hjl.tools at gmail dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|--- |12.0
Status|UNCONFIRMED |RESOLVED
Resolution|--- |DUPLICATE
--- Comment #5 from H.J. Lu <hjl.tools at gmail dot com> ---
Fixed for GCC 12:
[hjl@gnu-skl-2 gcc]$ cat x2.c
#include <string.h>
typedef float vec __attribute__((vector_size(32)));
typedef struct S {
vec v;
char __attribute__((aligned(__alignof__(vec)))) c[sizeof(vec)];
} S;
void assign_vec(S* s, const vec* v) { s->v = *v; }
void memcpy_vec(S* s, const vec* v) { memcpy(&s->v, v, sizeof(vec)); }
void memcpy_char(S* s, const vec* v) { memcpy(s->c, v, sizeof(vec)); }
[hjl@gnu-skl-2 gcc]$ ./xgcc -B./ -S -O3 -march=haswell x2.c
[hjl@gnu-skl-2 gcc]$ cat x2.s
.file "x2.c"
.text
.p2align 4
.globl assign_vec
.type assign_vec, @function
assign_vec:
.LFB0:
.cfi_startproc
vmovaps (%rsi), %ymm0
vmovaps %ymm0, (%rdi)
vzeroupper
ret
.cfi_endproc
.LFE0:
.size assign_vec, .-assign_vec
.p2align 4
.globl memcpy_vec
.type memcpy_vec, @function
memcpy_vec:
.LFB1:
.cfi_startproc
vmovdqu (%rsi), %ymm15
vmovdqu %ymm15, (%rdi)
vzeroupper
ret
.cfi_endproc
.LFE1:
.size memcpy_vec, .-memcpy_vec
.p2align 4
.globl memcpy_char
.type memcpy_char, @function
memcpy_char:
.LFB2:
.cfi_startproc
vmovdqu (%rsi), %ymm15
vmovdqu %ymm15, 32(%rdi)
vzeroupper
ret
.cfi_endproc
.LFE2:
.size memcpy_char, .-memcpy_char
.ident "GCC: (GNU) 12.0.0 20210805 (experimental) [master revision
f7aa81892eb:82bfff3e5fa:c16f21c7cf97ce48967e42d3b5d22ea169a9c2c8]"
.section .note.GNU-stack,"",@progbits
[hjl@gnu-skl-2 gcc]$
*** This bug has been marked as a duplicate of bug 90773 ***