Fix indirect call inlining with AutoFDO

The histogram value for indirect calls was incorrectly set up.
That is fixed now.

With this change the tree-prof tests checking indirect call inlining with AutoFDO
in gcc.dg and g++.dg are passing.

Resolves:
PR gcov-profile/71672 - inlining indirect calls does not work with autofdo

gcc/ChangeLog:
	PR gcov-profile/71672
	* auto-profile.c (afdo_indirect_call): Fix setup of the historgram value for indirect calls.
This commit is contained in:
Eugene Rozenfeld 2021-08-02 18:36:09 -07:00
parent 9265b37853
commit 285aa6895d
1 changed files with 9 additions and 4 deletions

View File

@ -1009,13 +1009,18 @@ afdo_indirect_call (gimple_stmt_iterator *gsi, const icall_target_map &map,
histogram_value hist = gimple_alloc_histogram_value (
cfun, HIST_TYPE_INDIR_CALL, stmt, callee);
hist->n_counters = 3;
hist->n_counters = 4;
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;
// Total counter
hist->hvalue.counters[0] = total;
// Number of value/counter pairs
hist->hvalue.counters[1] = 1;
// Value
hist->hvalue.counters[2] = direct_call->profile_id;
// Counter
hist->hvalue.counters[3] = max_iter->second;
if (!transform)
return;