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

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

https://gcc.gnu.org/g:9f74d79afbf54d0e47905de755f41d95e46f178f

commit r15-4263-g9f74d79afbf54d0e47905de755f41d95e46f178f
Author: Richard Biener <rguent...@suse.de>
Date:   Thu Jun 6 15:52:02 2024 +0200

    tree-optimization/117080 - Add SLP_TREE_MEMORY_ACCESS_TYPE

    It turns out target costing code looks at STMT_VINFO_MEMORY_ACCESS_TYPE
    to identify operations from (emulated) gathers for example.  This
    doesn't work for SLP loads since we do not set
STMT_VINFO_MEMORY_ACCESS_TYPE
    there as the vectorization strathegy might differ between different
    stmt uses.  It seems we got away with setting it for stores though.
    The following adds a memory_access_type field to slp_tree and sets it
    from load and store vectorization code.  All the costing doesn't record
    the SLP node (that was only done selectively for some corner case).  The
    costing is really in need of a big overhaul, the following just massages
    the two relevant ops to fix gcc.dg/target/pr88531-2[bc].c FAILs when
    switching on SLP for non-grouped stores.  In particular currently
    we either have a SLP node or a stmt_info in the cost hook but not both.

    So the following mitigates this, postponing a rewrite of costing to
    next stage1.  Other targets look possibly affected as well but are
    left to respective maintainers to update.

            PR tree-optimization/117080
            * tree-vectorizer.h (_slp_tree::memory_access_type): Add.
            (SLP_TREE_MEMORY_ACCESS_TYPE): New.
            (record_stmt_cost): Add another overload.
            * tree-vect-slp.cc (_slp_tree::_slp_tree): Initialize
            memory_access_type.
            * tree-vect-stmts.cc (vectorizable_store): Set
            SLP_TREE_MEMORY_ACCESS_TYPE.
            (vectorizable_load): Likewise.  Also record the SLP node
            when costing emulated gather offset decompose and vector
            composition.
            * config/i386/i386.cc (ix86_vector_costs::add_stmt_cost): Also
            recognize SLP emulated gather/scatter.

Reply via email to