On Mon, Dec 11, 2017 at 11:04:28PM +0000, Jeff Law wrote: > 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.
The AArch64 tests are OK. James