[Bug tree-optimization/126789] Bogus bool vect_recog_mask_conversion_pattern with AVX512 style masks

"rguenth at gcc dot gnu.org via Gcc-bugs" <[email protected]>
Newsgroups gmane.comp.gcc.bugs
Message-ID <[email protected]/bugzilla/>
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126789

--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
I'm testing a patch for the V2SImode case which we'll code-generate as the
following (with -fno-vect-cost-model):

foo:
.LFB0:
        .cfi_startproc
        vmovupd (%rsi), %xmm2
        vmovddup        %xmm0, %xmm1
        vmovd   %edi, %xmm3
        movabsq $4294967297, %rax
        vpshufd $0xe0, %xmm3, %xmm0
        vcmppd  $1, %xmm1, %xmm2, %k1
        vmovq   (%rdx), %xmm1
        vpcmpgtd        %xmm1, %xmm0, %xmm0
        vmovdqa32       %xmm0, %xmm1{%k1}{z}  (A)
        vmovq   %rax, %xmm0
        vpand   %xmm1, %xmm0, %xmm0
        vmovd   %xmm0, %eax
        vpextrd $1, %xmm0, %edx
        addl    %edx, %eax
        ret

it's nice that we are able to combine the %kN -> SSE mask representation
with the bitwise and using (A).  The V4SImode variant manages the
-1 -> 1 transition with

        vpsrld  $31, %xmm1, %xmm0{%k1}{z}

not sure why we chose

        movabsq $4294967297, %rax
        vmovq   %rax, %xmm0
        vpand   %xmm1, %xmm0, %xmm0

here over

        vpsrld  $31, %xmm0, %xmm0

it's both from a .VCOND_MASK (mask, {1, 1}, {0, 0}) expansion.  With
AVX2 we'll get earlier folding to & { 1, 1, 1, 1 } though.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.