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

--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
GCC 11 produces:
```
_Z3fooPiS_:
.LFB0:
        .cfi_startproc
        vmovdqu (%rdi), %ymm2
        vmovdqu 32(%rdi), %ymm3
        vpmulld (%rsi), %ymm2, %ymm1
        vpmulld 32(%rsi), %ymm3, %ymm0
        vpaddd  %ymm0, %ymm1, %ymm1
        vmovdqu 64(%rdi), %ymm4
        vpmulld 64(%rsi), %ymm4, %ymm0
        vpaddd  %ymm1, %ymm0, %ymm0
        vmovdqu 96(%rdi), %ymm1
        vpmulld 96(%rsi), %ymm1, %ymm1
        vpaddd  %ymm0, %ymm1, %ymm1
        vextracti128    $0x1, %ymm1, %xmm0
        vpaddd  %xmm1, %xmm0, %xmm0
        vpsrldq $8, %xmm0, %xmm1
        vpaddd  %xmm1, %xmm0, %xmm0
        vpsrldq $4, %xmm0, %xmm1
        vpaddd  %xmm1, %xmm0, %xmm0
        vmovd   %xmm0, %eax
        vzeroupper
        ret
```


While GCC 10 produces:
```
_Z3fooPiS_:
.LFB0:
        .cfi_startproc
        vmovdqu (%rdi), %xmm3
        vmovdqu (%rsi), %xmm4
        vinserti128     $0x1, 16(%rdi), %ymm3, %ymm1
        vinserti128     $0x1, 16(%rsi), %ymm4, %ymm0
        vmovdqu 32(%rdi), %xmm5
        vmovdqu 32(%rsi), %xmm6
        vpmulld %ymm1, %ymm0, %ymm0
        vmovdqu 64(%rdi), %xmm7
        vmovdqu 64(%rsi), %xmm3
        vinserti128     $0x1, 48(%rdi), %ymm5, %ymm2
        vinserti128     $0x1, 48(%rsi), %ymm6, %ymm1
        vmovdqu 96(%rsi), %xmm4
        vmovdqu 96(%rdi), %xmm5
        vpmulld %ymm2, %ymm1, %ymm1
        vinserti128     $0x1, 80(%rdi), %ymm7, %ymm2
        vpaddd  %ymm1, %ymm0, %ymm0
        vinserti128     $0x1, 80(%rsi), %ymm3, %ymm1
        vpmulld %ymm2, %ymm1, %ymm1
        vinserti128     $0x1, 112(%rsi), %ymm4, %ymm2
        vpaddd  %ymm0, %ymm1, %ymm0
        vinserti128     $0x1, 112(%rdi), %ymm5, %ymm1
        vpmulld %ymm2, %ymm1, %ymm1
        vpaddd  %ymm0, %ymm1, %ymm1
        vmovdqa %xmm1, %xmm0
        vextracti128    $0x1, %ymm1, %xmm1
        vpaddd  %xmm1, %xmm0, %xmm0
        vpsrldq $8, %xmm0, %xmm1
        vpaddd  %xmm1, %xmm0, %xmm0
        vpsrldq $4, %xmm0, %xmm1
        vpaddd  %xmm1, %xmm0, %xmm0
        vmovd   %xmm0, %eax
        vzeroupper
        ret
```

Reply via email to