GCC Middle and Back End API Reference
auto-profile.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void read_autofdo_file (void)
void end_auto_profile (void)
bool afdo_callsite_hot_enough_for_early_inline (struct cgraph_edge *)
bool afdo_vpt_for_early_inline (cgraph_node *node)
void remove_afdo_speculative_target (cgraph_edge *)

Function Documentation

◆ afdo_callsite_hot_enough_for_early_inline()

bool afdo_callsite_hot_enough_for_early_inline ( struct cgraph_edge * edge)
extern

◆ afdo_vpt_for_early_inline()

bool afdo_vpt_for_early_inline ( cgraph_node * node)
extern
Try to turn indirect calls into speculative calls for early inlining.
Do indirect call promotion during early inlining to make the IR match the profiled binary before actual annotation. This is needed because an indirect call might have been promoted and inlined in the profiled binary. If we do not promote and inline these indirect calls before annotation, the profile for these promoted functions will be lost. e.g. foo() --indirect_call--> bar() In profiled binary, the callsite is promoted and inlined, making the profile look like: foo: { loc_foo_1: count_1 bar@loc_foo_2: { loc_bar_1: count_2 loc_bar_2: count_3 } } Before AutoFDO pass, loc_foo_2 is not promoted thus not inlined. If we perform annotation on it, the profile inside bar@loc_foo2 will be wasted. To avoid this, we promote loc_foo_2 and inline the promoted bar function before annotation, so the profile inside bar@loc_foo2 will be useful.

References autofdo::afdo_source_profile, autofdo::afdo_vpt(), changed, autofdo::count_info::count, symtab_node::decl, gimple_bb(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_stmt(), cgraph_node::indirect_calls, cgraph_node::inlined_to, MAX, cgraph_edge::next_callee, NULL, and autofdo::count_info::targets.

Referenced by inline_functions_by_afdo().

◆ end_auto_profile()

void end_auto_profile ( void )
extern
Free the resources.

References autofdo::afdo_source_profile, autofdo::afdo_string_table, NULL, and profile_info.

Referenced by compile_file().

◆ read_autofdo_file()

void read_autofdo_file ( void )
extern
auto-profile.h - Defines data exported from auto-profile.cc Copyright (C) 2014-2025 Free Software Foundation, Inc. Contributed by Dehao Chen (dehao@google.com) This file is part of GCC. GCC is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. GCC is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GCC; see the file COPYING3. If not see <http://www.gnu.org/licenses/>.
Read, process, finalize AutoFDO data structures.
Read the profile from the profile data file.

References autofdo::afdo_profile_info, DEFAULT_AUTO_PROFILE_FILE, NULL, and autofdo::read_profile().

Referenced by coverage_init().

◆ remove_afdo_speculative_target()

void remove_afdo_speculative_target ( cgraph_edge * e)
extern
If speculation was early inlined, remove it from profile data so we do not repeat it later.
If speculation used during early inline, remove the target so we do not speculate the indirect edge again during afdo pass.

References autofdo::afdo_source_profile.

Referenced by inline_functions_by_afdo().