aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEugene Rozenfeld <erozen@microsoft.com>2021-08-02 18:36:09 -0700
committerEugene Rozenfeld <erozen@microsoft.com>2021-08-03 14:36:33 -0700
commit285aa6895d479bed8e72ad363290846645b6faa0 (patch)
tree90d3dc66ddf7d0008b575b91b69b4f0889231d1f /gcc
parent9265b378531391498ec1727f67a45da72a6c07e9 (diff)
downloadgcc-285aa6895d479bed8e72ad363290846645b6faa0.zip
gcc-285aa6895d479bed8e72ad363290846645b6faa0.tar.gz
gcc-285aa6895d479bed8e72ad363290846645b6faa0.tar.bz2
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/auto-profile.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/auto-profile.c b/gcc/auto-profile.c
index b23b82b..4c1fc6b 100644
--- a/gcc/auto-profile.c
+++ b/gcc/auto-profile.c
@@ -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;