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);
