diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2019-11-30 16:56:45 +0000 |
---|---|---|
committer | Jan Hubicka <hubicka@ucw.cz> | 2019-11-30 16:56:45 +0000 |
commit | d7183b19a0ba22e98277a19782c0ca3868722cd3 (patch) | |
tree | 83659a5fcbd25257a160c1e7d81f819e0650f566 /gcc/lto/lto-symtab.c | |
parent | 1fc1082929c645e1b2fec96a50ca9a47c81e0ca0 (diff) |
* cgraph.c (cgraph_node::dump): Dump unit_id and merged_extern_inline.
* cgraph.h (cgraph_node): Add unit_id and
merged_extern_inline.
(symbol_table): Add max_unit.
(symbol_table::symbol_table): Initialize it.
* cgraphclones.c (duplicate_thunk_for_node): Copy unit_id.
merged_comdat, merged_extern_inline.
(cgraph_node::create_clone): Likewise.
(cgraph_node::create_version_clone): Likewise.
* ipa-fnsummary.c (dump_ipa_call_summary): Dump info about cross module
calls.
* ipa-fnsummary.h (cross_module_call_p): New inline function.
* ipa-inline-analyssi.c (simple_edge_hints): Use it.
* ipa-inline.c (inline_small_functions): Likewise.
* lto-symtab.c (lto_cgraph_replace_node): Record merged_extern_inline;
copy merged_comdat and merged_extern_inline.
* lto-cgraph.c (lto_output_node): Stream out merged_comdat,
merged_extern_inline and unit_id.
(input_overwrite_node): Stream in these.
(input_cgraph_1): Set unit_base.
* lto-streamer.h (lto_file_decl_data): Add unit_base.
* symtab.c (symtab_node::make_decl_local): Record former_comdat.
* g++.dg/lto/inline-crossmodule-1.h: New testcase.
* g++.dg/lto/inline-crossmodule-1_0.C: New testcase.
* g++.dg/lto/inline-crossmodule-1_1.C: New testcase.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@278876 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/lto/lto-symtab.c')
-rw-r--r-- | gcc/lto/lto-symtab.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/lto/lto-symtab.c b/gcc/lto/lto-symtab.c index 2fd5b1e8f49..8dfae627782 100644 --- a/gcc/lto/lto-symtab.c +++ b/gcc/lto/lto-symtab.c @@ -69,6 +69,13 @@ lto_cgraph_replace_node (struct cgraph_node *node, if (node->definition && prevailing_node->definition && DECL_COMDAT (node->decl) && DECL_COMDAT (prevailing_node->decl)) prevailing_node->merged_comdat = true; + else if ((node->definition || node->body_removed) + && DECL_DECLARED_INLINE_P (node->decl) + && DECL_EXTERNAL (node->decl) + && prevailing_node->definition) + prevailing_node->merged_extern_inline = true; + prevailing_node->merged_comdat |= node->merged_comdat; + prevailing_node->merged_extern_inline |= node->merged_extern_inline; /* Redirect all incoming edges. */ compatible_p |