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 ```