https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92486

--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Note when changing struct s to say

struct s {
    char c;
    int i __attribute__((aligned(128)));
};

you can (if you disable SRA!) observe that RTL expansion copies padding
for aggregate assignments:

g:
.LFB0:
        .cfi_startproc
        movdqa  (%rsi), %xmm0
        movdqa  16(%rsi), %xmm1
        movdqa  32(%rsi), %xmm2
        movdqa  48(%rsi), %xmm3
        movdqa  64(%rsi), %xmm4
...
        movaps  %xmm5, 208(%rdi)
        movaps  %xmm6, 224(%rdi)
        movaps  %xmm7, 240(%rdi)
        ret

so at least there doesn't seem to be middle-end code exploiting the C standards
copy-all-elements interpretation of aggregate assignment.

Reply via email to