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

--- Comment #10 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
But it still can't fix the issue with

void
foo (int* a, int* restrict b)
{
    b[0] = a[0] * a[8];
    b[1] = a[1] * a[9];
    b[2] = a[2] * a[10];
    b[3] = a[11] * a[3];
    b[4] = a[12] * a[4];
    b[5] = a[5] * a[13];
    b[6] = a[6] * a[14];
    b[7] = a[7] * a[15];
}

-O2 -mavx2

foo:
        vmovdqu ymm0, YMMWORD PTR [rdi]
        vmovdqu ymm2, YMMWORD PTR [rdi+32]
        vpblendd        ymm1, ymm2, ymm0, 231
        vpblendd        ymm0, ymm0, ymm2, 231
        vpmulld ymm0, ymm1, ymm0
        vmovdqu YMMWORD PTR [rsi], ymm0
        vzeroupper
        ret

There's 2 redundant vpblendd here.

Reply via email to