On 11/17/2017 03:04 PM, Richard Sandiford wrote:
> Following on from the previous patch for strided accesses, this patch
> allows gather loads to be used with grouped accesses, if we otherwise
> would need to fall back to VMAT_ELEMENTWISE. However, as the comment
> says, this is restricted to single-element groups for now:
>
> ??? Although the code can handle all group sizes correctly,
> it probably isn't a win to use separate strided accesses based
> on nearby locations. Or, even if it's a win over scalar code,
> it might not be a win over vectorizing at a lower VF, if that
> allows us to use contiguous accesses.
>
> Single-element groups are an important special case though,
> and this means that code is less sensitive to GCC's classification
> of single accesses with constant steps as "grouped" and ones with
> variable steps as "strided".
>
> 2017-11-17 Richard Sandiford <richard.sandif...@linaro.org>
> Alan Hayward <alan.hayw...@arm.com>
> David Sherwood <david.sherw...@arm.com>
>
> gcc/
> * tree-vectorizer.h (vect_gather_scatter_fn_p): Declare.
> * tree-vect-data-refs.c (vect_gather_scatter_fn_p): Make public.
> * tree-vect-stmts.c (vect_truncate_gather_scatter_offset): New
> function.
> (vect_use_strided_gather_scatters_p): Take a masked_p argument.
> Use vect_truncate_gather_scatter_offset if we can't treat the
> operation as a normal gather load or scatter store.
> (get_group_load_store_type): Take the gather_scatter_info
> as argument. Try using a gather load or scatter store for
> single-element groups.
> (get_load_store_type): Update calls to get_group_load_store_type
> and vect_use_strided_gather_scatters_p.
>
> gcc/testsuite/
> * gcc.target/aarch64/sve_strided_load_4.c: New test.
> * gcc.target/aarch64/sve_strided_load_5.c: Likewise.
> * gcc.target/aarch64/sve_strided_load_6.c: Likewise.
> * gcc.target/aarch64/sve_strided_load_7.c: Likewise.
OK.
jeff