> Hi,
> 
> the node and edge summaries defined in ipa-prop.h are probably the
> oldest in GCC and so it happened that they are the only ones using
> macros to look them up and create them.  With Honza and Martin we
> agreed it is ugly and the macros should be removed and the ipa-prop
> summaries should be accessed like all the other ones but somehow I
> never got to it until now.
> 
> The patch is mostly mechanical.  Because the lookup machinery was much
> simpler in the old times (something like the fast summaries we have
> today), a lot of code queried for the summary multiple times for no
> good reasons and I fixed that in places where it was easy.
> 
> Also, before we switched to hash based summaries, new summary pointers
> had to be obtained whenever the underlying array could be reallocated
> because of new cgraph nodes/edges.  This is no longer necessary and so
> I removed the instances which I found.
> 
> Both kinds of these non-mechanical changes should be specifically called
> out in the ChangeLog.
> 
> I also removed the IS_VALID_JUMP_FUNC_INDEX macro because it not used
> anywhere.
> 
> Bootstrapped and tested on x86_64-linux.  OK for trunk?
OK,
thanks!
honza
> 
> Thanks,
> 
> Martin
> 
> 
> gcc/ChangeLog:
> 
> 2021-05-07  Martin Jambor  <mjam...@suse.cz>
> 
>       * ipa-prop.h (IPA_NODE_REF): Removed.
>       (IPA_NODE_REF_GET_CREATE): Likewise.
>       (IPA_EDGE_REF): Likewise.
>       (IPA_EDGE_REF_GET_CREATE): Likewise.
>       (IS_VALID_JUMP_FUNC_INDEX): Likewise.
>       * ipa-cp.c (print_all_lattices): Replaced IPA_NODE_REF with a direct
>       use of ipa_node_params_sum.
>       (ipcp_versionable_function_p): Likewise.
>       (push_node_to_stack): Likewise.
>       (pop_node_from_stack): Likewise.
>       (set_single_call_flag): Replaced two IPA_NODE_REF with one single
>       direct use of ipa_node_params_sum.
>       (initialize_node_lattices): Replaced IPA_NODE_REF with a direct use of
>       ipa_node_params_sum.
>       (ipa_context_from_jfunc): Replaced IPA_EDGE_REF with a direct use of
>       ipa_edge_args_sum.
>       (ipcp_verify_propagated_values): Replaced IPA_NODE_REF with a direct
>       use of ipa_node_params_sum.
>       (self_recursively_generated_p): Likewise.
>       (propagate_scalar_across_jump_function): Likewise.
>       (propagate_context_across_jump_function): Replaced IPA_EDGE_REF with a
>       direct use of ipa_edge_args_sum, moved the lookup after the early
>       exit.  Replaced IPA_NODE_REF with a direct use of ipa_node_params_sum.
>       (propagate_bits_across_jump_function): Replaced IPA_NODE_REF with
>       direct uses of ipa_node_params_sum.
>       (propagate_vr_across_jump_function): Likewise.
>       (propagate_aggregate_lattice): Likewise.
>       (propagate_aggs_across_jump_function): Likewise.
>       (propagate_constants_across_call): Likewise, also replaced
>       IPA_EDGE_REF with a direct use of ipa_edge_args_sum.
>       (good_cloning_opportunity_p): Replaced IPA_NODE_REF with a direct use
>       of ipa_node_params_sum.
>       (estimate_local_effects): Likewise.
>       (add_all_node_vals_to_toposort): Likewise.
>       (propagate_constants_topo): Likewise.
>       (ipcp_propagate_stage): Likewise.
>       (ipcp_discover_new_direct_edges): Likewise.
>       (calls_same_node_or_its_all_contexts_clone_p): Likewise.
>       (cgraph_edge_brings_value_p): Likewise (in both overloaded functions).
>       (get_info_about_necessary_edges): Likewise.
>       (want_remove_some_param_p): Likewise.
>       (create_specialized_node): Likewise.
>       (self_recursive_pass_through_p): Likewise.
>       (self_recursive_agg_pass_through_p): Likewise.
>       (find_more_scalar_values_for_callers_subset): Likewise and also
>       replaced IPA_EDGE_REF with direct uses of ipa_edge_args_sum, in one
>       case replacing two of those with a single query.
>       (find_more_contexts_for_caller_subset): Likewise for the
>       ipa_polymorphic_call_context overload.
>       (intersect_aggregates_with_edge): Replaced IPA_EDGE_REF with a direct
>       use of ipa_edge_args_sum.  Replaced IPA_NODE_REF with direct uses of
>       ipa_node_params_sum.
>       (find_aggregate_values_for_callers_subset): Likewise, also reusing
>       results of ipa_edge_args_sum->get.
>       (cgraph_edge_brings_all_scalars_for_node): Replaced IPA_NODE_REF with
>       direct uses of ipa_node_params_sum, replaced IPA_EDGE_REF with a
>       direct use of ipa_edge_args_sum.
>       (cgraph_edge_brings_all_agg_vals_for_node): Likewise, moved node
>       summary query after the early exit and reused the result later.
>       (decide_about_value): Replaced IPA_NODE_REF with a direct use of
>       ipa_node_params_sum.
>       (decide_whether_version_node): Likewise.  Removed re-querying for
>       summaries after cloning.
>       (spread_undeadness): Replaced IPA_NODE_REF with a direct use of
>       ipa_node_params_sum.
>       (has_undead_caller_from_outside_scc_p): Likewise, reusing results of
>       some queries.
>       (identify_dead_nodes): Likewise.
>       (ipcp_store_bits_results): Replaced IPA_NODE_REF with direct uses of
>       ipa_node_params_sum.
>       (ipcp_store_vr_results): Likewise.
>       * ipa-fnsummary.c (evaluate_properties_for_edge): Likewise.
>       (ipa_fn_summary_t::duplicate): Likewise.
>       (analyze_function_body): Likewise.
>       (estimate_calls_size_and_time): Likewise.
>       (ipa_cached_call_context::duplicate_from): Likewise.
>       (ipa_call_context::equal_to): Likewise.
>       (remap_edge_params): Likewise.
>       (ipa_merge_fn_summary_after_inlining): Likewise.
>       (inline_read_section): Likewise.
>       * ipa-icf.c (sem_function::param_used_p): Likewise.
>       * ipa-modref.c (compute_parm_map): Likewise.
>       (compute_parm_map): Replaced IPA_EDGE_REF with a direct use of
>       ipa_edge_args_sum.
>       (get_access_for_fnspec): Replaced IPA_NODE_REF with a direct use of
>       ipa_node_params_sum and replaced IPA_EDGE_REF with a direct use of
>       ipa_edge_args_sum.
>       * ipa-profile.c (check_argument_count): Likewise.
>       * ipa-prop.c (ipa_alloc_node_params): Replaced IPA_NODE_REF_GET_CREATE
>       with a direct use of ipa_node_params_sum.
>       (ipa_initialize_node_params): Likewise.
>       (ipa_print_node_jump_functions_for_edge): Replaced IPA_EDGE_REF with a
>       direct use of ipa_edge_args_sum and reused the query result.
>       (ipa_compute_jump_functions_for_edge): Replaced IPA_NODE_REF with a
>       direct use of ipa_node_params_sum and replaced IPA_EDGE_REF with a
>       direct use of ipa_edge_args_sum.
>       (ipa_note_param_call): Replaced IPA_NODE_REF with a direct use of
>       ipa_node_params_sum and reused the result of the query.
>       (ipa_analyze_node): Likewise.
>       (ipa_analyze_controlled_uses): Replaced IPA_NODE_REF with a direct use
>       of ipa_node_params_sum.
>       (update_jump_functions_after_inlining): Replaced IPA_EDGE_REF with
>       direct uses of ipa_edge_args_sum.
>       (update_indirect_edges_after_inlining): Replaced IPA_NODE_REF with
>       direct uses of ipa_node_params_sum and replaced IPA_EDGE_REF with a
>       direct use of ipa_edge_args_sum.  Removed superficial re-querying the
>       top edge summary.
>       (propagate_controlled_uses): Replaced IPA_NODE_REF with direct uses of
>       ipa_node_params_sum and replaced IPA_EDGE_REF with a direct use of
>       ipa_edge_args_sum.
>       (ipa_propagate_indirect_call_infos): Replaced IPA_EDGE_REF with a
>       direct use of ipa_edge_args_sum.
>       (ipa_edge_args_sum_t::duplicate): Replaced IPA_NODE_REF with a direct
>       use of ipa_node_params_sum.
>       (ipa_print_node_params): Likewise.
>       (ipa_write_node_info): Likewise and also replaced IPA_EDGE_REF with
>       direct uses of ipa_edge_args_sum.
>       (ipa_read_edge_info): Replaced IPA_EDGE_REF with a direct use of
>       ipa_edge_args_sum.
>       (ipa_read_node_info): Replaced IPA_NODE_REF with a direct use of
>       ipa_node_params_sum.
>       (ipa_prop_write_jump_functions): Likewise.  Move variable node to the
>       scopes where it is used.
> ---
>  gcc/ipa-cp.c        | 203 +++++++++++++++++++++++---------------------
>  gcc/ipa-fnsummary.c |  30 ++++---
>  gcc/ipa-icf.c       |   4 +-
>  gcc/ipa-modref.c    |  15 ++--
>  gcc/ipa-profile.c   |   4 +-
>  gcc/ipa-prop.c      |  76 ++++++++---------
>  gcc/ipa-prop.h      |  10 ---
>  7 files changed, 172 insertions(+), 170 deletions(-)
> 
> diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
> index 6041f75d824..2cae69e5a1b 100644
> --- a/gcc/ipa-cp.c
> +++ b/gcc/ipa-cp.c
> @@ -550,7 +550,7 @@ print_all_lattices (FILE * f, bool dump_sources, bool 
> dump_benefits)
>      {
>        class ipa_node_params *info;
>  
> -      info = IPA_NODE_REF (node);
> +      info = ipa_node_params_sum->get (node);
>        /* Skip unoptimized functions and constprop clones since we don't make
>        lattices for them.  */
>        if (!info || info->ipcp_orig_node)
> @@ -666,7 +666,8 @@ determine_versionability (struct cgraph_node *node,
>  static bool
>  ipcp_versionable_function_p (struct cgraph_node *node)
>  {
> -  return IPA_NODE_REF (node) && IPA_NODE_REF (node)->versionable;
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
> +  return info && info->versionable;
>  }
>  
>  /* Structure holding accumulated information about callers of a node.  */
> @@ -861,7 +862,7 @@ free_toporder_info (class ipa_topo_info *topo)
>  static inline void
>  push_node_to_stack (class ipa_topo_info *topo, struct cgraph_node *node)
>  {
> -  class ipa_node_params *info = IPA_NODE_REF (node);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
>    if (info->node_enqueued)
>      return;
>    info->node_enqueued = 1;
> @@ -879,7 +880,7 @@ pop_node_from_stack (class ipa_topo_info *topo)
>        struct cgraph_node *node;
>        topo->stack_top--;
>        node = topo->stack[topo->stack_top];
> -      IPA_NODE_REF (node)->node_enqueued = 0;
> +      ipa_node_params_sum->get (node)->node_enqueued = 0;
>        return node;
>      }
>    else
> @@ -1178,11 +1179,12 @@ set_single_call_flag (cgraph_node *node, void *)
>    /* Local thunks can be handled transparently, skip them.  */
>    while (cs && cs->caller->thunk && cs->caller->local)
>      cs = cs->next_caller;
> -  if (cs && IPA_NODE_REF (cs->caller))
> -    {
> -      IPA_NODE_REF (cs->caller)->node_calling_single_call = true;
> -      return true;
> -    }
> +  if (cs)
> +    if (ipa_node_params* info = ipa_node_params_sum->get (cs->caller))
> +      {
> +     info->node_calling_single_call = true;
> +     return true;
> +      }
>    return false;
>  }
>  
> @@ -1191,7 +1193,7 @@ set_single_call_flag (cgraph_node *node, void *)
>  static void
>  initialize_node_lattices (struct cgraph_node *node)
>  {
> -  class ipa_node_params *info = IPA_NODE_REF (node);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
>    struct cgraph_edge *ie;
>    bool disable = false, variable = false;
>    int i;
> @@ -1482,7 +1484,7 @@ ipa_polymorphic_call_context
>  ipa_context_from_jfunc (ipa_node_params *info, cgraph_edge *cs, int csidx,
>                       ipa_jump_func *jfunc)
>  {
> -  ipa_edge_args *args = IPA_EDGE_REF (cs);
> +  ipa_edge_args *args = ipa_edge_args_sum->get (cs);
>    ipa_polymorphic_call_context ctx;
>    ipa_polymorphic_call_context *edge_ctx
>      = cs ? ipa_get_ith_polymorhic_call_context (args, csidx) : NULL;
> @@ -1769,7 +1771,7 @@ ipcp_verify_propagated_values (void)
>  
>    FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
>      {
> -      class ipa_node_params *info = IPA_NODE_REF (node);
> +      ipa_node_params *info = ipa_node_params_sum->get (node);
>        if (!opt_for_fn (node->decl, flag_ipa_cp)
>         || !opt_for_fn (node->decl, optimize))
>       continue;
> @@ -1957,7 +1959,7 @@ self_recursively_generated_p (ipcp_value<tree> *val)
>       continue;
>  
>        if (!info)
> -     info = IPA_NODE_REF (cs->caller);
> +     info = ipa_node_params_sum->get (cs->caller);
>  
>        class ipcp_param_lattices *plats = ipa_get_parm_lattices (info,
>                                                               src->index);
> @@ -2196,7 +2198,7 @@ propagate_scalar_across_jump_function (struct 
> cgraph_edge *cs,
>    else if (jfunc->type == IPA_JF_PASS_THROUGH
>          || jfunc->type == IPA_JF_ANCESTOR)
>      {
> -      class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +      ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>        ipcp_lattice<tree> *src_lat;
>        int src_idx;
>        bool ret;
> @@ -2243,9 +2245,9 @@ propagate_context_across_jump_function (cgraph_edge *cs,
>                         ipa_jump_func *jfunc, int idx,
>                         ipcp_lattice<ipa_polymorphic_call_context> *dest_lat)
>  {
> -  ipa_edge_args *args = IPA_EDGE_REF (cs);
>    if (dest_lat->bottom)
>      return false;
> +  ipa_edge_args *args = ipa_edge_args_sum->get (cs);
>    bool ret = false;
>    bool added_sth = false;
>    bool type_preserved = true;
> @@ -2259,7 +2261,7 @@ propagate_context_across_jump_function (cgraph_edge *cs,
>    if (jfunc->type == IPA_JF_PASS_THROUGH
>        || jfunc->type == IPA_JF_ANCESTOR)
>      {
> -      class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +      ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>        int src_idx;
>        ipcp_lattice<ipa_polymorphic_call_context> *src_lat;
>  
> @@ -2334,7 +2336,7 @@ propagate_bits_across_jump_function (cgraph_edge *cs, 
> int idx,
>  
>    enum availability availability;
>    cgraph_node *callee = cs->callee->function_symbol (&availability);
> -  class ipa_node_params *callee_info = IPA_NODE_REF (callee);
> +  ipa_node_params *callee_info = ipa_node_params_sum->get (callee);
>    tree parm_type = ipa_get_type (callee_info, idx);
>  
>    /* For K&R C programs, ipa_get_type() could return NULL_TREE.  Avoid the
> @@ -2357,7 +2359,7 @@ propagate_bits_across_jump_function (cgraph_edge *cs, 
> int idx,
>    if (jfunc->type == IPA_JF_PASS_THROUGH
>        || jfunc->type == IPA_JF_ANCESTOR)
>      {
> -      class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +      ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>        tree operand = NULL_TREE;
>        enum tree_code code;
>        unsigned src_idx;
> @@ -2430,7 +2432,7 @@ propagate_vr_across_jump_function (cgraph_edge *cs, 
> ipa_jump_func *jfunc,
>    if (jfunc->type == IPA_JF_PASS_THROUGH)
>      {
>        enum tree_code operation = ipa_get_jf_pass_through_operation (jfunc);
> -      class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +      ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>        int src_idx = ipa_get_jf_pass_through_formal_id (jfunc);
>        class ipcp_param_lattices *src_lats
>       = ipa_get_parm_lattices (caller_info, src_idx);
> @@ -2702,7 +2704,7 @@ propagate_aggregate_lattice (struct cgraph_edge *cs,
>    gcc_checking_assert (item->jftype == IPA_JF_PASS_THROUGH
>                      || item->jftype == IPA_JF_LOAD_AGG);
>  
> -  caller_info = IPA_NODE_REF (cs->caller);
> +  caller_info = ipa_node_params_sum->get (cs->caller);
>    src_idx = item->value.pass_through.formal_id;
>    src_plats = ipa_get_parm_lattices (caller_info, src_idx);
>  
> @@ -2768,7 +2770,7 @@ propagate_aggs_across_jump_function (struct cgraph_edge 
> *cs,
>    if (jfunc->type == IPA_JF_PASS_THROUGH
>        && ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR)
>      {
> -      class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +      ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>        int src_idx = ipa_get_jf_pass_through_formal_id (jfunc);
>        class ipcp_param_lattices *src_plats;
>  
> @@ -2786,7 +2788,7 @@ propagate_aggs_across_jump_function (struct cgraph_edge 
> *cs,
>    else if (jfunc->type == IPA_JF_ANCESTOR
>          && ipa_get_jf_ancestor_agg_preserved (jfunc))
>      {
> -      class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +      ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>        int src_idx = ipa_get_jf_ancestor_formal_id (jfunc);
>        class ipcp_param_lattices *src_plats;
>  
> @@ -2873,11 +2875,11 @@ propagate_constants_across_call (struct cgraph_edge 
> *cs)
>    if (!callee->definition)
>      return false;
>    gcc_checking_assert (callee->has_gimple_body_p ());
> -  callee_info = IPA_NODE_REF (callee);
> +  callee_info = ipa_node_params_sum->get (callee);
>    if (!callee_info)
>      return false;
>  
> -  args = IPA_EDGE_REF (cs);
> +  args = ipa_edge_args_sum->get (cs);
>    parms_count = ipa_get_param_count (callee_info);
>    if (parms_count == 0)
>      return false;
> @@ -3296,7 +3298,7 @@ good_cloning_opportunity_p (struct cgraph_node *node, 
> sreal time_benefit,
>  
>    gcc_assert (size_cost > 0);
>  
> -  class ipa_node_params *info = IPA_NODE_REF (node);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
>    int eval_threshold = opt_for_fn (node->decl, param_ipa_cp_eval_threshold);
>    if (max_count > profile_count::zero ())
>      {
> @@ -3501,7 +3503,7 @@ get_max_overall_size (cgraph_node *node)
>  static void
>  estimate_local_effects (struct cgraph_node *node)
>  {
> -  class ipa_node_params *info = IPA_NODE_REF (node);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
>    int i, count = ipa_get_param_count (info);
>    bool always_const;
>    int removable_params_cost;
> @@ -3746,7 +3748,7 @@ value_topo_info<valtype>::add_val (ipcp_value<valtype> 
> *cur_val)
>  static void
>  add_all_node_vals_to_toposort (cgraph_node *node, ipa_topo_info *topo)
>  {
> -  class ipa_node_params *info = IPA_NODE_REF (node);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
>    int i, count = ipa_get_param_count (info);
>  
>    for (i = 0; i < count; i++)
> @@ -3830,7 +3832,7 @@ propagate_constants_topo (class ipa_topo_info *topo)
>  
>               if (!info)
>                 {
> -                 info = IPA_NODE_REF (v);
> +                 info = ipa_node_params_sum->get (v);
>                   info->node_within_scc = true;
>                 }
>  
> @@ -3940,7 +3942,7 @@ ipcp_propagate_stage (class ipa_topo_info *topo)
>       && opt_for_fn (node->decl, flag_ipa_cp)
>       && opt_for_fn (node->decl, optimize))
>        {
> -        class ipa_node_params *info = IPA_NODE_REF (node);
> +        ipa_node_params *info = ipa_node_params_sum->get (node);
>          determine_versionability (node, info);
>  
>       unsigned nlattices = ipa_get_param_count (info);
> @@ -4004,7 +4006,7 @@ ipcp_discover_new_direct_edges (struct cgraph_node 
> *node,
>  
>         if (cs && !agg_contents && !polymorphic)
>           {
> -           class ipa_node_params *info = IPA_NODE_REF (node);
> +           ipa_node_params *info = ipa_node_params_sum->get (node);
>             int c = ipa_get_controlled_uses (info, param_index);
>             if (c != IPA_UNDESCRIBED_USE)
>               {
> @@ -4103,7 +4105,7 @@ calls_same_node_or_its_all_contexts_clone_p 
> (cgraph_edge *cs, cgraph_node *dest,
>    if (!allow_recursion_to_clone && cs->caller == callee)
>      return false;
>  
> -  class ipa_node_params *info = IPA_NODE_REF (callee);
> +  ipa_node_params *info = ipa_node_params_sum->get (callee);
>    return info->is_all_contexts_clone && info->ipcp_orig_node == dest;
>  }
>  
> @@ -4114,7 +4116,7 @@ static bool
>  cgraph_edge_brings_value_p (cgraph_edge *cs, ipcp_value_source<tree> *src,
>                           cgraph_node *dest, ipcp_value<tree> *dest_val)
>  {
> -  class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +  ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>  
>    if (!calls_same_node_or_its_all_contexts_clone_p (cs, dest, !src->val)
>        || caller_info->node_dead)
> @@ -4168,7 +4170,7 @@ cgraph_edge_brings_value_p (cgraph_edge *cs,
>                           cgraph_node *dest,
>                           ipcp_value<ipa_polymorphic_call_context> *)
>  {
> -  class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +  ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>  
>    if (!calls_same_node_or_its_all_contexts_clone_p (cs, dest, true)
>        || caller_info->node_dead)
> @@ -4243,7 +4245,7 @@ get_info_about_necessary_edges (ipcp_value<valtype> 
> *val, cgraph_node *dest,
>    *count_sum = cnt;
>    *caller_count = count;
>  
> -  if (!hot && IPA_NODE_REF (dest)->node_within_scc)
> +  if (!hot && ipa_node_params_sum->get (dest)->node_within_scc)
>      {
>        struct cgraph_edge *cs;
>  
> @@ -4494,7 +4496,7 @@ want_remove_some_param_p (cgraph_node *node, vec<tree> 
> known_csts)
>  {
>    auto_vec<bool, 16> surviving;
>    bool filled_vec = false;
> -  ipa_node_params *info = IPA_NODE_REF (node);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
>    int i, count = ipa_get_param_count (info);
>  
>    for (i = 0; i < count; i++)
> @@ -4527,7 +4529,7 @@ create_specialized_node (struct cgraph_node *node,
>                        struct ipa_agg_replacement_value *aggvals,
>                        vec<cgraph_edge *> callers)
>  {
> -  class ipa_node_params *new_info, *info = IPA_NODE_REF (node);
> +  ipa_node_params *new_info, *info = ipa_node_params_sum->get (node);
>    vec<ipa_replace_map *, va_gc> *replace_trees = NULL;
>    vec<ipa_adjusted_param, va_gc> *new_params = NULL;
>    struct ipa_agg_replacement_value *av;
> @@ -4662,7 +4664,7 @@ create_specialized_node (struct cgraph_node *node,
>      }
>    ipa_check_create_node_params ();
>    update_profiling_info (node, new_node);
> -  new_info = IPA_NODE_REF (new_node);
> +  new_info = ipa_node_params_sum->get (new_node);
>    new_info->ipcp_orig_node = node;
>    new_node->ipcp_clone = true;
>    new_info->known_csts = known_csts;
> @@ -4689,8 +4691,8 @@ self_recursive_pass_through_p (cgraph_edge *cs, 
> ipa_jump_func *jfunc, int i,
>        && jfunc->type == IPA_JF_PASS_THROUGH
>        && (!simple || ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR)
>        && ipa_get_jf_pass_through_formal_id (jfunc) == i
> -      && IPA_NODE_REF (cs->caller)
> -      && !IPA_NODE_REF (cs->caller)->ipcp_orig_node)
> +      && ipa_node_params_sum->get (cs->caller)
> +      && !ipa_node_params_sum->get (cs->caller)->ipcp_orig_node)
>      return true;
>    return false;
>  }
> @@ -4713,8 +4715,8 @@ self_recursive_agg_pass_through_p (cgraph_edge *cs, 
> ipa_agg_jf_item *jfunc,
>        && (!simple || jfunc->value.pass_through.operation == NOP_EXPR)
>        && jfunc->value.pass_through.formal_id == i
>        && useless_type_conversion_p (jfunc->value.load_agg.type, jfunc->type)
> -      && IPA_NODE_REF (cs->caller)
> -      && !IPA_NODE_REF (cs->caller)->ipcp_orig_node)
> +      && ipa_node_params_sum->get (cs->caller)
> +      && !ipa_node_params_sum->get (cs->caller)->ipcp_orig_node)
>      return true;
>    return false;
>  }
> @@ -4727,7 +4729,7 @@ find_more_scalar_values_for_callers_subset (struct 
> cgraph_node *node,
>                                           vec<tree> known_csts,
>                                           vec<cgraph_edge *> callers)
>  {
> -  class ipa_node_params *info = IPA_NODE_REF (node);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
>    int i, count = ipa_get_param_count (info);
>  
>    for (i = 0; i < count; i++)
> @@ -4746,15 +4748,16 @@ find_more_scalar_values_for_callers_subset (struct 
> cgraph_node *node,
>         struct ipa_jump_func *jump_func;
>         tree t;
>  
> -       if (!IPA_EDGE_REF (cs)
> -           || i >= ipa_get_cs_argument_count (IPA_EDGE_REF (cs))
> +       ipa_edge_args *args = ipa_edge_args_sum->get (cs);
> +       if (!args
> +           || i >= ipa_get_cs_argument_count (args)
>             || (i == 0
>                 && call_passes_through_thunk (cs)))
>           {
>             newval = NULL_TREE;
>             break;
>           }
> -       jump_func = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), i);
> +       jump_func = ipa_get_ith_jump_func (args, i);
>  
>         /* Besides simple pass-through jump function, arithmetic jump
>            function could also introduce argument-direct-pass-through for
> @@ -4777,8 +4780,8 @@ find_more_scalar_values_for_callers_subset (struct 
> cgraph_node *node,
>                               type);
>           }
>         else
> -         t = ipa_value_from_jfunc (IPA_NODE_REF (cs->caller), jump_func,
> -                                   type);
> +         t = ipa_value_from_jfunc (ipa_node_params_sum->get (cs->caller),
> +                                   jump_func, type);
>         if (!t
>             || (newval
>                 && !values_equal_for_ipcp_p (t, newval))
> @@ -4818,7 +4821,7 @@ find_more_contexts_for_caller_subset (cgraph_node *node,
>                                     *known_contexts,
>                                     vec<cgraph_edge *> callers)
>  {
> -  ipa_node_params *info = IPA_NODE_REF (node);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
>    int i, count = ipa_get_param_count (info);
>  
>    for (i = 0; i < count; i++)
> @@ -4836,14 +4839,14 @@ find_more_contexts_for_caller_subset (cgraph_node 
> *node,
>  
>        FOR_EACH_VEC_ELT (callers, j, cs)
>       {
> -       if (!IPA_EDGE_REF (cs)
> -           || i >= ipa_get_cs_argument_count (IPA_EDGE_REF (cs)))
> +       ipa_edge_args *args = ipa_edge_args_sum->get (cs);
> +       if (!args
> +           || i >= ipa_get_cs_argument_count (args))
>           return;
> -       ipa_jump_func *jfunc = ipa_get_ith_jump_func (IPA_EDGE_REF (cs),
> -                                                         i);
> +       ipa_jump_func *jfunc = ipa_get_ith_jump_func (args, i);
>         ipa_polymorphic_call_context ctx;
> -       ctx = ipa_context_from_jfunc (IPA_NODE_REF (cs->caller), cs, i,
> -                                     jfunc);
> +       ctx = ipa_context_from_jfunc (ipa_node_params_sum->get (cs->caller),
> +                                     cs, i, jfunc);
>         if (first)
>           {
>             newval = ctx;
> @@ -5020,19 +5023,19 @@ intersect_aggregates_with_edge (struct cgraph_edge 
> *cs, int index,
>                               vec<ipa_agg_value> inter)
>  {
>    struct ipa_jump_func *jfunc;
> -  jfunc = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), index);
> +  jfunc = ipa_get_ith_jump_func (ipa_edge_args_sum->get (cs), index);
>    if (jfunc->type == IPA_JF_PASS_THROUGH
>        && ipa_get_jf_pass_through_operation (jfunc) == NOP_EXPR)
>      {
> -      class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +      ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>        int src_idx = ipa_get_jf_pass_through_formal_id (jfunc);
>  
>        if (caller_info->ipcp_orig_node)
>       {
>         struct cgraph_node *orig_node = caller_info->ipcp_orig_node;
>         class ipcp_param_lattices *orig_plats;
> -       orig_plats = ipa_get_parm_lattices (IPA_NODE_REF (orig_node),
> -                                           src_idx);
> +       ipa_node_params *orig_info = ipa_node_params_sum->get (orig_node);
> +       orig_plats = ipa_get_parm_lattices (orig_info, src_idx);
>         if (agg_pass_through_permissible_p (orig_plats, jfunc))
>           {
>             if (!inter.exists ())
> @@ -5063,7 +5066,7 @@ intersect_aggregates_with_edge (struct cgraph_edge *cs, 
> int index,
>    else if (jfunc->type == IPA_JF_ANCESTOR
>          && ipa_get_jf_ancestor_agg_preserved (jfunc))
>      {
> -      class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +      ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>        int src_idx = ipa_get_jf_ancestor_formal_id (jfunc);
>        class ipcp_param_lattices *src_plats;
>        HOST_WIDE_INT delta = ipa_get_jf_ancestor_offset (jfunc);
> @@ -5092,7 +5095,7 @@ intersect_aggregates_with_edge (struct cgraph_edge *cs, 
> int index,
>  
>    if (jfunc->agg.items)
>      {
> -      class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +      ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>        struct ipa_agg_value *item;
>        int k;
>  
> @@ -5179,7 +5182,7 @@ static struct ipa_agg_replacement_value *
>  find_aggregate_values_for_callers_subset (struct cgraph_node *node,
>                                         vec<cgraph_edge *> callers)
>  {
> -  class ipa_node_params *dest_info = IPA_NODE_REF (node);
> +  ipa_node_params *dest_info = ipa_node_params_sum->get (node);
>    struct ipa_agg_replacement_value *res;
>    struct ipa_agg_replacement_value **tail = &res;
>    struct cgraph_edge *cs;
> @@ -5187,12 +5190,13 @@ find_aggregate_values_for_callers_subset (struct 
> cgraph_node *node,
>  
>    FOR_EACH_VEC_ELT (callers, j, cs)
>      {
> -      if (!IPA_EDGE_REF (cs))
> +      ipa_edge_args *args = ipa_edge_args_sum->get (cs);
> +      if (!args)
>       {
>         count = 0;
>         break;
>       }
> -      int c = ipa_get_cs_argument_count (IPA_EDGE_REF (cs));
> +      int c = ipa_get_cs_argument_count (args);
>        if (c < count)
>       count = c;
>      }
> @@ -5213,7 +5217,7 @@ find_aggregate_values_for_callers_subset (struct 
> cgraph_node *node,
>        FOR_EACH_VEC_ELT (callers, j, cs)
>       {
>         struct ipa_jump_func *jfunc
> -         = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), i);
> +         = ipa_get_ith_jump_func (ipa_edge_args_sum->get (cs), i);
>         if (self_recursive_pass_through_p (cs, jfunc, i)
>             && (!plats->aggs_by_ref
>                 || ipa_get_jf_pass_through_agg_preserved (jfunc)))
> @@ -5255,14 +5259,14 @@ static bool
>  cgraph_edge_brings_all_scalars_for_node (struct cgraph_edge *cs,
>                                        struct cgraph_node *node)
>  {
> -  class ipa_node_params *dest_info = IPA_NODE_REF (node);
> +  ipa_node_params *dest_info = ipa_node_params_sum->get (node);
>    int count = ipa_get_param_count (dest_info);
>    class ipa_node_params *caller_info;
>    class ipa_edge_args *args;
>    int i;
>  
> -  caller_info = IPA_NODE_REF (cs->caller);
> -  args = IPA_EDGE_REF (cs);
> +  caller_info = ipa_node_params_sum->get (cs->caller);
> +  args = ipa_edge_args_sum->get (cs);
>    for (i = 0; i < count; i++)
>      {
>        struct ipa_jump_func *jump_func;
> @@ -5289,7 +5293,6 @@ static bool
>  cgraph_edge_brings_all_agg_vals_for_node (struct cgraph_edge *cs,
>                                         struct cgraph_node *node)
>  {
> -  class ipa_node_params *orig_node_info;
>    struct ipa_agg_replacement_value *aggval;
>    int i, ec, count;
>  
> @@ -5297,14 +5300,16 @@ cgraph_edge_brings_all_agg_vals_for_node (struct 
> cgraph_edge *cs,
>    if (!aggval)
>      return true;
>  
> -  count = ipa_get_param_count (IPA_NODE_REF (node));
> -  ec = ipa_get_cs_argument_count (IPA_EDGE_REF (cs));
> +  ipa_node_params *clone_node_info = ipa_node_params_sum->get (node);
> +  count = ipa_get_param_count (clone_node_info);
> +  ec = ipa_get_cs_argument_count (ipa_edge_args_sum->get (cs));
>    if (ec < count)
>      for (struct ipa_agg_replacement_value *av = aggval; av; av = av->next)
>        if (aggval->index >= ec)
>       return false;
>  
> -  orig_node_info = IPA_NODE_REF (IPA_NODE_REF (node)->ipcp_orig_node);
> +  ipa_node_params *orig_node_info
> +    = ipa_node_params_sum->get (clone_node_info->ipcp_orig_node);
>  
>    for (i = 0; i < count; i++)
>      {
> @@ -5522,7 +5527,7 @@ decide_about_value (struct cgraph_node *node, int 
> index, HOST_WIDE_INT offset,
>        fprintf (dump_file, " - considering value ");
>        print_ipcp_constant_value (dump_file, val->value);
>        fprintf (dump_file, " for ");
> -      ipa_dump_param (dump_file, IPA_NODE_REF (node), index);
> +      ipa_dump_param (dump_file, ipa_node_params_sum->get (node), index);
>        if (offset != -1)
>       fprintf (dump_file, ", offset: " HOST_WIDE_INT_PRINT_DEC, offset);
>        fprintf (dump_file, " (caller_count: %i)\n", caller_count);
> @@ -5573,7 +5578,7 @@ decide_about_value (struct cgraph_node *node, int 
> index, HOST_WIDE_INT offset,
>  static bool
>  decide_whether_version_node (struct cgraph_node *node)
>  {
> -  class ipa_node_params *info = IPA_NODE_REF (node);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
>    int i, count = ipa_get_param_count (info);
>    bool ret = false;
>  
> @@ -5622,8 +5627,6 @@ decide_whether_version_node (struct cgraph_node *node)
>         for (val = ctxlat->values; val; val = val->next)
>           ret |= decide_about_value (node, i, -1, val, &avals);
>       }
> -
> -     info = IPA_NODE_REF (node);
>      }
>  
>    if (info->do_clone_for_all_contexts)
> @@ -5640,7 +5643,7 @@ decide_whether_version_node (struct cgraph_node *node)
>        for (int i = callers.length () - 1; i >= 0; i--)
>       {
>         cgraph_edge *cs = callers[i];
> -       class ipa_node_params *caller_info = IPA_NODE_REF (cs->caller);
> +       ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
>  
>         if (caller_info && caller_info->node_dead)
>           callers.unordered_remove (i);
> @@ -5675,9 +5678,8 @@ decide_whether_version_node (struct cgraph_node *node)
>       }
>        clone = create_specialized_node (node, known_csts, known_contexts,
>                                      aggvals, callers);
> -      info = IPA_NODE_REF (node);
>        info->do_clone_for_all_contexts = false;
> -      IPA_NODE_REF (clone)->is_all_contexts_clone = true;
> +      ipa_node_params_sum->get (clone)->is_all_contexts_clone = true;
>        ret = true;
>      }
>  
> @@ -5698,7 +5700,7 @@ spread_undeadness (struct cgraph_node *node)
>       class ipa_node_params *info;
>  
>       callee = cs->callee->function_symbol (NULL);
> -     info = IPA_NODE_REF (callee);
> +     info = ipa_node_params_sum->get (callee);
>  
>       if (info && info->node_dead)
>         {
> @@ -5722,10 +5724,13 @@ has_undead_caller_from_outside_scc_p (struct 
> cgraph_node *node,
>       && cs->caller->call_for_symbol_thunks_and_aliases
>         (has_undead_caller_from_outside_scc_p, NULL, true))
>        return true;
> -    else if (!ipa_edge_within_scc (cs)
> -          && (!IPA_NODE_REF (cs->caller) /* Unoptimized caller.  */
> -              || !IPA_NODE_REF (cs->caller)->node_dead))
> +    else if (!ipa_edge_within_scc (cs))
> +      {
> +     ipa_node_params *caller_info = ipa_node_params_sum->get (cs->caller);
> +     if (!caller_info /* Unoptimized caller are like dead ones.  */
> +         || !caller_info->node_dead)
>         return true;
> +      }
>    return false;
>  }
>  
> @@ -5738,21 +5743,29 @@ identify_dead_nodes (struct cgraph_node *node)
>  {
>    struct cgraph_node *v;
>    for (v = node; v; v = ((struct ipa_dfs_info *) v->aux)->next_cycle)
> -    if (v->local
> -     && IPA_NODE_REF (v)
> -     && !v->call_for_symbol_thunks_and_aliases
> -          (has_undead_caller_from_outside_scc_p, NULL, true))
> -      IPA_NODE_REF (v)->node_dead = 1;
> +    if (v->local)
> +      {
> +     ipa_node_params *info = ipa_node_params_sum->get (v);
> +     if (info
> +         && !v->call_for_symbol_thunks_and_aliases
> +           (has_undead_caller_from_outside_scc_p, NULL, true))
> +       info->node_dead = 1;
> +      }
>  
>    for (v = node; v; v = ((struct ipa_dfs_info *) v->aux)->next_cycle)
> -    if (IPA_NODE_REF (v) && !IPA_NODE_REF (v)->node_dead)
> -      spread_undeadness (v);
> +    {
> +      ipa_node_params *info = ipa_node_params_sum->get (v);
> +      if (info && !info->node_dead)
> +     spread_undeadness (v);
> +    }
>  
>    if (dump_file && (dump_flags & TDF_DETAILS))
>      {
>        for (v = node; v; v = ((struct ipa_dfs_info *) v->aux)->next_cycle)
> -     if (IPA_NODE_REF (v) && IPA_NODE_REF (v)->node_dead)
> -       fprintf (dump_file, "  Marking node as dead: %s.\n", v->dump_name ());
> +     if (ipa_node_params_sum->get (v)
> +         && ipa_node_params_sum->get (v)->node_dead)
> +       fprintf (dump_file, "  Marking node as dead: %s.\n",
> +                v->dump_name ());
>      }
>  }
>  
> @@ -5798,7 +5811,7 @@ ipcp_store_bits_results (void)
>  
>    FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
>      {
> -      ipa_node_params *info = IPA_NODE_REF (node);
> +      ipa_node_params *info = ipa_node_params_sum->get (node);
>        bool dumped_sth = false;
>        bool found_useful_result = false;
>  
> @@ -5812,7 +5825,7 @@ ipcp_store_bits_results (void)
>       }
>  
>        if (info->ipcp_orig_node)
> -     info = IPA_NODE_REF (info->ipcp_orig_node);
> +     info = ipa_node_params_sum->get (info->ipcp_orig_node);
>        if (!info->lattices)
>       /* Newly expanded artificial thunks do not have lattices.  */
>       continue;
> @@ -5879,7 +5892,7 @@ ipcp_store_vr_results (void)
>  
>    FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node)
>      {
> -      ipa_node_params *info = IPA_NODE_REF (node);
> +      ipa_node_params *info = ipa_node_params_sum->get (node);
>        bool found_useful_result = false;
>  
>        if (!info || !opt_for_fn (node->decl, flag_ipa_vrp))
> @@ -5892,7 +5905,7 @@ ipcp_store_vr_results (void)
>       }
>  
>        if (info->ipcp_orig_node)
> -     info = IPA_NODE_REF (info->ipcp_orig_node);
> +     info = ipa_node_params_sum->get (info->ipcp_orig_node);
>        if (!info->lattices)
>       /* Newly expanded artificial thunks do not have lattices.  */
>       continue;
> diff --git a/gcc/ipa-fnsummary.c b/gcc/ipa-fnsummary.c
> index 18bbae145b9..4e5be812734 100644
> --- a/gcc/ipa-fnsummary.c
> +++ b/gcc/ipa-fnsummary.c
> @@ -590,7 +590,7 @@ evaluate_properties_for_edge (struct cgraph_edge *e, bool 
> inline_p,
>    if (ipa_node_params_sum
>        && !e->call_stmt_cannot_inline_p
>        && (info->conds || compute_contexts)
> -      && (args = IPA_EDGE_REF (e)) != NULL)
> +      && (args = ipa_edge_args_sum->get (e)) != NULL)
>      {
>        struct cgraph_node *caller;
>        class ipa_node_params *caller_parms_info, *callee_pi = NULL;
> @@ -603,8 +603,8 @@ evaluate_properties_for_edge (struct cgraph_edge *e, bool 
> inline_p,
>           caller = e->caller->inlined_to;
>         else
>           caller = e->caller;
> -       caller_parms_info = IPA_NODE_REF (caller);
> -          callee_pi = IPA_NODE_REF (callee);
> +       caller_parms_info = ipa_node_params_sum->get (caller);
> +          callee_pi = ipa_node_params_sum->get (callee);
>  
>         /* Watch for thunks.  */
>         if (callee_pi)
> @@ -816,7 +816,7 @@ ipa_fn_summary_t::duplicate (cgraph_node *src,
>    if (ipa_node_params_sum && cinfo && cinfo->tree_map)
>      {
>        /* Use SRC parm info since it may not be copied yet.  */
> -      class ipa_node_params *parms_info = IPA_NODE_REF (src);
> +      ipa_node_params *parms_info = ipa_node_params_sum->get (src);
>        ipa_auto_call_arg_values avals;
>        int count = ipa_get_param_count (parms_info);
>        int i, j;
> @@ -2584,7 +2584,8 @@ analyze_function_body (struct cgraph_node *node, bool 
> early)
>    struct function *my_function = DECL_STRUCT_FUNCTION (node->decl);
>    sreal freq;
>    class ipa_fn_summary *info = ipa_fn_summaries->get_create (node);
> -  class ipa_node_params *params_summary = early ? NULL : IPA_NODE_REF (node);
> +  ipa_node_params *params_summary
> +    = early ? NULL : ipa_node_params_sum->get (node);
>    predicate bb_predicate;
>    struct ipa_func_body_info fbi;
>    vec<predicate> nonconstant_names = vNULL;
> @@ -2622,7 +2623,7 @@ analyze_function_body (struct cgraph_node *node, bool 
> early)
>        if (ipa_node_params_sum)
>       {
>         fbi.node = node;
> -       fbi.info = IPA_NODE_REF (node);
> +       fbi.info = ipa_node_params_sum->get (node);
>         fbi.bb_infos = vNULL;
>         fbi.bb_infos.safe_grow_cleared (last_basic_block_for_fn (cfun), true);
>         fbi.param_count = count_formal_params (node->decl);
> @@ -3368,7 +3369,7 @@ estimate_calls_size_and_time (struct cgraph_node *node, 
> int *size,
>              || avals->m_known_contexts.length ()
>              || avals->m_known_aggs.length ()))
>      {
> -      class ipa_node_params *params_summary = IPA_NODE_REF (node);
> +      ipa_node_params *params_summary = ipa_node_params_sum->get (node);
>        unsigned int nargs = params_summary
>                          ? ipa_get_param_count (params_summary) : 0;
>  
> @@ -3463,7 +3464,7 @@ ipa_cached_call_context::duplicate_from (const 
> ipa_call_context &ctx)
>    m_node = ctx.m_node;
>    m_possible_truths = ctx.m_possible_truths;
>    m_nonspec_possible_truths = ctx.m_nonspec_possible_truths;
> -  class ipa_node_params *params_summary = IPA_NODE_REF (m_node);
> +  ipa_node_params *params_summary = ipa_node_params_sum->get (m_node);
>    unsigned int nargs = params_summary
>                      ? ipa_get_param_count (params_summary) : 0;
>  
> @@ -3553,7 +3554,7 @@ ipa_call_context::equal_to (const ipa_call_context &ctx)
>        || m_nonspec_possible_truths != ctx.m_nonspec_possible_truths)
>      return false;
>  
> -  class ipa_node_params *params_summary = IPA_NODE_REF (m_node);
> +  ipa_node_params *params_summary = ipa_node_params_sum->get (m_node);
>    unsigned int nargs = params_summary
>                      ? ipa_get_param_count (params_summary) : 0;
>  
> @@ -3902,7 +3903,7 @@ remap_edge_params (struct cgraph_edge *inlined_edge,
>    if (ipa_node_params_sum)
>      {
>        int i;
> -      class ipa_edge_args *args = IPA_EDGE_REF (edge);
> +      ipa_edge_args *args = ipa_edge_args_sum->get (edge);
>        if (!args)
>       return;
>        class ipa_call_summary *es = ipa_call_summaries->get (edge);
> @@ -4055,8 +4056,8 @@ ipa_merge_fn_summary_after_inlining (struct cgraph_edge 
> *edge)
>    int i;
>    predicate toplev_predicate;
>    class ipa_call_summary *es = ipa_call_summaries->get (edge);
> -  class ipa_node_params *params_summary = (ipa_node_params_sum
> -                                        ? IPA_NODE_REF (to) : NULL);
> +  ipa_node_params *params_summary = (ipa_node_params_sum
> +                                  ? ipa_node_params_sum->get (to) : NULL);
>  
>    if (es->predicate)
>      toplev_predicate = *es->predicate;
> @@ -4072,7 +4073,7 @@ ipa_merge_fn_summary_after_inlining (struct cgraph_edge 
> *edge)
>      }
>    if (ipa_node_params_sum && callee_info->conds)
>      {
> -      class ipa_edge_args *args = IPA_EDGE_REF (edge);
> +      ipa_edge_args *args = ipa_edge_args_sum->get (edge);
>        int count = args ? ipa_get_cs_argument_count (args) : 0;
>        int i;
>  
> @@ -4384,7 +4385,8 @@ inline_read_section (struct lto_file_decl_data 
> *file_data, const char *data,
>        node = dyn_cast<cgraph_node *> (lto_symtab_encoder_deref (encoder,
>                                                               index));
>        info = node->prevailing_p () ? ipa_fn_summaries->get_create (node) : 
> NULL;
> -      params_summary = node->prevailing_p () ? IPA_NODE_REF (node) : NULL;
> +      params_summary = node->prevailing_p ()
> +                    ? ipa_node_params_sum->get (node) : NULL;
>        size_info = node->prevailing_p ()
>                 ? ipa_size_summaries->get_create (node) : NULL;
>  
> diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
> index 5dd33a75c3a..4c1f25d0834 100644
> --- a/gcc/ipa-icf.c
> +++ b/gcc/ipa-icf.c
> @@ -496,12 +496,12 @@ sem_function::param_used_p (unsigned int i)
>    if (ipa_node_params_sum == NULL)
>      return true;
>  
> -  class ipa_node_params *parms_info = IPA_NODE_REF (get_node ());
> +  ipa_node_params *parms_info = ipa_node_params_sum->get (get_node ());
>  
>    if (!parms_info || vec_safe_length (parms_info->descriptors) <= i)
>      return true;
>  
> -  return ipa_is_param_used (IPA_NODE_REF (get_node ()), i);
> +  return ipa_is_param_used (parms_info, i);
>  }
>  
>  /* Perform additional check needed to match types function parameters that 
> are
> diff --git a/gcc/ipa-modref.c b/gcc/ipa-modref.c
> index e7f79caf34d..d5a8332fb55 100644
> --- a/gcc/ipa-modref.c
> +++ b/gcc/ipa-modref.c
> @@ -2899,7 +2899,7 @@ compute_parm_map (cgraph_edge *callee_edge, 
> vec<modref_parm_map> *parm_map)
>    class ipa_edge_args *args;
>    if (ipa_node_params_sum
>        && !callee_edge->call_stmt_cannot_inline_p
> -      && (args = IPA_EDGE_REF (callee_edge)) != NULL)
> +      && (args = ipa_edge_args_sum->get (callee_edge)) != NULL)
>      {
>        int i, count = ipa_get_cs_argument_count (args);
>        class ipa_node_params *caller_parms_info, *callee_pi;
> @@ -2909,10 +2909,11 @@ compute_parm_map (cgraph_edge *callee_edge, 
> vec<modref_parm_map> *parm_map)
>        = callee_edge->callee->function_or_virtual_thunk_symbol
>                             (NULL, callee_edge->caller);
>  
> -      caller_parms_info = IPA_NODE_REF (callee_edge->caller->inlined_to
> -                                     ? callee_edge->caller->inlined_to
> -                                     : callee_edge->caller);
> -      callee_pi = IPA_NODE_REF (callee);
> +      caller_parms_info
> +     = ipa_node_params_sum->get (callee_edge->caller->inlined_to
> +                                 ? callee_edge->caller->inlined_to
> +                                 : callee_edge->caller);
> +      callee_pi = ipa_node_params_sum->get (callee);
>  
>        (*parm_map).safe_grow_cleared (count, true);
>  
> @@ -3240,8 +3241,8 @@ get_access_for_fnspec (cgraph_edge *e, attr_fnspec 
> &fnspec,
>      {
>        cgraph_node *node = e->caller->inlined_to
>                         ? e->caller->inlined_to : e->caller;
> -      class ipa_node_params *caller_parms_info = IPA_NODE_REF (node);
> -      class ipa_edge_args *args = IPA_EDGE_REF (e);
> +      ipa_node_params *caller_parms_info = ipa_node_params_sum->get (node);
> +      ipa_edge_args *args = ipa_edge_args_sum->get (e);
>        struct ipa_jump_func *jf = ipa_get_ith_jump_func (args, size_arg);
>  
>        if (jf)
> diff --git a/gcc/ipa-profile.c b/gcc/ipa-profile.c
> index 5354ce03923..ce32b538976 100644
> --- a/gcc/ipa-profile.c
> +++ b/gcc/ipa-profile.c
> @@ -740,10 +740,10 @@ check_argument_count (struct cgraph_node *n, struct 
> cgraph_edge *e)
>  {
>    if (!ipa_node_params_sum || !ipa_edge_args_sum)
>      return true;
> -  class ipa_node_params *info = IPA_NODE_REF (n->function_symbol ());
> +  ipa_node_params *info = ipa_node_params_sum->get (n->function_symbol ());
>    if (!info)
>      return true;
> -  ipa_edge_args *e_info = IPA_EDGE_REF (e);
> +  ipa_edge_args *e_info = ipa_edge_args_sum->get (e);
>    if (!e_info)
>      return true;
>    if (ipa_get_param_count (info) != ipa_get_cs_argument_count (e_info)
> diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
> index 02c483b10dd..0591ef1b569 100644
> --- a/gcc/ipa-prop.c
> +++ b/gcc/ipa-prop.c
> @@ -276,7 +276,7 @@ ipa_dump_param (FILE *file, class ipa_node_params *info, 
> int i)
>  static bool
>  ipa_alloc_node_params (struct cgraph_node *node, int param_count)
>  {
> -  class ipa_node_params *info = IPA_NODE_REF_GET_CREATE (node);
> +  ipa_node_params *info = ipa_node_params_sum->get_create (node);
>  
>    if (!info->descriptors && param_count)
>      {
> @@ -294,7 +294,7 @@ ipa_alloc_node_params (struct cgraph_node *node, int 
> param_count)
>  void
>  ipa_initialize_node_params (struct cgraph_node *node)
>  {
> -  class ipa_node_params *info = IPA_NODE_REF_GET_CREATE (node);
> +  ipa_node_params *info = ipa_node_params_sum->get_create (node);
>  
>    if (!info->descriptors
>        && ipa_alloc_node_params (node, count_formal_params (node->decl)))
> @@ -306,15 +306,15 @@ ipa_initialize_node_params (struct cgraph_node *node)
>  static void
>  ipa_print_node_jump_functions_for_edge (FILE *f, struct cgraph_edge *cs)
>  {
> -  int i, count;
> +  ipa_edge_args *args = ipa_edge_args_sum->get (cs);
> +  int count = ipa_get_cs_argument_count (args);
>  
> -  count = ipa_get_cs_argument_count (IPA_EDGE_REF (cs));
> -  for (i = 0; i < count; i++)
> +  for (int i = 0; i < count; i++)
>      {
>        struct ipa_jump_func *jump_func;
>        enum jump_func_type type;
>  
> -      jump_func = ipa_get_ith_jump_func (IPA_EDGE_REF (cs), i);
> +      jump_func = ipa_get_ith_jump_func (args, i);
>        type = jump_func->type;
>  
>        fprintf (f, "       param %d: ", i);
> @@ -410,7 +410,7 @@ ipa_print_node_jump_functions_for_edge (FILE *f, struct 
> cgraph_edge *cs)
>       }
>  
>        class ipa_polymorphic_call_context *ctx
> -     = ipa_get_ith_polymorhic_call_context (IPA_EDGE_REF (cs), i);
> +     = ipa_get_ith_polymorhic_call_context (args, i);
>        if (ctx && !ctx->useless_p ())
>       {
>         fprintf (f, "         Context: ");
> @@ -2232,8 +2232,8 @@ static void
>  ipa_compute_jump_functions_for_edge (struct ipa_func_body_info *fbi,
>                                    struct cgraph_edge *cs)
>  {
> -  class ipa_node_params *info = IPA_NODE_REF (cs->caller);
> -  class ipa_edge_args *args = IPA_EDGE_REF_GET_CREATE (cs);
> +  ipa_node_params *info = ipa_node_params_sum->get (cs->caller);
> +  ipa_edge_args *args = ipa_edge_args_sum->get_create (cs);
>    gcall *call = cs->call_stmt;
>    int n, arg_num = gimple_call_num_args (call);
>    bool useful_context = false;
> @@ -2509,11 +2509,10 @@ ipa_note_param_call (struct cgraph_node *node, int 
> param_index,
>    cs->indirect_info->agg_contents = 0;
>    cs->indirect_info->member_ptr = 0;
>    cs->indirect_info->guaranteed_unmodified = 0;
> -  ipa_set_param_used_by_indirect_call (IPA_NODE_REF (node),
> -                                       param_index, true);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
> +  ipa_set_param_used_by_indirect_call (info, param_index, true);
>    if (cs->indirect_info->polymorphic || polymorphic)
> -    ipa_set_param_used_by_polymorphic_call
> -         (IPA_NODE_REF (node), param_index, true);
> +    ipa_set_param_used_by_polymorphic_call (info, param_index, true);
>    return cs;
>  }
>  
> @@ -2884,7 +2883,7 @@ ipa_analyze_params_uses_in_bb (struct 
> ipa_func_body_info *fbi, basic_block bb)
>  static void
>  ipa_analyze_controlled_uses (struct cgraph_node *node)
>  {
> -  class ipa_node_params *info = IPA_NODE_REF (node);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
>  
>    for (int i = 0; i < ipa_get_param_count (info); i++)
>      {
> @@ -2980,7 +2979,7 @@ ipa_analyze_node (struct cgraph_node *node)
>  
>    ipa_check_create_node_params ();
>    ipa_check_create_edge_args ();
> -  info = IPA_NODE_REF_GET_CREATE (node);
> +  info = ipa_node_params_sum->get_create (node);
>  
>    if (info->analysis_done)
>      return;
> @@ -3003,7 +3002,7 @@ ipa_analyze_node (struct cgraph_node *node)
>    ipa_analyze_controlled_uses (node);
>  
>    fbi.node = node;
> -  fbi.info = IPA_NODE_REF (node);
> +  fbi.info = info;
>    fbi.bb_infos = vNULL;
>    fbi.bb_infos.safe_grow_cleared (last_basic_block_for_fn (cfun), true);
>    fbi.param_count = ipa_get_param_count (info);
> @@ -3036,8 +3035,8 @@ static void
>  update_jump_functions_after_inlining (struct cgraph_edge *cs,
>                                     struct cgraph_edge *e)
>  {
> -  class ipa_edge_args *top = IPA_EDGE_REF (cs);
> -  class ipa_edge_args *args = IPA_EDGE_REF (e);
> +  ipa_edge_args *top = ipa_edge_args_sum->get (cs);
> +  ipa_edge_args *args = ipa_edge_args_sum->get (e);
>    if (!args)
>      return;
>    int count = ipa_get_cs_argument_count (args);
> @@ -3889,11 +3888,11 @@ update_indirect_edges_after_inlining (struct 
> cgraph_edge *cs,
>    bool res = false;
>  
>    ipa_check_create_edge_args ();
> -  top = IPA_EDGE_REF (cs);
> +  top = ipa_edge_args_sum->get (cs);
>    new_root = cs->caller->inlined_to
>               ? cs->caller->inlined_to : cs->caller;
> -  new_root_info = IPA_NODE_REF (new_root);
> -  inlined_node_info = IPA_NODE_REF (cs->callee->function_symbol ());
> +  new_root_info = ipa_node_params_sum->get (new_root);
> +  inlined_node_info = ipa_node_params_sum->get (cs->callee->function_symbol 
> ());
>  
>    for (ie = node->indirect_calls; ie; ie = next_ie)
>      {
> @@ -3947,7 +3946,6 @@ update_indirect_edges_after_inlining (struct 
> cgraph_edge *cs,
>         && spec_targets.contains (new_direct_edge->callee))
>       {
>         new_direct_edge->indirect_inlining_edge = 1;
> -       top = IPA_EDGE_REF (cs);
>         res = true;
>         if (!new_direct_edge->speculative)
>           continue;
> @@ -3960,7 +3958,6 @@ update_indirect_edges_after_inlining (struct 
> cgraph_edge *cs,
>             new_edges->safe_push (new_direct_edge);
>             res = true;
>           }
> -       top = IPA_EDGE_REF (cs);
>         /* If speculative edge was introduced we still need to update
>            call info of the indirect edge.  */
>         if (!new_direct_edge->speculative)
> @@ -4060,13 +4057,13 @@ combine_controlled_uses_counters (int c, int d)
>  static void
>  propagate_controlled_uses (struct cgraph_edge *cs)
>  {
> -  class ipa_edge_args *args = IPA_EDGE_REF (cs);
> +  ipa_edge_args *args = ipa_edge_args_sum->get (cs);
>    if (!args)
>      return;
>    struct cgraph_node *new_root = cs->caller->inlined_to
>      ? cs->caller->inlined_to : cs->caller;
> -  class ipa_node_params *new_root_info = IPA_NODE_REF (new_root);
> -  class ipa_node_params *old_root_info = IPA_NODE_REF (cs->callee);
> +  ipa_node_params *new_root_info = ipa_node_params_sum->get (new_root);
> +  ipa_node_params *old_root_info = ipa_node_params_sum->get (cs->callee);
>    int count, i;
>  
>    if (!old_root_info)
> @@ -4195,7 +4192,7 @@ ipa_propagate_indirect_call_infos (struct cgraph_edge 
> *cs,
>    changed = propagate_info_to_inlined_callees (cs, cs->callee, new_edges);
>    ipa_node_params_sum->remove (cs->callee);
>  
> -  class ipa_edge_args *args = IPA_EDGE_REF (cs);
> +  ipa_edge_args *args = ipa_edge_args_sum->get (cs);
>    if (args)
>      {
>        bool ok = true;
> @@ -4403,7 +4400,7 @@ ipa_edge_args_sum_t::duplicate (cgraph_edge *src, 
> cgraph_edge *dst,
>       {
>         struct cgraph_node *inline_root = dst->caller->inlined_to
>           ? dst->caller->inlined_to : dst->caller;
> -       class ipa_node_params *root_info = IPA_NODE_REF (inline_root);
> +       ipa_node_params *root_info = ipa_node_params_sum->get (inline_root);
>         int idx = ipa_get_jf_pass_through_formal_id (dst_jf);
>  
>         int c = ipa_get_controlled_uses (root_info, idx);
> @@ -4553,7 +4550,7 @@ ipa_print_node_params (FILE *f, struct cgraph_node 
> *node)
>  
>    if (!node->definition)
>      return;
> -  info = IPA_NODE_REF (node);
> +  info = ipa_node_params_sum->get (node);
>    fprintf (f, "  function  %s parameter descriptors:\n", node->dump_name ());
>    if (!info)
>      {
> @@ -4956,7 +4953,7 @@ ipa_write_node_info (struct output_block *ob, struct 
> cgraph_node *node)
>  {
>    int node_ref;
>    lto_symtab_encoder_t encoder;
> -  class ipa_node_params *info = IPA_NODE_REF (node);
> +  ipa_node_params *info = ipa_node_params_sum->get (node);
>    int j;
>    struct cgraph_edge *e;
>    struct bitpack_d bp;
> @@ -4983,7 +4980,7 @@ ipa_write_node_info (struct output_block *ob, struct 
> cgraph_node *node)
>      }
>    for (e = node->callees; e; e = e->next_callee)
>      {
> -      class ipa_edge_args *args = IPA_EDGE_REF (e);
> +      ipa_edge_args *args = ipa_edge_args_sum->get (e);
>  
>        if (!args)
>       {
> @@ -5003,7 +5000,7 @@ ipa_write_node_info (struct output_block *ob, struct 
> cgraph_node *node)
>      }
>    for (e = node->indirect_calls; e; e = e->next_callee)
>      {
> -      class ipa_edge_args *args = IPA_EDGE_REF (e);
> +      ipa_edge_args *args = ipa_edge_args_sum->get (e);
>        if (!args)
>       streamer_write_uhwi (ob, 0);
>        else
> @@ -5041,7 +5038,7 @@ ipa_read_edge_info (class lto_input_block *ib,
>            will get fnspecs.  */
>         || fndecl_built_in_p (e->callee->decl, BUILT_IN_NORMAL)))
>      {
> -      class ipa_edge_args *args = IPA_EDGE_REF_GET_CREATE (e);
> +      ipa_edge_args *args = ipa_edge_args_sum->get_create (e);
>        vec_safe_grow_cleared (args->jump_functions, count, true);
>        if (contexts_computed)
>       vec_safe_grow_cleared (args->polymorphic_call_contexts, count, true);
> @@ -5080,8 +5077,8 @@ ipa_read_node_info (class lto_input_block *ib, struct 
> cgraph_node *node,
>    struct cgraph_edge *e;
>    struct bitpack_d bp;
>    bool prevails = node->prevailing_p ();
> -  class ipa_node_params *info = prevails
> -                             ? IPA_NODE_REF_GET_CREATE (node) : NULL;
> +  ipa_node_params *info
> +    = prevails ? ipa_node_params_sum->get_create (node) : NULL;
>  
>    int param_count = streamer_read_uhwi (ib);
>    if (prevails)
> @@ -5130,7 +5127,6 @@ ipa_read_node_info (class lto_input_block *ib, struct 
> cgraph_node *node,
>  void
>  ipa_prop_write_jump_functions (void)
>  {
> -  struct cgraph_node *node;
>    struct output_block *ob;
>    unsigned int count = 0;
>    lto_symtab_encoder_iterator lsei;
> @@ -5145,9 +5141,9 @@ ipa_prop_write_jump_functions (void)
>    for (lsei = lsei_start_function_in_partition (encoder); !lsei_end_p (lsei);
>         lsei_next_function_in_partition (&lsei))
>      {
> -      node = lsei_cgraph_node (lsei);
> +      cgraph_node *node = lsei_cgraph_node (lsei);
>        if (node->has_gimple_body_p ()
> -       && IPA_NODE_REF (node) != NULL)
> +       && ipa_node_params_sum->get (node) != NULL)
>       count++;
>      }
>  
> @@ -5157,9 +5153,9 @@ ipa_prop_write_jump_functions (void)
>    for (lsei = lsei_start_function_in_partition (encoder); !lsei_end_p (lsei);
>         lsei_next_function_in_partition (&lsei))
>      {
> -      node = lsei_cgraph_node (lsei);
> +      cgraph_node *node = lsei_cgraph_node (lsei);
>        if (node->has_gimple_body_p ()
> -       && IPA_NODE_REF (node) != NULL)
> +       && ipa_node_params_sum->get (node) != NULL)
>          ipa_write_node_info (ob, node);
>      }
>    streamer_write_char_stream (ob->main_stream, 0);
> diff --git a/gcc/ipa-prop.h b/gcc/ipa-prop.h
> index 1f0e6c64873..3d28a6e8640 100644
> --- a/gcc/ipa-prop.h
> +++ b/gcc/ipa-prop.h
> @@ -1017,16 +1017,6 @@ public:
>  /* Function summary where the IPA CP transformations are actually stored.  */
>  extern GTY(()) function_summary <ipcp_transformation *> 
> *ipcp_transformation_sum;
>  
> -/* Return the associated parameter/argument info corresponding to the given
> -   node/edge.  */
> -#define IPA_NODE_REF(NODE) (ipa_node_params_sum->get (NODE))
> -#define IPA_NODE_REF_GET_CREATE(NODE) (ipa_node_params_sum->get_create 
> (NODE))
> -#define IPA_EDGE_REF(EDGE) (ipa_edge_args_sum->get (EDGE))
> -#define IPA_EDGE_REF_GET_CREATE(EDGE) (ipa_edge_args_sum->get_create (EDGE))
> -/* This macro checks validity of index returned by
> -   ipa_get_param_decl_index function.  */
> -#define IS_VALID_JUMP_FUNC_INDEX(I) ((I) != -1)
> -
>  /* Creating and freeing ipa_node_params and ipa_edge_args.  */
>  void ipa_create_all_node_params (void);
>  void ipa_create_all_edge_args (void);
> -- 
> 2.31.1
> 

Reply via email to