diff options
author | Jan Hubicka <jh@suse.cz> | 2020-10-31 10:18:06 +0100 |
---|---|---|
committer | Jan Hubicka <jh@suse.cz> | 2020-10-31 10:18:06 +0100 |
commit | ae7a23a3fab74ebd45203d48fa09681c9945ee7a (patch) | |
tree | dd288d22c32cd5f609204c5a62c74dd025194459 /gcc/tree-inline.c | |
parent | 617695cdc2b3d950f1e4deb5ea85d5cc302943f4 (diff) | |
download | gcc-ae7a23a3fab74ebd45203d48fa09681c9945ee7a.zip gcc-ae7a23a3fab74ebd45203d48fa09681c9945ee7a.tar.gz gcc-ae7a23a3fab74ebd45203d48fa09681c9945ee7a.tar.bz2 |
Move clone_info to summary
* Makefile.in: (OBJS): Add symtab-clones.o
(GTFILES): Add symtab-clones.h
* cgraph.c: Include symtab-clones.h.
(cgraph_edge::resolve_speculation): Fix formating
(cgraph_edge::redirect_call_stmt_to_callee): Update.
(cgraph_update_edges_for_call_stmt): Update
(release_function_body): Fix formating.
(cgraph_node::remove): Fix formating.
(cgraph_node::dump): Fix formating.
(cgraph_node::get_availability): Fix formating.
(cgraph_node::call_for_symbol_thunks_and_aliases): Fix formating.
(set_const_flag_1): Fix formating.
(set_pure_flag_1): Fix formating.
(cgraph_node::can_remove_if_no_direct_calls_p): Fix formating.
(collect_callers_of_node_1): Fix formating.
(clone_of_p): Update.
(cgraph_node::verify_node): Update.
(cgraph_c_finalize): Call clone_info::release ().
* cgraph.h (struct cgraph_clone_info): Move to symtab-clones.h.
(cgraph_node): Remove clone_info.
(symbol_table): Add m_clones.
* cgraphclones.c: Include symtab-clone.h.
(duplicate_thunk_for_node): Update.
(cgraph_node::create_clone): Update.
(cgraph_node::create_virtual_clone): Update.
(cgraph_node::find_replacement): Update.
(cgraph_node::materialize_clone): Update.
* gengtype.c (open_base_files): Include symtab-clones.h.
* ipa-cp.c: Include symtab-clones.h.
(initialize_node_lattices): Update.
(want_remove_some_param_p): Update.
(create_specialized_node): Update.
* ipa-fnsummary.c: Include symtab-clones.h.
(ipa_fn_summary_t::duplicate): Update.
* ipa-modref.c: Include symtab-clones.h.
(update_signature): Update.
* ipa-param-manipulation.c: Include symtab-clones.h.
(ipa_param_body_adjustments::common_initialization): Update.
* ipa-prop.c: Include symtab-clones.h.
(adjust_agg_replacement_values): Update.
(ipcp_get_parm_bits): Update.
(ipcp_update_bits): Update.
(ipcp_update_vr): Update.
* ipa-sra.c: Include symtab-clones.h.
(process_isra_node_results): Update.
(disable_unavailable_parameters): Update.
* lto-cgraph.c: Include symtab-clone.h.
(output_cgraph_opt_summary_p): Update.
(output_node_opt_summary): Update.
(input_node_opt_summary): Update.
* symtab-clones.cc: New file.
* symtab-clones.h: New file.
* tree-inline.c (expand_call_inline): Update.
(update_clone_info): Update.
(tree_function_versioning): Update.
Diffstat (limited to 'gcc/tree-inline.c')
-rw-r--r-- | gcc/tree-inline.c | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 32fb378..32424b1 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -64,6 +64,7 @@ along with GCC; see the file COPYING3. If not see #include "alloc-pool.h" #include "symbol-summary.h" #include "symtab-thunks.h" +#include "symtab-clones.h" /* I'm not real happy about this, but we need to handle gimple and non-gimple trees. */ @@ -4702,6 +4703,7 @@ expand_call_inline (basic_block bb, gimple *stmt, copy_body_data *id, use_operand_p use; gimple *simtenter_stmt = NULL; vec<tree> *simtvars_save; + clone_info *info; /* The gimplifier uses input_location in too many places, such as internal_get_tmp_var (). */ @@ -5024,31 +5026,33 @@ expand_call_inline (basic_block bb, gimple *stmt, copy_body_data *id, /* Add local vars in this inlined callee to caller. */ add_local_variables (id->src_cfun, cfun, id); - if (id->src_node->clone.performed_splits) + info = clone_info::get (id->src_node); + if (info && info->performed_splits) { + clone_info *dst_info = clone_info::get_create (id->dst_node); /* Any calls from the inlined function will be turned into calls from the function we inline into. We must preserve notes about how to split parameters such calls should be redirected/updated. */ - unsigned len = vec_safe_length (id->src_node->clone.performed_splits); + unsigned len = vec_safe_length (info->performed_splits); for (unsigned i = 0; i < len; i++) { ipa_param_performed_split ps - = (*id->src_node->clone.performed_splits)[i]; + = (*info->performed_splits)[i]; ps.dummy_decl = remap_decl (ps.dummy_decl, id); - vec_safe_push (id->dst_node->clone.performed_splits, ps); + vec_safe_push (dst_info->performed_splits, ps); } if (flag_checking) { - len = vec_safe_length (id->dst_node->clone.performed_splits); + len = vec_safe_length (dst_info->performed_splits); for (unsigned i = 0; i < len; i++) { ipa_param_performed_split *ps1 - = &(*id->dst_node->clone.performed_splits)[i]; + = &(*dst_info->performed_splits)[i]; for (unsigned j = i + 1; j < len; j++) { ipa_param_performed_split *ps2 - = &(*id->dst_node->clone.performed_splits)[j]; + = &(*dst_info->performed_splits)[j]; gcc_assert (ps1->dummy_decl != ps2->dummy_decl || ps1->unit_offset != ps2->unit_offset); } @@ -6074,8 +6078,9 @@ tree_versionable_function_p (tree fndecl) static void update_clone_info (copy_body_data * id) { + clone_info *dst_info = clone_info::get (id->dst_node); vec<ipa_param_performed_split, va_gc> *cur_performed_splits - = id->dst_node->clone.performed_splits; + = dst_info ? dst_info->performed_splits : NULL; if (cur_performed_splits) { unsigned len = cur_performed_splits->length (); @@ -6092,23 +6097,24 @@ update_clone_info (copy_body_data * id) for (node = id->dst_node->clones; node != id->dst_node;) { /* First update replace maps to match the new body. */ - if (node->clone.tree_map) - { + clone_info *info = clone_info::get (node); + if (info && info->tree_map) + { unsigned int i; - for (i = 0; i < vec_safe_length (node->clone.tree_map); i++) + for (i = 0; i < vec_safe_length (info->tree_map); i++) { struct ipa_replace_map *replace_info; - replace_info = (*node->clone.tree_map)[i]; + replace_info = (*info->tree_map)[i]; walk_tree (&replace_info->new_tree, copy_tree_body_r, id, NULL); } } - if (node->clone.performed_splits) + if (info && info->performed_splits) { - unsigned len = vec_safe_length (node->clone.performed_splits); + unsigned len = vec_safe_length (info->performed_splits); for (unsigned i = 0; i < len; i++) { ipa_param_performed_split *ps - = &(*node->clone.performed_splits)[i]; + = &(*info->performed_splits)[i]; ps->dummy_decl = remap_decl (ps->dummy_decl, id); } } @@ -6118,10 +6124,12 @@ update_clone_info (copy_body_data * id) a copy of function body for later during inlining, that would just duplicate all entries. So let's have a look whether anything referring to the first dummy_decl is present. */ - unsigned dst_len = vec_safe_length (node->clone.performed_splits); + if (!info) + info = clone_info::get_create (node); + unsigned dst_len = vec_safe_length (info->performed_splits); ipa_param_performed_split *first = &(*cur_performed_splits)[0]; for (unsigned i = 0; i < dst_len; i++) - if ((*node->clone.performed_splits)[i].dummy_decl + if ((*info->performed_splits)[i].dummy_decl == first->dummy_decl) { len = 0; @@ -6129,18 +6137,18 @@ update_clone_info (copy_body_data * id) } for (unsigned i = 0; i < len; i++) - vec_safe_push (node->clone.performed_splits, + vec_safe_push (info->performed_splits, (*cur_performed_splits)[i]); if (flag_checking) { for (unsigned i = 0; i < dst_len; i++) { ipa_param_performed_split *ps1 - = &(*node->clone.performed_splits)[i]; + = &(*info->performed_splits)[i]; for (unsigned j = i + 1; j < dst_len; j++) { ipa_param_performed_split *ps2 - = &(*node->clone.performed_splits)[j]; + = &(*info->performed_splits)[j]; gcc_assert (ps1->dummy_decl != ps2->dummy_decl || ps1->unit_offset != ps2->unit_offset); } @@ -6270,8 +6278,9 @@ tree_function_versioning (tree old_decl, tree new_decl, = copy_static_chain (p, &id); auto_vec<int, 16> new_param_indices; + clone_info *info = clone_info::get (old_version_node); ipa_param_adjustments *old_param_adjustments - = old_version_node->clone.param_adjustments; + = info ? info->param_adjustments : NULL; if (old_param_adjustments) old_param_adjustments->get_updated_indices (&new_param_indices); |