[PATCH] tree-vect-generic: Tweak build_replicated_const [PR94980 2/3]
Richard Biener
richard.guenther@gmail.com
Mon May 11 18:19:05 GMT 2020
On May 11, 2020 6:37:43 PM GMT+02:00, Richard Sandiford <richard.sandiford@arm.com> wrote:
>This patch makes build_replicated_const take the number of bits
>in VALUE rather than calculating the width from the element type.
>The callers can then use vector_element_bits to calculate the
>correct element size from the vector type.
>
>Tested individually on aarch64-linux-gnu and as a series on
>x86_64-linux-gnu. OK to install?
OK.
Richard.
>Richard
>
>
>2020-05-11 Richard Sandiford <richard.sandiford@arm.com>
>
>gcc/
> PR tree-optimization/94980
> * tree-vect-generic.c (build_replicated_const): Take the number
> of bits as a parameter, instead of the type of the elements.
> (do_plus_minus): Update accordingly, using vector_element_bits
> to calculate the correct number of bits.
> (do_negate): Likewise.
>---
> gcc/tree-vect-generic.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
>
>diff --git a/gcc/tree-vect-generic.c b/gcc/tree-vect-generic.c
>index 126e906e0a9..adea9337a97 100644
>--- a/gcc/tree-vect-generic.c
>+++ b/gcc/tree-vect-generic.c
>@@ -67,11 +67,10 @@ subparts_gt (tree type1, tree type2)
> }
>
> /* Build a constant of type TYPE, made of VALUE's bits replicated
>- every TYPE_SIZE (INNER_TYPE) bits to fit TYPE's precision. */
>+ every WIDTH bits to fit TYPE's precision. */
> static tree
>-build_replicated_const (tree type, tree inner_type, HOST_WIDE_INT
>value)
>+build_replicated_const (tree type, unsigned int width, HOST_WIDE_INT
>value)
> {
>- int width = tree_to_uhwi (TYPE_SIZE (inner_type));
> int n = (TYPE_PRECISION (type) + HOST_BITS_PER_WIDE_INT - 1)
> / HOST_BITS_PER_WIDE_INT;
> unsigned HOST_WIDE_INT low, mask;
>@@ -214,13 +213,14 @@ do_plus_minus (gimple_stmt_iterator *gsi, tree
>word_type, tree a, tree b,
> tree bitpos ATTRIBUTE_UNUSED, tree bitsize ATTRIBUTE_UNUSED,
> enum tree_code code, tree type ATTRIBUTE_UNUSED)
> {
>+ unsigned int width = vector_element_bits (TREE_TYPE (a));
> tree inner_type = TREE_TYPE (TREE_TYPE (a));
> unsigned HOST_WIDE_INT max;
> tree low_bits, high_bits, a_low, b_low, result_low, signs;
>
> max = GET_MODE_MASK (TYPE_MODE (inner_type));
>- low_bits = build_replicated_const (word_type, inner_type, max >> 1);
>- high_bits = build_replicated_const (word_type, inner_type, max &
>~(max >> 1));
>+ low_bits = build_replicated_const (word_type, width, max >> 1);
>+ high_bits = build_replicated_const (word_type, width, max & ~(max >>
>1));
>
> a = tree_vec_extract (gsi, word_type, a, bitsize, bitpos);
> b = tree_vec_extract (gsi, word_type, b, bitsize, bitpos);
>@@ -247,13 +247,14 @@ do_negate (gimple_stmt_iterator *gsi, tree
>word_type, tree b,
> enum tree_code code ATTRIBUTE_UNUSED,
> tree type ATTRIBUTE_UNUSED)
> {
>+ unsigned int width = vector_element_bits (TREE_TYPE (b));
> tree inner_type = TREE_TYPE (TREE_TYPE (b));
> HOST_WIDE_INT max;
> tree low_bits, high_bits, b_low, result_low, signs;
>
> max = GET_MODE_MASK (TYPE_MODE (inner_type));
>- low_bits = build_replicated_const (word_type, inner_type, max >> 1);
>- high_bits = build_replicated_const (word_type, inner_type, max &
>~(max >> 1));
>+ low_bits = build_replicated_const (word_type, width, max >> 1);
>+ high_bits = build_replicated_const (word_type, width, max & ~(max >>
>1));
>
> b = tree_vec_extract (gsi, word_type, b, bitsize, bitpos);
>
More information about the Gcc-patches
mailing list