[7/7] Add negative and zero strides to vect_memory_access_type
authorRichard Sandiford <richard.sandiford@arm.com>
Wed, 6 Jul 2016 08:16:53 +0000 (08:16 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 6 Jul 2016 08:16:53 +0000 (08:16 +0000)
commit62da9e14ce5b670bf40a91f1dc9473579a2d5549
treef64f6affdc9e9aa406115967f1fe3db21b1b124c
parent2de001eed013bb666f832694bc75b8f055ffdc76
[7/7] Add negative and zero strides to vect_memory_access_type

This patch uses the vect_memory_access_type from patch 6 to represent
the effect of a negative contiguous stride or a zero stride.  The latter
is valid only for loads.

Tested on aarch64-linux-gnu and x86_64-linux-gnu.

gcc/
* tree-vectorizer.h (vect_memory_access_type): Add
VMAT_INVARIANT, VMAT_CONTIGUOUS_DOWN and VMAT_CONTIGUOUS_REVERSED.
* tree-vect-stmts.c (compare_step_with_zero): New function.
(perm_mask_for_reverse): Move further up file.
(get_group_load_store_type): Stick to VMAT_ELEMENTWISE if the
step is negative.
(get_negative_load_store_type): New function.
(get_load_store_type): Call it.  Add an ncopies argument.
(vectorizable_mask_load_store): Update call accordingly and
remove tests for negative steps.
(vectorizable_store, vectorizable_load): Likewise.  Handle new
memory_access_types.

From-SVN: r238039
gcc/ChangeLog
gcc/tree-vect-stmts.c
gcc/tree-vectorizer.h