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 tree-optimization/102819] [11/12 Regression] IFN_COMPLEX_MUL matches things that it shouldn't
Date: Wed, 02 Feb 2022 10:54:44 +0000	[thread overview]
Message-ID: <bug-102819-4-j1FMcEGMLE@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-102819-4@http.gcc.gnu.org/bugzilla/>

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

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Tamar Christina <tnfchris@gcc.gnu.org>:

https://gcc.gnu.org/g:55d83cdf23b5f284b4e0bd0a6d1af3d947b2e7c3

commit r12-6993-g55d83cdf23b5f284b4e0bd0a6d1af3d947b2e7c3
Author: Tamar Christina <tamar.christina@arm.com>
Date:   Wed Feb 2 10:39:03 2022 +0000

    vect: Simplify and extend the complex numbers validation routines.

    This patch boosts the analysis for complex mul,fma and fms in order to
ensure
    that it doesn't create an incorrect output.

    Essentially it adds an extra verification to check that the two nodes it's
going
    to combine do the same operations on compatible values.  The reason it
needs to
    do this is that if one computation differs from the other then with the
current
    implementation we have no way to deal with it since we have to remove the
    permute.

    When we can keep the permute around we can probably handle these by
unrolling.

    While implementing this since I have to do the traversal anyway I took
advantage
    of it by simplifying the code a bit.  Previously we would determine whether
    something is a conjugate and then try to figure out which conjugate it is
and
    then try to see if the permutes match what we expect.

    Now the code that does the traversal will detect this in one go and return
to us
    whether the operation is something that can be combined and whether a
conjugate
    is present.

    Secondly because it does this I can now simplify the checking code itself
to
    essentially just try to apply fixed patterns to each operation.

    The patterns represent the order operations should appear in. For instance
a
    complex MUL operation combines :

      Left 1 + Right 1
      Left 2 + Right 2

    with a permute on the nodes consisting of:

      { Even, Even } + { Odd, Odd  }
      { Even, Odd  } + { Odd, Even }

    By abstracting over these patterns the checking code becomes quite simple.

    As part of this I was checking the order of the operands which was left in
    "slp" order. as in, the same order they showed up in during SLP, which
means
    that the accumulator is first.  However it looks like I didn't document
this
    and the x86 optab was implemented assuming the same order as FMA, i.e. that
    the accumulator is last.

    I have this changed the order to match that of FMA and FMS which corrects
the
    x86 codegen and will update the Arm targets.  This has now also been
    documented.

    gcc/ChangeLog:

            PR tree-optimization/102819
            PR tree-optimization/103169
            * doc/md.texi: Update docs for cfms, cfma.
            * tree-data-ref.h (same_data_refs): Accept optional offset.
            * tree-vect-slp-patterns.cc (is_linear_load_p): Fix issue with
repeating
            patterns.
            (vect_normalize_conj_loc): Remove.
            (is_eq_or_top): Change to take two nodes.
            (enum _conj_status, compatible_complex_nodes_p,
            vect_validate_multiplication): New.
            (class complex_add_pattern, complex_add_pattern::matches,
            complex_add_pattern::recognize, class complex_mul_pattern,
            complex_mul_pattern::recognize, class complex_fms_pattern,
            complex_fms_pattern::recognize, class complex_operations_pattern,
            complex_operations_pattern::recognize, addsub_pattern::recognize):
Pass
            new cache.
            (complex_fms_pattern::matches, complex_mul_pattern::matches): Pass
new
            cache and use new validation code.
            * tree-vect-slp.cc (vect_match_slp_patterns_2,
vect_match_slp_patterns,
            vect_analyze_slp): Pass along cache.
            (compatible_calls_p): Expose.
            * tree-vectorizer.h (compatible_calls_p, slp_node_hash,
            slp_compat_nodes_map_t): New.
            (class vect_pattern): Update signatures include new cache.

    gcc/testsuite/ChangeLog:

            PR tree-optimization/102819
            PR tree-optimization/103169
            * g++.dg/vect/pr99149.cc: xfail for now.
            * gcc.dg/vect/complex/pr102819-1.c: New test.
            * gcc.dg/vect/complex/pr102819-2.c: New test.
            * gcc.dg/vect/complex/pr102819-3.c: New test.
            * gcc.dg/vect/complex/pr102819-4.c: New test.
            * gcc.dg/vect/complex/pr102819-5.c: New test.
            * gcc.dg/vect/complex/pr102819-6.c: New test.
            * gcc.dg/vect/complex/pr102819-7.c: New test.
            * gcc.dg/vect/complex/pr102819-8.c: New test.
            * gcc.dg/vect/complex/pr102819-9.c: New test.
            * gcc.dg/vect/complex/pr103169.c: New test.

  parent reply	other threads:[~2022-02-02 10:54 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-18 18:34 [Bug tree-optimization/102819] New: " rsandifo at gcc dot gnu.org
2021-10-18 20:05 ` [Bug tree-optimization/102819] " tnfchris at gcc dot gnu.org
2021-10-19  7:42 ` rguenth at gcc dot gnu.org
2022-02-02 10:54 ` cvs-commit at gcc dot gnu.org [this message]
2022-02-02 10:54 ` cvs-commit at gcc dot gnu.org
2022-02-02 10:54 ` cvs-commit at gcc dot gnu.org
2022-02-02 10:57 ` [Bug tree-optimization/102819] [11 " tnfchris at gcc dot gnu.org
2022-02-25 12:13 ` cvs-commit at gcc dot gnu.org
2022-02-25 12:13 ` cvs-commit at gcc dot gnu.org
2022-02-25 12:13 ` cvs-commit at gcc dot gnu.org
2022-02-25 12:14 ` tnfchris 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-102819-4-j1FMcEGMLE@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).