diff options
author | Jan Hubicka <jh@suse.cz> | 2020-10-22 06:33:34 +0200 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2020-10-22 06:33:34 +0200 |
commit | 89576d863a879c4986867f991a6ac493106a9879 (patch) | |
tree | 507d7d68dfee1f4104d461f63007a79d5f2123d2 /gcc/cgraphunit.c | |
parent | 52e7f09698ecb5ba6d9e921ffe912d1f66158e9e (diff) | |
download | gcc-89576d863a879c4986867f991a6ac493106a9879.zip gcc-89576d863a879c4986867f991a6ac493106a9879.tar.gz gcc-89576d863a879c4986867f991a6ac493106a9879.tar.bz2 |
Move nested function info out of cgraph_node
this patch moves nested function information out of symbol table (to a summary).
This saves memory (especially at WPA time) and also makes nested function
support more contained.
gcc/ChangeLog:
2020-10-22 Jan Hubicka <hubicka@ucw.cz>
* cgraph.c: Include tree-nested.h
(cgraph_node::create): Call maybe_record_nested_function.
(cgraph_node::remove): Do not remove function from nested function
infos.
(cgraph_node::dump): Update.
(cgraph_node::unnest): Move to tree-nested.c
(cgraph_node::verify_node): Update.
(cgraph_c_finalize): Call nested_function_info::release.
* cgraph.h (struct symtab_node): Remove nested function info.
* cgraphclones.c (cgraph_node::create_clone): Do not clone nested
function info.
* cgraphunit.c (cgraph_node::analyze): Update.
(cgraph_node::expand): Do not worry about nested functions; they are
lowered.
(symbol_table::finalize_compilation_unit): Call
nested_function_info::release.
* gimplify.c: Include tree-nested.h
(unshare_body): Update.
(unvisit_body): Update.
* omp-offload.c (omp_discover_implicit_declare_target): Update.
* tree-nested.c: Include alloc-pool.h, tree-nested.h, symbol-summary.h
(nested_function_sum): New static variable.
(nested_function_info::get): New member function.
(nested_function_info::get_create): New member function.
(unnest_function): New function.
(nested_function_info::~nested_function_info): New member function.
(nested_function_info::release): New function.
(maybe_record_nested_function): New function.
(lookup_element_for_decl): Update.
(check_for_nested_with_variably_modified): Update.
(create_nesting_tree): Update.
(unnest_nesting_tree_1): Update.
(gimplify_all_functions): Update.
(lower_nested_functions): Update.
* tree-nested.h (class nested_function_info): New class.
(maybe_record_nested_function): Declare.
(unnest_function): Declare.
(first_nested_function): New inline function.
(next_nested_function): New inline function.
(nested_function_origin): New inline function.
gcc/ada/ChangeLog:
2020-10-22 Jan Hubicka <hubicka@ucw.cz>
* gcc-interface/trans.c: Include tree-nested.h
(walk_nesting_tree): Update for new nested function info.
gcc/c-family/ChangeLog:
2020-10-22 Jan Hubicka <hubicka@ucw.cz>
* c-gimplify.c: Include tree-nested.h
(c_genericize): Update for new nested function info.
gcc/d/ChangeLog:
2020-10-22 Jan Hubicka <hubicka@ucw.cz>
* decl.cc: Include tree-nested.h
(get_symbol_decl): Update for new nested function info.
Diffstat (limited to 'gcc/cgraphunit.c')
-rw-r--r-- | gcc/cgraphunit.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 19ae876..05713c2 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -673,9 +673,8 @@ cgraph_node::analyze (void) /* Lower the function. */ if (!lowered) { - if (nested) + if (first_nested_function (this)) lower_nested_functions (decl); - gcc_assert (!nested); gimple_register_cfg_hooks (); bitmap_obstack_initialize (NULL); @@ -2343,14 +2342,11 @@ cgraph_node::expand (void) } gimple_set_body (decl, NULL); - if (DECL_STRUCT_FUNCTION (decl) == 0 - && !cgraph_node::get (decl)->origin) + if (DECL_STRUCT_FUNCTION (decl) == 0) { /* Stop pointing to the local nodes about to be freed. But DECL_INITIAL must remain nonzero so we know this - was an actual function definition. - For a nested function, this is done in c_pop_function_context. - If rest_of_compilation set this to 0, leave it 0. */ + was an actual function definition. */ if (DECL_INITIAL (decl) != 0) DECL_INITIAL (decl) = error_mark_node; } @@ -3001,6 +2997,9 @@ symbol_table::finalize_compilation_unit (void) /* Gimplify and lower thunks. */ analyze_functions (/*first_time=*/false); + /* All nested functions should be lowered now. */ + nested_function_info::release (); + /* Offloading requires LTO infrastructure. */ if (!in_lto_p && g->have_offload) flag_generate_offload = 1; |