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

Reply via email to