This patch makes get_inner_reference_aff return the size as a poly_widest_int rather than a widest_int.
2017-10-23 Richard Sandiford <richard.sandif...@linaro.org> Alan Hayward <alan.hayw...@arm.com> David Sherwood <david.sherw...@arm.com> gcc/ * tree-affine.h (get_inner_reference_aff): Return the size as a poly_widest_int. * tree-affine.c (get_inner_reference_aff): Likewise. * tree-data-ref.c (dr_may_alias_p): Update accordingly. * tree-ssa-loop-im.c (mem_refs_may_alias_p): Likewise. Index: gcc/tree-affine.h =================================================================== --- gcc/tree-affine.h 2017-10-23 17:17:16.129993616 +0100 +++ gcc/tree-affine.h 2017-10-23 17:18:30.290584430 +0100 @@ -80,7 +80,7 @@ bool aff_combination_constant_multiple_p void aff_combination_expand (aff_tree *, hash_map<tree, name_expansion *> **); void tree_to_aff_combination_expand (tree, tree, aff_tree *, hash_map<tree, name_expansion *> **); -tree get_inner_reference_aff (tree, aff_tree *, widest_int *); +tree get_inner_reference_aff (tree, aff_tree *, poly_widest_int *); void free_affine_expand_cache (hash_map<tree, name_expansion *> **); bool aff_comb_cannot_overlap_p (aff_tree *, const poly_widest_int &, const poly_widest_int &); Index: gcc/tree-affine.c =================================================================== --- gcc/tree-affine.c 2017-10-23 17:17:16.129993616 +0100 +++ gcc/tree-affine.c 2017-10-23 17:18:30.290584430 +0100 @@ -927,7 +927,7 @@ debug_aff (aff_tree *val) which REF refers. */ tree -get_inner_reference_aff (tree ref, aff_tree *addr, widest_int *size) +get_inner_reference_aff (tree ref, aff_tree *addr, poly_widest_int *size) { HOST_WIDE_INT bitsize, bitpos; tree toff; Index: gcc/tree-data-ref.c =================================================================== --- gcc/tree-data-ref.c 2017-10-23 17:17:16.129993616 +0100 +++ gcc/tree-data-ref.c 2017-10-23 17:18:30.290584430 +0100 @@ -2134,7 +2134,7 @@ dr_may_alias_p (const struct data_refere if (!loop_nest) { aff_tree off1, off2; - widest_int size1, size2; + poly_widest_int size1, size2; get_inner_reference_aff (DR_REF (a), &off1, &size1); get_inner_reference_aff (DR_REF (b), &off2, &size2); aff_combination_scale (&off1, -1); Index: gcc/tree-ssa-loop-im.c =================================================================== --- gcc/tree-ssa-loop-im.c 2017-10-23 17:17:16.129993616 +0100 +++ gcc/tree-ssa-loop-im.c 2017-10-23 17:18:30.291584342 +0100 @@ -1581,7 +1581,7 @@ mem_refs_may_alias_p (im_mem_ref *mem1, /* Perform BASE + OFFSET analysis -- if MEM1 and MEM2 are based on the same object and their offset differ in such a way that the locations cannot overlap, then they cannot alias. */ - widest_int size1, size2; + poly_widest_int size1, size2; aff_tree off1, off2; /* Perform basic offset and type-based disambiguation. */