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

--- Comment #10 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jakub Jelinek <ja...@gcc.gnu.org>:

https://gcc.gnu.org/g:9030c54d3ff983cf07752173737f627a2e458426

commit r15-8295-g9030c54d3ff983cf07752173737f627a2e458426
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Wed Mar 19 14:26:22 2025 +0100

    i386: Fix up splitters into vptest [PR119357]

    The following testcase ICEs, because the splitters into vptest
    create an invalid instruction.  The operands of all the UNSPEC_PTEST
    using instructions use register_operand and vector_operand predicate,
    these splitters use vector_operand predicate but create vptest
    instruction which has the same argument twice, so one of them needs
    to be in a register.
    The following patch keeps vector_operand predicate on the splitters
    but uses force_reg to force it into a REG if it was a MEM, that results
    in better code generation e.g. on the included testcase, as combine
    can match those even with MEM.
    The difference on the testcase is
    -       vpxor   %xmm0, %xmm0, %xmm0
    -       vpcmpeqb        (%rdi), %xmm0, %xmm0
    -       vpmovmskb       %xmm0, %eax
    -       cmpl    $65535, %eax
    +       vmovdqa (%rdi), %xmm0
    +       vptest  %xmm0, %xmm0
    (- for patch which changes the splitters to
    s/vector_operand/register_operand/ and + for this patch).

    2025-03-19  Jakub Jelinek  <ja...@redhat.com>

            PR target/119357
            * config/i386/sse.md (pmovmskb 0xffff to ptest splitter,
            *pmovsk_ptest_<mode>_avx512): Force operands[0] into a REG.

            * gcc.target/i386/avx512vlbw-pr119357.c: New test.

Reply via email to