public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "cvs-commit at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug target/109973] [13/14 Regression] Wrong code for AVX2 since 13.1 by combining VPAND and VPTEST since r13-2006-ga56c1641e9d25e
Date: Thu, 22 Jun 2023 06:44:08 +0000	[thread overview]
Message-ID: <bug-109973-4-UbD5VifEKg@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-109973-4@http.gcc.gnu.org/bugzilla/>

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

--- Comment #10 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Roger Sayle <sayle@gcc.gnu.org>:

https://gcc.gnu.org/g:5322f009e8f7d1c7a1c9aab7cb4c90c433398fdd

commit r14-2030-g5322f009e8f7d1c7a1c9aab7cb4c90c433398fdd
Author: Roger Sayle <roger@nextmovesoftware.com>
Date:   Thu Jun 22 07:43:07 2023 +0100

    i386: Convert ptestz of pandn into ptestc.

    This patch is the next installment in a set of backend patches around
    improvements to ptest/vptest.  A previous patch optimized the sequence
    t=pand(x,y); ptestz(t,t) into the equivalent ptestz(x,y), using the
    property that ZF is set to (X&Y) == 0.  This patch performs a similar
    transformation, converting t=pandn(x,y); ptestz(t,t) into the (almost)
    equivalent ptestc(y,x), using the property that the CF flags is set to
    (~X&Y) == 0.  The tricky bit is that this sets the CF flag instead of
    the ZF flag, so we can only perform this transformation when we can
    also convert the flags consumer, as well as the producer.

    For the test case:

    int foo (__m128i x, __m128i y)
    {
      __m128i a = x & ~y;
      return __builtin_ia32_ptestz128 (a, a);
    }

    With -O2 -msse4.1 we previously generated:

    foo:    pandn   %xmm0, %xmm1
            xorl    %eax, %eax
            ptest   %xmm1, %xmm1
            sete    %al
            ret

    with this patch we now generate:

    foo:    xorl    %eax, %eax
            ptest   %xmm0, %xmm1
            setc    %al
            ret

    At the same time, this patch also provides alternative fixes for
    PR target/109973 and PR target/110118, by recognizing that ptestc(x,x)
    always sets the carry flag (X&~X is always zero).  This is achieved
    both by recognizing the special case in ix86_expand_sse_ptest and with
    a splitter to convert an eligible ptest into an stc.

    2023-06-22  Roger Sayle  <roger@nextmovesoftware.com>
                Uros Bizjak  <ubizjak@gmail.com>

    gcc/ChangeLog
            * config/i386/i386-expand.cc (ix86_expand_sse_ptest): Recognize
            expansion of ptestc with equal operands as producing const1_rtx.
            * config/i386/i386.cc (ix86_rtx_costs): Provide accurate cost
            estimates of UNSPEC_PTEST, where the ptest performs the PAND
            or PAND of its operands.
            * config/i386/sse.md (define_split): Transform CCCmode UNSPEC_PTEST
            of reg_equal_p operands into an x86_stc instruction.
            (define_split): Split pandn/ptestz/set{n?}e into ptestc/set{n?}c.
            (define_split): Similar to above for strict_low_part destinations.
            (define_split): Split pandn/ptestz/j{n?}e into ptestc/j{n?}c.

    gcc/testsuite/ChangeLog
            * gcc.target/i386/avx-vptest-4.c: New test case.
            * gcc.target/i386/avx-vptest-5.c: Likewise.
            * gcc.target/i386/avx-vptest-6.c: Likewise.
            * gcc.target/i386/pr109973-1.c: Update test case.
            * gcc.target/i386/pr109973-2.c: Likewise.
            * gcc.target/i386/sse4_1-ptest-4.c: New test case.
            * gcc.target/i386/sse4_1-ptest-5.c: Likewise.
            * gcc.target/i386/sse4_1-ptest-6.c: Likewise.

  parent reply	other threads:[~2023-06-22  6:44 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-26  0:38 [Bug rtl-optimization/109973] New: Wrong code for AVX2 since 13.1 by combining VPAND and VPTEST benjsith at gmail dot com
2023-05-26  0:42 ` [Bug rtl-optimization/109973] " benjsith at gmail dot com
2023-05-26  0:47 ` [Bug target/109973] [13/14 Regression] " pinskia at gcc dot gnu.org
2023-05-26  6:31 ` [Bug target/109973] [13/14 Regression] Wrong code for AVX2 since 13.1 by combining VPAND and VPTEST since r13-2006-ga56c1641e9d25e rguenth at gcc dot gnu.org
2023-05-26  6:56 ` jakub at gcc dot gnu.org
2023-05-26 12:06 ` benjsith at gmail dot com
2023-05-29 18:24 ` roger at nextmovesoftware dot com
2023-05-30 13:44 ` cvs-commit at gcc dot gnu.org
2023-06-01 14:12 ` cvs-commit at gcc dot gnu.org
2023-06-03 18:01 ` benjsith at gmail dot com
2023-06-04 11:01 ` cvs-commit at gcc dot gnu.org
2023-06-22  6:44 ` cvs-commit at gcc dot gnu.org [this message]
2023-07-03 13:28 ` [Bug target/109973] [13 " roger at nextmovesoftware dot com
2023-07-03 13:43 ` jakub at gcc dot gnu.org
2023-07-20  7:28 ` rguenth at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-109973-4-UbD5VifEKg@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).