From: Eugene Rozenfeld Date: Tue, 3 Aug 2021 01:36:09 +0000 (-0700) Subject: Fix indirect call inlining with AutoFDO X-Git-Tag: basepoints/gcc-13~5602 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=285aa6895d479bed8e72ad363290846645b6faa0;p=thirdparty%2Fgcc.git 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. --- diff --git a/gcc/auto-profile.c b/gcc/auto-profile.c index b23b82b2df4b..4c1fc6b536bc 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;