Commit 4469188c by Bin Cheng Committed by Bin Cheng

auto-profile.c (afdo_indirect_call): Skip generating histogram value if we can't…

auto-profile.c (afdo_indirect_call): Skip generating histogram value if we can't find cgraph_node for then...

	* auto-profile.c (afdo_indirect_call): Skip generating histogram
	value if we can't find cgraph_node for then indirected callee.  Save
	profile_id of the cgraph_node in histogram value's first counter.
	* value-prof.c (gimple_value_profile_transformations): Don't skip
	for flag_auto_profile.

From-SVN: r267249
parent 0fb778bc
2018-12-19 Bin Cheng <bin.cheng@linux.alibaba.com>
* auto-profile.c (afdo_indirect_call): Skip generating histogram
value if we can't find cgraph_node for then indirected callee. Save
profile_id of the cgraph_node in histogram value's first counter.
* value-prof.c (gimple_value_profile_transformations): Don't skip
for flag_auto_profile.
2018-12-18 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/87759
......@@ -992,14 +992,6 @@ afdo_indirect_call (gimple_stmt_iterator *gsi, const icall_target_map &map,
|| gimple_call_fndecl (stmt) != NULL_TREE)
return;
callee = gimple_call_fn (stmt);
histogram_value hist = gimple_alloc_histogram_value (
cfun, HIST_TYPE_INDIR_CALL, stmt, callee);
hist->n_counters = 3;
hist->hvalue.counters = XNEWVEC (gcov_type, hist->n_counters);
gimple_add_histogram_value (cfun, stmt, hist);
gcov_type total = 0;
icall_target_map::const_iterator max_iter = map.end ();
......@@ -1010,9 +1002,20 @@ afdo_indirect_call (gimple_stmt_iterator *gsi, const icall_target_map &map,
if (max_iter == map.end () || max_iter->second < iter->second)
max_iter = iter;
}
struct cgraph_node *direct_call = cgraph_node::get_for_asmname (
get_identifier (afdo_string_table->get_name (max_iter->first)));
if (direct_call == NULL || !direct_call->profile_id)
return;
hist->hvalue.counters[0]
= (unsigned long long)afdo_string_table->get_name (max_iter->first);
callee = gimple_call_fn (stmt);
histogram_value hist = gimple_alloc_histogram_value (
cfun, HIST_TYPE_INDIR_CALL, stmt, callee);
hist->n_counters = 3;
hist->hvalue.counters = XNEWVEC (gcov_type, hist->n_counters);
gimple_add_histogram_value (cfun, stmt, hist);
hist->hvalue.counters[0] = direct_call->profile_id;
hist->hvalue.counters[1] = max_iter->second;
hist->hvalue.counters[2] = total;
......@@ -1021,8 +1024,6 @@ afdo_indirect_call (gimple_stmt_iterator *gsi, const icall_target_map &map,
struct cgraph_edge *indirect_edge
= cgraph_node::get (current_function_decl)->get_edge (stmt);
struct cgraph_node *direct_call = cgraph_node::get_for_asmname (
get_identifier ((const char *) hist->hvalue.counters[0]));
if (dump_file)
{
......
......@@ -627,11 +627,6 @@ gimple_value_profile_transformations (void)
gimple_stmt_iterator gsi;
bool changed = false;
/* Autofdo does its own transformations for indirect calls,
and otherwise does not support value profiling. */
if (flag_auto_profile)
return false;
FOR_EACH_BB_FN (bb, cfun)
{
for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment