public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Last bit from Early LTO debug merge -- move break_out_includes
@ 2016-09-27 13:49 Richard Biener
  2016-09-27 15:41 ` Jason Merrill
  0 siblings, 1 reply; 3+ messages in thread
From: Richard Biener @ 2016-09-27 13:49 UTC (permalink / raw)
  To: gcc-patches; +Cc: jason


This is moving break_out_includes (aka -feliminate-dwarf2-dups handling)
to early finish.  It requires some massaging with the way we pick
up its results which previously "conveniently" ended up in the
limbo list but after moving to early will be scrapped off by
late finish doing a limbo list flush (where we just drop all CU DIEs
thinking it can only be comp_unit_die () itself).  Thus this patch
adds a cu_die_list list for it (much similar to the comdat one we already
have).

Eventually -feliminate-dwarf2-dups might die anyway(?), its testing
coverage is very low and it's declared broken for C++.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.

Ok for trunk?

Thanks,
Richard.

2016-09-27  Richard Biener  <rguenther@suse.de>

	* dwarf2out.c (cu_die_list): New global.
	(dwarf2out_finish): Walk cu_die_list instead of limbo DIEs.  Add
	main_comp_unit_die to cu_die_list if we created it.
	Move break_out_includes ...
	(dwarf2out_early_finish): ... here.  Push created CU DIEs onto
	the cu_die_list.

diff -u gcc/dwarf2out.c gcc/dwarf2out.c
--- gcc/dwarf2out.c	(working copy)
+++ gcc/dwarf2out.c	(working copy)
@@ -2866,6 +2866,9 @@
 /* A list of type DIEs that have been separated into comdat sections.  */
 static GTY(()) comdat_type_node *comdat_type_list;
 
+/* A list of CU DIEs that have been separated.  */
+static GTY(()) limbo_die_node *cu_die_list;
+
 /* A list of DIEs with a NULL parent waiting to be relocated.  */
 static GTY(()) limbo_die_node *limbo_die_list;
 
@@ -27855,11 +27858,6 @@
   resolve_addr (comp_unit_die ());
   move_marked_base_types ();
 
-  /* Generate separate CUs for each of the include files we've seen.
-     They will go into limbo_die_list.  */
-  if (flag_eliminate_dwarf2_dups)
-    break_out_includes (comp_unit_die ());
-
   /* Initialize sections and labels used for actual assembler output.  */
   init_sections_and_labels ();
 
@@ -27867,7 +27865,7 @@
      have children.  */
   add_sibling_attributes (comp_unit_die ());
   limbo_die_node *node;
-  for (node = limbo_die_list; node; node = node->next)
+  for (node = cu_die_list; node; node = node->next)
     add_sibling_attributes (node->die);
   for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
     add_sibling_attributes (ctnode->root_die);
@@ -27876,7 +27874,15 @@
      skeleton compile_unit DIE that remains in the .o, while
      most attributes go in the DWO compile_unit_die.  */
   if (dwarf_split_debug_info)
-    main_comp_unit_die = gen_compile_unit_die (NULL);
+    {
+      limbo_die_node *cu;
+      main_comp_unit_die = gen_compile_unit_die (NULL);
+      cu = limbo_die_list;
+      gcc_assert (cu->die == main_comp_unit_die);
+      limbo_die_list = limbo_die_list->next;
+      cu->next = cu_die_list;
+      cu_die_list = cu;
+    }
   else
     main_comp_unit_die = comp_unit_die ();
 
@@ -27988,7 +27994,7 @@
 
   /* Output all of the compilation units.  We put the main one last so that
      the offsets are available to output_pubnames.  */
-  for (node = limbo_die_list; node; node = node->next)
+  for (node = cu_die_list; node; node = node->next)
     output_comp_unit (node->die, 0);
 
   hash_table<comdat_type_hasher> comdat_type_table (100);
@@ -28217,6 +28223,21 @@
       prune_unused_types ();
     }
 
+  /* Generate separate CUs for each of the include files we've seen.
+     They will go into limbo_die_list and from there to cu_die_list.  */
+  if (flag_eliminate_dwarf2_dups)
+    {
+      gcc_assert (limbo_die_list == NULL);
+      break_out_includes (comp_unit_die ());
+      limbo_die_node *cu;
+      while ((cu = limbo_die_list))
+	{
+	  limbo_die_list = cu->next;
+	  cu->next = cu_die_list;
+	  cu_die_list = cu;
+	}
+    }
+
   /* The early debug phase is now finished.  */
   early_dwarf_finished = true;
 }

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Last bit from Early LTO debug merge -- move break_out_includes
  2016-09-27 13:49 [PATCH] Last bit from Early LTO debug merge -- move break_out_includes Richard Biener
@ 2016-09-27 15:41 ` Jason Merrill
  2016-09-28  8:40   ` Richard Biener
  0 siblings, 1 reply; 3+ messages in thread
From: Jason Merrill @ 2016-09-27 15:41 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches List

OK.

On Tue, Sep 27, 2016 at 9:47 AM, Richard Biener <rguenther@suse.de> wrote:
>
> This is moving break_out_includes (aka -feliminate-dwarf2-dups handling)
> to early finish.  It requires some massaging with the way we pick
> up its results which previously "conveniently" ended up in the
> limbo list but after moving to early will be scrapped off by
> late finish doing a limbo list flush (where we just drop all CU DIEs
> thinking it can only be comp_unit_die () itself).  Thus this patch
> adds a cu_die_list list for it (much similar to the comdat one we already
> have).
>
> Eventually -feliminate-dwarf2-dups might die anyway(?), its testing
> coverage is very low and it's declared broken for C++.
>
> Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
>
> Ok for trunk?
>
> Thanks,
> Richard.
>
> 2016-09-27  Richard Biener  <rguenther@suse.de>
>
>         * dwarf2out.c (cu_die_list): New global.
>         (dwarf2out_finish): Walk cu_die_list instead of limbo DIEs.  Add
>         main_comp_unit_die to cu_die_list if we created it.
>         Move break_out_includes ...
>         (dwarf2out_early_finish): ... here.  Push created CU DIEs onto
>         the cu_die_list.
>
> diff -u gcc/dwarf2out.c gcc/dwarf2out.c
> --- gcc/dwarf2out.c     (working copy)
> +++ gcc/dwarf2out.c     (working copy)
> @@ -2866,6 +2866,9 @@
>  /* A list of type DIEs that have been separated into comdat sections.  */
>  static GTY(()) comdat_type_node *comdat_type_list;
>
> +/* A list of CU DIEs that have been separated.  */
> +static GTY(()) limbo_die_node *cu_die_list;
> +
>  /* A list of DIEs with a NULL parent waiting to be relocated.  */
>  static GTY(()) limbo_die_node *limbo_die_list;
>
> @@ -27855,11 +27858,6 @@
>    resolve_addr (comp_unit_die ());
>    move_marked_base_types ();
>
> -  /* Generate separate CUs for each of the include files we've seen.
> -     They will go into limbo_die_list.  */
> -  if (flag_eliminate_dwarf2_dups)
> -    break_out_includes (comp_unit_die ());
> -
>    /* Initialize sections and labels used for actual assembler output.  */
>    init_sections_and_labels ();
>
> @@ -27867,7 +27865,7 @@
>       have children.  */
>    add_sibling_attributes (comp_unit_die ());
>    limbo_die_node *node;
> -  for (node = limbo_die_list; node; node = node->next)
> +  for (node = cu_die_list; node; node = node->next)
>      add_sibling_attributes (node->die);
>    for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
>      add_sibling_attributes (ctnode->root_die);
> @@ -27876,7 +27874,15 @@
>       skeleton compile_unit DIE that remains in the .o, while
>       most attributes go in the DWO compile_unit_die.  */
>    if (dwarf_split_debug_info)
> -    main_comp_unit_die = gen_compile_unit_die (NULL);
> +    {
> +      limbo_die_node *cu;
> +      main_comp_unit_die = gen_compile_unit_die (NULL);
> +      cu = limbo_die_list;
> +      gcc_assert (cu->die == main_comp_unit_die);
> +      limbo_die_list = limbo_die_list->next;
> +      cu->next = cu_die_list;
> +      cu_die_list = cu;
> +    }
>    else
>      main_comp_unit_die = comp_unit_die ();
>
> @@ -27988,7 +27994,7 @@
>
>    /* Output all of the compilation units.  We put the main one last so that
>       the offsets are available to output_pubnames.  */
> -  for (node = limbo_die_list; node; node = node->next)
> +  for (node = cu_die_list; node; node = node->next)
>      output_comp_unit (node->die, 0);
>
>    hash_table<comdat_type_hasher> comdat_type_table (100);
> @@ -28217,6 +28223,21 @@
>        prune_unused_types ();
>      }
>
> +  /* Generate separate CUs for each of the include files we've seen.
> +     They will go into limbo_die_list and from there to cu_die_list.  */
> +  if (flag_eliminate_dwarf2_dups)
> +    {
> +      gcc_assert (limbo_die_list == NULL);
> +      break_out_includes (comp_unit_die ());
> +      limbo_die_node *cu;
> +      while ((cu = limbo_die_list))
> +       {
> +         limbo_die_list = cu->next;
> +         cu->next = cu_die_list;
> +         cu_die_list = cu;
> +       }
> +    }
> +
>    /* The early debug phase is now finished.  */
>    early_dwarf_finished = true;
>  }

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] Last bit from Early LTO debug merge -- move break_out_includes
  2016-09-27 15:41 ` Jason Merrill
@ 2016-09-28  8:40   ` Richard Biener
  0 siblings, 0 replies; 3+ messages in thread
From: Richard Biener @ 2016-09-28  8:40 UTC (permalink / raw)
  To: Jason Merrill; +Cc: gcc-patches List

On Tue, 27 Sep 2016, Jason Merrill wrote:

> OK.

May I ping https://gcc.gnu.org/ml/gcc-patches/2016-09/msg01835.html then
on which this depends?

Thanks,
Richard.

> On Tue, Sep 27, 2016 at 9:47 AM, Richard Biener <rguenther@suse.de> wrote:
> >
> > This is moving break_out_includes (aka -feliminate-dwarf2-dups handling)
> > to early finish.  It requires some massaging with the way we pick
> > up its results which previously "conveniently" ended up in the
> > limbo list but after moving to early will be scrapped off by
> > late finish doing a limbo list flush (where we just drop all CU DIEs
> > thinking it can only be comp_unit_die () itself).  Thus this patch
> > adds a cu_die_list list for it (much similar to the comdat one we already
> > have).
> >
> > Eventually -feliminate-dwarf2-dups might die anyway(?), its testing
> > coverage is very low and it's declared broken for C++.
> >
> > Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
> >
> > Ok for trunk?
> >
> > Thanks,
> > Richard.
> >
> > 2016-09-27  Richard Biener  <rguenther@suse.de>
> >
> >         * dwarf2out.c (cu_die_list): New global.
> >         (dwarf2out_finish): Walk cu_die_list instead of limbo DIEs.  Add
> >         main_comp_unit_die to cu_die_list if we created it.
> >         Move break_out_includes ...
> >         (dwarf2out_early_finish): ... here.  Push created CU DIEs onto
> >         the cu_die_list.
> >
> > diff -u gcc/dwarf2out.c gcc/dwarf2out.c
> > --- gcc/dwarf2out.c     (working copy)
> > +++ gcc/dwarf2out.c     (working copy)
> > @@ -2866,6 +2866,9 @@
> >  /* A list of type DIEs that have been separated into comdat sections.  */
> >  static GTY(()) comdat_type_node *comdat_type_list;
> >
> > +/* A list of CU DIEs that have been separated.  */
> > +static GTY(()) limbo_die_node *cu_die_list;
> > +
> >  /* A list of DIEs with a NULL parent waiting to be relocated.  */
> >  static GTY(()) limbo_die_node *limbo_die_list;
> >
> > @@ -27855,11 +27858,6 @@
> >    resolve_addr (comp_unit_die ());
> >    move_marked_base_types ();
> >
> > -  /* Generate separate CUs for each of the include files we've seen.
> > -     They will go into limbo_die_list.  */
> > -  if (flag_eliminate_dwarf2_dups)
> > -    break_out_includes (comp_unit_die ());
> > -
> >    /* Initialize sections and labels used for actual assembler output.  */
> >    init_sections_and_labels ();
> >
> > @@ -27867,7 +27865,7 @@
> >       have children.  */
> >    add_sibling_attributes (comp_unit_die ());
> >    limbo_die_node *node;
> > -  for (node = limbo_die_list; node; node = node->next)
> > +  for (node = cu_die_list; node; node = node->next)
> >      add_sibling_attributes (node->die);
> >    for (ctnode = comdat_type_list; ctnode != NULL; ctnode = ctnode->next)
> >      add_sibling_attributes (ctnode->root_die);
> > @@ -27876,7 +27874,15 @@
> >       skeleton compile_unit DIE that remains in the .o, while
> >       most attributes go in the DWO compile_unit_die.  */
> >    if (dwarf_split_debug_info)
> > -    main_comp_unit_die = gen_compile_unit_die (NULL);
> > +    {
> > +      limbo_die_node *cu;
> > +      main_comp_unit_die = gen_compile_unit_die (NULL);
> > +      cu = limbo_die_list;
> > +      gcc_assert (cu->die == main_comp_unit_die);
> > +      limbo_die_list = limbo_die_list->next;
> > +      cu->next = cu_die_list;
> > +      cu_die_list = cu;
> > +    }
> >    else
> >      main_comp_unit_die = comp_unit_die ();
> >
> > @@ -27988,7 +27994,7 @@
> >
> >    /* Output all of the compilation units.  We put the main one last so that
> >       the offsets are available to output_pubnames.  */
> > -  for (node = limbo_die_list; node; node = node->next)
> > +  for (node = cu_die_list; node; node = node->next)
> >      output_comp_unit (node->die, 0);
> >
> >    hash_table<comdat_type_hasher> comdat_type_table (100);
> > @@ -28217,6 +28223,21 @@
> >        prune_unused_types ();
> >      }
> >
> > +  /* Generate separate CUs for each of the include files we've seen.
> > +     They will go into limbo_die_list and from there to cu_die_list.  */
> > +  if (flag_eliminate_dwarf2_dups)
> > +    {
> > +      gcc_assert (limbo_die_list == NULL);
> > +      break_out_includes (comp_unit_die ());
> > +      limbo_die_node *cu;
> > +      while ((cu = limbo_die_list))
> > +       {
> > +         limbo_die_list = cu->next;
> > +         cu->next = cu_die_list;
> > +         cu_die_list = cu;
> > +       }
> > +    }
> > +
> >    /* The early debug phase is now finished.  */
> >    early_dwarf_finished = true;
> >  }
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2016-09-28  8:04 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-27 13:49 [PATCH] Last bit from Early LTO debug merge -- move break_out_includes Richard Biener
2016-09-27 15:41 ` Jason Merrill
2016-09-28  8:40   ` Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).