From: Richard Sandiford Date: Fri, 12 Jan 2018 14:48:35 +0000 (+0000) Subject: Handle poly_int vector sizes in get_vec_alignment_for_array_type X-Git-Tag: basepoints/gcc-9~1968 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cf736b092afeabe90680443794eb384a9f930cd5;p=thirdparty%2Fgcc.git 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 gcc/ * tree-vectorizer.c (get_vec_alignment_for_array_type): Handle polynomial type sizes. From-SVN: r256586 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 823f39d1d877..7195a2a729f0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2018-01-12 Richard Sandiford + + * tree-vectorizer.c (get_vec_alignment_for_array_type): Handle + polynomial type sizes. + 2018-01-12 Richard Sandiford * gimplify.c (gimple_add_tmp_var_fn): Allow variables to have a diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c index b5bdf676881a..a0cc2d6bddb5 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);