diff options
author | Martin Liska <mliska@suse.cz> | 2019-08-09 09:47:35 +0200 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2019-08-09 07:47:35 +0000 |
commit | c220ecd21b11575cdfb53d64f3c7e850fede78a9 (patch) | |
tree | f09a60d7d4c15d574d31b60d7e31744eb8797de0 /gcc/value-prof.c | |
parent | bb522e2eea23703375e65a044c93e8144ef4664e (diff) | |
download | gcc-c220ecd21b11575cdfb53d64f3c7e850fede78a9.zip gcc-c220ecd21b11575cdfb53d64f3c7e850fede78a9.tar.gz gcc-c220ecd21b11575cdfb53d64f3c7e850fede78a9.tar.bz2 |
Port value profiling to -fopt-info infrastructure.
2019-08-09 Martin Liska <mliska@suse.cz>
* value-prof.c (gimple_divmod_fixed_value_transform):
Use dump_printf_loc.
(gimple_mod_pow2_value_transform): Likewise.
(gimple_mod_subtract_transform): Likewise.
(init_node_map): Likewise.
(gimple_ic_transform): Likewise.
(gimple_stringops_transform): Likewise.
2019-08-09 Martin Liska <mliska@suse.cz>
* g++.dg/tree-prof/indir-call-prof.C: Add -optimize
to -fdump-ipa-profile.
* g++.dg/tree-prof/morefunc.C: Likewise.
* g++.dg/tree-prof/reorder.C: Likewise.
* gcc.dg/tree-prof/ic-misattribution-1.c: Likewise.
* gcc.dg/tree-prof/indir-call-prof.c: Likewise.
* gcc.dg/tree-prof/stringop-1.c: Likewise.
* gcc.dg/tree-prof/stringop-2.c: Likewise.
* gcc.dg/tree-prof/val-prof-1.c: Likewise.
* gcc.dg/tree-prof/val-prof-2.c: Likewise.
* gcc.dg/tree-prof/val-prof-3.c: Likewise.
* gcc.dg/tree-prof/val-prof-4.c: Likewise.
* gcc.dg/tree-prof/val-prof-5.c: Likewise.
* gcc.dg/tree-prof/val-prof-7.c: Likewise.
From-SVN: r274229
Diffstat (limited to 'gcc/value-prof.c')
-rw-r--r-- | gcc/value-prof.c | 105 |
1 files changed, 51 insertions, 54 deletions
diff --git a/gcc/value-prof.c b/gcc/value-prof.c index 7594588..9d9785b 100644 --- a/gcc/value-prof.c +++ b/gcc/value-prof.c @@ -809,12 +809,9 @@ gimple_divmod_fixed_value_transform (gimple_stmt_iterator *si) } result = gimple_divmod_fixed_value (stmt, tree_val, prob, count, all); - if (dump_file) - { - fprintf (dump_file, "Transformation done: div/mod by constant "); - print_generic_expr (dump_file, tree_val, TDF_SLIM); - fprintf (dump_file, "\n"); - } + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "Transformation done: div/mod by constant %T\n", tree_val); gimple_assign_set_rhs_from_tree (si, result); update_stmt (gsi_stmt (*si)); @@ -949,8 +946,9 @@ gimple_mod_pow2_value_transform (gimple_stmt_iterator *si) if (check_counter (stmt, "pow2", &count, &all, gimple_bb (stmt)->count)) return false; - if (dump_file) - fprintf (dump_file, "Transformation done: mod power of 2\n"); + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "Transformation done: mod power of 2\n"); if (all > 0) prob = profile_probability::probability_in_gcov_type (count, all); @@ -1133,8 +1131,9 @@ gimple_mod_subtract_transform (gimple_stmt_iterator *si) return false; gimple_remove_histogram_value (cfun, stmt, histogram); - if (dump_file) - fprintf (dump_file, "Transformation done: mod subtract\n"); + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "Transformation done: mod subtract\n"); /* Compute probability of taking the optimal path(s). */ if (all > 0) @@ -1185,37 +1184,40 @@ init_node_map (bool local) if (n->has_gimple_body_p () || n->thunk.thunk_p) { cgraph_node **val; + dump_user_location_t loc + = dump_user_location_t::from_function_decl (n->decl); if (local) { n->profile_id = coverage_compute_profile_id (n); while ((val = cgraph_node_map->get (n->profile_id)) || !n->profile_id) { - if (dump_file) - fprintf (dump_file, "Local profile-id %i conflict" - " with nodes %s %s\n", - n->profile_id, - n->dump_name (), - (*val)->dump_name ()); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc, + "Local profile-id %i conflict" + " with nodes %s %s\n", + n->profile_id, + n->dump_name (), + (*val)->dump_name ()); n->profile_id = (n->profile_id + 1) & 0x7fffffff; } } else if (!n->profile_id) { - if (dump_file) - fprintf (dump_file, - "Node %s has no profile-id" - " (profile feedback missing?)\n", - n->dump_name ()); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc, + "Node %s has no profile-id" + " (profile feedback missing?)\n", + n->dump_name ()); continue; } else if ((val = cgraph_node_map->get (n->profile_id))) { - if (dump_file) - fprintf (dump_file, - "Node %s has IP profile-id %i conflict. " - "Giving up.\n", - n->dump_name (), n->profile_id); + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, loc, + "Node %s has IP profile-id %i conflict. " + "Giving up.\n", + n->dump_name (), n->profile_id); *val = NULL; continue; } @@ -1445,41 +1447,36 @@ gimple_ic_transform (gimple_stmt_iterator *gsi) { if (val) { - if (dump_file) - { - fprintf (dump_file, "Indirect call -> direct call from other module"); - print_generic_expr (dump_file, gimple_call_fn (stmt), TDF_SLIM); - fprintf (dump_file, "=> %i (will resolve only with LTO)\n", (int)val); - } + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, stmt, + "Indirect call -> direct call from other " + "module %T=> %i (will resolve only with LTO)", + gimple_call_fn (stmt), (int)val); } return false; } if (!check_ic_target (stmt, direct_call)) { - if (dump_file) - { - fprintf (dump_file, "Indirect call -> direct call "); - print_generic_expr (dump_file, gimple_call_fn (stmt), TDF_SLIM); - fprintf (dump_file, "=> "); - print_generic_expr (dump_file, direct_call->decl, TDF_SLIM); - fprintf (dump_file, " transformation skipped because of type mismatch"); - print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); - } + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, stmt, + "Indirect call -> direct call %T => %T " + "transformation skipped because of type mismatch: %G", + gimple_call_fn (stmt), direct_call->decl, stmt); gimple_remove_histogram_value (cfun, stmt, histogram); return false; } - if (dump_file) + if (dump_enabled_p ()) { - fprintf (dump_file, "Indirect call -> direct call "); - print_generic_expr (dump_file, gimple_call_fn (stmt), TDF_SLIM); - fprintf (dump_file, "=> "); - print_generic_expr (dump_file, direct_call->decl, TDF_SLIM); - fprintf (dump_file, " transformation on insn postponned to ipa-profile"); - print_gimple_stmt (dump_file, stmt, 0, TDF_SLIM); - fprintf (dump_file, "hist->count %" PRId64 - " hist->all %" PRId64"\n", count, all); + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "Indirect call -> direct call " + "%T => %T transformation on insn postponed " + "to ipa-profile: %G", gimple_call_fn (stmt), + direct_call->decl, stmt); + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "hist->count %" PRId64 + " hist->all %" PRId64"\n", count, all); } return true; @@ -1708,10 +1705,10 @@ gimple_stringops_transform (gimple_stmt_iterator *gsi) TYPE_PRECISION (get_gcov_type ()), false)); } - if (dump_file) - fprintf (dump_file, - "Transformation done: single value %i stringop for %s\n", - (int)val, built_in_names[(int)fcode]); + if (dump_enabled_p ()) + dump_printf_loc (MSG_OPTIMIZED_LOCATIONS, stmt, + "Transformation done: single value %i stringop for %s\n", + (int)val, built_in_names[(int)fcode]); gimple_stringop_fixed_value (stmt, tree_val, prob, count, all); |