Richard Ball <richard.b...@arm.com> writes: > Add POLY_INT_CST support to code within > fold_ctor_reference. This code previously > only supported INTEGER_CST which caused a > bug when using VEC_PERM_EXPR with SVE vectors.
Just to add for others: this is a prerequisite for a follow-on patch, so the change will be tested there. > gcc/ChangeLog: > > * gimple-fold.cc (fold_ctor_reference): > Add support for Poly_int. Nit: s/Poly_int/poly_int/ OK with that change, thanks. Please follow https://gcc.gnu.org/gitwrite.html to get write access (I'll sponsor). Richard > ################################################# > > diff --git a/gcc/gimple-fold.cc b/gcc/gimple-fold.cc > index > 4027ff71e10337fe49c600fcd5a80026b260d54d..91e80b9aaa3b4797ce3a94129ca42c98d974cbd9 > > 100644 > --- a/gcc/gimple-fold.cc > +++ b/gcc/gimple-fold.cc > @@ -8162,8 +8162,8 @@ fold_ctor_reference (tree type, tree ctor, const > poly_uint64 &poly_offset, > result. */ > if (!AGGREGATE_TYPE_P (TREE_TYPE (ctor)) && !offset > /* VIEW_CONVERT_EXPR is defined only for matching sizes. */ > - && !compare_tree_int (TYPE_SIZE (type), size) > - && !compare_tree_int (TYPE_SIZE (TREE_TYPE (ctor)), size)) > + && known_eq (wi::to_poly_widest (TYPE_SIZE (type)), size) > + && known_eq (wi::to_poly_widest (TYPE_SIZE (TREE_TYPE (ctor))), > size)) > { > ret = canonicalize_constructor_val (unshare_expr (ctor), from_decl); > if (ret)