Hi,
input_functions ends with building virtual SSA which is unnecesary
excercise when function is only loaded to be inlined, compared by
ipa-icf or its profile merged.
This patch moves the SSA update later before we start working on the
function body.
lto-bootstrapped/regtested x86_64-linux, OK?
Honza
* cgraph.c: Inlcude tree-into-ssa.h
(cgraph_node::get_body): Update SSA.
* cgraphunit.c (cgraph_node::expand): Likewise.
* lto-streamer-in.c (input_function): Do not update SSA.
Index: cgraph.c
===================================================================
--- cgraph.c (revision 278904)
+++ cgraph.c (working copy)
@@ -62,6 +62,7 @@ along with GCC; see the file COPYING3.
#include "stringpool.h"
#include "attribs.h"
#include "selftest.h"
+#include "tree-into-ssa.h"
/* FIXME: Only for PROP_loops, but cgraph shouldn't have to know about this.
*/
#include "tree-pass.h"
@@ -3599,6 +3605,8 @@ cgraph_node::get_body (void)
set_dump_file (NULL);
push_cfun (DECL_STRUCT_FUNCTION (decl));
+
+ update_ssa (TODO_update_ssa_only_virtuals);
execute_all_ipa_transforms (true);
cgraph_edge::rebuild_edges ();
free_dominance_info (CDI_DOMINATORS);
Index: cgraphunit.c
===================================================================
--- cgraphunit.c (revision 278904)
+++ cgraphunit.c (working copy)
@@ -2268,6 +2268,7 @@ cgraph_node::expand (void)
gcc_assert (DECL_STRUCT_FUNCTION (decl));
push_cfun (DECL_STRUCT_FUNCTION (decl));
+ update_ssa (TODO_update_ssa_only_virtuals);
init_function_start (decl);
gimple_register_cfg_hooks ();
Index: lto-streamer-in.c
===================================================================
--- lto-streamer-in.c (revision 278904)
+++ lto-streamer-in.c (working copy)
@@ -1223,7 +1223,6 @@ input_function (tree fn_decl, class data
fixup_call_stmt_edges (node, stmts);
execute_all_ipa_stmt_fixups (node, stmts);
- update_ssa (TODO_update_ssa_only_virtuals);
free_dominance_info (CDI_DOMINATORS);
free_dominance_info (CDI_POST_DOMINATORS);
free (stmts);