This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] Support subchains of interleaving chains in basic block SLP


Hi,

This patch allows to vectorize a subchain of interleaved loads in
basic block SLP (in loop vectorization this would be more complicated
because of loop peeling). This patch also swaps operands if necessary
(and possible) to make operations isomorphic.

Bootstrapped and tested on powerpc64-suse-linux.
Committed.

Ira

ChangeLog:

        * tree-vect-stmts.c (vectorizable_load): For SLP without permutation
        treat the first load of the node as the first element in its
        interleaving chain.
        * tree-vect-slp.c (vect_get_and_check_slp_defs): Swap the operands if
        necessary and possible.
        (vect_build_slp_tree): Add new argument.  Allow load groups of any size
        in basic blocks.  Keep all the loads for further permutation check.
        Use the new argument to determine if there is a permutation.  Update
        the recursive calls.
        (vect_supported_load_permutation_p): Allow subchains of interleaving
        chains in basic block vectorization.
        (vect_analyze_slp_instance): Update the call to vect_build_slp_tree.
        Check load permutation based on the new parameter.
        (vect_schedule_slp_instance): Don't start from the first element in
        interleaving chain unless the loads are permuted.

testsuite/ChangeLog:

        * gcc.dg/vect/bb-slp-29.c: New test.

Attachment: patch.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]