aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-loop.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2017-09-18 15:26:03 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2017-09-18 15:26:03 +0000
commitdd25e724a475caffa4372f911d15536d09c342c8 (patch)
tree35419b5f93ee6ecc7296335c8c6c3bb68672d001 /gcc/tree-vect-loop.c
parent68a0f2ffff4fdb05cfe110b3828124bcbe6d611f (diff)
downloadgcc-dd25e724a475caffa4372f911d15536d09c342c8.zip
gcc-dd25e724a475caffa4372f911d15536d09c342c8.tar.gz
gcc-dd25e724a475caffa4372f911d15536d09c342c8.tar.bz2
Fix vectorizable_live_operation handling of vector booleans
vectorizable_live_operation needs to use BIT_FIELD_REF to extract one element of a vector. For a packed vector boolean type, the number of bits to extract should be taken from TYPE_PRECISION rather than TYPE_SIZE. This is shown by existing tests once SVE is added. 2017-09-18 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> gcc/ * tree-vect-loop.c (vectorizable_live_operation): Fix element size calculation for vector booleans. Co-Authored-By: Alan Hayward <alan.hayward@arm.com> Co-Authored-By: David Sherwood <david.sherwood@arm.com> From-SVN: r252930
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r--gcc/tree-vect-loop.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c
index 82b6629..5d29ef5 100644
--- a/gcc/tree-vect-loop.c
+++ b/gcc/tree-vect-loop.c
@@ -7066,7 +7066,9 @@ vectorizable_live_operation (gimple *stmt,
: gimple_get_lhs (stmt);
lhs_type = TREE_TYPE (lhs);
- bitsize = TYPE_SIZE (TREE_TYPE (vectype));
+ bitsize = (VECTOR_BOOLEAN_TYPE_P (vectype)
+ ? bitsize_int (TYPE_PRECISION (TREE_TYPE (vectype)))
+ : TYPE_SIZE (TREE_TYPE (vectype)));
vec_bitsize = TYPE_SIZE (vectype);
/* Get the vectorized lhs of STMT and the lane to use (counted in bits). */