[Bug target/101096] New: AVX512 VPMOV instruction should be used to downconvert vectors

ubizjak at gmail dot com gcc-bugzilla@gcc.gnu.org
Wed Jun 16 14:45:28 GMT 2021


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

            Bug ID: 101096
           Summary: AVX512 VPMOV instruction should be used to downconvert
                    vectors
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: ubizjak at gmail dot com
  Target Milestone: ---

Following testcases should use VPMOV downconvert instruction with AVX512VL:

void
foo (unsigned short* p1, unsigned short* p2, char* __restrict p3)
{
    for (int i = 0 ; i != 16; i++)
     p3[i] = p1[i] + p2[i];
     return;
}

void
foo1 (unsigned int* p1, unsigned int* p2, short* __restrict p3)
{
    for (int i = 0 ; i != 8; i++)
     p3[i] = p1[i] + p2[i];
     return;
}

gcc -O3 -mavx512vl:

foo:
        vpbroadcastw    .LC1(%rip), %xmm0
        vpand   16(%rsi), %xmm0, %xmm2
        vpand   (%rsi), %xmm0, %xmm1
        vpackuswb       %xmm2, %xmm1, %xmm1
        vpand   (%rdi), %xmm0, %xmm2
        vpand   16(%rdi), %xmm0, %xmm0
        vpackuswb       %xmm0, %xmm2, %xmm0
        vpaddb  %xmm0, %xmm1, %xmm0
        vmovdqu %xmm0, (%rdx)
        ret

foo1:
        vpbroadcastd    .LC3(%rip), %xmm0
        vpand   16(%rsi), %xmm0, %xmm2
        vpand   (%rsi), %xmm0, %xmm1
        vpackusdw       %xmm2, %xmm1, %xmm1
        vpand   (%rdi), %xmm0, %xmm2
        vpand   16(%rdi), %xmm0, %xmm0
        vpackusdw       %xmm0, %xmm2, %xmm0
        vpaddw  %xmm0, %xmm1, %xmm0
        vmovdqu %xmm0, (%rdx)
        ret


More information about the Gcc-bugs mailing list