aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-inline.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2011-04-14 15:26:44 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2011-04-14 13:26:44 +0000
commit10a5dd5d3d4cc53613b8e44b78e99b7d61f85d77 (patch)
treeeb6e4c913e14b3874133c0765b5a7b51b8c55868 /gcc/ipa-inline.c
parentb602d918bc8a134e29e065c38776ecf1a382e932 (diff)
downloadgcc-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.c24
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);
}