On 10/23/2017 11:11 AM, Richard Sandiford wrote: > This patch changes the types of the bit offsets and sizes returned > by get_ref_base_and_extent to poly_int64. > > There are some callers that can't sensibly operate on polynomial > offsets or handle cases where the offset and size aren't known > exactly. This includes the IPA devirtualisation code (since > there's no defined way of having vtables at variable offsets) > and some parts of the DWARF code. The patch therefore adds > a helper function get_ref_base_and_extent_hwi that either returns > exact HOST_WIDE_INT bit positions and sizes or returns a null > base to indicate failure. > > > 2017-10-23 Richard Sandiford <richard.sandif...@linaro.org> > Alan Hayward <alan.hayw...@arm.com> > David Sherwood <david.sherw...@arm.com> > > gcc/ > * tree-dfa.h (get_ref_base_and_extent): Return the base, size and > max_size as poly_int64_pods rather than HOST_WIDE_INTs. > (get_ref_base_and_extent_hwi): Declare. > * tree-dfa.c (get_ref_base_and_extent): Return the base, size and > max_size as poly_int64_pods rather than HOST_WIDE_INTs. > (get_ref_base_and_extent_hwi): New function. > * cfgexpand.c (expand_debug_expr): Update call to > get_ref_base_and_extent. > * dwarf2out.c (add_var_loc_to_decl): Likewise. > * gimple-fold.c (get_base_constructor): Return the offset as a > poly_int64_pod rather than a HOST_WIDE_INT. > (fold_const_aggregate_ref_1): Track polynomial sizes and offsets. > * ipa-polymorphic-call.c > (ipa_polymorphic_call_context::set_by_invariant) > (extr_type_from_vtbl_ptr_store): Track polynomial offsets. > (ipa_polymorphic_call_context::ipa_polymorphic_call_context) > (check_stmt_for_type_change): Use get_ref_base_and_extent_hwi > rather than get_ref_base_and_extent. > (ipa_polymorphic_call_context::get_dynamic_type): Likewise. > * ipa-prop.c (ipa_load_from_parm_agg, compute_complex_assign_jump_func) > (get_ancestor_addr_info, determine_locally_known_aggregate_parts): > Likewise. > (ipa_get_adjustment_candidate): Update call to get_ref_base_and_extent. > * tree-sra.c (create_access, get_access_for_expr): Likewise. > * tree-ssa-alias.c (ao_ref_base, aliasing_component_refs_p) > (stmt_kills_ref_p): Likewise. > * tree-ssa-dce.c (mark_aliased_reaching_defs_necessary_1): Likewise. > * tree-ssa-scopedtables.c (avail_expr_hash, equal_mem_array_ref_p): > Likewise. > * tree-ssa-sccvn.c (vn_reference_lookup_3): Likewise. > Use get_ref_base_and_extent_hwi rather than get_ref_base_and_extent > when calling native_encode_expr. > * tree-ssa-structalias.c (get_constraint_for_component_ref): Update > call to get_ref_base_and_extent. > (do_structure_copy): Use get_ref_base_and_extent_hwi rather than > get_ref_base_and_extent. > * var-tracking.c (track_expr_p): Likewise. >
I initially missed some of the additional checks performed by get_ref_base_and_extend_hwi and thought we had a problem with the transition to use that routine in various places. But eventually I saw the light. OK. jeff