On 11/09/2017 07:20 AM, Richard Sandiford wrote:
> This patch adds support for vectorising SLP definitions that are
> constant or external (i.e. from outside the loop) when the vectorisation
> factor isn't known at compile time. It can only handle cases where the
> number of SLP statements is a power of 2.
>
> Tested on aarch64-linux-gnu (with and without SVE), x86_64-linux-gnu
> and powerpc64le-linux-gnu. OK to install?
>
> Richard
>
>
> 2017-11-09 Richard Sandiford <richard.sandif...@linaro.org>
> Alan Hayward <alan.hayw...@arm.com>
> David Sherwood <david.sherw...@arm.com>
>
> gcc/
> * tree-vect-slp.c: Include gimple-fold.h and internal-fn.h
> (can_duplicate_and_interleave_p): New function.
> (vect_get_and_check_slp_defs): Take the vector of statements
> rather than just the current one. Remove excess parentheses.
> Restriction rejectinon of vect_constant_def and vect_external_def
> for variable-length vectors to boolean types, or types for which
> can_duplicate_and_interleave_p is false.
> (vect_build_slp_tree_2): Update call to vect_get_and_check_slp_defs.
> (duplicate_and_interleave): New function.
> (vect_get_constant_vectors): Use gimple_build_vector for
> constant-length vectors and duplicate_and_interleave for
> variable-length vectors. Don't defer the update when
> inserting new statements.
>
> gcc/testsuite/
> * gcc.dg/vect/no-scevccp-slp-30.c: Don't XFAIL for vect_variable_length
> && vect_load_lanes
> * gcc.dg/vect/slp-1.c: Likewise.
> * gcc.dg/vect/slp-10.c: Likewise.
> * gcc.dg/vect/slp-12b.c: Likewise.
> * gcc.dg/vect/slp-12c.c: Likewise.
> * gcc.dg/vect/slp-17.c: Likewise.
> * gcc.dg/vect/slp-19b.c: Likewise.
> * gcc.dg/vect/slp-20.c: Likewise.
> * gcc.dg/vect/slp-21.c: Likewise.
> * gcc.dg/vect/slp-22.c: Likewise.
> * gcc.dg/vect/slp-24-big-array.c: Likewise.
> * gcc.dg/vect/slp-24.c: Likewise.
> * gcc.dg/vect/slp-28.c: Likewise.
> * gcc.dg/vect/slp-39.c: Likewise.
> * gcc.dg/vect/slp-6.c: Likewise.
> * gcc.dg/vect/slp-7.c: Likewise.
> * gcc.dg/vect/slp-cond-1.c: Likewise.
> * gcc.dg/vect/slp-cond-2-big-array.c: Likewise.
> * gcc.dg/vect/slp-cond-2.c: Likewise.
> * gcc.dg/vect/slp-multitypes-1.c: Likewise.
> * gcc.dg/vect/slp-multitypes-8.c: Likewise.
> * gcc.dg/vect/slp-multitypes-9.c: Likewise.
> * gcc.dg/vect/slp-multitypes-10.c: Likewise.
> * gcc.dg/vect/slp-multitypes-12.c: Likewise.
> * gcc.dg/vect/slp-perm-6.c: Likewise.
> * gcc.dg/vect/slp-widen-mult-half.c: Likewise.
> * gcc.dg/vect/vect-live-slp-1.c: Likewise.
> * gcc.dg/vect/vect-live-slp-2.c: Likewise.
> * gcc.dg/vect/pr33953.c: Don't XFAIL for vect_variable_length.
> * gcc.dg/vect/slp-12a.c: Likewise.
> * gcc.dg/vect/slp-14.c: Likewise.
> * gcc.dg/vect/slp-15.c: Likewise.
> * gcc.dg/vect/slp-multitypes-2.c: Likewise.
> * gcc.dg/vect/slp-multitypes-4.c: Likewise.
> * gcc.dg/vect/slp-multitypes-5.c: Likewise.
> * gcc.target/aarch64/sve_slp_1.c: New test.
> * gcc.target/aarch64/sve_slp_1_run.c: Likewise.
> * gcc.target/aarch64/sve_slp_2.c: Likewise.
> * gcc.target/aarch64/sve_slp_2_run.c: Likewise.
> * gcc.target/aarch64/sve_slp_3.c: Likewise.
> * gcc.target/aarch64/sve_slp_3_run.c: Likewise.
> * gcc.target/aarch64/sve_slp_4.c: Likewise.
> * gcc.target/aarch64/sve_slp_4_run.c: Likewise.
OK.
jeff