[PATCH] Two small optimizations in dwarf2out

Richard Guenther rguenther@suse.de
Sat Mar 27 11:16:00 GMT 2010


On Fri, 26 Mar 2010, Jakub Jelinek wrote:

> Hi!
> 
> The following patch removes an unused (only ever set) field from struct
> var_loc_node and drops the decl_loc_table hash table content earlier (after
> debug info for the current function is emitted, instead of at the start of
> final pass for next function.
> Both of these should save some memory for functions with lots of
> VAR_LOCATION notes.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

Ok.

THanks,
Richard.

> 2010-03-26  Jakub Jelinek  <jakub@redhat.com>
> 
> 	* dwarf2out.c (dwarf2_debug_hooks): Use dwarf2out_function_decl
> 	instead of dwarf2out_decl.
> 	(struct var_loc_node): Remove section_label field.
> 	(dwarf2out_function_decl): New function.
> 	(dwarf2out_var_location): Don't set section_label field.
> 	(dwarf2out_begin_function): Don't empty decl_loc_table here.
> 
> --- gcc/dwarf2out.c.jj	2010-03-26 22:00:32.000000000 +0100
> +++ gcc/dwarf2out.c	2010-03-26 22:08:21.000000000 +0100
> @@ -5410,6 +5410,7 @@ static void dwarf2out_define (unsigned i
>  static void dwarf2out_undef (unsigned int, const char *);
>  static void dwarf2out_start_source_file (unsigned, const char *);
>  static void dwarf2out_end_source_file (unsigned);
> +static void dwarf2out_function_decl (tree);
>  static void dwarf2out_begin_block (unsigned, unsigned);
>  static void dwarf2out_end_block (unsigned, unsigned);
>  static bool dwarf2out_ignore_block (const_tree);
> @@ -5447,7 +5448,7 @@ const struct gcc_debug_hooks dwarf2_debu
>    dwarf2out_end_epilogue,
>    dwarf2out_begin_function,
>    debug_nothing_int,		/* end_function */
> -  dwarf2out_decl,		/* function_decl */
> +  dwarf2out_function_decl,	/* function_decl */
>    dwarf2out_global_decl,
>    dwarf2out_type_decl,		/* type_decl */
>    dwarf2out_imported_module_or_decl,
> @@ -5731,7 +5732,6 @@ DEF_VEC_ALLOC_O(die_arg_entry,gc);
>  struct GTY ((chain_next ("%h.next"))) var_loc_node {
>    rtx GTY (()) var_loc_note;
>    const char * GTY (()) label;
> -  const char * GTY (()) section_label;
>    struct var_loc_node * GTY (()) next;
>  };
>  
> @@ -19925,6 +19925,16 @@ dwarf2out_decl (tree decl)
>    gen_decl_die (decl, NULL, context_die);
>  }
>  
> +/* Write the debugging output for DECL.  */
> +
> +static void
> +dwarf2out_function_decl (tree decl)
> +{
> +  dwarf2out_decl (decl);
> +
> +  htab_empty (decl_loc_table);
> +}
> +
>  /* Output a marker (i.e. a label) for the beginning of the generated code for
>     a lexical block.  */
>  
> @@ -20317,11 +20327,6 @@ dwarf2out_var_location (rtx loc_note)
>        newloc->label = last_postcall_label;
>      }
>  
> -  if (cfun && in_cold_section_p)
> -    newloc->section_label = crtl->subsections.cold_section_label;
> -  else
> -    newloc->section_label = text_section_label;
> -
>    last_var_location_insn = next_real;
>    last_in_cold_section_p = in_cold_section_p;
>  }
> @@ -20334,8 +20339,6 @@ dwarf2out_var_location (rtx loc_note)
>  static void
>  dwarf2out_begin_function (tree fun)
>  {
> -  htab_empty (decl_loc_table);
> -
>    if (function_section (fun) != text_section)
>      have_multiple_function_sections = true;
>  
> 
> 	Jakub
> 
> 

-- 
Richard Guenther <rguenther@suse.de>
Novell / SUSE Labs
SUSE LINUX Products GmbH - Nuernberg - AG Nuernberg - HRB 16746 - GF: Markus Rex



More information about the Gcc-patches mailing list