diff options
author | Richard Sandiford <richard.sandiford@arm.com> | 2020-05-12 09:01:10 +0100 |
---|---|---|
committer | Richard Sandiford <richard.sandiford@arm.com> | 2020-05-12 09:01:10 +0100 |
commit | d17a896da1e898928d337596d029f0ece0039d55 (patch) | |
tree | 3907710b0485fb8de89e9de33bb6d452c88a60d1 /gcc/tree-vect-loop.c | |
parent | dc703151d4f4560e647649506d5b4ceb0ee11e90 (diff) | |
download | gcc-d17a896da1e898928d337596d029f0ece0039d55.zip gcc-d17a896da1e898928d337596d029f0ece0039d55.tar.gz gcc-d17a896da1e898928d337596d029f0ece0039d55.tar.bz2 |
tree: Add vector_element_bits(_tree) [PR94980 1/3]
A lot of code that wants to know the number of bits in a vector
element gets that information from the element's TYPE_SIZE,
which is always equal to TYPE_SIZE_UNIT * BITS_PER_UNIT.
This doesn't work for SVE and AVX512-style packed boolean vectors,
where several elements can occupy a single byte.
This patch introduces a new pair of helpers for getting the true
(possibly sub-byte) size. I made a token attempt to convert obvious
element size calculations, but I'm sure I missed some.
2020-05-12 Richard Sandiford <richard.sandiford@arm.com>
gcc/
PR tree-optimization/94980
* tree.h (vector_element_bits, vector_element_bits_tree): Declare.
* tree.c (vector_element_bits, vector_element_bits_tree): New.
* match.pd: Use the new functions instead of determining the
vector element size directly from TYPE_SIZE(_UNIT).
* tree-vect-data-refs.c (vect_gather_scatter_fn_p): Likewise.
* tree-vect-patterns.c (vect_recog_mask_conversion_pattern): Likewise.
* tree-vect-stmts.c (vect_is_simple_cond): Likewise.
* tree-vect-generic.c (expand_vector_piecewise): Likewise.
(expand_vector_conversion): Likewise.
(expand_vector_addition): Likewise for a TYPE_SIZE_UNIT used as
a divisor. Convert the dividend to bits to compensate.
* tree-vect-loop.c (vectorizable_live_operation): Call
vector_element_bits instead of open-coding it.
Diffstat (limited to 'gcc/tree-vect-loop.c')
-rw-r--r-- | gcc/tree-vect-loop.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 64463b8..180790a 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -8017,9 +8017,7 @@ vectorizable_live_operation (loop_vec_info loop_vinfo, : gimple_get_lhs (stmt); lhs_type = TREE_TYPE (lhs); - bitsize = (VECTOR_BOOLEAN_TYPE_P (vectype) - ? bitsize_int (TYPE_PRECISION (TREE_TYPE (vectype))) - : TYPE_SIZE (TREE_TYPE (vectype))); + bitsize = vector_element_bits_tree (vectype); vec_bitsize = TYPE_SIZE (vectype); /* Get the vectorized lhs of STMT and the lane to use (counted in bits). */ |