diff options
author | Jan Hubicka <jh@suse.cz> | 2011-04-14 15:26:44 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2011-04-14 13:26:44 +0000 |
commit | 10a5dd5d3d4cc53613b8e44b78e99b7d61f85d77 (patch) | |
tree | eb6e4c913e14b3874133c0765b5a7b51b8c55868 /gcc/ipa-inline.c | |
parent | b602d918bc8a134e29e065c38776ecf1a382e932 (diff) | |
download | gcc-10a5dd5d3d4cc53613b8e44b78e99b7d61f85d77.zip gcc-10a5dd5d3d4cc53613b8e44b78e99b7d61f85d77.tar.gz gcc-10a5dd5d3d4cc53613b8e44b78e99b7d61f85d77.tar.bz2 |
cgraph.c (dump_cgraph_node): Do not dump inline summaries.
* cgraph.c (dump_cgraph_node): Do not dump inline summaries.
* cgraph.h (struct inline_summary): Move to ipa-inline.h
(cgraph_local_info): Remove inline_summary.
* ipa-cp.c: Include ipa-inline.h.
(ipcp_cloning_candidate_p, ipcp_estimate_growth,
ipcp_estimate_cloning_cost, ipcp_insert_stage): Use inline_summary
accesor.
* lto-cgraph.c (lto_output_node): Do not stream inline summary.
(input_overwrite_node): Do not set inline summary.
(input_node): Do not stream inline summary.
* ipa-inline.c (cgraph_decide_inlining): Dump inline summaries.
(cgraph_decide_inlining_incrementally): Do not try to estimate overall
growth; we do not have inline parameters computed for that anyway.
(cgraph_early_inlining): After inlining compute call_stmt_sizes.
* ipa-inline.h (struct inline_summary): Move here from ipa-inline.h
(inline_summary_t): New type and VECtor.
(debug_inline_summary, dump_inline_summaries): Declare.
(inline_summary): Use VOCtor.
(estimate_edge_growth): Kill hack computing call stmt size directly.
* lto-section-in.c (lto_section_name): Add inline section.
* ipa-inline-analysis.c: Include lto-streamer.h
(node_removal_hook_holder, node_duplication_hook_holder): New holders
(inline_node_removal_hook, inline_node_duplication_hook): New functions.
(inline_summary_vec): Define.
(inline_summary_alloc, dump_inline_summary, debug_inline_summary,
dump_inline_summaries): New functions.
(estimate_function_body_sizes): Properly compute size/time of outgoing calls.
(compute_inline_parameters): Alloc inline_summary; do not compute size/time
of incomming calls.
(estimate_edge_time): Avoid missing time summary hack.
(inline_read_summary): Read inline summary info.
(inline_write_summary): Write inline summary info.
(inline_free_summary): Free all hooks and inline summary vector.
* lto-streamer.h: Add LTO_section_inline_summary section.
* Makefile.in (ipa-cp.o, ipa-inline-analysis.o): Update dependencies.
* ipa.c (cgraph_remove_unreachable_nodes): Fix dump file formating.
* lto.c: Include ipa-inline.h
(add_cgraph_node_to_partition, undo_partition): Use inline_summary accessor.
(ipa_node_duplication_hook): Fix declaration.
* Make-lang.in (lto.o): Update dependencies.
From-SVN: r172430
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r-- | gcc/ipa-inline.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index 36bc1c2..1dbb324 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -1301,6 +1301,9 @@ cgraph_decide_inlining (void) max_benefit = benefit; } } + + if (dump_file) + dump_inline_summaries (dump_file); gcc_assert (in_lto_p || !max_count || (profile_info && flag_branch_probabilities)); @@ -1415,7 +1418,9 @@ cgraph_decide_inlining (void) ncalls_inlined, nfunctions_inlined, initial_size, overall_size); free (order); - inline_free_summary (); + /* In WPA we use inline summaries for partitioning process. */ + if (!flag_wpa) + inline_free_summary (); return 0; } @@ -1558,8 +1563,7 @@ cgraph_decide_inlining_incrementally (struct cgraph_node *node) /* When the function body would grow and inlining the function won't eliminate the need for offline copy of the function, don't inline. */ - if (estimate_edge_growth (e) > allowed_growth - && estimate_growth (e->callee) > allowed_growth) + if (estimate_edge_growth (e) > allowed_growth) { if (dump_file) fprintf (dump_file, @@ -1601,6 +1605,7 @@ static unsigned int cgraph_early_inlining (void) { struct cgraph_node *node = cgraph_get_node (current_function_decl); + struct cgraph_edge *edge; unsigned int todo = 0; int iterations = 0; bool inlined = false; @@ -1652,6 +1657,19 @@ cgraph_early_inlining (void) { timevar_push (TV_INTEGRATION); todo |= optimize_inline_calls (current_function_decl); + + /* Technically we ought to recompute inline parameters so the new iteration of + early inliner works as expected. We however have values approximately right + and thus we only need to update edge info that might be cleared out for + newly discovered edges. */ + for (edge = node->callees; edge; edge = edge->next_callee) + { + edge->call_stmt_size + = estimate_num_insns (edge->call_stmt, &eni_size_weights); + edge->call_stmt_time + = estimate_num_insns (edge->call_stmt, &eni_time_weights); + } + timevar_pop (TV_INTEGRATION); } |