aboutsummaryrefslogtreecommitdiff
path: root/gcc/value-prof.c
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2019-08-09 09:47:35 +0200
committerMartin Liska <marxin@gcc.gnu.org>2019-08-09 07:47:35 +0000
commitc220ecd21b11575cdfb53d64f3c7e850fede78a9 (patch)
treef09a60d7d4c15d574d31b60d7e31744eb8797de0 /gcc/value-prof.c
parentbb522e2eea23703375e65a044c93e8144ef4664e (diff)
downloadgcc-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.c105
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);