diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2018-01-12 14:48:35 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2018-01-12 14:48:35 +0000 |
commit | cf736b092afeabe90680443794eb384a9f930cd5 (patch) | |
tree | 5c168a8611a66b43606b53ed5a4a6de713be0fb2 | |
parent | 825010bb37db90c97c9409d3407c8538e3246577 (diff) | |
download | gcc-cf736b092afeabe90680443794eb384a9f930cd5.zip gcc-cf736b092afeabe90680443794eb384a9f930cd5.tar.gz gcc-cf736b092afeabe90680443794eb384a9f930cd5.tar.bz2 |
Handle poly_int vector sizes in get_vec_alignment_for_array_type
get_vectype_for_scalar_type returns a variable-length vector type
for SVE, whereas get_vec_alignment_for_array_type assumed it would
always be an INTEGER_CST.
This is needed to build libstdc++-v3/src/closures.cc for SVE
(and probably many other places besides -- this was just the
first hit).
2018-01-12 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
* tree-vectorizer.c (get_vec_alignment_for_array_type): Handle
polynomial type sizes.
From-SVN: r256586
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/tree-vectorizer.c | 7 |
2 files changed, 9 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 823f39d..7195a2a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,10 @@ 2018-01-12 Richard Sandiford <richard.sandiford@linaro.org> + * tree-vectorizer.c (get_vec_alignment_for_array_type): Handle + polynomial type sizes. + +2018-01-12 Richard Sandiford <richard.sandiford@linaro.org> + * gimplify.c (gimple_add_tmp_var_fn): Allow variables to have a poly_uint64 size, rather than requiring an unsigned HOST_WIDE_INT size. (gimple_add_tmp_var): Likewise. diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index b5bdf67..a0cc2d6 100644 --- a/gcc/tree-vectorizer.c +++ b/gcc/tree-vectorizer.c @@ -1015,12 +1015,13 @@ static unsigned get_vec_alignment_for_array_type (tree type) { gcc_assert (TREE_CODE (type) == ARRAY_TYPE); + poly_uint64 array_size, vector_size; tree vectype = get_vectype_for_scalar_type (strip_array_types (type)); if (!vectype - || !TYPE_SIZE (type) - || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST - || tree_int_cst_lt (TYPE_SIZE (type), TYPE_SIZE (vectype))) + || !poly_int_tree_p (TYPE_SIZE (type), &array_size) + || !poly_int_tree_p (TYPE_SIZE (vectype), &vector_size) + || maybe_lt (array_size, vector_size)) return 0; return TYPE_ALIGN (vectype); |