diff options
Diffstat (limited to 'gcc/ipa-inline.c')
-rw-r--r-- | gcc/ipa-inline.c | 191 |
1 files changed, 100 insertions, 91 deletions
diff --git a/gcc/ipa-inline.c b/gcc/ipa-inline.c index bcd1653..e04ede7 100644 --- a/gcc/ipa-inline.c +++ b/gcc/ipa-inline.c @@ -227,20 +227,21 @@ caller_growth_limits (struct cgraph_edge *e) static void report_inline_failed_reason (struct cgraph_edge *e) { - if (dump_file) + if (dump_enabled_p ()) { - fprintf (dump_file, " not inlinable: %s -> %s, %s\n", - e->caller->dump_name (), - e->callee->dump_name (), - cgraph_inline_failed_string (e->inline_failed)); + dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, + " not inlinable: %C -> %C, %s\n", + e->caller, e->callee, + cgraph_inline_failed_string (e->inline_failed)); if ((e->inline_failed == CIF_TARGET_OPTION_MISMATCH || e->inline_failed == CIF_OPTIMIZATION_MISMATCH) && e->caller->lto_file_data && e->callee->ultimate_alias_target ()->lto_file_data) { - fprintf (dump_file, " LTO objects: %s, %s\n", - e->caller->lto_file_data->file_name, - e->callee->ultimate_alias_target ()->lto_file_data->file_name); + dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, + " LTO objects: %s, %s\n", + e->caller->lto_file_data->file_name, + e->callee->ultimate_alias_target ()->lto_file_data->file_name); } if (e->inline_failed == CIF_TARGET_OPTION_MISMATCH) cl_target_option_print_diff @@ -569,8 +570,9 @@ can_early_inline_edge_p (struct cgraph_edge *e) if (!gimple_in_ssa_p (DECL_STRUCT_FUNCTION (e->caller->decl)) || !gimple_in_ssa_p (DECL_STRUCT_FUNCTION (callee->decl))) { - if (dump_file) - fprintf (dump_file, " edge not inlinable: not in SSA form\n"); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, + " edge not inlinable: not in SSA form\n"); return false; } if (!can_inline_edge_p (e, true, true) @@ -630,34 +632,34 @@ want_early_inline_function_p (struct cgraph_edge *e) else if (!e->maybe_hot_p () && growth > 0) { - if (dump_file) - fprintf (dump_file, " will not early inline: %s->%s, " - "call is cold and code would grow by %i\n", - e->caller->dump_name (), - callee->dump_name (), - growth); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, + " will not early inline: %C->%C, " + "call is cold and code would grow by %i\n", + e->caller, callee, + growth); want_inline = false; } else if (growth > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS)) { - if (dump_file) - fprintf (dump_file, " will not early inline: %s->%s, " - "growth %i exceeds --param early-inlining-insns\n", - e->caller->dump_name (), - callee->dump_name (), - growth); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, + " will not early inline: %C->%C, " + "growth %i exceeds --param early-inlining-insns\n", + e->caller, callee, + growth); want_inline = false; } else if ((n = num_calls (callee)) != 0 && growth * (n + 1) > PARAM_VALUE (PARAM_EARLY_INLINING_INSNS)) { - if (dump_file) - fprintf (dump_file, " will not early inline: %s->%s, " - "growth %i exceeds --param early-inlining-insns " - "divided by number of calls\n", - e->caller->dump_name (), - callee->dump_name (), - growth); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, + " will not early inline: %C->%C, " + "growth %i exceeds --param early-inlining-insns " + "divided by number of calls\n", + e->caller, callee, + growth); want_inline = false; } } @@ -936,8 +938,9 @@ want_inline_self_recursive_call_p (struct cgraph_edge *edge, want_inline = false; } } - if (!want_inline && dump_file) - fprintf (dump_file, " not inlining recursively: %s\n", reason); + if (!want_inline && dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, edge->call_stmt, + " not inlining recursively: %s\n", reason); return want_inline; } @@ -1562,14 +1565,14 @@ recursive_inlining (struct cgraph_edge *edge, if (!master_clone) return false; - if (dump_file) - fprintf (dump_file, - "\n Inlined %i times, " - "body grown from size %i to %i, time %f to %f\n", n, - ipa_fn_summaries->get (master_clone)->size, - ipa_fn_summaries->get (node)->size, - ipa_fn_summaries->get (master_clone)->time.to_double (), - ipa_fn_summaries->get (node)->time.to_double ()); + if (dump_enabled_p ()) + dump_printf_loc (MSG_NOTE, edge->call_stmt, + "\n Inlined %i times, " + "body grown from size %i to %i, time %f to %f\n", n, + ipa_fn_summaries->get (master_clone)->size, + ipa_fn_summaries->get (node)->size, + ipa_fn_summaries->get (master_clone)->time.to_double (), + ipa_fn_summaries->get (node)->time.to_double ()); /* Remove master clone we used for inlining. We rely that clones inlined into master clone gets queued just before master clone so we don't @@ -2078,17 +2081,20 @@ inline_small_functions (void) update_callee_keys (&edge_heap, n, updated_nodes); bitmap_clear (updated_nodes); - if (dump_file) + if (dump_enabled_p ()) { ipa_fn_summary *s = ipa_fn_summaries->get (edge->caller); - fprintf (dump_file, - " Inlined %s into %s which now has time %f and size %i, " - "net change of %+i.\n", - xstrdup_for_dump (edge->callee->name ()), - xstrdup_for_dump (edge->caller->name ()), - s->time.to_double (), - s->size, - overall_size - old_size); + + /* dump_printf can't handle %+i. */ + char buf_net_change[100]; + snprintf (buf_net_change, sizeof buf_net_change, "%+i", + overall_size - old_size); + + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, edge->call_stmt, + " Inlined %C into %C which now has time %f and " + "size %i, net change of %s.\n", + edge->callee, edge->caller, + s->time.to_double (), s->size, buf_net_change); } if (min_size > overall_size) { @@ -2101,11 +2107,11 @@ inline_small_functions (void) } free_growth_caches (); - if (dump_file) - fprintf (dump_file, - "Unit growth for small function inlining: %i->%i (%i%%)\n", - initial_size, overall_size, - initial_size ? overall_size * 100 / (initial_size) - 100: 0); + if (dump_enabled_p ()) + dump_printf (MSG_NOTE, + "Unit growth for small function inlining: %i->%i (%i%%)\n", + initial_size, overall_size, + initial_size ? overall_size * 100 / (initial_size) - 100: 0); symtab->remove_edge_removal_hook (edge_removal_hook_holder); } @@ -2130,11 +2136,10 @@ flatten_function (struct cgraph_node *node, bool early) /* We've hit cycle? It is time to give up. */ if (callee->aux) { - if (dump_file) - fprintf (dump_file, - "Not inlining %s into %s to avoid cycle.\n", - xstrdup_for_dump (callee->name ()), - xstrdup_for_dump (e->caller->name ())); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, + "Not inlining %C into %C to avoid cycle.\n", + callee, e->caller); if (cgraph_inline_failed_type (e->inline_failed) != CIF_FINAL_ERROR) e->inline_failed = CIF_RECURSIVE_INLINING; continue; @@ -2159,25 +2164,27 @@ flatten_function (struct cgraph_node *node, bool early) if (e->recursive_p ()) { - if (dump_file) - fprintf (dump_file, "Not inlining: recursive call.\n"); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, + "Not inlining: recursive call.\n"); continue; } if (gimple_in_ssa_p (DECL_STRUCT_FUNCTION (node->decl)) != gimple_in_ssa_p (DECL_STRUCT_FUNCTION (callee->decl))) { - if (dump_file) - fprintf (dump_file, "Not inlining: SSA form does not match.\n"); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, + "Not inlining: SSA form does not match.\n"); continue; } /* Inline the edge and flatten the inline clone. Avoid recursing through the original node if the node was cloned. */ - if (dump_file) - fprintf (dump_file, " Inlining %s into %s.\n", - xstrdup_for_dump (callee->name ()), - xstrdup_for_dump (e->caller->name ())); + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, e->call_stmt, + " Inlining %C into %C.\n", + callee, e->caller); orig_callee = callee; inline_call (e, true, NULL, NULL, false); if (e->callee != orig_callee) @@ -2589,13 +2596,12 @@ ipa_inline (void) /* Free ipa-prop structures if they are no longer needed. */ ipa_free_all_structures_after_iinln (); + if (dump_enabled_p ()) + dump_printf (MSG_NOTE, + "\nInlined %i calls, eliminated %i functions\n\n", + ncalls_inlined, nfunctions_inlined); if (dump_file) - { - fprintf (dump_file, - "\nInlined %i calls, eliminated %i functions\n\n", - ncalls_inlined, nfunctions_inlined); - dump_inline_stats (); - } + dump_inline_stats (); if (dump_file) ipa_dump_fn_summaries (dump_file); @@ -2618,9 +2624,10 @@ inline_always_inline_functions (struct cgraph_node *node) if (e->recursive_p ()) { - if (dump_file) - fprintf (dump_file, " Not inlining recursive call to %s.\n", - e->callee->name ()); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, + " Not inlining recursive call to %C.\n", + e->callee); e->inline_failed = CIF_RECURSIVE_INLINING; continue; } @@ -2636,10 +2643,10 @@ inline_always_inline_functions (struct cgraph_node *node) continue; } - if (dump_file) - fprintf (dump_file, " Inlining %s into %s (always_inline).\n", - xstrdup_for_dump (e->callee->name ()), - xstrdup_for_dump (e->caller->name ())); + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, e->call_stmt, + " Inlining %C into %C (always_inline).\n", + e->callee, e->caller); inline_call (e, true, NULL, NULL, false); inlined = true; } @@ -2675,27 +2682,29 @@ early_inline_small_functions (struct cgraph_node *node) && !opt_for_fn (node->decl, flag_inline_functions)) continue; - if (dump_file) - fprintf (dump_file, "Considering inline candidate %s.\n", - callee->name ()); + if (dump_enabled_p ()) + dump_printf_loc (MSG_NOTE, e->call_stmt, + "Considering inline candidate %C.\n", + callee); if (!can_early_inline_edge_p (e)) continue; if (e->recursive_p ()) { - if (dump_file) - fprintf (dump_file, " Not inlining: recursive call.\n"); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, e->call_stmt, + " Not inlining: recursive call.\n"); continue; } if (!want_early_inline_function_p (e)) continue; - if (dump_file) - fprintf (dump_file, " Inlining %s into %s.\n", - xstrdup_for_dump (callee->name ()), - xstrdup_for_dump (e->caller->name ())); + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, e->call_stmt, + " Inlining %C into %C.\n", + callee, e->caller); inline_call (e, true, NULL, NULL, false); inlined = true; } @@ -2755,9 +2764,9 @@ early_inliner (function *fun) { /* When the function is marked to be flattened, recursively inline all calls in it. */ - if (dump_file) - fprintf (dump_file, - "Flattening %s\n", node->name ()); + if (dump_enabled_p ()) + dump_printf (MSG_OPTIMIZED_LOCATIONS, + "Flattening %C\n", node); flatten_function (node, true); inlined = true; } |