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/d/decl.cc | |
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/d/decl.cc')
-rw-r--r-- | gcc/d/decl.cc | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/gcc/d/decl.cc b/gcc/d/decl.cc index 161a85a..1167462 100644 --- a/gcc/d/decl.cc +++ b/gcc/d/decl.cc @@ -53,6 +53,7 @@ along with GCC; see the file COPYING3. If not see #include "function.h" #include "debug.h" #include "tree-pretty-print.h" +#include "tree-nested.h" #include "d-tree.h" @@ -1280,8 +1281,8 @@ get_symbol_decl (Declaration *decl) all static chain passing is handled by the front-end. Do this even if we are not emitting the body. */ struct cgraph_node *node = cgraph_node::get_create (decl->csym); - if (node->origin) - node->unnest (); + if (nested_function_origin (node)) + unnest_function (node); } /* Mark compiler generated temporaries as artificial. */ |