From: Jan Hubicka <hubicka@ucw.cz>
To: Jan Hubicka <hubicka@ucw.cz>
Cc: Richard Biener <rguenther@suse.de>, gcc-patches@gcc.gnu.org
Subject: Re: Use separate sections to stream non-trivial constructors
Date: Fri, 11 Jul 2014 18:42:00 -0000 [thread overview]
Message-ID: <20140711184205.GB27781@kam.mff.cuni.cz> (raw)
In-Reply-To: <20140711174741.GA27781@kam.mff.cuni.cz>
Hi
this is patch i am going to commit after testing. It removes DECL_INIT_IO
timevar that guards only one variable set (so hardly measure anything) and
moves GIMPLE_IN to proper place. It also adds CTORS_IN and CTORS_OUT.
I get:
ipa lto gimple out : 0.37 ( 0%) usr 0.21 ( 3%) sys 0.64 ( 1%) wall 0 kB ( 0%) ggc
ipa lto decl in : 23.56 (26%) usr 1.24 (15%) sys 24.81 (23%) wall 2429174 kB (60%) ggc
ipa lto decl out : 5.58 ( 6%) usr 0.34 ( 4%) sys 5.94 ( 5%) wall 0 kB ( 0%) ggc
ipa lto constructors in : 0.34 ( 0%) usr 0.10 ( 1%) sys 0.47 ( 0%) wall 14864 kB ( 0%) ggc
ipa lto constructors out: 0.06 ( 0%) usr 0.01 ( 0%) sys 0.01 ( 0%) wall 0 kB ( 0%) ggc
ipa lto cgraph I/O : 1.20 ( 1%) usr 0.25 ( 3%) sys 1.45 ( 1%) wall 437317 kB (11%) ggc
for Firefox WPA that is surprisingly good. We traded about 400MB for 14MB. So perhaps I do not
need to care about not bringing in all vtables needed for devirt machinery.
honza
* lto.c (read_cgraph_and_symbols): Do not push DECL_INIT_IO
timevar
(materialize_cgraph): Do not push GIMPLE_IN timevar.
* timevar.def (TV_IPA_LTO_DECL_INIT_IO): Remove.
(TV_IPA_LTO_CTORS_IN, TV_IPA_LTO_CTORS_OUT): New timevar.
* cgraph.c (cgraph_get_body): Push GIMPLE_IN timevar.
(varpool_get_constructor): Push CTORS_IN timevar.
* lto-streamer-out.c (lto_output): Push TV_IPA_LTO_CTORS_OUT
timevar.
Index: lto/lto.c
===================================================================
--- lto/lto.c (revision 212467)
+++ lto/lto.c (working copy)
@@ -3094,12 +3094,9 @@ read_cgraph_and_symbols (unsigned nfiles
timevar_pop (TV_IPA_LTO_CGRAPH_MERGE);
- timevar_push (TV_IPA_LTO_DECL_INIT_IO);
-
/* Indicate that the cgraph is built and ready. */
cgraph_function_flags_ready = true;
- timevar_pop (TV_IPA_LTO_DECL_INIT_IO);
ggc_free (all_file_decl_data);
all_file_decl_data = NULL;
}
@@ -3117,9 +3114,6 @@ materialize_cgraph (void)
fprintf (stderr,
flag_wpa ? "Materializing decls:" : "Reading function bodies:");
- /* Now that we have input the cgraph, we need to clear all of the aux
- nodes and read the functions if we are not running in WPA mode. */
- timevar_push (TV_IPA_LTO_GIMPLE_IN);
FOR_EACH_FUNCTION (node)
{
@@ -3130,7 +3124,6 @@ materialize_cgraph (void)
}
}
- timevar_pop (TV_IPA_LTO_GIMPLE_IN);
/* Start the appropriate timer depending on the mode that we are
operating in. */
Index: timevar.def
===================================================================
--- timevar.def (revision 212457)
+++ timevar.def (working copy)
@@ -77,7 +77,8 @@ DEFTIMEVAR (TV_IPA_LTO_GIMPLE_IN , "
DEFTIMEVAR (TV_IPA_LTO_GIMPLE_OUT , "ipa lto gimple out")
DEFTIMEVAR (TV_IPA_LTO_DECL_IN , "ipa lto decl in")
DEFTIMEVAR (TV_IPA_LTO_DECL_OUT , "ipa lto decl out")
-DEFTIMEVAR (TV_IPA_LTO_DECL_INIT_IO , "ipa lto decl init I/O")
+DEFTIMEVAR (TV_IPA_LTO_CTORS_IN , "ipa lto constructors in")
+DEFTIMEVAR (TV_IPA_LTO_CTORS_OUT , "ipa lto constructors out")
DEFTIMEVAR (TV_IPA_LTO_CGRAPH_IO , "ipa lto cgraph I/O")
DEFTIMEVAR (TV_IPA_LTO_DECL_MERGE , "ipa lto decl merge")
DEFTIMEVAR (TV_IPA_LTO_CGRAPH_MERGE , "ipa lto cgraph merge")
Index: cgraph.c
===================================================================
--- cgraph.c (revision 212457)
+++ cgraph.c (working copy)
@@ -3053,6 +3053,8 @@ cgraph_get_body (struct cgraph_node *nod
gcc_assert (in_lto_p);
+ timevar_push (TV_IPA_LTO_GIMPLE_IN);
+
file_data = node->lto_file_data;
name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
@@ -3076,6 +3078,9 @@ cgraph_get_body (struct cgraph_node *nod
lto_free_section_data (file_data, LTO_section_function_body, name,
data, len);
lto_free_function_in_decl_state_for_node (node);
+
+ timevar_pop (TV_IPA_LTO_GIMPLE_IN);
+
return true;
}
Index: varpool.c
===================================================================
--- varpool.c (revision 212467)
+++ varpool.c (working copy)
@@ -268,6 +268,8 @@ varpool_get_constructor (struct varpool_
|| !in_lto_p)
return DECL_INITIAL (node->decl);
+ timevar_push (TV_IPA_LTO_CTORS_IN);
+
file_data = node->lto_file_data;
name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (decl));
@@ -286,6 +288,7 @@ varpool_get_constructor (struct varpool_
lto_free_section_data (file_data, LTO_section_function_body, name,
data, len);
lto_free_function_in_decl_state_for_node (node);
+ timevar_pop (TV_IPA_LTO_CTORS_IN);
return DECL_INITIAL (node->decl);
}
Index: lto-streamer-out.c
===================================================================
--- lto-streamer-out.c (revision 212467)
+++ lto-streamer-out.c (working copy)
@@ -2115,6 +2115,7 @@ lto_output (void)
&& lto_symtab_encoder_encode_initializer_p (encoder, node)
&& !node->alias)
{
+ timevar_push (TV_IPA_LTO_CTORS_OUT);
#ifdef ENABLE_CHECKING
gcc_assert (!bitmap_bit_p (output, DECL_UID (node->decl)));
bitmap_set_bit (output, DECL_UID (node->decl));
@@ -2129,6 +2130,7 @@ lto_output (void)
gcc_assert (lto_get_out_decl_state () == decl_state);
lto_pop_out_decl_state ();
lto_record_function_out_decl_state (node->decl, decl_state);
+ timevar_pop (TV_IPA_LTO_CTORS_OUT);
}
}
}
prev parent reply other threads:[~2014-07-11 18:42 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-11 9:18 Jan Hubicka
2014-07-11 11:32 ` Richard Biener
2014-07-11 11:53 ` Jan Hubicka
2014-07-11 12:00 ` Richard Biener
2014-07-11 12:09 ` Jan Hubicka
2014-07-11 17:47 ` Jan Hubicka
2014-07-11 18:42 ` Jan Hubicka [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140711184205.GB27781@kam.mff.cuni.cz \
--to=hubicka@ucw.cz \
--cc=gcc-patches@gcc.gnu.org \
--cc=rguenther@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).