diff mbox

Introduce symtab_node::dump_{asm_,}name functions.

Message ID 5996e8de-3940-abe8-a624-e4b5eebc4e26@suse.cz
State New
Headers show

Commit Message

Martin Liška May 19, 2017, 2:36 p.m. UTC
Hello.

We repeat all over following patterns:

	      fprintf (dump_file, "Removing speculative call %s/%i => %s/%i\n",
		       xstrdup_for_dump (edge->caller->name ()),
		       edge->caller->order,
		       xstrdup_for_dump (e2->callee->name ()),
		       e2->callee->order);

As we already wrap name() and asm_name() with xstrdup_for_dump and the pattern
of 'name/order' is very common, I suggest to come up with helper functions that
do that.

Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.

Ready to be installed?
Martin

Comments

Jan Hubicka May 19, 2017, 2:41 p.m. UTC | #1
> Hello.
> 
> We repeat all over following patterns:
> 
> 	      fprintf (dump_file, "Removing speculative call %s/%i => %s/%i\n",
> 		       xstrdup_for_dump (edge->caller->name ()),
> 		       edge->caller->order,
> 		       xstrdup_for_dump (e2->callee->name ()),
> 		       e2->callee->order);
> 
> As we already wrap name() and asm_name() with xstrdup_for_dump and the pattern
> of 'name/order' is very common, I suggest to come up with helper functions that
> do that.
> 
> Patch can bootstrap on ppc64le-redhat-linux and survives regression tests.

We used to have fixed size cyclic buffer for those strings, so it was safe
to invoke name/asm_name few times and still expect the result to be there.
I wonder what happened to those?  Using ggc is bit ugly here, but I suppose
it is OK for debug output...

Honza
> 
> Ready to be installed?
> Martin

> >From 42a746e3db58e24cbd3a4b45ab3f9150fad44928 Mon Sep 17 00:00:00 2001
> From: marxin <mliska@suse.cz>
> Date: Fri, 19 May 2017 14:09:25 +0200
> Subject: [PATCH] Introduce symtab_node::dump_{asm_,}name functions.
> 
> gcc/ChangeLog:
> 
> 2017-05-19  Martin Liska  <mliska@suse.cz>
> 
> 	* cgraph.c (cgraph_node::get_create): Use symtab_node::dump_{asm_,}name
> 	functions.
> 	(cgraph_edge::make_speculative): Likewise.
> 	(cgraph_edge::resolve_speculation): Likewise.
> 	(cgraph_edge::redirect_call_stmt_to_callee): Likewise.
> 	(cgraph_node::dump): Likewise.
> 	* cgraph.h: Likewise.
> 	* cgraphunit.c (analyze_functions): Likewise.
> 	(symbol_table::compile): Likewise.
> 	* ipa-cp.c (print_all_lattices): Likewise.
> 	(determine_versionability): Likewise.
> 	(initialize_node_lattices): Likewise.
> 	(ipcp_verify_propagated_values): Likewise.
> 	(estimate_local_effects): Likewise.
> 	(update_profiling_info): Likewise.
> 	(create_specialized_node): Likewise.
> 	(perhaps_add_new_callers): Likewise.
> 	(decide_about_value): Likewise.
> 	(decide_whether_version_node): Likewise.
> 	(identify_dead_nodes): Likewise.
> 	(ipcp_store_bits_results): Likewise.
> 	* ipa-devirt.c (dump_targets): Likewise.
> 	(ipa_devirt): Likewise.
> 	* ipa-icf.c (sem_item::dump): Likewise.
> 	(sem_function::equals): Likewise.
> 	(sem_variable::equals): Likewise.
> 	(sem_item_optimizer::read_section): Likewise.
> 	(sem_item_optimizer::execute): Likewise.
> 	(congruence_class::dump): Likewise.
> 	* ipa-inline-analysis.c (dump_ipa_call_summary): Likewise.
> 	(dump_inline_summary): Likewise.
> 	(estimate_node_size_and_time): Likewise.
> 	(inline_analyze_function): Likewise.
> 	* ipa-inline-transform.c (inline_call): Likewise.
> 	* ipa-inline.c (report_inline_failed_reason): Likewise.
> 	(want_early_inline_function_p): Likewise.
> 	(edge_badness): Likewise.
> 	(update_edge_key): Likewise.
> 	(inline_small_functions): Likewise.
> 	* ipa-profile.c (ipa_profile): Likewise.
> 	* ipa-prop.c (ipa_print_node_jump_functions): Likewise.
> 	(ipa_make_edge_direct_to_target): Likewise.
> 	(remove_described_reference): Likewise.
> 	(ipa_impossible_devirt_target): Likewise.
> 	(propagate_controlled_uses): Likewise.
> 	(ipa_print_node_params): Likewise.
> 	(ipcp_transform_function): Likewise.
> 	* ipa-pure-const.c (pure_const_read_summary): Likewise.
> 	(propagate_pure_const): Likewise.
> 	* ipa-reference.c (generate_summary): Likewise.
> 	(read_write_all_from_decl): Likewise.
> 	(propagate): Likewise.
> 	(ipa_reference_read_optimization_summary): Likewise.
> 	* ipa-utils.c (ipa_merge_profiles): Likewise.
> 	* ipa.c (walk_polymorphic_call_targets): Likewise.
> 	(symbol_table::remove_unreachable_nodes): Likewise.
> 	(ipa_single_use): Likewise.
> 	* passes.c (execute_todo): Likewise.
> 	* predict.c (drop_profile): Likewise.
> 	* symtab.c (symtab_node::get_dump_name): New function.
> 	(symtab_node::dump_name): Likewise.
> 	(symtab_node::dump_asm_name): Likewise.
> 	(symtab_node::dump_references): Likewise.
> 	(symtab_node::dump_referring): Likewise.
> 	(symtab_node::dump_base): Likewise.
> 	(symtab_node::debug_symtab): Likewise.
> 	* tree-sra.c (convert_callers_for_node): Likewise.
> 	* tree-ssa-structalias.c (ipa_pta_execute): Likewise.
> 	* value-prof.c (init_node_map): Likewise.
> 
> gcc/lto/ChangeLog:
> 
> 2017-05-19  Martin Liska  <mliska@suse.cz>
> 
> 	* lto-symtab.c (lto_cgraph_replace_node): Use
> 	symtab_node::dump_{asm_,}name functions.
> 	* lto.c (read_cgraph_and_symbols): Likewise.
> 	(do_whole_program_analysis): Likewise.
> ---
>  gcc/cgraph.c               | 75 ++++++++++++++------------------------
>  gcc/cgraph.h               | 11 +++++-
>  gcc/ipa-cp.c               | 51 +++++++++++---------------
>  gcc/ipa-devirt.c           | 15 ++++----
>  gcc/ipa-icf.c              | 31 ++++++----------
>  gcc/ipa-inline-analysis.c  | 15 ++++----
>  gcc/ipa-inline-transform.c |  8 ++---
>  gcc/ipa-inline.c           | 63 ++++++++++++++------------------
>  gcc/ipa-profile.c          |  6 ++--
>  gcc/ipa-prop.c             | 90 +++++++++++++++++++---------------------------
>  gcc/ipa-pure-const.c       | 15 +++-----
>  gcc/ipa-reference.c        | 27 ++++++--------
>  gcc/ipa-utils.c            |  5 ++-
>  gcc/ipa.c                  | 20 +++++------
>  gcc/lto/lto-symtab.c       |  7 ++--
>  gcc/predict.c              | 14 ++++----
>  gcc/symtab.c               | 42 ++++++++++++++++------
>  gcc/tree-sra.c             |  7 ++--
>  gcc/value-prof.c           | 19 ++++------
>  19 files changed, 229 insertions(+), 292 deletions(-)
> 
> diff --git a/gcc/cgraph.c b/gcc/cgraph.c
> index 10ba987701c..a1831db9f36 100644
> --- a/gcc/cgraph.c
> +++ b/gcc/cgraph.c
> @@ -539,12 +539,12 @@ cgraph_node::get_create (tree decl)
>        node->decl->decl_with_vis.symtab_node = node;
>        if (dump_file)
>  	fprintf (dump_file, "Introduced new external node "
> -		 "(%s/%i) and turned into root of the clone tree.\n",
> -		 node->name (), node->order);
> +		 "(%s) and turned into root of the clone tree.\n",
> +		 node->dump_name ());
>      }
>    else if (dump_file)
>      fprintf (dump_file, "Introduced new external node "
> -	     "(%s/%i).\n", node->name (), node->order);
> +	     "(%s).\n", node->dump_name ());
>    return node;
>  }
>  
> @@ -1055,12 +1055,8 @@ cgraph_edge::make_speculative (cgraph_node *n2, gcov_type direct_count,
>    cgraph_edge *e2;
>  
>    if (dump_file)
> -    {
> -      fprintf (dump_file, "Indirect call -> speculative call"
> -	       " %s/%i => %s/%i\n",
> -	       xstrdup_for_dump (n->name ()), n->order,
> -	       xstrdup_for_dump (n2->name ()), n2->order);
> -    }
> +    fprintf (dump_file, "Indirect call -> speculative call %s => %s\n",
> +	     n->dump_name (), n2->dump_name ());
>    speculative = true;
>    e2 = n->create_edge (n2, call_stmt, direct_count, direct_frequency);
>    initialize_inline_failed (e2);
> @@ -1163,22 +1159,18 @@ cgraph_edge::resolve_speculation (tree callee_decl)
>  	{
>  	  if (callee_decl)
>  	    {
> -	      fprintf (dump_file, "Speculative indirect call %s/%i => %s/%i has "
> +	      fprintf (dump_file, "Speculative indirect call %s => %s has "
>  		       "turned out to have contradicting known target ",
> -		       xstrdup_for_dump (edge->caller->name ()),
> -		       edge->caller->order,
> -		       xstrdup_for_dump (e2->callee->name ()),
> -		       e2->callee->order);
> +		       edge->caller->dump_name (),
> +		       e2->callee->dump_name ());
>  	      print_generic_expr (dump_file, callee_decl);
>  	      fprintf (dump_file, "\n");
>  	    }
>  	  else
>  	    {
> -	      fprintf (dump_file, "Removing speculative call %s/%i => %s/%i\n",
> -		       xstrdup_for_dump (edge->caller->name ()),
> -		       edge->caller->order,
> -		       xstrdup_for_dump (e2->callee->name ()),
> -		       e2->callee->order);
> +	      fprintf (dump_file, "Removing speculative call %s => %s\n",
> +		       edge->caller->dump_name (),
> +		       e2->callee->dump_name ());
>  	    }
>  	}
>      }
> @@ -1295,12 +1287,10 @@ cgraph_edge::redirect_call_stmt_to_callee (void)
>  						  true))
>  	{
>  	  if (dump_file)
> -	    fprintf (dump_file, "Not expanding speculative call of %s/%i -> %s/%i\n"
> +	    fprintf (dump_file, "Not expanding speculative call of %s -> %s\n"
>  		     "Type mismatch.\n",
> -		     xstrdup_for_dump (e->caller->name ()),
> -		     e->caller->order,
> -		     xstrdup_for_dump (e->callee->name ()),
> -		     e->callee->order);
> +		     e->caller->dump_name (),
> +		     e->callee->dump_name ());
>  	  e = e->resolve_speculation ();
>  	  /* We are producing the final function body and will throw away the
>  	     callgraph edges really soon.  Reset the counts/frequencies to
> @@ -1314,12 +1304,10 @@ cgraph_edge::redirect_call_stmt_to_callee (void)
>  	{
>  	  if (dump_file)
>  	    fprintf (dump_file,
> -		     "Expanding speculative call of %s/%i -> %s/%i count: "
> +		     "Expanding speculative call of %s -> %s count: "
>  		     "%" PRId64"\n",
> -		     xstrdup_for_dump (e->caller->name ()),
> -		     e->caller->order,
> -		     xstrdup_for_dump (e->callee->name ()),
> -		     e->callee->order,
> +		     e->caller->dump_name (),
> +		     e->callee->dump_name (),
>  		     (int64_t)e->count);
>  	  gcc_assert (e2->speculative);
>  	  push_cfun (DECL_STRUCT_FUNCTION (e->caller->decl));
> @@ -1399,9 +1387,8 @@ cgraph_edge::redirect_call_stmt_to_callee (void)
>  
>    if (symtab->dump_file)
>      {
> -      fprintf (symtab->dump_file, "updating call of %s/%i -> %s/%i: ",
> -	       xstrdup_for_dump (e->caller->name ()), e->caller->order,
> -	       xstrdup_for_dump (e->callee->name ()), e->callee->order);
> +      fprintf (symtab->dump_file, "updating call of %s -> %s: ",
> +	       e->caller->dump_name (), e->callee->dump_name ());
>        print_gimple_stmt (symtab->dump_file, e->call_stmt, 0, dump_flags);
>        if (e->callee->clone.combined_args_to_skip)
>  	{
> @@ -2064,15 +2051,11 @@ cgraph_node::dump (FILE *f)
>    dump_base (f);
>  
>    if (global.inlined_to)
> -    fprintf (f, "  Function %s/%i is inline copy in %s/%i\n",
> -	     xstrdup_for_dump (name ()),
> -	     order,
> -	     xstrdup_for_dump (global.inlined_to->name ()),
> -	     global.inlined_to->order);
> +    fprintf (f, "  Function %s is inline copy in %s\n",
> +	     dump_name (),
> +	     global.inlined_to->dump_name ());
>    if (clone_of)
> -    fprintf (f, "  Clone of %s/%i\n",
> -	     clone_of->asm_name (),
> -	     clone_of->order);
> +    fprintf (f, "  Clone of %s\n", clone_of->dump_asm_name ());
>    if (symtab->function_flags_ready)
>      fprintf (f, "  Availability: %s\n",
>  	     cgraph_availability_names [get_availability ()]);
> @@ -2088,14 +2071,12 @@ cgraph_node::dump (FILE *f)
>        if (vi->prev != NULL)
>  	{
>  	  fprintf (f, "prev: ");
> -	  fprintf (f, "%s/%i ", vi->prev->this_node->asm_name (),
> -		   vi->prev->this_node->order);
> +	  fprintf (f, "%s ", vi->prev->this_node->dump_asm_name ());
>  	}
>        if (vi->next != NULL)
>  	{
>  	  fprintf (f, "next: ");
> -	  fprintf (f, "%s/%i ", vi->next->this_node->asm_name (),
> -		   vi->next->this_node->order);
> +	  fprintf (f, "%s ", vi->next->this_node->dump_asm_name ());
>  	}
>        if (vi->dispatcher_resolver != NULL_TREE)
>  	fprintf (f, "dispatcher: %s",
> @@ -2184,16 +2165,14 @@ cgraph_node::dump (FILE *f)
>  
>    for (edge = callers; edge; edge = edge->next_caller)
>      {
> -      fprintf (f, "%s/%i ", edge->caller->asm_name (),
> -	       edge->caller->order);
> +      fprintf (f, "%s ", edge->caller->dump_name ());
>        edge->dump_edge_flags (f);
>      }
>  
>    fprintf (f, "\n  Calls: ");
>    for (edge = callees; edge; edge = edge->next_callee)
>      {
> -      fprintf (f, "%s/%i ", edge->callee->asm_name (),
> -	       edge->callee->order);
> +      fprintf (f, "%s ", edge->callee->dump_name ());
>        edge->dump_edge_flags (f);
>      }
>    fprintf (f, "\n");
> diff --git a/gcc/cgraph.h b/gcc/cgraph.h
> index c630b9e623a..5fc4b308e30 100644
> --- a/gcc/cgraph.h
> +++ b/gcc/cgraph.h
> @@ -99,8 +99,14 @@ public:
>    /* Return name.  */
>    const char *name () const;
>  
> +  /* Return dump name.  */
> +  const char *dump_name () const;
> +
>    /* Return asm name.  */
> -  const char * asm_name () const;
> +  const char *asm_name () const;
> +
> +  /* Return dump name with assembler name.  */
> +  const char *dump_asm_name () const;
>  
>    /* Add node into symbol table.  This function is not used directly, but via
>       cgraph/varpool node creation routines.  */
> @@ -598,6 +604,9 @@ private:
>    /* Worker for ultimate_alias_target.  */
>    symtab_node *ultimate_alias_target_1 (enum availability *avail = NULL,
>  					symtab_node *ref = NULL);
> +
> +  /* Get dump name with normal or assembly name.  */
> +  const char *get_dump_name (bool asm_name_p) const;
>  };
>  
>  inline void
> diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
> index 676f555718e..e74063ff983 100644
> --- a/gcc/ipa-cp.c
> +++ b/gcc/ipa-cp.c
> @@ -539,8 +539,7 @@ print_all_lattices (FILE * f, bool dump_sources, bool dump_benefits)
>        struct ipa_node_params *info;
>  
>        info = IPA_NODE_REF (node);
> -      fprintf (f, "  Node: %s/%i:\n", node->name (),
> -	       node->order);
> +      fprintf (f, "  Node: %s:\n", node->dump_name ());
>        count = ipa_get_param_count (info);
>        for (i = 0; i < count; i++)
>  	{
> @@ -622,8 +621,8 @@ determine_versionability (struct cgraph_node *node,
>      }
>  
>    if (reason && dump_file && !node->alias && !node->thunk.thunk_p)
> -    fprintf (dump_file, "Function %s/%i is not versionable, reason: %s.\n",
> -	     node->name (), node->order, reason);
> +    fprintf (dump_file, "Function %s is not versionable, reason: %s.\n",
> +	     node->dump_name (), reason);
>  
>    info->versionable = (reason == NULL);
>  }
> @@ -1195,9 +1194,8 @@ initialize_node_lattices (struct cgraph_node *node)
>  	}
>        if (dump_file && (dump_flags & TDF_DETAILS)
>  	  && !node->alias && !node->thunk.thunk_p)
> -	fprintf (dump_file, "Marking all lattices of %s/%i as %s\n",
> -		 node->name (), node->order,
> -		 disable ? "BOTTOM" : "VARIABLE");
> +	fprintf (dump_file, "Marking all lattices of %s as %s\n",
> +		 node->dump_name (), disable ? "BOTTOM" : "VARIABLE");
>      }
>  
>    for (ie = node->indirect_calls; ie; ie = ie->next_callee)
> @@ -2842,8 +2840,7 @@ estimate_local_effects (struct cgraph_node *node)
>      return;
>  
>    if (dump_file && (dump_flags & TDF_DETAILS))
> -    fprintf (dump_file, "\nEstimating effects for %s/%i.\n",
> -	     node->name (), node->order);
> +    fprintf (dump_file, "\nEstimating effects for %s.\n", node->dump_name ());
>  
>    always_const = gather_context_independent_values (info, &known_csts,
>  						    &known_contexts, &known_aggs,
> @@ -3656,10 +3653,10 @@ update_profiling_info (struct cgraph_node *orig_node,
>    if (orig_node_count < orig_sum + new_sum)
>      {
>        if (dump_file)
> -	fprintf (dump_file, "    Problem: node %s/%i has too low count "
> +	fprintf (dump_file, "    Problem: node %s has too low count "
>  		 HOST_WIDE_INT_PRINT_DEC " while the sum of incoming "
>  		 "counts is " HOST_WIDE_INT_PRINT_DEC "\n",
> -		 orig_node->name (), orig_node->order,
> +		 orig_node->dump_name (),
>  		 (HOST_WIDE_INT) orig_node_count,
>  		 (HOST_WIDE_INT) (orig_sum + new_sum));
>  
> @@ -3798,8 +3795,7 @@ create_specialized_node (struct cgraph_node *node,
>  
>    if (dump_file && (dump_flags & TDF_DETAILS))
>      {
> -      fprintf (dump_file, "     the new node is %s/%i.\n",
> -	       new_node->name (), new_node->order);
> +      fprintf (dump_file, "     the new node is %s.\n", new_node->dump_name ());
>        if (known_contexts.exists ())
>  	{
>  	  for (i = 0; i < count; i++)
> @@ -4439,12 +4435,9 @@ perhaps_add_new_callers (cgraph_node *node, ipcp_value<valtype> *val)
>  	      && cgraph_edge_brings_all_agg_vals_for_node (cs, val->spec_node))
>  	    {
>  	      if (dump_file)
> -		fprintf (dump_file, " - adding an extra caller %s/%i"
> -			 " of %s/%i\n",
> -			 xstrdup_for_dump (cs->caller->name ()),
> -			 cs->caller->order,
> -			 xstrdup_for_dump (val->spec_node->name ()),
> -			 val->spec_node->order);
> +		fprintf (dump_file, " - adding an extra caller %s of %s\n",
> +			 cs->caller->dump_name (),
> +			 val->spec_node->dump_name ());
>  
>  	      cs->redirect_callee_duplicating_thunks (val->spec_node);
>  	      val->spec_node->expand_all_artificial_thunks ();
> @@ -4600,8 +4593,8 @@ decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset,
>      return false;
>  
>    if (dump_file)
> -    fprintf (dump_file, "  Creating a specialized node of %s/%i.\n",
> -	     node->name (), node->order);
> +    fprintf (dump_file, "  Creating a specialized node of %s.\n",
> +	     node->dump_name ());
>  
>    callers = gather_edges_for_value (val, node, caller_count);
>    if (offset == -1)
> @@ -4642,8 +4635,8 @@ decide_whether_version_node (struct cgraph_node *node)
>      return false;
>  
>    if (dump_file && (dump_flags & TDF_DETAILS))
> -    fprintf (dump_file, "\nEvaluating opportunities for %s/%i.\n",
> -	     node->name (), node->order);
> +    fprintf (dump_file, "\nEvaluating opportunities for %s.\n",
> +	     node->dump_name ());
>  
>    gather_context_independent_values (info, &known_csts, &known_contexts,
>  				  info->do_clone_for_all_contexts ? &known_aggs
> @@ -4697,9 +4690,8 @@ decide_whether_version_node (struct cgraph_node *node)
>        vec<cgraph_edge *> callers;
>  
>        if (dump_file)
> -	fprintf (dump_file, " - Creating a specialized node of %s/%i "
> -		 "for all known contexts.\n", node->name (),
> -		 node->order);
> +	fprintf (dump_file, " - Creating a specialized node of %s "
> +		 "for all known contexts.\n", node->dump_name ());
>  
>        callers = node->collect_callers ();
>  
> @@ -4794,8 +4786,7 @@ identify_dead_nodes (struct cgraph_node *node)
>      {
>        for (v = node; v; v = ((struct ipa_dfs_info *) v->aux)->next_cycle)
>  	if (IPA_NODE_REF (v)->node_dead)
> -	  fprintf (dump_file, "  Marking node as dead: %s/%i.\n",
> -		   v->name (), v->order);
> +	  fprintf (dump_file, "  Marking node as dead: %s.\n", v->dump_name ());
>      }
>  }
>  
> @@ -4892,8 +4883,8 @@ ipcp_store_bits_results (void)
>  	    continue;
>  	  if (!dumped_sth)
>  	    {
> -	      fprintf (dump_file, "Propagated bits info for function %s/%i:\n",
> -		       node->name (), node->order);
> +	      fprintf (dump_file, "Propagated bits info for function %s:\n",
> +		       node->dump_name ());
>  	      dumped_sth = true;
>  	    }
>  	  fprintf (dump_file, " param %i: value = ", i);
> diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
> index aa3a236dd91..eafd0182a45 100644
> --- a/gcc/ipa-devirt.c
> +++ b/gcc/ipa-devirt.c
> @@ -3316,7 +3316,8 @@ dump_targets (FILE *f, vec <cgraph_node *> targets)
>        char *name = NULL;
>        if (in_lto_p)
>  	name = cplus_demangle_v3 (targets[i]->asm_name (), 0);
> -      fprintf (f, " %s/%i", name ? name : targets[i]->name (), targets[i]->order);
> +      fprintf (f, " %s/%i", name ? name : targets[i]->name (),
> +	       targets[i]->order);
>        if (in_lto_p)
>  	free (name);
>        if (!targets[i]->definition)
> @@ -3596,8 +3597,8 @@ ipa_devirt (void)
>        if (!opt_for_fn (n->decl, flag_devirtualize))
>  	continue;
>        if (dump_file && n->indirect_calls)
> -	fprintf (dump_file, "\n\nProcesing function %s/%i\n",
> -		 n->name (), n->order);
> +	fprintf (dump_file, "\n\nProcesing function %s\n",
> +		 n->dump_name ());
>        for (e = n->indirect_calls; e; e = e->next_callee)
>  	if (e->indirect_info->polymorphic)
>  	  {
> @@ -3752,10 +3753,10 @@ ipa_devirt (void)
>                    {
>                      location_t locus = gimple_location_safe (e->call_stmt);
>                      dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus,
> -                                     "speculatively devirtualizing call in %s/%i to %s/%i\n",
> -                                     n->name (), n->order,
> -                                     likely_target->name (),
> -                                     likely_target->order);
> +				     "speculatively devirtualizing call "
> +				     "in %s to %s\n",
> +				     n->dump_name (),
> +				     likely_target->dump_name ());
>                    }
>  		if (!likely_target->can_be_discarded_p ())
>  		  {
> diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
> index 92b93b53b85..88f732a3cb8 100644
> --- a/gcc/ipa-icf.c
> +++ b/gcc/ipa-icf.c
> @@ -195,8 +195,8 @@ sem_item::dump (void)
>  {
>    if (dump_file)
>      {
> -      fprintf (dump_file, "[%s] %s (%u) (tree:%p)\n", type == FUNC ? "func" : "var",
> -	       node->name(), node->order, (void *) node->decl);
> +      fprintf (dump_file, "[%s] %s (tree:%p)\n", type == FUNC ? "func" : "var",
> +	       node->dump_name (), (void *) node->decl);
>        fprintf (dump_file, "  hash: %u\n", get_hash ());
>        fprintf (dump_file, "  references: ");
>  
> @@ -869,13 +869,9 @@ sem_function::equals (sem_item *item,
>  
>    if (dump_file && (dump_flags & TDF_DETAILS))
>      fprintf (dump_file,
> -	     "Equals called for:%s:%s (%u:%u) (%s:%s) with result: %s\n\n",
> -	     xstrdup_for_dump (node->name()),
> -	     xstrdup_for_dump (item->node->name ()),
> -	     node->order,
> -	     item->node->order,
> -	     xstrdup_for_dump (node->asm_name ()),
> -	     xstrdup_for_dump (item->node->asm_name ()),
> +	     "Equals called for: %s:%s with result: %s\n\n",
> +	     node->dump_name (),
> +	     item->node->dump_name (),
>  	     eq ? "true" : "false");
>  
>    return eq;
> @@ -1887,12 +1883,9 @@ sem_variable::equals (sem_item *item,
>  			      DECL_INITIAL (item->node->decl));
>    if (dump_file && (dump_flags & TDF_DETAILS))
>      fprintf (dump_file,
> -	     "Equals called for vars:%s:%s (%u:%u) (%s:%s) with result: %s\n\n",
> -	     xstrdup_for_dump (node->name()),
> -	     xstrdup_for_dump (item->node->name ()),
> -	     node->order, item->node->order,
> -	     xstrdup_for_dump (node->asm_name ()),
> -	     xstrdup_for_dump (item->node->asm_name ()), ret ? "true" : "false");
> +	     "Equals called for vars: %s:%s with result: %s\n\n",
> +	     node->dump_name (), item->node->dump_name (),
> +	     ret ? "true" : "false");
>  
>    return ret;
>  }
> @@ -2398,8 +2391,8 @@ sem_item_optimizer::read_section (lto_file_decl_data *file_data,
>        gcc_assert (node->definition);
>  
>        if (dump_file)
> -	fprintf (dump_file, "Symbol added:%s (tree: %p, uid:%u)\n",
> -		 node->asm_name (), (void *) node->decl, node->order);
> +	fprintf (dump_file, "Symbol added: %s (tree: %p)\n",
> +		 node->dump_asm_name (), (void *) node->decl);
>  
>        if (is_a<cgraph_node *> (node))
>  	{
> @@ -3577,9 +3570,7 @@ congruence_class::dump (FILE *file, unsigned int indent) const
>  
>    FPUTS_SPACES (file, indent + 2, "");
>    for (unsigned i = 0; i < members.length (); i++)
> -    fprintf (file, "%s(%p/%u) ", members[i]->node->asm_name (),
> -	     (void *) members[i]->decl,
> -	     members[i]->node->order);
> +    fprintf (file, "%s ", members[i]->node->dump_asm_name ());
>  
>    fprintf (file, "\n");
>  }
> diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c
> index bda704a9473..7b6914c06f3 100644
> --- a/gcc/ipa-inline-analysis.c
> +++ b/gcc/ipa-inline-analysis.c
> @@ -846,9 +846,9 @@ dump_ipa_call_summary (FILE *f, int indent, struct cgraph_node *node,
>        int i;
>  
>        fprintf (f,
> -	       "%*s%s/%i %s\n%*s  loop depth:%2i freq:%4i size:%2i"
> +	       "%*s%s %s\n%*s  loop depth:%2i freq:%4i size:%2i"
>  	       " time: %2i callee size:%2i stack:%2i",
> -	       indent, "", callee->name (), callee->order,
> +	       indent, "", callee->dump_name (),
>  	       !edge->inline_failed
>  	       ? "inlined" : cgraph_inline_failed_string (edge-> inline_failed),
>  	       indent, "", es->loop_depth, edge->frequency,
> @@ -913,8 +913,7 @@ dump_inline_summary (FILE *f, struct cgraph_node *node)
>        struct inline_summary *s = inline_summaries->get (node);
>        size_time_entry *e;
>        int i;
> -      fprintf (f, "Inline summary for %s/%i", node->name (),
> -	       node->order);
> +      fprintf (f, "Inline summary for %s", node->dump_name ());
>        if (DECL_DISREGARD_INLINE_LIMITS (node->decl))
>  	fprintf (f, " always_inline");
>        if (s->inlinable)
> @@ -2779,9 +2778,8 @@ estimate_node_size_and_time (struct cgraph_node *node,
>    if (dump_file && (dump_flags & TDF_DETAILS))
>      {
>        bool found = false;
> -      fprintf (dump_file, "   Estimating body: %s/%i\n"
> -	       "   Known to be false: ", node->name (),
> -	       node->order);
> +      fprintf (dump_file, "   Estimating body: %s\n"
> +	       "   Known to be false: ", node->dump_name ());
>  
>        for (i = predicate::not_inlined_condition;
>  	   i < (predicate::first_dynamic_condition
> @@ -3578,8 +3576,7 @@ inline_analyze_function (struct cgraph_node *node)
>    push_cfun (DECL_STRUCT_FUNCTION (node->decl));
>  
>    if (dump_file)
> -    fprintf (dump_file, "\nAnalyzing function: %s/%u\n",
> -	     node->name (), node->order);
> +    fprintf (dump_file, "\nAnalyzing function: %s\n", node->dump_name ());
>    if (opt_for_fn (node->decl, optimize) && !node->thunk.thunk_p)
>      inline_indirect_intraprocedural_analysis (node);
>    compute_inline_parameters (node, false);
> diff --git a/gcc/ipa-inline-transform.c b/gcc/ipa-inline-transform.c
> index a8e73cd6967..f21a50ae3bf 100644
> --- a/gcc/ipa-inline-transform.c
> +++ b/gcc/ipa-inline-transform.c
> @@ -350,8 +350,8 @@ inline_call (struct cgraph_edge *e, bool update_original,
>        cl_optimization_restore (&opts, opts_for_fn (to->decl));
>        opts.x_flag_strict_aliasing = false;
>        if (dump_file)
> -	fprintf (dump_file, "Dropping flag_strict_aliasing on %s:%i\n",
> -		 to->name (), to->order);
> +	fprintf (dump_file, "Dropping flag_strict_aliasing on %s\n",
> +		 to->dump_name ());
>        DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl)
>  	 = build_optimization_node (&opts);
>        reload_optimization_node = true;
> @@ -411,8 +411,8 @@ inline_call (struct cgraph_edge *e, bool update_original,
>  	  opts.x_flag_errno_math
>  	    = opt_for_fn (callee->decl, flag_errno_math);
>  	  if (dump_file)
> -	    fprintf (dump_file, "Copying FP flags from %s:%i to %s:%i\n",
> -		     callee->name (), callee->order, to->name (), to->order);
> +	    fprintf (dump_file, "Copying FP flags from %s to %s\n",
> +		     callee->dump_name (), to->dump_name ());
>  	  DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl)
>  	     = build_optimization_node (&opts);
>  	  reload_optimization_node = true;
> diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
> index b0d589081d8..40ea9019671 100644
> --- a/gcc/ipa-inline.c
> +++ b/gcc/ipa-inline.c
> @@ -227,9 +227,9 @@ report_inline_failed_reason (struct cgraph_edge *e)
>  {
>    if (dump_file)
>      {
> -      fprintf (dump_file, "  not inlinable: %s/%i -> %s/%i, %s\n",
> -	       xstrdup_for_dump (e->caller->name ()), e->caller->order,
> -	       xstrdup_for_dump (e->callee->name ()), e->callee->order,
> +      fprintf (dump_file, "  not inlinable: %s -> %s, %s\n",
> +	       e->caller->dump_name (),
> +	       e->callee->dump_name (),
>  	       cgraph_inline_failed_string (e->inline_failed));
>        if ((e->inline_failed == CIF_TARGET_OPTION_MISMATCH
>  	   || e->inline_failed == CIF_OPTIMIZATION_MISMATCH)
> @@ -592,22 +592,20 @@ want_early_inline_function_p (struct cgraph_edge *e)
>  	       && growth > 0)
>  	{
>  	  if (dump_file)
> -	    fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
> +	    fprintf (dump_file, "  will not early inline: %s->%s, "
>  		     "call is cold and code would grow by %i\n",
> -		     xstrdup_for_dump (e->caller->name ()),
> -		     e->caller->order,
> -		     xstrdup_for_dump (callee->name ()), callee->order,
> +		     e->caller->dump_name (),
> +		     callee->dump_name (),
>  		     growth);
>  	  want_inline = false;
>  	}
>        else if (growth > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS))
>  	{
>  	  if (dump_file)
> -	    fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
> +	    fprintf (dump_file, "  will not early inline: %s->%s, "
>  		     "growth %i exceeds --param early-inlining-insns\n",
> -		     xstrdup_for_dump (e->caller->name ()),
> -		     e->caller->order,
> -		     xstrdup_for_dump (callee->name ()), callee->order,
> +		     e->caller->dump_name (),
> +		     callee->dump_name (),
>  		     growth);
>  	  want_inline = false;
>  	}
> @@ -615,12 +613,11 @@ want_early_inline_function_p (struct cgraph_edge *e)
>  	       && growth * (n + 1) > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS))
>  	{
>  	  if (dump_file)
> -	    fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
> +	    fprintf (dump_file, "  will not early inline: %s->%s, "
>  		     "growth %i exceeds --param early-inlining-insns "
>  		     "divided by number of calls\n",
> -		     xstrdup_for_dump (e->caller->name ()),
> -		     e->caller->order,
> -		     xstrdup_for_dump (callee->name ()), callee->order,
> +		     e->caller->dump_name (),
> +		     callee->dump_name (),
>  		     growth);
>  	  want_inline = false;
>  	}
> @@ -1020,11 +1017,9 @@ edge_badness (struct cgraph_edge *edge, bool dump)
>  
>    if (dump)
>      {
> -      fprintf (dump_file, "    Badness calculation for %s/%i -> %s/%i\n",
> -	       xstrdup_for_dump (edge->caller->name ()),
> -	       edge->caller->order,
> -	       xstrdup_for_dump (callee->name ()),
> -	       edge->callee->order);
> +      fprintf (dump_file, "    Badness calculation for %s -> %s\n",
> +	       edge->caller->dump_name (),
> +	       edge->callee->dump_name ());
>        fprintf (dump_file, "      size growth %i, time %f unspec %f ",
>  	       growth,
>  	       edge_time.to_double (),
> @@ -1229,12 +1224,9 @@ update_edge_key (edge_heap_t *heap, struct cgraph_edge *edge)
>  	  if (dump_file && (dump_flags & TDF_DETAILS))
>  	    {
>  	      fprintf (dump_file,
> -		       "  decreasing badness %s/%i -> %s/%i, %f"
> -		       " to %f\n",
> -		       xstrdup_for_dump (edge->caller->name ()),
> -		       edge->caller->order,
> -		       xstrdup_for_dump (edge->callee->name ()),
> -		       edge->callee->order,
> +		       "  decreasing badness %s -> %s, %f to %f\n",
> +		       edge->caller->dump_name (),
> +		       edge->callee->dump_name (),
>  		       n->get_key ().to_double (),
>  		       badness.to_double ());
>  	    }
> @@ -1246,11 +1238,9 @@ update_edge_key (edge_heap_t *heap, struct cgraph_edge *edge)
>         if (dump_file && (dump_flags & TDF_DETAILS))
>  	 {
>  	   fprintf (dump_file,
> -		    "  enqueuing call %s/%i -> %s/%i, badness %f\n",
> -		    xstrdup_for_dump (edge->caller->name ()),
> -		    edge->caller->order,
> -		    xstrdup_for_dump (edge->callee->name ()),
> -		    edge->callee->order,
> +		    "  enqueuing call %s -> %s, badness %f\n",
> +		    edge->caller->dump_name (),
> +		    edge->callee->dump_name (),
>  		    badness.to_double ());
>  	 }
>        edge->aux = heap->insert (badness, edge);
> @@ -1803,8 +1793,7 @@ inline_small_functions (void)
>        bool has_speculative = false;
>  
>        if (dump_file)
> -	fprintf (dump_file, "Enqueueing calls in %s/%i.\n",
> -		 node->name (), node->order);
> +	fprintf (dump_file, "Enqueueing calls in %s.\n", node->dump_name ());
>  
>        for (edge = node->callees; edge; edge = next)
>  	{
> @@ -1918,13 +1907,13 @@ inline_small_functions (void)
>        if (dump_file)
>  	{
>  	  fprintf (dump_file,
> -		   "\nConsidering %s/%i with %i size\n",
> -		   callee->name (), callee->order,
> +		   "\nConsidering %s with %i size\n",
> +		   callee->dump_name (),
>  		   inline_summaries->get (callee)->size);
>  	  fprintf (dump_file,
> -		   " to be inlined into %s/%i in %s:%i\n"
> +		   " to be inlined into %s in %s:%i\n"
>  		   " Estimated badness is %f, frequency %.2f.\n",
> -		   edge->caller->name (), edge->caller->order,
> +		   edge->caller->dump_name (),
>  		   edge->call_stmt
>  		   && (LOCATION_LOCUS (gimple_location ((const gimple *)
>  							edge->call_stmt))
> diff --git a/gcc/ipa-profile.c b/gcc/ipa-profile.c
> index c60e05d8454..359f47a6df9 100644
> --- a/gcc/ipa-profile.c
> +++ b/gcc/ipa-profile.c
> @@ -590,9 +590,9 @@ ipa_profile (void)
>  		  if (dump_file)
>  		    {
>  		      fprintf (dump_file, "Indirect call -> direct call from"
> -			       " other module %s/%i => %s/%i, prob %3.2f\n",
> -			       xstrdup_for_dump (n->name ()), n->order,
> -			       xstrdup_for_dump (n2->name ()), n2->order,
> +			       " other module %s => %s, prob %3.2f\n",
> +			       n->dump_name (),
> +			       n2->dump_name (),
>  			       e->indirect_info->common_target_probability
>  			       / (float)REG_BR_PROB_BASE);
>  		    }
> diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
> index 10741a2b7bd..2b1a8854e7a 100644
> --- a/gcc/ipa-prop.c
> +++ b/gcc/ipa-prop.c
> @@ -416,17 +416,15 @@ ipa_print_node_jump_functions (FILE *f, struct cgraph_node *node)
>  {
>    struct cgraph_edge *cs;
>  
> -  fprintf (f, "  Jump functions of caller  %s/%i:\n", node->name (),
> -	   node->order);
> +  fprintf (f, "  Jump functions of caller  %s:\n", node->dump_name ());
>    for (cs = node->callees; cs; cs = cs->next_callee)
>      {
>        if (!ipa_edge_args_info_available_for_edge_p (cs))
>  	continue;
>  
> -      fprintf (f, "    callsite  %s/%i -> %s/%i : \n",
> -	       xstrdup_for_dump (node->name ()), node->order,
> -	       xstrdup_for_dump (cs->callee->name ()),
> -	       cs->callee->order);
> +      fprintf (f, "    callsite  %s -> %s : \n",
> +	       node->dump_name (),
> +	       cs->callee->dump_name ());
>        ipa_print_node_jump_functions_for_edge (f, cs);
>      }
>  
> @@ -2854,9 +2852,8 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target,
>  		{
>  		  location_t loc = gimple_location_safe (ie->call_stmt);
>  		  dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
> -				   "discovered direct call non-invariant "
> -				   "%s/%i\n",
> -				   ie->caller->name (), ie->caller->order);
> +				   "discovered direct call non-invariant %s\n",
> +				   ie->caller->dump_name ());
>  		}
>  	      return NULL;
>  	    }
> @@ -2866,9 +2863,9 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target,
>  	    {
>  	      location_t loc = gimple_location_safe (ie->call_stmt);
>  	      dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
> -			       "discovered direct call to non-function in %s/%i, "
> +			       "discovered direct call to non-function in %s, "
>  			       "making it __builtin_unreachable\n",
> -			       ie->caller->name (), ie->caller->order);
> +			       ie->caller->dump_name ());
>  	    }
>  
>  	  target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
> @@ -2895,11 +2892,9 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target,
>  	{
>  	  if (dump_file)
>  	    fprintf (dump_file, "ipa-prop: Discovered call to a known target "
> -		     "(%s/%i -> %s/%i) but can not refer to it. Giving up.\n",
> -		     xstrdup_for_dump (ie->caller->name ()),
> -		     ie->caller->order,
> -		     xstrdup_for_dump (ie->callee->name ()),
> -		     ie->callee->order);
> +		     "(%s -> %s) but can not refer to it. Giving up.\n",
> +		     ie->caller->dump_name (),
> +		     ie->callee->dump_name ());
>  	  return NULL;
>  	}
>        callee = cgraph_node::get_create (target);
> @@ -2915,24 +2910,18 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target,
>  	  != callee->ultimate_alias_target ())
>  	{
>  	  if (dump_file)
> -	    fprintf (dump_file, "ipa-prop: Discovered call to a speculative target "
> -		     "(%s/%i -> %s/%i) but the call is already speculated to %s/%i. Giving up.\n",
> -		     xstrdup_for_dump (ie->caller->name ()),
> -		     ie->caller->order,
> -		     xstrdup_for_dump (callee->name ()),
> -		     callee->order,
> -		     xstrdup_for_dump (e2->callee->name ()),
> -		     e2->callee->order);
> +	    fprintf (dump_file, "ipa-prop: Discovered call to a speculative "
> +		     "target (%s -> %s) but the call is already "
> +		     "speculated to %s. Giving up.\n",
> +		     ie->caller->dump_name (), callee->dump_name (),
> +		     e2->callee->dump_name ());
>  	}
>        else
>  	{
>  	  if (dump_file)
>  	    fprintf (dump_file, "ipa-prop: Discovered call to a speculative target "
> -		     "(%s/%i -> %s/%i) this agree with previous speculation.\n",
> -		     xstrdup_for_dump (ie->caller->name ()),
> -		     ie->caller->order,
> -		     xstrdup_for_dump (callee->name ()),
> -		     callee->order);
> +		     "(%s -> %s) this agree with previous speculation.\n",
> +		     ie->caller->dump_name (), callee->dump_name ());
>  	}
>        return NULL;
>      }
> @@ -2949,13 +2938,11 @@ ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target,
>    if (dump_file && !unreachable)
>      {
>        fprintf (dump_file, "ipa-prop: Discovered %s call to a %s target "
> -	       "(%s/%i -> %s/%i), for stmt ",
> +	       "(%s -> %s), for stmt ",
>  	       ie->indirect_info->polymorphic ? "a virtual" : "an indirect",
>  	       speculative ? "speculative" : "known",
> -	       xstrdup_for_dump (ie->caller->name ()),
> -	       ie->caller->order,
> -	       xstrdup_for_dump (callee->name ()),
> -	       callee->order);
> +	       ie->caller->dump_name (),
> +	       callee->dump_name ());
>        if (ie->call_stmt)
>  	print_gimple_stmt (dump_file, ie->call_stmt, 2, TDF_SLIM);
>        else
> @@ -3155,9 +3142,8 @@ remove_described_reference (symtab_node *symbol, struct ipa_cst_ref_desc *rdesc)
>  
>    to_del->remove_reference ();
>    if (dump_file)
> -    fprintf (dump_file, "ipa-prop: Removed a reference from %s/%i to %s.\n",
> -	     xstrdup_for_dump (origin->caller->name ()),
> -	     origin->caller->order, xstrdup_for_dump (symbol->name ()));
> +    fprintf (dump_file, "ipa-prop: Removed a reference from %s to %s.\n",
> +	     origin->caller->dump_name (), xstrdup_for_dump (symbol->name ()));
>    return true;
>  }
>  
> @@ -3272,13 +3258,13 @@ ipa_impossible_devirt_target (struct cgraph_edge *ie, tree target)
>      {
>        if (target)
>  	fprintf (dump_file,
> -		 "Type inconsistent devirtualization: %s/%i->%s\n",
> -		 ie->caller->name (), ie->caller->order,
> +		 "Type inconsistent devirtualization: %s->%s\n",
> +		 ie->caller->dump_name (),
>  		 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
>        else
>  	fprintf (dump_file,
> -		 "No devirtualization target in %s/%i\n",
> -		 ie->caller->name (), ie->caller->order);
> +		 "No devirtualization target in %s\n",
> +		 ie->caller->dump_name ());
>      }
>    tree new_target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
>    cgraph_node::get_create (new_target);
> @@ -3607,10 +3593,9 @@ propagate_controlled_uses (struct cgraph_edge *cs)
>  		{
>  		  if (dump_file)
>  		    fprintf (dump_file, "ipa-prop: Removing cloning-created "
> -			     "reference from %s/%i to %s/%i.\n",
> -			     xstrdup_for_dump (new_root->name ()),
> -			     new_root->order,
> -			     xstrdup_for_dump (n->name ()), n->order);
> +			     "reference from %s to %s.\n",
> +			     new_root->dump_name (),
> +			     n->dump_name ());
>  		  ref->remove_reference ();
>  		}
>  	    }
> @@ -3648,11 +3633,9 @@ propagate_controlled_uses (struct cgraph_edge *cs)
>  			  if (dump_file)
>  			    fprintf (dump_file, "ipa-prop: Removing "
>  				     "cloning-created reference "
> -				     "from %s/%i to %s/%i.\n",
> -				     xstrdup_for_dump (clone->name ()),
> -				     clone->order,
> -				     xstrdup_for_dump (n->name ()),
> -				     n->order);
> +				     "from %s to %s.\n",
> +				     clone->dump_name (),
> +				     n->dump_name ());
>  			  ref->remove_reference ();
>  			}
>  		      clone = clone->callers->caller;
> @@ -4030,8 +4013,7 @@ ipa_print_node_params (FILE *f, struct cgraph_node *node)
>    if (!node->definition)
>      return;
>    info = IPA_NODE_REF (node);
> -  fprintf (f, "  function  %s/%i parameter descriptors:\n",
> -	   node->name (), node->order);
> +  fprintf (f, "  function  %s parameter descriptors:\n", node->dump_name ());
>    count = ipa_get_param_count (info);
>    for (i = 0; i < count; i++)
>      {
> @@ -5849,8 +5831,8 @@ ipcp_transform_function (struct cgraph_node *node)
>    gcc_checking_assert (current_function_decl);
>  
>    if (dump_file)
> -    fprintf (dump_file, "Modification phase of node %s/%i\n",
> -	     node->name (), node->order);
> +    fprintf (dump_file, "Modification phase of node %s\n",
> +	     node->dump_name ());
>  
>    ipcp_update_bits (node);
>    ipcp_update_vr (node);
> diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c
> index 2379ec88e13..dac8f0d5f21 100644
> --- a/gcc/ipa-pure-const.c
> +++ b/gcc/ipa-pure-const.c
> @@ -1130,9 +1130,7 @@ pure_const_read_summary (void)
>  	      if (dump_file)
>  		{
>  		  int flags = flags_from_decl_or_type (node->decl);
> -		  fprintf (dump_file, "Read info for %s/%i ",
> -			   node->name (),
> -			   node->order);
> +		  fprintf (dump_file, "Read info for %s ", node->dump_name ());
>  		  if (flags & ECF_CONST)
>  		    fprintf (dump_file, " const");
>  		  if (flags & ECF_PURE)
> @@ -1269,9 +1267,8 @@ propagate_pure_const (void)
>  
>  	  funct_state w_l = get_function_state (w);
>  	  if (dump_file && (dump_flags & TDF_DETAILS))
> -	    fprintf (dump_file, "  Visiting %s/%i state:%s looping %i\n",
> -		     w->name (),
> -		     w->order,
> +	    fprintf (dump_file, "  Visiting %s state:%s looping %i\n",
> +		     w->dump_name (),
>  		     pure_const_names[w_l->pure_const_state],
>  		     w_l->looping);
>  
> @@ -1305,10 +1302,8 @@ propagate_pure_const (void)
>  
>  	      if (dump_file && (dump_flags & TDF_DETAILS))
>  		{
> -		  fprintf (dump_file,
> -			   "    Call to %s/%i",
> -			   e->callee->name (),
> -			   e->callee->order);
> +		  fprintf (dump_file, "    Call to %s",
> +			   e->callee->dump_name ());
>  		}
>  	      if (avail > AVAIL_INTERPOSABLE)
>  		{
> diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c
> index 222253920fd..45c2e3feda2 100644
> --- a/gcc/ipa-reference.c
> +++ b/gcc/ipa-reference.c
> @@ -599,8 +599,7 @@ generate_summary (void)
>  
>  	  l = &get_reference_vars_info (node)->local;
>  	  fprintf (dump_file,
> -		   "\nFunction name:%s/%i:",
> -		   node->asm_name (), node->order);
> +		   "\nFunction name:%s:", node->dump_name ());
>  	  fprintf (dump_file, "\n  locals read: ");
>  	  if (l->statics_read)
>  	    EXECUTE_IF_SET_IN_BITMAP (l->statics_read,
> @@ -636,8 +635,7 @@ read_write_all_from_decl (struct cgraph_node *node,
>      {
>        read_all = true;
>        if (dump_file && (dump_flags & TDF_DETAILS))
> -         fprintf (dump_file, "   %s/%i -> read all\n",
> -		  node->asm_name (), node->order);
> +	fprintf (dump_file, "   %s -> read all\n", node->dump_name ());
>      }
>    else
>      {
> @@ -646,8 +644,8 @@ read_write_all_from_decl (struct cgraph_node *node,
>        read_all = true;
>        write_all = true;
>        if (dump_file && (dump_flags & TDF_DETAILS))
> -         fprintf (dump_file, "   %s/%i -> read all, write all\n",
> -		  node->asm_name (), node->order);
> +	fprintf (dump_file, "   %s -> read all, write all\n",
> +		  node->dump_name ());
>      }
>  }
>  
> @@ -754,8 +752,7 @@ propagate (void)
>        node_g = &node_info->global;
>  
>        if (dump_file && (dump_flags & TDF_DETAILS))
> -	fprintf (dump_file, "Starting cycle with %s/%i\n",
> -		  node->asm_name (), node->order);
> +	fprintf (dump_file, "Starting cycle with %s\n", node->dump_name ());
>  
>        vec<cgraph_node *> cycle_nodes = ipa_get_nodes_in_cycle (node);
>  
> @@ -763,8 +760,7 @@ propagate (void)
>        FOR_EACH_VEC_ELT (cycle_nodes, x, w)
>  	{
>  	  if (dump_file && (dump_flags & TDF_DETAILS))
> -	    fprintf (dump_file, "  Visiting %s/%i\n",
> -		     w->asm_name (), w->order);
> +	    fprintf (dump_file, "  Visiting %s\n", w->dump_asm_name ());
>  	  get_read_write_all_from_node (w, read_all, write_all);
>  	  if (read_all && write_all)
>  	    break;
> @@ -826,9 +822,7 @@ propagate (void)
>            if (node->alias || !opt_for_fn (node->decl, flag_ipa_reference))
>  	    continue;
>  
> -	  fprintf (dump_file,
> -		   "\nFunction name:%s/%i:",
> -		   node->asm_name (), node->order);
> +	  fprintf (dump_file, "\nFunction name:%s:", node->dump_asm_name ());
>  
>  	  ipa_reference_vars_info_t node_info = get_reference_vars_info (node);
>  	  ipa_reference_global_vars_info_t node_g = &node_info->global;
> @@ -839,8 +833,7 @@ propagate (void)
>  	      ipa_reference_vars_info_t w_ri = get_reference_vars_info (w);
>  	      ipa_reference_local_vars_info_t w_l = &w_ri->local;
>  	      if (w != node)
> -		fprintf (dump_file, "\n  next cycle: %s/%i ",
> -			 w->asm_name (), w->order);
> +		fprintf (dump_file, "\n  next cycle: %s ", w->dump_asm_name ());
>  	      fprintf (dump_file, "\n    locals read: ");
>  	      dump_static_vars_set_to_file (dump_file, w_l->statics_read);
>  	      fprintf (dump_file, "\n    locals written: ");
> @@ -1120,8 +1113,8 @@ ipa_reference_read_optimization_summary (void)
>  	      info->statics_not_written = BITMAP_ALLOC (&optimization_summary_obstack);
>  	      if (dump_file)
>  		fprintf (dump_file,
> -			 "\nFunction name:%s/%i:\n  static not read:",
> -			 node->asm_name (), node->order);
> +			 "\nFunction name:%s:\n  static not read:",
> +			 node->dump_asm_name ());
>  
>  	      /* Set the statics not read.  */
>  	      v_count = streamer_read_hwi (ib);
> diff --git a/gcc/ipa-utils.c b/gcc/ipa-utils.c
> index 959e31a68e6..affc887bf45 100644
> --- a/gcc/ipa-utils.c
> +++ b/gcc/ipa-utils.c
> @@ -406,9 +406,8 @@ ipa_merge_profiles (struct cgraph_node *dst,
>      return;
>    if (symtab->dump_file)
>      {
> -      fprintf (symtab->dump_file, "Merging profiles of %s/%i to %s/%i\n",
> -	       xstrdup_for_dump (src->name ()), src->order,
> -	       xstrdup_for_dump (dst->name ()), dst->order);
> +      fprintf (symtab->dump_file, "Merging profiles of %s to %s\n",
> +	       src->dump_name (), dst->dump_name ());
>      }
>    dst->count += src->count;
>  
> diff --git a/gcc/ipa.c b/gcc/ipa.c
> index aa4181b6c2c..96b5f9346a2 100644
> --- a/gcc/ipa.c
> +++ b/gcc/ipa.c
> @@ -230,10 +230,9 @@ walk_polymorphic_call_targets (hash_set<void *> *reachable_call_targets,
>  	      else
>  		locus = UNKNOWN_LOCATION;
>  	      dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus,
> -                               "devirtualizing call in %s/%i to %s/%i\n",
> -                               edge->caller->name (), edge->caller->order,
> -                               target->name (),
> -                               target->order);
> +			       "devirtualizing call in %s to %s\n",
> +			       edge->caller->dump_name (),
> +			       target->dump_name ());
>  	    }
>  	  edge = edge->make_direct (target);
>  	  if (inline_summaries)
> @@ -529,7 +528,7 @@ symbol_table::remove_unreachable_nodes (FILE *file)
>        if (!node->aux)
>  	{
>  	  if (file)
> -	    fprintf (file, " %s/%i", node->name (), node->order);
> +	    fprintf (file, " %s", node->dump_name ());
>  	  node->remove ();
>  	  changed = true;
>  	}
> @@ -549,7 +548,7 @@ symbol_table::remove_unreachable_nodes (FILE *file)
>  	  if (node->definition && !node->alias && !node->thunk.thunk_p)
>  	    {
>  	      if (file)
> -		fprintf (file, " %s/%i", node->name (), node->order);
> +		fprintf (file, " %s", node->dump_name ());
>  	      node->body_removed = true;
>  	      node->analyzed = false;
>  	      node->definition = false;
> @@ -616,12 +615,11 @@ symbol_table::remove_unreachable_nodes (FILE *file)
>  	  while (vnode->iterate_direct_aliases (0, ref))
>  	    {
>  	      if (file)
> -		fprintf (file, " %s/%i", ref->referred->name (),
> -			 ref->referred->order);
> +		fprintf (file, " %s", ref->referred->dump_name ());
>  	      ref->referring->remove ();
>  	    }
>  	  if (file)
> -	    fprintf (file, " %s/%i", vnode->name (), vnode->order);
> +	    fprintf (file, " %s", vnode->dump_name ());
>            vnext = next_variable (vnode);
>  	  /* Signal removal to the debug machinery.  */
>  	  if (! flag_wpa)
> @@ -1391,8 +1389,8 @@ ipa_single_use (void)
>  
>  	  if (dump_file)
>  	    {
> -	      fprintf (dump_file, "Variable %s/%i is used by single function\n",
> -		       var->name (), var->order);
> +	      fprintf (dump_file, "Variable %s is used by single function\n",
> +		       var->dump_name ());
>  	    }
>  	  var->used_by_single_function = true;
>  	}
> diff --git a/gcc/lto/lto-symtab.c b/gcc/lto/lto-symtab.c
> index f61b1f80133..9fd94861c6d 100644
> --- a/gcc/lto/lto-symtab.c
> +++ b/gcc/lto/lto-symtab.c
> @@ -45,11 +45,10 @@ lto_cgraph_replace_node (struct cgraph_node *node,
>  
>    if (symtab->dump_file)
>      {
> -      fprintf (symtab->dump_file, "Replacing cgraph node %s/%i by %s/%i"
> +      fprintf (symtab->dump_file, "Replacing cgraph node %s by %s"
>   	       " for symbol %s\n",
> -	       node->name (), node->order,
> -	       prevailing_node->name (),
> -	       prevailing_node->order,
> +	       node->dump_name (),
> +	       prevailing_node->dump_name (),
>  	       IDENTIFIER_POINTER ((*targetm.asm_out.mangle_assembler_name)
>  		 (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (node->decl)))));
>      }
> diff --git a/gcc/predict.c b/gcc/predict.c
> index 0fc9fc5c466..ac35fa41129 100644
> --- a/gcc/predict.c
> +++ b/gcc/predict.c
> @@ -3163,9 +3163,9 @@ drop_profile (struct cgraph_node *node, gcov_type call_count)
>  
>    if (dump_file)
>      fprintf (dump_file,
> -             "Dropping 0 profile for %s/%i. %s based on calls.\n",
> -             node->name (), node->order,
> -             hot ? "Function is hot" : "Function is normal");
> +	     "Dropping 0 profile for %s. %s based on calls.\n",
> +	     node->dump_name (),
> +	     hot ? "Function is hot" : "Function is normal");
>    /* We only expect to miss profiles for functions that are reached
>       via non-zero call edges in cases where the function may have
>       been linked from another module or library (COMDATs and extern
> @@ -3181,12 +3181,12 @@ drop_profile (struct cgraph_node *node, gcov_type call_count)
>          {
>            if (dump_file)
>              fprintf (dump_file,
> -                     "Missing counts for called function %s/%i\n",
> -                     node->name (), node->order);
> +		     "Missing counts for called function %s\n",
> +		     node->dump_name ());
>          }
>        else
> -        warning (0, "Missing counts for called function %s/%i",
> -                 node->name (), node->order);
> +	warning (0, "Missing counts for called function %s",
> +		 node->dump_name ());
>      }
>  
>    profile_status_for_fn (fn)
> diff --git a/gcc/symtab.c b/gcc/symtab.c
> index 13dca7f0dbd..0145910023f 100644
> --- a/gcc/symtab.c
> +++ b/gcc/symtab.c
> @@ -522,6 +522,31 @@ symtab_node::name () const
>    return lang_hooks.decl_printable_name (decl, 2);
>  }
>  
> +const char *
> +symtab_node::get_dump_name (bool asm_name_p) const
> +{
> +#define EXTRA 16
> +  const char *fname = asm_name_p ? asm_name () : name ();
> +  unsigned l = strlen (fname);
> +
> +  char *s = (char *)ggc_internal_cleared_alloc (l + EXTRA);
> +  snprintf (s, l + EXTRA, "%s/%d", fname, order);
> +
> +  return s;
> +}
> +
> +const char *
> +symtab_node::dump_name () const
> +{
> +  return get_dump_name (false);
> +}
> +
> +const char *
> +symtab_node::dump_asm_name () const
> +{
> +  return get_dump_name (true);
> +}
> +
>  /* Return ipa reference from this symtab_node to
>     REFERED_NODE or REFERED_VARPOOL_NODE. USE_TYPE specify type
>     of the use.  */
> @@ -751,9 +776,8 @@ symtab_node::dump_references (FILE *file)
>    int i;
>    for (i = 0; iterate_reference (i, ref); i++)
>      {
> -      fprintf (file, "%s/%i (%s)",
> -               ref->referred->asm_name (),
> -               ref->referred->order,
> +      fprintf (file, "%s (%s)",
> +	       ref->referred->dump_asm_name (),
>  	       ipa_ref_use_name [ref->use]);
>        if (ref->speculative)
>  	fprintf (file, " (speculative)");
> @@ -770,9 +794,8 @@ symtab_node::dump_referring (FILE *file)
>    int i;
>    for (i = 0; iterate_referring(i, ref); i++)
>      {
> -      fprintf (file, "%s/%i (%s)",
> -               ref->referring->asm_name (),
> -               ref->referring->order,
> +      fprintf (file, "%s (%s)",
> +	       ref->referring->dump_asm_name (),
>  	       ipa_ref_use_name [ref->use]);
>        if (ref->speculative)
>  	fprintf (file, " (speculative)");
> @@ -791,7 +814,7 @@ symtab_node::dump_base (FILE *f)
>      "default", "protected", "hidden", "internal"
>    };
>  
> -  fprintf (f, "%s/%i (%s)", asm_name (), order, name ());
> +  fprintf (f, "%s (%s)", dump_asm_name (), name ());
>    dump_addr (f, " @", (void *)this);
>    fprintf (f, "\n  Type: %s", symtab_type_names[type]);
>  
> @@ -874,9 +897,8 @@ symtab_node::dump_base (FILE *f)
>    fprintf (f, "\n");
>    
>    if (same_comdat_group)
> -    fprintf (f, "  Same comdat group as: %s/%i\n",
> -	     same_comdat_group->asm_name (),
> -	     same_comdat_group->order);
> +    fprintf (f, "  Same comdat group as: %s\n",
> +	     same_comdat_group->dump_asm_name ());
>    if (next_sharing_asm_name)
>      fprintf (f, "  next sharing asm name: %i\n",
>  	     next_sharing_asm_name->order);
> diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
> index 84320642075..920950d1619 100644
> --- a/gcc/tree-sra.c
> +++ b/gcc/tree-sra.c
> @@ -5190,11 +5190,8 @@ convert_callers_for_node (struct cgraph_node *node,
>        push_cfun (DECL_STRUCT_FUNCTION (cs->caller->decl));
>  
>        if (dump_file)
> -	fprintf (dump_file, "Adjusting call %s/%i -> %s/%i\n",
> -		 xstrdup_for_dump (cs->caller->name ()),
> -		 cs->caller->order,
> -		 xstrdup_for_dump (cs->callee->name ()),
> -		 cs->callee->order);
> +	fprintf (dump_file, "Adjusting call %s -> %s\n",
> +		 cs->caller->dump_name (), cs->callee->dump_name ());
>  
>        ipa_modify_call_arguments (cs, cs->call_stmt, *adjustments);
>  
> diff --git a/gcc/value-prof.c b/gcc/value-prof.c
> index 1ce0fda0ed2..7f1574af70d 100644
> --- a/gcc/value-prof.c
> +++ b/gcc/value-prof.c
> @@ -1236,12 +1236,10 @@ init_node_map (bool local)
>  	      {
>  		if (dump_file)
>  		  fprintf (dump_file, "Local profile-id %i conflict"
> -			   " with nodes %s/%i %s/%i\n",
> +			   " with nodes %s %s\n",
>  			   n->profile_id,
> -			   n->name (),
> -			   n->order,
> -			   (*val)->name (),
> -			   (*val)->order);
> +			   n->dump_name (),
> +			   (*val)->dump_name ());
>  		n->profile_id = (n->profile_id + 1) & 0x7fffffff;
>  	      }
>  	  }
> @@ -1249,21 +1247,18 @@ init_node_map (bool local)
>  	  {
>  	    if (dump_file)
>  	      fprintf (dump_file,
> -		       "Node %s/%i has no profile-id"
> +		       "Node %s has no profile-id"
>  		       " (profile feedback missing?)\n",
> -		       n->name (),
> -		       n->order);
> +		       n->dump_name ());
>  	    continue;
>  	  }
>  	else if ((val = cgraph_node_map->get (n->profile_id)))
>  	  {
>  	    if (dump_file)
>  	      fprintf (dump_file,
> -		       "Node %s/%i has IP profile-id %i conflict. "
> +		       "Node %s has IP profile-id %i conflict. "
>  		       "Giving up.\n",
> -		       n->name (),
> -		       n->order,
> -		       n->profile_id);
> +		       n->dump_name (), n->profile_id);
>  	    *val = NULL;
>  	    continue;
>  	  }
> -- 
> 2.12.2
>
Martin Liška May 23, 2017, 2:08 p.m. UTC | #2
On 05/19/2017 04:41 PM, Jan Hubicka wrote:
> We used to have fixed size cyclic buffer for those strings, so it was safe
> to invoke name/asm_name few times and still expect the result to be there.
> I wonder what happened to those?  Using ggc is bit ugly here, but I suppose
> it is OK for debug output...


Ok, I see, I'm going to install the patch and we'll see how that can
impact memory usage at the end of GCC 8 stage 4.

Martin
diff mbox

Patch

From 42a746e3db58e24cbd3a4b45ab3f9150fad44928 Mon Sep 17 00:00:00 2001
From: marxin <mliska@suse.cz>
Date: Fri, 19 May 2017 14:09:25 +0200
Subject: [PATCH] Introduce symtab_node::dump_{asm_,}name functions.

gcc/ChangeLog:

2017-05-19  Martin Liska  <mliska@suse.cz>

	* cgraph.c (cgraph_node::get_create): Use symtab_node::dump_{asm_,}name
	functions.
	(cgraph_edge::make_speculative): Likewise.
	(cgraph_edge::resolve_speculation): Likewise.
	(cgraph_edge::redirect_call_stmt_to_callee): Likewise.
	(cgraph_node::dump): Likewise.
	* cgraph.h: Likewise.
	* cgraphunit.c (analyze_functions): Likewise.
	(symbol_table::compile): Likewise.
	* ipa-cp.c (print_all_lattices): Likewise.
	(determine_versionability): Likewise.
	(initialize_node_lattices): Likewise.
	(ipcp_verify_propagated_values): Likewise.
	(estimate_local_effects): Likewise.
	(update_profiling_info): Likewise.
	(create_specialized_node): Likewise.
	(perhaps_add_new_callers): Likewise.
	(decide_about_value): Likewise.
	(decide_whether_version_node): Likewise.
	(identify_dead_nodes): Likewise.
	(ipcp_store_bits_results): Likewise.
	* ipa-devirt.c (dump_targets): Likewise.
	(ipa_devirt): Likewise.
	* ipa-icf.c (sem_item::dump): Likewise.
	(sem_function::equals): Likewise.
	(sem_variable::equals): Likewise.
	(sem_item_optimizer::read_section): Likewise.
	(sem_item_optimizer::execute): Likewise.
	(congruence_class::dump): Likewise.
	* ipa-inline-analysis.c (dump_ipa_call_summary): Likewise.
	(dump_inline_summary): Likewise.
	(estimate_node_size_and_time): Likewise.
	(inline_analyze_function): Likewise.
	* ipa-inline-transform.c (inline_call): Likewise.
	* ipa-inline.c (report_inline_failed_reason): Likewise.
	(want_early_inline_function_p): Likewise.
	(edge_badness): Likewise.
	(update_edge_key): Likewise.
	(inline_small_functions): Likewise.
	* ipa-profile.c (ipa_profile): Likewise.
	* ipa-prop.c (ipa_print_node_jump_functions): Likewise.
	(ipa_make_edge_direct_to_target): Likewise.
	(remove_described_reference): Likewise.
	(ipa_impossible_devirt_target): Likewise.
	(propagate_controlled_uses): Likewise.
	(ipa_print_node_params): Likewise.
	(ipcp_transform_function): Likewise.
	* ipa-pure-const.c (pure_const_read_summary): Likewise.
	(propagate_pure_const): Likewise.
	* ipa-reference.c (generate_summary): Likewise.
	(read_write_all_from_decl): Likewise.
	(propagate): Likewise.
	(ipa_reference_read_optimization_summary): Likewise.
	* ipa-utils.c (ipa_merge_profiles): Likewise.
	* ipa.c (walk_polymorphic_call_targets): Likewise.
	(symbol_table::remove_unreachable_nodes): Likewise.
	(ipa_single_use): Likewise.
	* passes.c (execute_todo): Likewise.
	* predict.c (drop_profile): Likewise.
	* symtab.c (symtab_node::get_dump_name): New function.
	(symtab_node::dump_name): Likewise.
	(symtab_node::dump_asm_name): Likewise.
	(symtab_node::dump_references): Likewise.
	(symtab_node::dump_referring): Likewise.
	(symtab_node::dump_base): Likewise.
	(symtab_node::debug_symtab): Likewise.
	* tree-sra.c (convert_callers_for_node): Likewise.
	* tree-ssa-structalias.c (ipa_pta_execute): Likewise.
	* value-prof.c (init_node_map): Likewise.

gcc/lto/ChangeLog:

2017-05-19  Martin Liska  <mliska@suse.cz>

	* lto-symtab.c (lto_cgraph_replace_node): Use
	symtab_node::dump_{asm_,}name functions.
	* lto.c (read_cgraph_and_symbols): Likewise.
	(do_whole_program_analysis): Likewise.
---
 gcc/cgraph.c               | 75 ++++++++++++++------------------------
 gcc/cgraph.h               | 11 +++++-
 gcc/ipa-cp.c               | 51 +++++++++++---------------
 gcc/ipa-devirt.c           | 15 ++++----
 gcc/ipa-icf.c              | 31 ++++++----------
 gcc/ipa-inline-analysis.c  | 15 ++++----
 gcc/ipa-inline-transform.c |  8 ++---
 gcc/ipa-inline.c           | 63 ++++++++++++++------------------
 gcc/ipa-profile.c          |  6 ++--
 gcc/ipa-prop.c             | 90 +++++++++++++++++++---------------------------
 gcc/ipa-pure-const.c       | 15 +++-----
 gcc/ipa-reference.c        | 27 ++++++--------
 gcc/ipa-utils.c            |  5 ++-
 gcc/ipa.c                  | 20 +++++------
 gcc/lto/lto-symtab.c       |  7 ++--
 gcc/predict.c              | 14 ++++----
 gcc/symtab.c               | 42 ++++++++++++++++------
 gcc/tree-sra.c             |  7 ++--
 gcc/value-prof.c           | 19 ++++------
 19 files changed, 229 insertions(+), 292 deletions(-)

diff --git a/gcc/cgraph.c b/gcc/cgraph.c
index 10ba987701c..a1831db9f36 100644
--- a/gcc/cgraph.c
+++ b/gcc/cgraph.c
@@ -539,12 +539,12 @@  cgraph_node::get_create (tree decl)
       node->decl->decl_with_vis.symtab_node = node;
       if (dump_file)
 	fprintf (dump_file, "Introduced new external node "
-		 "(%s/%i) and turned into root of the clone tree.\n",
-		 node->name (), node->order);
+		 "(%s) and turned into root of the clone tree.\n",
+		 node->dump_name ());
     }
   else if (dump_file)
     fprintf (dump_file, "Introduced new external node "
-	     "(%s/%i).\n", node->name (), node->order);
+	     "(%s).\n", node->dump_name ());
   return node;
 }
 
@@ -1055,12 +1055,8 @@  cgraph_edge::make_speculative (cgraph_node *n2, gcov_type direct_count,
   cgraph_edge *e2;
 
   if (dump_file)
-    {
-      fprintf (dump_file, "Indirect call -> speculative call"
-	       " %s/%i => %s/%i\n",
-	       xstrdup_for_dump (n->name ()), n->order,
-	       xstrdup_for_dump (n2->name ()), n2->order);
-    }
+    fprintf (dump_file, "Indirect call -> speculative call %s => %s\n",
+	     n->dump_name (), n2->dump_name ());
   speculative = true;
   e2 = n->create_edge (n2, call_stmt, direct_count, direct_frequency);
   initialize_inline_failed (e2);
@@ -1163,22 +1159,18 @@  cgraph_edge::resolve_speculation (tree callee_decl)
 	{
 	  if (callee_decl)
 	    {
-	      fprintf (dump_file, "Speculative indirect call %s/%i => %s/%i has "
+	      fprintf (dump_file, "Speculative indirect call %s => %s has "
 		       "turned out to have contradicting known target ",
-		       xstrdup_for_dump (edge->caller->name ()),
-		       edge->caller->order,
-		       xstrdup_for_dump (e2->callee->name ()),
-		       e2->callee->order);
+		       edge->caller->dump_name (),
+		       e2->callee->dump_name ());
 	      print_generic_expr (dump_file, callee_decl);
 	      fprintf (dump_file, "\n");
 	    }
 	  else
 	    {
-	      fprintf (dump_file, "Removing speculative call %s/%i => %s/%i\n",
-		       xstrdup_for_dump (edge->caller->name ()),
-		       edge->caller->order,
-		       xstrdup_for_dump (e2->callee->name ()),
-		       e2->callee->order);
+	      fprintf (dump_file, "Removing speculative call %s => %s\n",
+		       edge->caller->dump_name (),
+		       e2->callee->dump_name ());
 	    }
 	}
     }
@@ -1295,12 +1287,10 @@  cgraph_edge::redirect_call_stmt_to_callee (void)
 						  true))
 	{
 	  if (dump_file)
-	    fprintf (dump_file, "Not expanding speculative call of %s/%i -> %s/%i\n"
+	    fprintf (dump_file, "Not expanding speculative call of %s -> %s\n"
 		     "Type mismatch.\n",
-		     xstrdup_for_dump (e->caller->name ()),
-		     e->caller->order,
-		     xstrdup_for_dump (e->callee->name ()),
-		     e->callee->order);
+		     e->caller->dump_name (),
+		     e->callee->dump_name ());
 	  e = e->resolve_speculation ();
 	  /* We are producing the final function body and will throw away the
 	     callgraph edges really soon.  Reset the counts/frequencies to
@@ -1314,12 +1304,10 @@  cgraph_edge::redirect_call_stmt_to_callee (void)
 	{
 	  if (dump_file)
 	    fprintf (dump_file,
-		     "Expanding speculative call of %s/%i -> %s/%i count: "
+		     "Expanding speculative call of %s -> %s count: "
 		     "%" PRId64"\n",
-		     xstrdup_for_dump (e->caller->name ()),
-		     e->caller->order,
-		     xstrdup_for_dump (e->callee->name ()),
-		     e->callee->order,
+		     e->caller->dump_name (),
+		     e->callee->dump_name (),
 		     (int64_t)e->count);
 	  gcc_assert (e2->speculative);
 	  push_cfun (DECL_STRUCT_FUNCTION (e->caller->decl));
@@ -1399,9 +1387,8 @@  cgraph_edge::redirect_call_stmt_to_callee (void)
 
   if (symtab->dump_file)
     {
-      fprintf (symtab->dump_file, "updating call of %s/%i -> %s/%i: ",
-	       xstrdup_for_dump (e->caller->name ()), e->caller->order,
-	       xstrdup_for_dump (e->callee->name ()), e->callee->order);
+      fprintf (symtab->dump_file, "updating call of %s -> %s: ",
+	       e->caller->dump_name (), e->callee->dump_name ());
       print_gimple_stmt (symtab->dump_file, e->call_stmt, 0, dump_flags);
       if (e->callee->clone.combined_args_to_skip)
 	{
@@ -2064,15 +2051,11 @@  cgraph_node::dump (FILE *f)
   dump_base (f);
 
   if (global.inlined_to)
-    fprintf (f, "  Function %s/%i is inline copy in %s/%i\n",
-	     xstrdup_for_dump (name ()),
-	     order,
-	     xstrdup_for_dump (global.inlined_to->name ()),
-	     global.inlined_to->order);
+    fprintf (f, "  Function %s is inline copy in %s\n",
+	     dump_name (),
+	     global.inlined_to->dump_name ());
   if (clone_of)
-    fprintf (f, "  Clone of %s/%i\n",
-	     clone_of->asm_name (),
-	     clone_of->order);
+    fprintf (f, "  Clone of %s\n", clone_of->dump_asm_name ());
   if (symtab->function_flags_ready)
     fprintf (f, "  Availability: %s\n",
 	     cgraph_availability_names [get_availability ()]);
@@ -2088,14 +2071,12 @@  cgraph_node::dump (FILE *f)
       if (vi->prev != NULL)
 	{
 	  fprintf (f, "prev: ");
-	  fprintf (f, "%s/%i ", vi->prev->this_node->asm_name (),
-		   vi->prev->this_node->order);
+	  fprintf (f, "%s ", vi->prev->this_node->dump_asm_name ());
 	}
       if (vi->next != NULL)
 	{
 	  fprintf (f, "next: ");
-	  fprintf (f, "%s/%i ", vi->next->this_node->asm_name (),
-		   vi->next->this_node->order);
+	  fprintf (f, "%s ", vi->next->this_node->dump_asm_name ());
 	}
       if (vi->dispatcher_resolver != NULL_TREE)
 	fprintf (f, "dispatcher: %s",
@@ -2184,16 +2165,14 @@  cgraph_node::dump (FILE *f)
 
   for (edge = callers; edge; edge = edge->next_caller)
     {
-      fprintf (f, "%s/%i ", edge->caller->asm_name (),
-	       edge->caller->order);
+      fprintf (f, "%s ", edge->caller->dump_name ());
       edge->dump_edge_flags (f);
     }
 
   fprintf (f, "\n  Calls: ");
   for (edge = callees; edge; edge = edge->next_callee)
     {
-      fprintf (f, "%s/%i ", edge->callee->asm_name (),
-	       edge->callee->order);
+      fprintf (f, "%s ", edge->callee->dump_name ());
       edge->dump_edge_flags (f);
     }
   fprintf (f, "\n");
diff --git a/gcc/cgraph.h b/gcc/cgraph.h
index c630b9e623a..5fc4b308e30 100644
--- a/gcc/cgraph.h
+++ b/gcc/cgraph.h
@@ -99,8 +99,14 @@  public:
   /* Return name.  */
   const char *name () const;
 
+  /* Return dump name.  */
+  const char *dump_name () const;
+
   /* Return asm name.  */
-  const char * asm_name () const;
+  const char *asm_name () const;
+
+  /* Return dump name with assembler name.  */
+  const char *dump_asm_name () const;
 
   /* Add node into symbol table.  This function is not used directly, but via
      cgraph/varpool node creation routines.  */
@@ -598,6 +604,9 @@  private:
   /* Worker for ultimate_alias_target.  */
   symtab_node *ultimate_alias_target_1 (enum availability *avail = NULL,
 					symtab_node *ref = NULL);
+
+  /* Get dump name with normal or assembly name.  */
+  const char *get_dump_name (bool asm_name_p) const;
 };
 
 inline void
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index 676f555718e..e74063ff983 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -539,8 +539,7 @@  print_all_lattices (FILE * f, bool dump_sources, bool dump_benefits)
       struct ipa_node_params *info;
 
       info = IPA_NODE_REF (node);
-      fprintf (f, "  Node: %s/%i:\n", node->name (),
-	       node->order);
+      fprintf (f, "  Node: %s:\n", node->dump_name ());
       count = ipa_get_param_count (info);
       for (i = 0; i < count; i++)
 	{
@@ -622,8 +621,8 @@  determine_versionability (struct cgraph_node *node,
     }
 
   if (reason && dump_file && !node->alias && !node->thunk.thunk_p)
-    fprintf (dump_file, "Function %s/%i is not versionable, reason: %s.\n",
-	     node->name (), node->order, reason);
+    fprintf (dump_file, "Function %s is not versionable, reason: %s.\n",
+	     node->dump_name (), reason);
 
   info->versionable = (reason == NULL);
 }
@@ -1195,9 +1194,8 @@  initialize_node_lattices (struct cgraph_node *node)
 	}
       if (dump_file && (dump_flags & TDF_DETAILS)
 	  && !node->alias && !node->thunk.thunk_p)
-	fprintf (dump_file, "Marking all lattices of %s/%i as %s\n",
-		 node->name (), node->order,
-		 disable ? "BOTTOM" : "VARIABLE");
+	fprintf (dump_file, "Marking all lattices of %s as %s\n",
+		 node->dump_name (), disable ? "BOTTOM" : "VARIABLE");
     }
 
   for (ie = node->indirect_calls; ie; ie = ie->next_callee)
@@ -2842,8 +2840,7 @@  estimate_local_effects (struct cgraph_node *node)
     return;
 
   if (dump_file && (dump_flags & TDF_DETAILS))
-    fprintf (dump_file, "\nEstimating effects for %s/%i.\n",
-	     node->name (), node->order);
+    fprintf (dump_file, "\nEstimating effects for %s.\n", node->dump_name ());
 
   always_const = gather_context_independent_values (info, &known_csts,
 						    &known_contexts, &known_aggs,
@@ -3656,10 +3653,10 @@  update_profiling_info (struct cgraph_node *orig_node,
   if (orig_node_count < orig_sum + new_sum)
     {
       if (dump_file)
-	fprintf (dump_file, "    Problem: node %s/%i has too low count "
+	fprintf (dump_file, "    Problem: node %s has too low count "
 		 HOST_WIDE_INT_PRINT_DEC " while the sum of incoming "
 		 "counts is " HOST_WIDE_INT_PRINT_DEC "\n",
-		 orig_node->name (), orig_node->order,
+		 orig_node->dump_name (),
 		 (HOST_WIDE_INT) orig_node_count,
 		 (HOST_WIDE_INT) (orig_sum + new_sum));
 
@@ -3798,8 +3795,7 @@  create_specialized_node (struct cgraph_node *node,
 
   if (dump_file && (dump_flags & TDF_DETAILS))
     {
-      fprintf (dump_file, "     the new node is %s/%i.\n",
-	       new_node->name (), new_node->order);
+      fprintf (dump_file, "     the new node is %s.\n", new_node->dump_name ());
       if (known_contexts.exists ())
 	{
 	  for (i = 0; i < count; i++)
@@ -4439,12 +4435,9 @@  perhaps_add_new_callers (cgraph_node *node, ipcp_value<valtype> *val)
 	      && cgraph_edge_brings_all_agg_vals_for_node (cs, val->spec_node))
 	    {
 	      if (dump_file)
-		fprintf (dump_file, " - adding an extra caller %s/%i"
-			 " of %s/%i\n",
-			 xstrdup_for_dump (cs->caller->name ()),
-			 cs->caller->order,
-			 xstrdup_for_dump (val->spec_node->name ()),
-			 val->spec_node->order);
+		fprintf (dump_file, " - adding an extra caller %s of %s\n",
+			 cs->caller->dump_name (),
+			 val->spec_node->dump_name ());
 
 	      cs->redirect_callee_duplicating_thunks (val->spec_node);
 	      val->spec_node->expand_all_artificial_thunks ();
@@ -4600,8 +4593,8 @@  decide_about_value (struct cgraph_node *node, int index, HOST_WIDE_INT offset,
     return false;
 
   if (dump_file)
-    fprintf (dump_file, "  Creating a specialized node of %s/%i.\n",
-	     node->name (), node->order);
+    fprintf (dump_file, "  Creating a specialized node of %s.\n",
+	     node->dump_name ());
 
   callers = gather_edges_for_value (val, node, caller_count);
   if (offset == -1)
@@ -4642,8 +4635,8 @@  decide_whether_version_node (struct cgraph_node *node)
     return false;
 
   if (dump_file && (dump_flags & TDF_DETAILS))
-    fprintf (dump_file, "\nEvaluating opportunities for %s/%i.\n",
-	     node->name (), node->order);
+    fprintf (dump_file, "\nEvaluating opportunities for %s.\n",
+	     node->dump_name ());
 
   gather_context_independent_values (info, &known_csts, &known_contexts,
 				  info->do_clone_for_all_contexts ? &known_aggs
@@ -4697,9 +4690,8 @@  decide_whether_version_node (struct cgraph_node *node)
       vec<cgraph_edge *> callers;
 
       if (dump_file)
-	fprintf (dump_file, " - Creating a specialized node of %s/%i "
-		 "for all known contexts.\n", node->name (),
-		 node->order);
+	fprintf (dump_file, " - Creating a specialized node of %s "
+		 "for all known contexts.\n", node->dump_name ());
 
       callers = node->collect_callers ();
 
@@ -4794,8 +4786,7 @@  identify_dead_nodes (struct cgraph_node *node)
     {
       for (v = node; v; v = ((struct ipa_dfs_info *) v->aux)->next_cycle)
 	if (IPA_NODE_REF (v)->node_dead)
-	  fprintf (dump_file, "  Marking node as dead: %s/%i.\n",
-		   v->name (), v->order);
+	  fprintf (dump_file, "  Marking node as dead: %s.\n", v->dump_name ());
     }
 }
 
@@ -4892,8 +4883,8 @@  ipcp_store_bits_results (void)
 	    continue;
 	  if (!dumped_sth)
 	    {
-	      fprintf (dump_file, "Propagated bits info for function %s/%i:\n",
-		       node->name (), node->order);
+	      fprintf (dump_file, "Propagated bits info for function %s:\n",
+		       node->dump_name ());
 	      dumped_sth = true;
 	    }
 	  fprintf (dump_file, " param %i: value = ", i);
diff --git a/gcc/ipa-devirt.c b/gcc/ipa-devirt.c
index aa3a236dd91..eafd0182a45 100644
--- a/gcc/ipa-devirt.c
+++ b/gcc/ipa-devirt.c
@@ -3316,7 +3316,8 @@  dump_targets (FILE *f, vec <cgraph_node *> targets)
       char *name = NULL;
       if (in_lto_p)
 	name = cplus_demangle_v3 (targets[i]->asm_name (), 0);
-      fprintf (f, " %s/%i", name ? name : targets[i]->name (), targets[i]->order);
+      fprintf (f, " %s/%i", name ? name : targets[i]->name (),
+	       targets[i]->order);
       if (in_lto_p)
 	free (name);
       if (!targets[i]->definition)
@@ -3596,8 +3597,8 @@  ipa_devirt (void)
       if (!opt_for_fn (n->decl, flag_devirtualize))
 	continue;
       if (dump_file && n->indirect_calls)
-	fprintf (dump_file, "\n\nProcesing function %s/%i\n",
-		 n->name (), n->order);
+	fprintf (dump_file, "\n\nProcesing function %s\n",
+		 n->dump_name ());
       for (e = n->indirect_calls; e; e = e->next_callee)
 	if (e->indirect_info->polymorphic)
 	  {
@@ -3752,10 +3753,10 @@  ipa_devirt (void)
                   {
                     location_t locus = gimple_location_safe (e->call_stmt);
                     dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus,
-                                     "speculatively devirtualizing call in %s/%i to %s/%i\n",
-                                     n->name (), n->order,
-                                     likely_target->name (),
-                                     likely_target->order);
+				     "speculatively devirtualizing call "
+				     "in %s to %s\n",
+				     n->dump_name (),
+				     likely_target->dump_name ());
                   }
 		if (!likely_target->can_be_discarded_p ())
 		  {
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index 92b93b53b85..88f732a3cb8 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -195,8 +195,8 @@  sem_item::dump (void)
 {
   if (dump_file)
     {
-      fprintf (dump_file, "[%s] %s (%u) (tree:%p)\n", type == FUNC ? "func" : "var",
-	       node->name(), node->order, (void *) node->decl);
+      fprintf (dump_file, "[%s] %s (tree:%p)\n", type == FUNC ? "func" : "var",
+	       node->dump_name (), (void *) node->decl);
       fprintf (dump_file, "  hash: %u\n", get_hash ());
       fprintf (dump_file, "  references: ");
 
@@ -869,13 +869,9 @@  sem_function::equals (sem_item *item,
 
   if (dump_file && (dump_flags & TDF_DETAILS))
     fprintf (dump_file,
-	     "Equals called for:%s:%s (%u:%u) (%s:%s) with result: %s\n\n",
-	     xstrdup_for_dump (node->name()),
-	     xstrdup_for_dump (item->node->name ()),
-	     node->order,
-	     item->node->order,
-	     xstrdup_for_dump (node->asm_name ()),
-	     xstrdup_for_dump (item->node->asm_name ()),
+	     "Equals called for: %s:%s with result: %s\n\n",
+	     node->dump_name (),
+	     item->node->dump_name (),
 	     eq ? "true" : "false");
 
   return eq;
@@ -1887,12 +1883,9 @@  sem_variable::equals (sem_item *item,
 			      DECL_INITIAL (item->node->decl));
   if (dump_file && (dump_flags & TDF_DETAILS))
     fprintf (dump_file,
-	     "Equals called for vars:%s:%s (%u:%u) (%s:%s) with result: %s\n\n",
-	     xstrdup_for_dump (node->name()),
-	     xstrdup_for_dump (item->node->name ()),
-	     node->order, item->node->order,
-	     xstrdup_for_dump (node->asm_name ()),
-	     xstrdup_for_dump (item->node->asm_name ()), ret ? "true" : "false");
+	     "Equals called for vars: %s:%s with result: %s\n\n",
+	     node->dump_name (), item->node->dump_name (),
+	     ret ? "true" : "false");
 
   return ret;
 }
@@ -2398,8 +2391,8 @@  sem_item_optimizer::read_section (lto_file_decl_data *file_data,
       gcc_assert (node->definition);
 
       if (dump_file)
-	fprintf (dump_file, "Symbol added:%s (tree: %p, uid:%u)\n",
-		 node->asm_name (), (void *) node->decl, node->order);
+	fprintf (dump_file, "Symbol added: %s (tree: %p)\n",
+		 node->dump_asm_name (), (void *) node->decl);
 
       if (is_a<cgraph_node *> (node))
 	{
@@ -3577,9 +3570,7 @@  congruence_class::dump (FILE *file, unsigned int indent) const
 
   FPUTS_SPACES (file, indent + 2, "");
   for (unsigned i = 0; i < members.length (); i++)
-    fprintf (file, "%s(%p/%u) ", members[i]->node->asm_name (),
-	     (void *) members[i]->decl,
-	     members[i]->node->order);
+    fprintf (file, "%s ", members[i]->node->dump_asm_name ());
 
   fprintf (file, "\n");
 }
diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c
index bda704a9473..7b6914c06f3 100644
--- a/gcc/ipa-inline-analysis.c
+++ b/gcc/ipa-inline-analysis.c
@@ -846,9 +846,9 @@  dump_ipa_call_summary (FILE *f, int indent, struct cgraph_node *node,
       int i;
 
       fprintf (f,
-	       "%*s%s/%i %s\n%*s  loop depth:%2i freq:%4i size:%2i"
+	       "%*s%s %s\n%*s  loop depth:%2i freq:%4i size:%2i"
 	       " time: %2i callee size:%2i stack:%2i",
-	       indent, "", callee->name (), callee->order,
+	       indent, "", callee->dump_name (),
 	       !edge->inline_failed
 	       ? "inlined" : cgraph_inline_failed_string (edge-> inline_failed),
 	       indent, "", es->loop_depth, edge->frequency,
@@ -913,8 +913,7 @@  dump_inline_summary (FILE *f, struct cgraph_node *node)
       struct inline_summary *s = inline_summaries->get (node);
       size_time_entry *e;
       int i;
-      fprintf (f, "Inline summary for %s/%i", node->name (),
-	       node->order);
+      fprintf (f, "Inline summary for %s", node->dump_name ());
       if (DECL_DISREGARD_INLINE_LIMITS (node->decl))
 	fprintf (f, " always_inline");
       if (s->inlinable)
@@ -2779,9 +2778,8 @@  estimate_node_size_and_time (struct cgraph_node *node,
   if (dump_file && (dump_flags & TDF_DETAILS))
     {
       bool found = false;
-      fprintf (dump_file, "   Estimating body: %s/%i\n"
-	       "   Known to be false: ", node->name (),
-	       node->order);
+      fprintf (dump_file, "   Estimating body: %s\n"
+	       "   Known to be false: ", node->dump_name ());
 
       for (i = predicate::not_inlined_condition;
 	   i < (predicate::first_dynamic_condition
@@ -3578,8 +3576,7 @@  inline_analyze_function (struct cgraph_node *node)
   push_cfun (DECL_STRUCT_FUNCTION (node->decl));
 
   if (dump_file)
-    fprintf (dump_file, "\nAnalyzing function: %s/%u\n",
-	     node->name (), node->order);
+    fprintf (dump_file, "\nAnalyzing function: %s\n", node->dump_name ());
   if (opt_for_fn (node->decl, optimize) && !node->thunk.thunk_p)
     inline_indirect_intraprocedural_analysis (node);
   compute_inline_parameters (node, false);
diff --git a/gcc/ipa-inline-transform.c b/gcc/ipa-inline-transform.c
index a8e73cd6967..f21a50ae3bf 100644
--- a/gcc/ipa-inline-transform.c
+++ b/gcc/ipa-inline-transform.c
@@ -350,8 +350,8 @@  inline_call (struct cgraph_edge *e, bool update_original,
       cl_optimization_restore (&opts, opts_for_fn (to->decl));
       opts.x_flag_strict_aliasing = false;
       if (dump_file)
-	fprintf (dump_file, "Dropping flag_strict_aliasing on %s:%i\n",
-		 to->name (), to->order);
+	fprintf (dump_file, "Dropping flag_strict_aliasing on %s\n",
+		 to->dump_name ());
       DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl)
 	 = build_optimization_node (&opts);
       reload_optimization_node = true;
@@ -411,8 +411,8 @@  inline_call (struct cgraph_edge *e, bool update_original,
 	  opts.x_flag_errno_math
 	    = opt_for_fn (callee->decl, flag_errno_math);
 	  if (dump_file)
-	    fprintf (dump_file, "Copying FP flags from %s:%i to %s:%i\n",
-		     callee->name (), callee->order, to->name (), to->order);
+	    fprintf (dump_file, "Copying FP flags from %s to %s\n",
+		     callee->dump_name (), to->dump_name ());
 	  DECL_FUNCTION_SPECIFIC_OPTIMIZATION (to->decl)
 	     = build_optimization_node (&opts);
 	  reload_optimization_node = true;
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c
index b0d589081d8..40ea9019671 100644
--- a/gcc/ipa-inline.c
+++ b/gcc/ipa-inline.c
@@ -227,9 +227,9 @@  report_inline_failed_reason (struct cgraph_edge *e)
 {
   if (dump_file)
     {
-      fprintf (dump_file, "  not inlinable: %s/%i -> %s/%i, %s\n",
-	       xstrdup_for_dump (e->caller->name ()), e->caller->order,
-	       xstrdup_for_dump (e->callee->name ()), e->callee->order,
+      fprintf (dump_file, "  not inlinable: %s -> %s, %s\n",
+	       e->caller->dump_name (),
+	       e->callee->dump_name (),
 	       cgraph_inline_failed_string (e->inline_failed));
       if ((e->inline_failed == CIF_TARGET_OPTION_MISMATCH
 	   || e->inline_failed == CIF_OPTIMIZATION_MISMATCH)
@@ -592,22 +592,20 @@  want_early_inline_function_p (struct cgraph_edge *e)
 	       && growth > 0)
 	{
 	  if (dump_file)
-	    fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
+	    fprintf (dump_file, "  will not early inline: %s->%s, "
 		     "call is cold and code would grow by %i\n",
-		     xstrdup_for_dump (e->caller->name ()),
-		     e->caller->order,
-		     xstrdup_for_dump (callee->name ()), callee->order,
+		     e->caller->dump_name (),
+		     callee->dump_name (),
 		     growth);
 	  want_inline = false;
 	}
       else if (growth > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS))
 	{
 	  if (dump_file)
-	    fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
+	    fprintf (dump_file, "  will not early inline: %s->%s, "
 		     "growth %i exceeds --param early-inlining-insns\n",
-		     xstrdup_for_dump (e->caller->name ()),
-		     e->caller->order,
-		     xstrdup_for_dump (callee->name ()), callee->order,
+		     e->caller->dump_name (),
+		     callee->dump_name (),
 		     growth);
 	  want_inline = false;
 	}
@@ -615,12 +613,11 @@  want_early_inline_function_p (struct cgraph_edge *e)
 	       && growth * (n + 1) > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS))
 	{
 	  if (dump_file)
-	    fprintf (dump_file, "  will not early inline: %s/%i->%s/%i, "
+	    fprintf (dump_file, "  will not early inline: %s->%s, "
 		     "growth %i exceeds --param early-inlining-insns "
 		     "divided by number of calls\n",
-		     xstrdup_for_dump (e->caller->name ()),
-		     e->caller->order,
-		     xstrdup_for_dump (callee->name ()), callee->order,
+		     e->caller->dump_name (),
+		     callee->dump_name (),
 		     growth);
 	  want_inline = false;
 	}
@@ -1020,11 +1017,9 @@  edge_badness (struct cgraph_edge *edge, bool dump)
 
   if (dump)
     {
-      fprintf (dump_file, "    Badness calculation for %s/%i -> %s/%i\n",
-	       xstrdup_for_dump (edge->caller->name ()),
-	       edge->caller->order,
-	       xstrdup_for_dump (callee->name ()),
-	       edge->callee->order);
+      fprintf (dump_file, "    Badness calculation for %s -> %s\n",
+	       edge->caller->dump_name (),
+	       edge->callee->dump_name ());
       fprintf (dump_file, "      size growth %i, time %f unspec %f ",
 	       growth,
 	       edge_time.to_double (),
@@ -1229,12 +1224,9 @@  update_edge_key (edge_heap_t *heap, struct cgraph_edge *edge)
 	  if (dump_file && (dump_flags & TDF_DETAILS))
 	    {
 	      fprintf (dump_file,
-		       "  decreasing badness %s/%i -> %s/%i, %f"
-		       " to %f\n",
-		       xstrdup_for_dump (edge->caller->name ()),
-		       edge->caller->order,
-		       xstrdup_for_dump (edge->callee->name ()),
-		       edge->callee->order,
+		       "  decreasing badness %s -> %s, %f to %f\n",
+		       edge->caller->dump_name (),
+		       edge->callee->dump_name (),
 		       n->get_key ().to_double (),
 		       badness.to_double ());
 	    }
@@ -1246,11 +1238,9 @@  update_edge_key (edge_heap_t *heap, struct cgraph_edge *edge)
        if (dump_file && (dump_flags & TDF_DETAILS))
 	 {
 	   fprintf (dump_file,
-		    "  enqueuing call %s/%i -> %s/%i, badness %f\n",
-		    xstrdup_for_dump (edge->caller->name ()),
-		    edge->caller->order,
-		    xstrdup_for_dump (edge->callee->name ()),
-		    edge->callee->order,
+		    "  enqueuing call %s -> %s, badness %f\n",
+		    edge->caller->dump_name (),
+		    edge->callee->dump_name (),
 		    badness.to_double ());
 	 }
       edge->aux = heap->insert (badness, edge);
@@ -1803,8 +1793,7 @@  inline_small_functions (void)
       bool has_speculative = false;
 
       if (dump_file)
-	fprintf (dump_file, "Enqueueing calls in %s/%i.\n",
-		 node->name (), node->order);
+	fprintf (dump_file, "Enqueueing calls in %s.\n", node->dump_name ());
 
       for (edge = node->callees; edge; edge = next)
 	{
@@ -1918,13 +1907,13 @@  inline_small_functions (void)
       if (dump_file)
 	{
 	  fprintf (dump_file,
-		   "\nConsidering %s/%i with %i size\n",
-		   callee->name (), callee->order,
+		   "\nConsidering %s with %i size\n",
+		   callee->dump_name (),
 		   inline_summaries->get (callee)->size);
 	  fprintf (dump_file,
-		   " to be inlined into %s/%i in %s:%i\n"
+		   " to be inlined into %s in %s:%i\n"
 		   " Estimated badness is %f, frequency %.2f.\n",
-		   edge->caller->name (), edge->caller->order,
+		   edge->caller->dump_name (),
 		   edge->call_stmt
 		   && (LOCATION_LOCUS (gimple_location ((const gimple *)
 							edge->call_stmt))
diff --git a/gcc/ipa-profile.c b/gcc/ipa-profile.c
index c60e05d8454..359f47a6df9 100644
--- a/gcc/ipa-profile.c
+++ b/gcc/ipa-profile.c
@@ -590,9 +590,9 @@  ipa_profile (void)
 		  if (dump_file)
 		    {
 		      fprintf (dump_file, "Indirect call -> direct call from"
-			       " other module %s/%i => %s/%i, prob %3.2f\n",
-			       xstrdup_for_dump (n->name ()), n->order,
-			       xstrdup_for_dump (n2->name ()), n2->order,
+			       " other module %s => %s, prob %3.2f\n",
+			       n->dump_name (),
+			       n2->dump_name (),
 			       e->indirect_info->common_target_probability
 			       / (float)REG_BR_PROB_BASE);
 		    }
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index 10741a2b7bd..2b1a8854e7a 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -416,17 +416,15 @@  ipa_print_node_jump_functions (FILE *f, struct cgraph_node *node)
 {
   struct cgraph_edge *cs;
 
-  fprintf (f, "  Jump functions of caller  %s/%i:\n", node->name (),
-	   node->order);
+  fprintf (f, "  Jump functions of caller  %s:\n", node->dump_name ());
   for (cs = node->callees; cs; cs = cs->next_callee)
     {
       if (!ipa_edge_args_info_available_for_edge_p (cs))
 	continue;
 
-      fprintf (f, "    callsite  %s/%i -> %s/%i : \n",
-	       xstrdup_for_dump (node->name ()), node->order,
-	       xstrdup_for_dump (cs->callee->name ()),
-	       cs->callee->order);
+      fprintf (f, "    callsite  %s -> %s : \n",
+	       node->dump_name (),
+	       cs->callee->dump_name ());
       ipa_print_node_jump_functions_for_edge (f, cs);
     }
 
@@ -2854,9 +2852,8 @@  ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target,
 		{
 		  location_t loc = gimple_location_safe (ie->call_stmt);
 		  dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
-				   "discovered direct call non-invariant "
-				   "%s/%i\n",
-				   ie->caller->name (), ie->caller->order);
+				   "discovered direct call non-invariant %s\n",
+				   ie->caller->dump_name ());
 		}
 	      return NULL;
 	    }
@@ -2866,9 +2863,9 @@  ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target,
 	    {
 	      location_t loc = gimple_location_safe (ie->call_stmt);
 	      dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, loc,
-			       "discovered direct call to non-function in %s/%i, "
+			       "discovered direct call to non-function in %s, "
 			       "making it __builtin_unreachable\n",
-			       ie->caller->name (), ie->caller->order);
+			       ie->caller->dump_name ());
 	    }
 
 	  target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
@@ -2895,11 +2892,9 @@  ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target,
 	{
 	  if (dump_file)
 	    fprintf (dump_file, "ipa-prop: Discovered call to a known target "
-		     "(%s/%i -> %s/%i) but can not refer to it. Giving up.\n",
-		     xstrdup_for_dump (ie->caller->name ()),
-		     ie->caller->order,
-		     xstrdup_for_dump (ie->callee->name ()),
-		     ie->callee->order);
+		     "(%s -> %s) but can not refer to it. Giving up.\n",
+		     ie->caller->dump_name (),
+		     ie->callee->dump_name ());
 	  return NULL;
 	}
       callee = cgraph_node::get_create (target);
@@ -2915,24 +2910,18 @@  ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target,
 	  != callee->ultimate_alias_target ())
 	{
 	  if (dump_file)
-	    fprintf (dump_file, "ipa-prop: Discovered call to a speculative target "
-		     "(%s/%i -> %s/%i) but the call is already speculated to %s/%i. Giving up.\n",
-		     xstrdup_for_dump (ie->caller->name ()),
-		     ie->caller->order,
-		     xstrdup_for_dump (callee->name ()),
-		     callee->order,
-		     xstrdup_for_dump (e2->callee->name ()),
-		     e2->callee->order);
+	    fprintf (dump_file, "ipa-prop: Discovered call to a speculative "
+		     "target (%s -> %s) but the call is already "
+		     "speculated to %s. Giving up.\n",
+		     ie->caller->dump_name (), callee->dump_name (),
+		     e2->callee->dump_name ());
 	}
       else
 	{
 	  if (dump_file)
 	    fprintf (dump_file, "ipa-prop: Discovered call to a speculative target "
-		     "(%s/%i -> %s/%i) this agree with previous speculation.\n",
-		     xstrdup_for_dump (ie->caller->name ()),
-		     ie->caller->order,
-		     xstrdup_for_dump (callee->name ()),
-		     callee->order);
+		     "(%s -> %s) this agree with previous speculation.\n",
+		     ie->caller->dump_name (), callee->dump_name ());
 	}
       return NULL;
     }
@@ -2949,13 +2938,11 @@  ipa_make_edge_direct_to_target (struct cgraph_edge *ie, tree target,
   if (dump_file && !unreachable)
     {
       fprintf (dump_file, "ipa-prop: Discovered %s call to a %s target "
-	       "(%s/%i -> %s/%i), for stmt ",
+	       "(%s -> %s), for stmt ",
 	       ie->indirect_info->polymorphic ? "a virtual" : "an indirect",
 	       speculative ? "speculative" : "known",
-	       xstrdup_for_dump (ie->caller->name ()),
-	       ie->caller->order,
-	       xstrdup_for_dump (callee->name ()),
-	       callee->order);
+	       ie->caller->dump_name (),
+	       callee->dump_name ());
       if (ie->call_stmt)
 	print_gimple_stmt (dump_file, ie->call_stmt, 2, TDF_SLIM);
       else
@@ -3155,9 +3142,8 @@  remove_described_reference (symtab_node *symbol, struct ipa_cst_ref_desc *rdesc)
 
   to_del->remove_reference ();
   if (dump_file)
-    fprintf (dump_file, "ipa-prop: Removed a reference from %s/%i to %s.\n",
-	     xstrdup_for_dump (origin->caller->name ()),
-	     origin->caller->order, xstrdup_for_dump (symbol->name ()));
+    fprintf (dump_file, "ipa-prop: Removed a reference from %s to %s.\n",
+	     origin->caller->dump_name (), xstrdup_for_dump (symbol->name ()));
   return true;
 }
 
@@ -3272,13 +3258,13 @@  ipa_impossible_devirt_target (struct cgraph_edge *ie, tree target)
     {
       if (target)
 	fprintf (dump_file,
-		 "Type inconsistent devirtualization: %s/%i->%s\n",
-		 ie->caller->name (), ie->caller->order,
+		 "Type inconsistent devirtualization: %s->%s\n",
+		 ie->caller->dump_name (),
 		 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (target)));
       else
 	fprintf (dump_file,
-		 "No devirtualization target in %s/%i\n",
-		 ie->caller->name (), ie->caller->order);
+		 "No devirtualization target in %s\n",
+		 ie->caller->dump_name ());
     }
   tree new_target = builtin_decl_implicit (BUILT_IN_UNREACHABLE);
   cgraph_node::get_create (new_target);
@@ -3607,10 +3593,9 @@  propagate_controlled_uses (struct cgraph_edge *cs)
 		{
 		  if (dump_file)
 		    fprintf (dump_file, "ipa-prop: Removing cloning-created "
-			     "reference from %s/%i to %s/%i.\n",
-			     xstrdup_for_dump (new_root->name ()),
-			     new_root->order,
-			     xstrdup_for_dump (n->name ()), n->order);
+			     "reference from %s to %s.\n",
+			     new_root->dump_name (),
+			     n->dump_name ());
 		  ref->remove_reference ();
 		}
 	    }
@@ -3648,11 +3633,9 @@  propagate_controlled_uses (struct cgraph_edge *cs)
 			  if (dump_file)
 			    fprintf (dump_file, "ipa-prop: Removing "
 				     "cloning-created reference "
-				     "from %s/%i to %s/%i.\n",
-				     xstrdup_for_dump (clone->name ()),
-				     clone->order,
-				     xstrdup_for_dump (n->name ()),
-				     n->order);
+				     "from %s to %s.\n",
+				     clone->dump_name (),
+				     n->dump_name ());
 			  ref->remove_reference ();
 			}
 		      clone = clone->callers->caller;
@@ -4030,8 +4013,7 @@  ipa_print_node_params (FILE *f, struct cgraph_node *node)
   if (!node->definition)
     return;
   info = IPA_NODE_REF (node);
-  fprintf (f, "  function  %s/%i parameter descriptors:\n",
-	   node->name (), node->order);
+  fprintf (f, "  function  %s parameter descriptors:\n", node->dump_name ());
   count = ipa_get_param_count (info);
   for (i = 0; i < count; i++)
     {
@@ -5849,8 +5831,8 @@  ipcp_transform_function (struct cgraph_node *node)
   gcc_checking_assert (current_function_decl);
 
   if (dump_file)
-    fprintf (dump_file, "Modification phase of node %s/%i\n",
-	     node->name (), node->order);
+    fprintf (dump_file, "Modification phase of node %s\n",
+	     node->dump_name ());
 
   ipcp_update_bits (node);
   ipcp_update_vr (node);
diff --git a/gcc/ipa-pure-const.c b/gcc/ipa-pure-const.c
index 2379ec88e13..dac8f0d5f21 100644
--- a/gcc/ipa-pure-const.c
+++ b/gcc/ipa-pure-const.c
@@ -1130,9 +1130,7 @@  pure_const_read_summary (void)
 	      if (dump_file)
 		{
 		  int flags = flags_from_decl_or_type (node->decl);
-		  fprintf (dump_file, "Read info for %s/%i ",
-			   node->name (),
-			   node->order);
+		  fprintf (dump_file, "Read info for %s ", node->dump_name ());
 		  if (flags & ECF_CONST)
 		    fprintf (dump_file, " const");
 		  if (flags & ECF_PURE)
@@ -1269,9 +1267,8 @@  propagate_pure_const (void)
 
 	  funct_state w_l = get_function_state (w);
 	  if (dump_file && (dump_flags & TDF_DETAILS))
-	    fprintf (dump_file, "  Visiting %s/%i state:%s looping %i\n",
-		     w->name (),
-		     w->order,
+	    fprintf (dump_file, "  Visiting %s state:%s looping %i\n",
+		     w->dump_name (),
 		     pure_const_names[w_l->pure_const_state],
 		     w_l->looping);
 
@@ -1305,10 +1302,8 @@  propagate_pure_const (void)
 
 	      if (dump_file && (dump_flags & TDF_DETAILS))
 		{
-		  fprintf (dump_file,
-			   "    Call to %s/%i",
-			   e->callee->name (),
-			   e->callee->order);
+		  fprintf (dump_file, "    Call to %s",
+			   e->callee->dump_name ());
 		}
 	      if (avail > AVAIL_INTERPOSABLE)
 		{
diff --git a/gcc/ipa-reference.c b/gcc/ipa-reference.c
index 222253920fd..45c2e3feda2 100644
--- a/gcc/ipa-reference.c
+++ b/gcc/ipa-reference.c
@@ -599,8 +599,7 @@  generate_summary (void)
 
 	  l = &get_reference_vars_info (node)->local;
 	  fprintf (dump_file,
-		   "\nFunction name:%s/%i:",
-		   node->asm_name (), node->order);
+		   "\nFunction name:%s:", node->dump_name ());
 	  fprintf (dump_file, "\n  locals read: ");
 	  if (l->statics_read)
 	    EXECUTE_IF_SET_IN_BITMAP (l->statics_read,
@@ -636,8 +635,7 @@  read_write_all_from_decl (struct cgraph_node *node,
     {
       read_all = true;
       if (dump_file && (dump_flags & TDF_DETAILS))
-         fprintf (dump_file, "   %s/%i -> read all\n",
-		  node->asm_name (), node->order);
+	fprintf (dump_file, "   %s -> read all\n", node->dump_name ());
     }
   else
     {
@@ -646,8 +644,8 @@  read_write_all_from_decl (struct cgraph_node *node,
       read_all = true;
       write_all = true;
       if (dump_file && (dump_flags & TDF_DETAILS))
-         fprintf (dump_file, "   %s/%i -> read all, write all\n",
-		  node->asm_name (), node->order);
+	fprintf (dump_file, "   %s -> read all, write all\n",
+		  node->dump_name ());
     }
 }
 
@@ -754,8 +752,7 @@  propagate (void)
       node_g = &node_info->global;
 
       if (dump_file && (dump_flags & TDF_DETAILS))
-	fprintf (dump_file, "Starting cycle with %s/%i\n",
-		  node->asm_name (), node->order);
+	fprintf (dump_file, "Starting cycle with %s\n", node->dump_name ());
 
       vec<cgraph_node *> cycle_nodes = ipa_get_nodes_in_cycle (node);
 
@@ -763,8 +760,7 @@  propagate (void)
       FOR_EACH_VEC_ELT (cycle_nodes, x, w)
 	{
 	  if (dump_file && (dump_flags & TDF_DETAILS))
-	    fprintf (dump_file, "  Visiting %s/%i\n",
-		     w->asm_name (), w->order);
+	    fprintf (dump_file, "  Visiting %s\n", w->dump_asm_name ());
 	  get_read_write_all_from_node (w, read_all, write_all);
 	  if (read_all && write_all)
 	    break;
@@ -826,9 +822,7 @@  propagate (void)
           if (node->alias || !opt_for_fn (node->decl, flag_ipa_reference))
 	    continue;
 
-	  fprintf (dump_file,
-		   "\nFunction name:%s/%i:",
-		   node->asm_name (), node->order);
+	  fprintf (dump_file, "\nFunction name:%s:", node->dump_asm_name ());
 
 	  ipa_reference_vars_info_t node_info = get_reference_vars_info (node);
 	  ipa_reference_global_vars_info_t node_g = &node_info->global;
@@ -839,8 +833,7 @@  propagate (void)
 	      ipa_reference_vars_info_t w_ri = get_reference_vars_info (w);
 	      ipa_reference_local_vars_info_t w_l = &w_ri->local;
 	      if (w != node)
-		fprintf (dump_file, "\n  next cycle: %s/%i ",
-			 w->asm_name (), w->order);
+		fprintf (dump_file, "\n  next cycle: %s ", w->dump_asm_name ());
 	      fprintf (dump_file, "\n    locals read: ");
 	      dump_static_vars_set_to_file (dump_file, w_l->statics_read);
 	      fprintf (dump_file, "\n    locals written: ");
@@ -1120,8 +1113,8 @@  ipa_reference_read_optimization_summary (void)
 	      info->statics_not_written = BITMAP_ALLOC (&optimization_summary_obstack);
 	      if (dump_file)
 		fprintf (dump_file,
-			 "\nFunction name:%s/%i:\n  static not read:",
-			 node->asm_name (), node->order);
+			 "\nFunction name:%s:\n  static not read:",
+			 node->dump_asm_name ());
 
 	      /* Set the statics not read.  */
 	      v_count = streamer_read_hwi (ib);
diff --git a/gcc/ipa-utils.c b/gcc/ipa-utils.c
index 959e31a68e6..affc887bf45 100644
--- a/gcc/ipa-utils.c
+++ b/gcc/ipa-utils.c
@@ -406,9 +406,8 @@  ipa_merge_profiles (struct cgraph_node *dst,
     return;
   if (symtab->dump_file)
     {
-      fprintf (symtab->dump_file, "Merging profiles of %s/%i to %s/%i\n",
-	       xstrdup_for_dump (src->name ()), src->order,
-	       xstrdup_for_dump (dst->name ()), dst->order);
+      fprintf (symtab->dump_file, "Merging profiles of %s to %s\n",
+	       src->dump_name (), dst->dump_name ());
     }
   dst->count += src->count;
 
diff --git a/gcc/ipa.c b/gcc/ipa.c
index aa4181b6c2c..96b5f9346a2 100644
--- a/gcc/ipa.c
+++ b/gcc/ipa.c
@@ -230,10 +230,9 @@  walk_polymorphic_call_targets (hash_set<void *> *reachable_call_targets,
 	      else
 		locus = UNKNOWN_LOCATION;
 	      dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, locus,
-                               "devirtualizing call in %s/%i to %s/%i\n",
-                               edge->caller->name (), edge->caller->order,
-                               target->name (),
-                               target->order);
+			       "devirtualizing call in %s to %s\n",
+			       edge->caller->dump_name (),
+			       target->dump_name ());
 	    }
 	  edge = edge->make_direct (target);
 	  if (inline_summaries)
@@ -529,7 +528,7 @@  symbol_table::remove_unreachable_nodes (FILE *file)
       if (!node->aux)
 	{
 	  if (file)
-	    fprintf (file, " %s/%i", node->name (), node->order);
+	    fprintf (file, " %s", node->dump_name ());
 	  node->remove ();
 	  changed = true;
 	}
@@ -549,7 +548,7 @@  symbol_table::remove_unreachable_nodes (FILE *file)
 	  if (node->definition && !node->alias && !node->thunk.thunk_p)
 	    {
 	      if (file)
-		fprintf (file, " %s/%i", node->name (), node->order);
+		fprintf (file, " %s", node->dump_name ());
 	      node->body_removed = true;
 	      node->analyzed = false;
 	      node->definition = false;
@@ -616,12 +615,11 @@  symbol_table::remove_unreachable_nodes (FILE *file)
 	  while (vnode->iterate_direct_aliases (0, ref))
 	    {
 	      if (file)
-		fprintf (file, " %s/%i", ref->referred->name (),
-			 ref->referred->order);
+		fprintf (file, " %s", ref->referred->dump_name ());
 	      ref->referring->remove ();
 	    }
 	  if (file)
-	    fprintf (file, " %s/%i", vnode->name (), vnode->order);
+	    fprintf (file, " %s", vnode->dump_name ());
           vnext = next_variable (vnode);
 	  /* Signal removal to the debug machinery.  */
 	  if (! flag_wpa)
@@ -1391,8 +1389,8 @@  ipa_single_use (void)
 
 	  if (dump_file)
 	    {
-	      fprintf (dump_file, "Variable %s/%i is used by single function\n",
-		       var->name (), var->order);
+	      fprintf (dump_file, "Variable %s is used by single function\n",
+		       var->dump_name ());
 	    }
 	  var->used_by_single_function = true;
 	}
diff --git a/gcc/lto/lto-symtab.c b/gcc/lto/lto-symtab.c
index f61b1f80133..9fd94861c6d 100644
--- a/gcc/lto/lto-symtab.c
+++ b/gcc/lto/lto-symtab.c
@@ -45,11 +45,10 @@  lto_cgraph_replace_node (struct cgraph_node *node,
 
   if (symtab->dump_file)
     {
-      fprintf (symtab->dump_file, "Replacing cgraph node %s/%i by %s/%i"
+      fprintf (symtab->dump_file, "Replacing cgraph node %s by %s"
  	       " for symbol %s\n",
-	       node->name (), node->order,
-	       prevailing_node->name (),
-	       prevailing_node->order,
+	       node->dump_name (),
+	       prevailing_node->dump_name (),
 	       IDENTIFIER_POINTER ((*targetm.asm_out.mangle_assembler_name)
 		 (IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (node->decl)))));
     }
diff --git a/gcc/predict.c b/gcc/predict.c
index 0fc9fc5c466..ac35fa41129 100644
--- a/gcc/predict.c
+++ b/gcc/predict.c
@@ -3163,9 +3163,9 @@  drop_profile (struct cgraph_node *node, gcov_type call_count)
 
   if (dump_file)
     fprintf (dump_file,
-             "Dropping 0 profile for %s/%i. %s based on calls.\n",
-             node->name (), node->order,
-             hot ? "Function is hot" : "Function is normal");
+	     "Dropping 0 profile for %s. %s based on calls.\n",
+	     node->dump_name (),
+	     hot ? "Function is hot" : "Function is normal");
   /* We only expect to miss profiles for functions that are reached
      via non-zero call edges in cases where the function may have
      been linked from another module or library (COMDATs and extern
@@ -3181,12 +3181,12 @@  drop_profile (struct cgraph_node *node, gcov_type call_count)
         {
           if (dump_file)
             fprintf (dump_file,
-                     "Missing counts for called function %s/%i\n",
-                     node->name (), node->order);
+		     "Missing counts for called function %s\n",
+		     node->dump_name ());
         }
       else
-        warning (0, "Missing counts for called function %s/%i",
-                 node->name (), node->order);
+	warning (0, "Missing counts for called function %s",
+		 node->dump_name ());
     }
 
   profile_status_for_fn (fn)
diff --git a/gcc/symtab.c b/gcc/symtab.c
index 13dca7f0dbd..0145910023f 100644
--- a/gcc/symtab.c
+++ b/gcc/symtab.c
@@ -522,6 +522,31 @@  symtab_node::name () const
   return lang_hooks.decl_printable_name (decl, 2);
 }
 
+const char *
+symtab_node::get_dump_name (bool asm_name_p) const
+{
+#define EXTRA 16
+  const char *fname = asm_name_p ? asm_name () : name ();
+  unsigned l = strlen (fname);
+
+  char *s = (char *)ggc_internal_cleared_alloc (l + EXTRA);
+  snprintf (s, l + EXTRA, "%s/%d", fname, order);
+
+  return s;
+}
+
+const char *
+symtab_node::dump_name () const
+{
+  return get_dump_name (false);
+}
+
+const char *
+symtab_node::dump_asm_name () const
+{
+  return get_dump_name (true);
+}
+
 /* Return ipa reference from this symtab_node to
    REFERED_NODE or REFERED_VARPOOL_NODE. USE_TYPE specify type
    of the use.  */
@@ -751,9 +776,8 @@  symtab_node::dump_references (FILE *file)
   int i;
   for (i = 0; iterate_reference (i, ref); i++)
     {
-      fprintf (file, "%s/%i (%s)",
-               ref->referred->asm_name (),
-               ref->referred->order,
+      fprintf (file, "%s (%s)",
+	       ref->referred->dump_asm_name (),
 	       ipa_ref_use_name [ref->use]);
       if (ref->speculative)
 	fprintf (file, " (speculative)");
@@ -770,9 +794,8 @@  symtab_node::dump_referring (FILE *file)
   int i;
   for (i = 0; iterate_referring(i, ref); i++)
     {
-      fprintf (file, "%s/%i (%s)",
-               ref->referring->asm_name (),
-               ref->referring->order,
+      fprintf (file, "%s (%s)",
+	       ref->referring->dump_asm_name (),
 	       ipa_ref_use_name [ref->use]);
       if (ref->speculative)
 	fprintf (file, " (speculative)");
@@ -791,7 +814,7 @@  symtab_node::dump_base (FILE *f)
     "default", "protected", "hidden", "internal"
   };
 
-  fprintf (f, "%s/%i (%s)", asm_name (), order, name ());
+  fprintf (f, "%s (%s)", dump_asm_name (), name ());
   dump_addr (f, " @", (void *)this);
   fprintf (f, "\n  Type: %s", symtab_type_names[type]);
 
@@ -874,9 +897,8 @@  symtab_node::dump_base (FILE *f)
   fprintf (f, "\n");
   
   if (same_comdat_group)
-    fprintf (f, "  Same comdat group as: %s/%i\n",
-	     same_comdat_group->asm_name (),
-	     same_comdat_group->order);
+    fprintf (f, "  Same comdat group as: %s\n",
+	     same_comdat_group->dump_asm_name ());
   if (next_sharing_asm_name)
     fprintf (f, "  next sharing asm name: %i\n",
 	     next_sharing_asm_name->order);
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 84320642075..920950d1619 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -5190,11 +5190,8 @@  convert_callers_for_node (struct cgraph_node *node,
       push_cfun (DECL_STRUCT_FUNCTION (cs->caller->decl));
 
       if (dump_file)
-	fprintf (dump_file, "Adjusting call %s/%i -> %s/%i\n",
-		 xstrdup_for_dump (cs->caller->name ()),
-		 cs->caller->order,
-		 xstrdup_for_dump (cs->callee->name ()),
-		 cs->callee->order);
+	fprintf (dump_file, "Adjusting call %s -> %s\n",
+		 cs->caller->dump_name (), cs->callee->dump_name ());
 
       ipa_modify_call_arguments (cs, cs->call_stmt, *adjustments);
 
diff --git a/gcc/value-prof.c b/gcc/value-prof.c
index 1ce0fda0ed2..7f1574af70d 100644
--- a/gcc/value-prof.c
+++ b/gcc/value-prof.c
@@ -1236,12 +1236,10 @@  init_node_map (bool local)
 	      {
 		if (dump_file)
 		  fprintf (dump_file, "Local profile-id %i conflict"
-			   " with nodes %s/%i %s/%i\n",
+			   " with nodes %s %s\n",
 			   n->profile_id,
-			   n->name (),
-			   n->order,
-			   (*val)->name (),
-			   (*val)->order);
+			   n->dump_name (),
+			   (*val)->dump_name ());
 		n->profile_id = (n->profile_id + 1) & 0x7fffffff;
 	      }
 	  }
@@ -1249,21 +1247,18 @@  init_node_map (bool local)
 	  {
 	    if (dump_file)
 	      fprintf (dump_file,
-		       "Node %s/%i has no profile-id"
+		       "Node %s has no profile-id"
 		       " (profile feedback missing?)\n",
-		       n->name (),
-		       n->order);
+		       n->dump_name ());
 	    continue;
 	  }
 	else if ((val = cgraph_node_map->get (n->profile_id)))
 	  {
 	    if (dump_file)
 	      fprintf (dump_file,
-		       "Node %s/%i has IP profile-id %i conflict. "
+		       "Node %s has IP profile-id %i conflict. "
 		       "Giving up.\n",
-		       n->name (),
-		       n->order,
-		       n->profile_id);
+		       n->dump_name (), n->profile_id);
 	    *val = NULL;
 	    continue;
 	  }
-- 
2.12.2