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

--- Comment #4 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Richard Sandiford <rsand...@gcc.gnu.org>:

https://gcc.gnu.org/g:10833849b55401a52f2334eb032a70beb688e9fc

commit r12-5612-g10833849b55401a52f2334eb032a70beb688e9fc
Author: Richard Sandiford <richard.sandif...@arm.com>
Date:   Tue Nov 30 09:52:29 2021 +0000

    vect: Support gather loads with SLP

    This patch adds SLP support for IFN_GATHER_LOAD.  Like the SLP
    support for IFN_MASK_LOAD, it works by treating only some of the
    arguments as child nodes.  Unlike IFN_MASK_LOAD, it requires the
    other arguments (base, scale, and extension type) to be the same
    for all calls in the group.  It does not require/expect the loads
    to be in a group (which probably wouldn't make sense for gathers).

    I was worried about the possible alias effect of moving gathers
    around to be part of the same SLP group.  The patch therefore
    makes vect_analyze_data_ref_dependence treat gathers and scatters
    as a top-level concern, punting if the accesses aren't completely
    independent and if the user hasn't told us that a particular
    VF is safe.  I think in practice we already punted in the same
    circumstances; the idea is just to make it more explicit.

    gcc/
            PR tree-optimization/102467
            * doc/sourcebuild.texi (vect_gather_load_ifn): Document.
            * tree-vect-data-refs.c (vect_analyze_data_ref_dependence):
            Commonize safelen handling.  Punt for anything involving
            gathers and scatters unless safelen says otherwise.
            * tree-vect-slp.c (arg1_map): New variable.
            (vect_get_operand_map): Handle IFN_GATHER_LOAD.
            (vect_build_slp_tree_1): Likewise.
            (vect_build_slp_tree_2): Likewise.
            (compatible_calls_p): If vect_get_operand_map returns nonnull,
            check that any skipped arguments are equal.
            (vect_slp_analyze_node_operations_1): Tighten reduction check.
            * tree-vect-stmts.c (check_load_store_for_partial_vectors): Take
            an ncopies argument.
            (vect_get_gather_scatter_ops): Take slp_node and ncopies arguments.
            Handle SLP nodes.
            (vectorizable_store, vectorizable_load): Adjust accordingly.

    gcc/testsuite/
            * lib/target-supports.exp
            (check_effective_target_vect_gather_load_ifn): New target test.
            * gcc.dg/vect/vect-gather-1.c: New test.
            * gcc.dg/vect/vect-gather-2.c: Likewise.
            * gcc.target/aarch64/sve/gather_load_11.c: Likewise.

Reply via email to