GCC Middle and Back End API Reference
cgraph_node Struct Reference

#include <cgraph.h>

Inheritance diagram for cgraph_node:
Collaboration diagram for cgraph_node:

Public Member Functions

 cgraph_node (int uid)
 
bool remove_symbol_and_inline_clones (cgraph_node *forbidden_node=NULL)
 
void record_stmt_references (gimple *stmt)
 
void set_call_stmt_including_clones (gimple *old_stmt, gcall *new_stmt, bool update_speculative=true)
 
cgraph_nodefunction_symbol (enum availability *avail=NULL, struct symtab_node *ref=NULL)
 
cgraph_nodefunction_or_virtual_thunk_symbol (enum availability *avail=NULL, struct symtab_node *ref=NULL)
 
cgraph_nodecreate_clone (tree decl, profile_count count, bool update_original, vec< cgraph_edge * > redirect_callers, bool call_duplication_hook, cgraph_node *new_inlined_to, ipa_param_adjustments *param_adjustments, const char *suffix=NULL)
 
cgraph_nodecreate_virtual_clone (const vec< cgraph_edge * > &redirect_callers, vec< ipa_replace_map *, va_gc > *tree_map, ipa_param_adjustments *param_adjustments, const char *suffix, unsigned num_suffix)
 
void remove_from_clone_tree ()
 
cgraph_nodefind_replacement (struct clone_info *)
 
cgraph_nodecreate_version_clone (tree new_decl, vec< cgraph_edge * > redirect_callers, bitmap bbs_to_copy, const char *suffix=NULL)
 
cgraph_nodecreate_version_clone_with_body (vec< cgraph_edge * > redirect_callers, vec< ipa_replace_map *, va_gc > *tree_map, ipa_param_adjustments *param_adjustments, bitmap bbs_to_copy, basic_block new_entry_block, const char *clone_name, tree target_attributes=NULL_TREE, bool version_decl=true)
 
cgraph_function_version_infoinsert_new_function_version (void)
 
cgraph_function_version_infofunction_version (void)
 
void analyze (void)
 
cgraph_nodecreate_thunk (tree alias, tree, bool this_adjusting, HOST_WIDE_INT fixed_offset, HOST_WIDE_INT virtual_value, HOST_WIDE_INT indirect_offset, tree virtual_offset, tree real_alias)
 
cgraph_nodeget_alias_target (void)
 
cgraph_nodeultimate_alias_target (availability *availability=NULL, symtab_node *ref=NULL)
 
void expand_all_artificial_thunks ()
 
void assemble_thunks_and_aliases (void)
 
void expand (void)
 
void create_wrapper (cgraph_node *target)
 
void DEBUG_FUNCTION verify_node (void)
 
void remove (void)
 
void dump (FILE *f)
 
void dump_graphviz (FILE *f)
 
void DEBUG_FUNCTION debug (void)
 
bool get_untransformed_body ()
 
bool get_body ()
 
void materialize_clone (void)
 
void release_body (bool keep_arguments=false)
 
struct functionget_fun () const
 
void make_local (void)
 
void mark_address_taken (void)
 
void set_fini_priority (priority_type priority)
 
priority_type get_fini_priority (void)
 
cgraph_edgecreate_edge (cgraph_node *callee, gcall *call_stmt, profile_count count, bool cloning_p=false)
 
cgraph_edgecreate_indirect_edge (gcall *call_stmt, int ecf_flags, profile_count count, bool cloning_p=false)
 
void create_edge_including_clones (cgraph_node *callee, gimple *old_stmt, gcall *stmt, profile_count count, cgraph_inline_failed_t reason)
 
cgraph_edgeget_edge (gimple *call_stmt)
 
auto_vec< cgraph_edge * > collect_callers (void)
 
void remove_callers (void)
 
void remove_callees (void)
 
enum availability get_availability (symtab_node *ref=NULL)
 
bool set_nothrow_flag (bool nothrow)
 
bool set_malloc_flag (bool malloc_p)
 
bool set_noreturn_flag (bool noreturn_p)
 
bool set_const_flag (bool set_const, bool looping)
 
bool set_pure_flag (bool pure, bool looping)
 
bool add_detected_attribute (const char *attr)
 
bool call_for_symbol_and_aliases (bool(*callback)(cgraph_node *, void *), void *data, bool include_overwritable)
 
bool call_for_symbol_thunks_and_aliases (bool(*callback)(cgraph_node *node, void *data), void *data, bool include_overwritable, bool exclude_virtual_thunks=false)
 
void mark_force_output (void)
 
bool local_p (void)
 
bool can_be_local_p (void)
 
bool cannot_return_p (void)
 
bool only_called_directly_p (void)
 
bool only_called_directly_or_aliased_p (void)
 
bool will_be_removed_from_program_if_no_direct_calls_p (bool will_inline=false)
 
bool can_remove_if_no_direct_calls_and_refs_p (void)
 
bool can_remove_if_no_direct_calls_p (bool will_inline=false)
 
bool has_gimple_body_p (void)
 
bool former_thunk_p (void)
 
bool check_calls_comdat_local_p ()
 
enum optimize_size_level optimize_for_size_p (void)
 
int get_uid ()
 
int get_summary_id ()
 
const charname () const
 
const chardump_name () const
 
const charasm_name () const
 
const chardump_asm_name () const
 
const charget_visibility_string () const
 
const charget_symtab_type_string () const
 
void register_symbol (void)
 
void reset (bool preserve_comdat_group=false)
 
void DEBUG_FUNCTION verify (void)
 
ipa_refcreate_reference (symtab_node *referred_node, enum ipa_ref_use use_type)
 
ipa_refcreate_reference (symtab_node *referred_node, enum ipa_ref_use use_type, gimple *stmt)
 
ipa_refmaybe_create_reference (tree val, gimple *stmt)
 
void clone_references (symtab_node *node)
 
void clone_referring (symtab_node *node)
 
ipa_refclone_reference (ipa_ref *ref, gimple *stmt)
 
ipa_reffind_reference (symtab_node *referred_node, gimple *stmt, unsigned int lto_stmt_uid, enum ipa_ref_use use_type)
 
void remove_stmt_references (gimple *stmt)
 
void clear_stmts_in_references (void)
 
void remove_all_references (void)
 
void remove_all_referring (void)
 
void dump_references (FILE *file)
 
void dump_referring (FILE *)
 
unsigned num_references (void)
 
ipa_refiterate_reference (unsigned i, ipa_ref *&ref)
 
ipa_refiterate_referring (unsigned i, ipa_ref *&ref)
 
ipa_refiterate_direct_aliases (unsigned i, ipa_ref *&ref)
 
bool semantically_equivalent_p (symtab_node *target)
 
enum symbol_partitioning_class get_partitioning_class (void)
 
tree get_comdat_group ()
 
tree get_comdat_group_id ()
 
void set_comdat_group (tree group)
 
const charget_section () const
 
void remove_from_same_comdat_group (void)
 
void add_to_same_comdat_group (symtab_node *old_node)
 
void dissolve_same_comdat_group_list (void)
 
bool used_from_object_file_p (void)
 
symtab_nodenext_defined_symbol (void)
 
bool resolve_alias (symtab_node *target, bool transparent=false)
 
void fixup_same_cpp_alias_visibility (symtab_node *target)
 
bool call_for_symbol_and_aliases (bool(*callback)(symtab_node *, void *), void *data, bool include_overwrite)
 
symtab_nodenoninterposable_alias (void)
 
tree get_alias_target_tree ()
 
void set_section (const char *section)
 
void set_section (const symtab_node &other)
 
void set_section_for_node (const char *section)
 
void set_section_for_node (const symtab_node &other)
 
void set_init_priority (priority_type priority)
 
priority_type get_init_priority ()
 
bool prevailing_p (void)
 
bool binds_to_current_def_p (symtab_node *ref=NULL)
 
void make_decl_local (void)
 
void copy_visibility_from (symtab_node *n)
 
unsigned int definition_alignment ()
 
bool can_increase_alignment_p ()
 
void increase_alignment (unsigned int align)
 
bool has_aliases_p (void)
 
bool real_symbol_p (void)
 
bool output_to_lto_symbol_table_p (void)
 
bool needed_p (void)
 
bool native_rtl_p () const
 
bool referred_to_p (bool include_self=true)
 
bool can_be_discarded_p (void)
 
bool comdat_local_p (void)
 
bool in_same_comdat_group_p (symtab_node *target)
 
bool nonzero_address ()
 
int equal_address_to (symtab_node *s2, bool memory_accessed=false)
 
bool address_matters_p ()
 
bool address_can_be_compared_p (void)
 

Static Public Member Functions

static void dump_cgraph (FILE *f)
 
static void debug_cgraph (void)
 
static void record_function_versions (tree decl1, tree decl2)
 
static void delete_function_version_by_decl (tree decl)
 
static void add_new_function (tree fndecl, bool lowered)
 
static cgraph_nodeget (const_tree decl)
 
static void finalize_function (tree, bool)
 
static cgraph_nodecreate (tree decl)
 
static cgraph_nodeget_create (tree)
 
static cgraph_nodelocal_info_node (tree decl)
 
static struct cgraph_rtl_infortl_info (const_tree)
 
static cgraph_nodeget_for_asmname (tree asmname)
 
static cgraph_nodecreate_same_body_alias (tree alias, tree decl)
 
static void DEBUG_FUNCTION verify_cgraph_nodes (void)
 
static void checking_verify_cgraph_nodes (void)
 
static bool make_local (cgraph_node *node, void *)
 
static cgraph_nodecreate_alias (tree alias, tree target)
 
static bool has_thunk_p (cgraph_node *node, void *)
 
static symtab_nodeget_for_asmname (const_tree asmname)
 
static void check_ifunc_callee_symtab_nodes (void)
 
static DEBUG_FUNCTION void verify_symtab_nodes (void)
 
static void checking_verify_symtab_nodes (void)
 

Data Fields

cgraph_edgecallees
 
cgraph_edgecallers
 
cgraph_edgeindirect_calls
 
cgraph_nodenext_sibling_clone
 
cgraph_nodeprev_sibling_clone
 
cgraph_nodeclones
 
cgraph_nodeclone_of
 
hash_table< cgraph_edge_hasher > * call_site_hash
 
tree former_clone_of
 
cgraph_simd_clonesimdclone
 
cgraph_nodesimd_clones
 
vec< ipa_opt_pass, va_heap, vl_ptripa_transforms_to_apply
 
cgraph_nodeinlined_to
 
struct cgraph_rtl_infortl
 
profile_count count
 
int count_materialization_scale
 
unsigned int profile_id
 
int unit_id
 
int tp_first_run
 
unsigned thunk: 1
 
unsigned used_as_abstract_origin: 1
 
unsigned lowered: 1
 
unsigned process: 1
 
enum node_frequency frequency: 2
 
unsigned only_called_at_startup: 1
 
unsigned only_called_at_exit: 1
 
unsigned tm_clone: 1
 
unsigned dispatcher_function: 1
 
unsigned calls_comdat_local: 1
 
unsigned icf_merged: 1
 
unsigned nonfreeing_fn: 1
 
unsigned merged_comdat: 1
 
unsigned merged_extern_inline: 1
 
unsigned parallelized_function: 1
 
unsigned split_part: 1
 
unsigned indirect_call_target: 1
 
unsigned local: 1
 
unsigned versionable: 1
 
unsigned can_change_signature: 1
 
unsigned redefined_extern_inline: 1
 
unsigned tm_may_enter_irr: 1
 
unsigned ipcp_clone: 1
 
unsigned declare_variant_alt: 1
 
unsigned calls_declare_variant_alt: 1
 
unsigned gc_candidate: 1
 
unsigned called_by_ifunc_resolver: 1
 
enum symtab_type type: 8
 
enum ld_plugin_symbol_resolution resolution: 8
 
unsigned definition: 1
 
unsigned alias: 1
 
unsigned transparent_alias: 1
 
unsigned weakref: 1
 
unsigned cpp_implicit_alias: 1
 
unsigned symver: 1
 
unsigned analyzed: 1
 
unsigned writeonly: 1
 
unsigned refuse_visibility_changes: 1
 
unsigned externally_visible: 1
 
unsigned no_reorder: 1
 
unsigned force_output: 1
 
unsigned forced_by_abi: 1
 
unsigned unique_name: 1
 
unsigned implicit_section: 1
 
unsigned body_removed: 1
 
unsigned semantic_interposition: 1
 
unsigned used_from_other_partition: 1
 
unsigned in_other_partition: 1
 
unsigned address_taken: 1
 
unsigned in_init_priority_hash: 1
 
unsigned need_lto_streaming: 1
 
unsigned offloadable: 1
 
unsigned ifunc_resolver: 1
 
int order
 
tree decl
 
symtab_nodenext
 
symtab_nodeprevious
 
symtab_nodenext_sharing_asm_name
 
symtab_nodeprevious_sharing_asm_name
 
symtab_nodesame_comdat_group
 
ipa_ref_list ref_list
 
tree alias_target
 
struct lto_file_decl_datalto_file_data
 
voidaux
 
tree x_comdat_group
 
section_hash_entryx_section
 

Protected Member Functions

void dump_base (FILE *)
 
bool DEBUG_FUNCTION verify_base (void)
 
void unregister (struct clone_info *)
 
struct symbol_priority_mappriority_info (void)
 
bool call_for_symbol_and_aliases_1 (bool(*callback)(symtab_node *, void *), void *data, bool include_overwrite)
 

Private Member Functions

bool call_for_symbol_and_aliases_1 (bool(*callback)(cgraph_node *, void *), void *data, bool include_overwritable)
 
symtab_nodeultimate_alias_target_1 (enum availability *avail=NULL, symtab_node *ref=NULL)
 
const charget_dump_name (bool asm_name_p) const
 

Static Private Member Functions

static bool noninterposable_alias (symtab_node *node, void *data)
 
static bool set_section_from_string (symtab_node *n, void *s)
 
static bool set_section_from_node (symtab_node *n, void *o)
 
static bool set_implicit_section (symtab_node *n, void *)
 

Private Attributes

int m_uid
 
int m_summary_id
 

Friends

class symbol_table
 

Detailed Description

The cgraph data structure.
Each function decl has assigned cgraph_node listing callees and callers.   

Constructor & Destructor Documentation

◆ cgraph_node()

cgraph_node::cgraph_node ( int uid)
inlineexplicit

Member Function Documentation

◆ add_detected_attribute()

bool cgraph_node::add_detected_attribute ( const char * attr)

◆ add_new_function()

void cgraph_node::add_new_function ( tree fndecl,
bool lowered )
static
Add the function FNDECL to the call graph.
Unlike finalize_function, this function is intended to be used
by middle end and allows insertion of new function at arbitrary point
of compilation.  The function can be either in high, low or SSA form
GIMPLE.

The function is assumed to be reachable and have address taken (so no
API breaking optimizations are performed on it).

Main work done by this function is to enqueue the function for later
processing to avoid need the passes to be re-entrant.   

References analyze(), bitmap_obstack_initialize(), bitmap_obstack_release(), cfun, cgraph_new_nodes, CONSTRUCTION, create(), DECL_FUNCTION_PERSONALITY, DECL_STRUCT_FUNCTION, symtab_node::definition, dump_file, lang_hooks::eh_personality, eh_personality_lang, gcc::pass_manager::execute_early_local_passes(), execute_pass_list(), expand(), EXPANSION, symtab_node::externally_visible, finalize_function(), FINISHED, fndecl_name(), symtab_node::force_output, function_needs_eh_personality(), g, gcc_unreachable, get_create(), gcc::context::get_passes(), ggc_alloc(), gimple_has_body_p(), gimple_in_ssa_p(), gimple_register_cfg_hooks(), IPA, IPA_SSA, IPA_SSA_AFTER_INLINING, local, lowered, NULL, opt_for_fn, PARSING, pop_cfun(), push_cfun(), symtab_node::semantic_interposition, symbol_table::state, symtab, and TREE_PUBLIC.

Referenced by cgraph_build_static_cdtor_1(), expand_omp_target(), expand_omp_taskreg(), finalize_task_copyfn(), and lower_assumption().

◆ add_to_same_comdat_group()

◆ address_can_be_compared_p()

bool symtab_node::address_can_be_compared_p ( void )
inherited

◆ address_matters_p()

bool symtab_node::address_matters_p ( )
inherited
Return true if symbol's address may possibly be compared to other
symbol's address.   

References address_matters_1(), symtab_node::alias, symtab_node::call_for_symbol_and_aliases(), gcc_assert, and NULL.

Referenced by ipa_icf::sem_function::merge(), and ipa_icf::sem_variable::merge().

◆ analyze()

◆ asm_name()

const char * symtab_node::asm_name ( ) const
inherited
Return printable assembler name of NODE.
This function is used only for debugging.  When assembler name
is unknown go with identifier name.   

References DECL_ASSEMBLER_NAME, DECL_ASSEMBLER_NAME_SET_P, IDENTIFIER_POINTER, and symtab_node::name().

Referenced by dump_callgraph_transformation(), symtab_node::get_dump_name(), symtab_node::name(), and remove().

◆ assemble_thunks_and_aliases()

void cgraph_node::assemble_thunks_and_aliases ( void )

◆ binds_to_current_def_p()

◆ call_for_symbol_and_aliases() [1/2]

◆ call_for_symbol_and_aliases() [2/2]

bool symtab_node::call_for_symbol_and_aliases ( bool(*)(symtab_node *, void *) callback,
void * data,
bool include_overwritable )
inlineinherited

◆ call_for_symbol_and_aliases_1() [1/2]

bool cgraph_node::call_for_symbol_and_aliases_1 ( bool(*)(cgraph_node *, void *) callback,
void * data,
bool include_overwritable )
private
A worker for call_for_symbol_and_aliases.   

References symtab_node::alias, AVAIL_INTERPOSABLE, FOR_EACH_ALIAS, ggc_alloc(), and ipa_ref::referring.

Referenced by call_for_symbol_and_aliases().

◆ call_for_symbol_and_aliases_1() [2/2]

bool symtab_node::call_for_symbol_and_aliases_1 ( bool(*)(symtab_node *, void *) callback,
void * data,
bool include_overwritable )
protectedinherited
Worker for call_for_symbol_and_aliases.   

References symtab_node::alias, AVAIL_INTERPOSABLE, FOR_EACH_ALIAS, ggc_alloc(), and ipa_ref::referring.

Referenced by symtab_node::call_for_symbol_and_aliases().

◆ call_for_symbol_thunks_and_aliases()

bool cgraph_node::call_for_symbol_thunks_and_aliases ( bool(*)(cgraph_node *node, void *data) callback,
void * data,
bool include_overwritable,
bool exclude_virtual_thunks = false )

◆ can_be_discarded_p()

◆ can_be_local_p()

bool cgraph_node::can_be_local_p ( void )
Return true if cgraph_node can be made local for API change.
Extern inline functions and C++ COMDAT functions can be made local
at the expense of possible code size growth if function is used in multiple
compilation units.   

References symtab_node::address_taken, call_for_symbol_thunks_and_aliases(), cgraph_node_cannot_be_local_p_1(), and NULL.

Referenced by clone_for_param_removal_p(), compute_strub_mode(), and make_local().

◆ can_increase_alignment_p()

◆ can_remove_if_no_direct_calls_and_refs_p()

◆ can_remove_if_no_direct_calls_p()

◆ cannot_return_p()

bool cgraph_node::cannot_return_p ( void )
Return true when cgraph_node cannot return or throw and thus
it is safe to ignore its side effects for IPA analysis.   

References ECF_NORETURN, ECF_NOTHROW, flags_from_decl_or_type(), ggc_alloc(), and opt_for_fn.

Referenced by analyze_function(), analyze_function(), cgraph_edge::cannot_lead_to_return_p(), and read_write_all_from_decl().

◆ check_calls_comdat_local_p()

bool cgraph_node::check_calls_comdat_local_p ( )
Check if function calls comdat local.  This is used to recompute
calls_comdat_local flag after function transformations.   

References callees, and cgraph_edge::next_callee.

Referenced by inline_call(), cgraph_edge::redirect_callee(), and verify_node().

◆ check_ifunc_callee_symtab_nodes()

void symtab_node::check_ifunc_callee_symtab_nodes ( void )
staticinherited

◆ checking_verify_cgraph_nodes()

void cgraph_node::checking_verify_cgraph_nodes ( void )
inlinestatic
Verify cgraph, if consistency checking is enabled.   

References ggc_alloc(), and verify_cgraph_nodes().

Referenced by ipa_tm_execute().

◆ checking_verify_symtab_nodes()

void symtab_node::checking_verify_symtab_nodes ( void )
inlinestaticinherited

◆ clear_stmts_in_references()

void symtab_node::clear_stmts_in_references ( void )
inherited
Remove all stmt references in non-speculative references in THIS
and all clones.
Those are not maintained during inlining & cloning.
The exception are speculative references that are updated along
with callgraph edges associated with them.   

References ggc_alloc(), i, symtab_node::iterate_reference(), NULL, r, and ipa_ref::stmt.

Referenced by inline_transform(), and materialize_clone().

◆ clone_reference()

ipa_ref * symtab_node::clone_reference ( ipa_ref * ref,
gimple * stmt )
inherited
Clone reference REF to this symtab_node and set its stmt to STMT.   

References symtab_node::create_reference(), ggc_alloc(), ipa_ref::lto_stmt_uid, ipa_ref::referred, ipa_ref::speculative, ipa_ref::speculative_id, and ipa_ref::use.

Referenced by ipa_edge_args_sum_t::duplicate().

◆ clone_references()

void symtab_node::clone_references ( symtab_node * node)
inherited

◆ clone_referring()

void symtab_node::clone_referring ( symtab_node * node)
inherited

◆ collect_callers()

auto_vec< cgraph_edge * > cgraph_node::collect_callers ( void )
Collect all callers of cgraph_node and its aliases that are known to lead to
cgraph_node (i.e. are not overwritable).   

References call_for_symbol_thunks_and_aliases(), collect_callers_of_node_1(), and ggc_alloc().

Referenced by decide_whether_version_node().

◆ comdat_local_p()

◆ copy_visibility_from()

◆ create()

◆ create_alias()

cgraph_node * cgraph_node::create_alias ( tree alias,
tree target )
static
Mark ALIAS as an alias to DECL.  DECL_NODE is cgraph node representing
the function body is associated with
(not necessarily cgraph_node (DECL)).   

References symtab_node::alias, DECL_ATTRIBUTES, gcc_assert, get_create(), ggc_alloc(), lookup_attribute(), NULL, and TREE_CODE.

Referenced by create_same_body_alias(), handle_alias_pairs(), ipa_icf::sem_function::merge(), and symtab_node::noninterposable_alias().

◆ create_clone()

cgraph_node * cgraph_node::create_clone ( tree new_decl,
profile_count prof_count,
bool update_original,
vec< cgraph_edge * > redirect_callers,
bool call_duplication_hook,
cgraph_node * new_inlined_to,
ipa_param_adjustments * param_adjustments,
const char * suffix = NULL )
Create node representing clone of N executed COUNT times.  Decrease
the execution counts from original node too.
The new clone will have decl set to DECL that may or may not be the same
as decl of N.

When UPDATE_ORIGINAL is true, the counts are subtracted from the original
function's profile to reflect the fact that part of execution is handled
by node.  
When CALL_DUPLICATION_HOOK is true, the ipa passes are acknowledged about
the new clone. Otherwise the caller is responsible for doing so later.

If the new node is being inlined into another one, NEW_INLINED_TO should be
the outline function the new one is (even indirectly) inlined to.  All hooks
will see this in node's inlined_to, when invoked.  Can be NULL if the
node is not inlined.

If PARAM_ADJUSTMENTS is non-NULL, the parameter manipulation information
will be overwritten by the new structure.  Otherwise the new node will
share parameter manipulation information with the original node.   

References symtab_node::analyzed, symbol_table::call_cgraph_duplication_hooks(), cgraph_edge::call_stmt, cgraph_edge::callee, callees, calls_declare_variant_alt, can_change_signature, cgraph_edge::clone(), clone_of, symtab_node::clone_references(), clones, profile_count::combine_with_ipa_count(), profile_count::combine_with_ipa_count_within(), count, symbol_table::create_empty(), symtab_node::decl, symtab_node::definition, dump_callgraph_transformation(), expand_all_artificial_thunks(), symtab_node::externally_visible, fndecl_built_in_p(), FOR_EACH_VEC_ELT, frequency, clone_info::get(), clone_info::get_create(), ggc_alloc(), i, icf_merged, indirect_calls, inlined_to, profile_count::ipa(), profile_count::ipa_p(), local, localize_profile(), symtab_node::lto_file_data, cgraph_edge::lto_stmt_uid, merged_comdat, merged_extern_inline, cgraph_edge::next_callee, next_sibling_clone, symtab_node::no_reorder, profile_count::nonzero_p(), opt_for_fn, clone_info::param_adjustments, prev_sibling_clone, redefined_extern_inline, cgraph_edge::redirect_callee_duplicating_thunks(), symtab_node::register_symbol(), rtl, symtab_node::semantic_interposition, split_part, symtab, thunk, tm_clone, tm_may_enter_irr, tp_first_run, unit_id, and versionable.

Referenced by clone_inlined_nodes(), create_virtual_clone(), and recursive_inlining().

◆ create_edge()

◆ create_edge_including_clones()

void cgraph_node::create_edge_including_clones ( cgraph_node * callee,
gimple * old_stmt,
gcall * stmt,
profile_count count,
cgraph_inline_failed_t reason )
Like cgraph_create_edge walk the clone tree and update all clones sharing
same function body.  If clones already have edge for OLD_STMT; only
update the edge same way as cgraph_set_call_stmt_including_clones does.

TODO: COUNT and LOOP_DEPTH should be properly distributed based on relative
frequencies of the clones.   

References clone_of, clones, count, create_edge(), get_edge(), ggc_alloc(), cgraph_edge::inline_failed, next_sibling_clone, cgraph_edge::set_call_stmt(), and thunk.

◆ create_indirect_edge()

cgraph_edge * cgraph_node::create_indirect_edge ( gcall * call_stmt,
int ecf_flags,
profile_count count,
bool cloning_p = false )
Create an indirect edge with a yet-undetermined callee where the call
statement destination is a formal parameter of the caller with index
PARAM_INDEX. CLONING_P should be set if properties that are copied from an
original edge should not be calculated and indirect_info structure should
not be calculated.   

References cgraph_allocate_init_indirect_info(), count, symbol_table::create_edge(), gcc_assert, ggc_alloc(), gimple_call_fn(), indirect_calls, initialize_inline_failed(), NULL, obj_type_ref_class(), OBJ_TYPE_REF_TOKEN, cgraph_edge::prev_callee, symtab, TREE_CODE, tree_to_uhwi(), and virtual_method_call_p().

Referenced by cgraph_edge::clone(), input_edge(), and cgraph_edge::rebuild_edges().

◆ create_reference() [1/2]

◆ create_reference() [2/2]

ipa_ref * symtab_node::create_reference ( symtab_node * referred_node,
enum ipa_ref_use use_type,
gimple * stmt )
inherited
Return ipa reference from this symtab_node to
REFERRED_NODE or REFERRED_VARPOOL_NODE. USE_TYPE specify type
of the use and STMT the statement (if it exists).   

References gcc_checking_assert, ggc_alloc(), i, IPA_REF_ALIAS, symtab_node::iterate_reference(), ipa_ref::lto_stmt_uid, NULL, symtab_node::ref_list, ipa_ref_list::references, ipa_ref::referred, ipa_ref::referred_index, ipa_ref::referring, ipa_ref::speculative, ipa_ref::speculative_id, ipa_ref::stmt, and ipa_ref::use.

◆ create_same_body_alias()

cgraph_node * cgraph_node::create_same_body_alias ( tree alias,
tree decl )
static
Attempt to mark ALIAS as an alias to DECL.  Return alias node if successful
and NULL otherwise.
Same body aliases are output whenever the body of DECL is output,
and cgraph_node::get (ALIAS) transparently returns
cgraph_node::get (DECL).   

References symtab_node::alias, symtab_node::cpp_implicit_alias, symbol_table::cpp_implicit_aliases_done, create_alias(), get(), symbol_table::global_info_ready, NULL, symtab_node::resolve_alias(), symtab, and TARGET_SUPPORTS_ALIASES.

Referenced by ipa_tm_create_version_alias().

◆ create_thunk()

cgraph_node * cgraph_node::create_thunk ( tree alias,
tree ,
bool this_adjusting,
HOST_WIDE_INT fixed_offset,
HOST_WIDE_INT virtual_value,
HOST_WIDE_INT indirect_offset,
tree virtual_offset,
tree real_alias )
Add thunk alias into callgraph.  The alias declaration is ALIAS and it
aliases DECL with an adjustments made into the first parameter.
See comments in struct cgraph_thunk_info for detail on the parameters.   

References symtab_node::alias, CONSTRUCTION, create(), symtab_node::definition, gcc_checking_assert, get(), thunk_info::get_create(), ggc_alloc(), i, NULL, symtab_node::reset(), symbol_table::state, symtab, thunk, and wi::to_wide().

◆ create_version_clone()

cgraph_node * cgraph_node::create_version_clone ( tree new_decl,
vec< cgraph_edge * > redirect_callers,
bitmap bbs_to_copy,
const char * suffix = NULL )
Create a new cgraph node which is the new version of
callgraph node.  REDIRECT_CALLERS holds the callers
edges which should be redirected to point to
NEW_VERSION.  ALL the callees edges of the node
are cloned to the new version node.  Return the new
version node. 

If non-NULL BLOCK_TO_COPY determine what basic blocks 
was copied to prevent duplications of calls that are dead
in the clone.   

References symtab_node::analyzed, bitmap_bit_p, cgraph_edge::call_stmt, callees, cgraph_edge::clone(), count, create(), symtab_node::definition, dump_callgraph_transformation(), FOR_EACH_VEC_ELT, ggc_alloc(), gimple_bb(), i, basic_block_def::index, indirect_calls, inlined_to, local, cgraph_edge::lto_stmt_uid, merged_comdat, merged_extern_inline, cgraph_edge::next_callee, symtab_node::no_reorder, cgraph_edge::redirect_callee(), rtl, and unit_id.

Referenced by create_version_clone_with_body(), ipa_tm_create_version(), and simd_clone_create().

◆ create_version_clone_with_body()

cgraph_node * cgraph_node::create_version_clone_with_body ( vec< cgraph_edge * > redirect_callers,
vec< ipa_replace_map *, va_gc > * tree_map,
ipa_param_adjustments * param_adjustments,
bitmap bbs_to_copy,
basic_block new_entry_block,
const char * suffix,
tree target_attributes = NULL_TREE,
bool version_decl = true )
Perform function versioning.
Function versioning includes copying of the tree and
a callgraph update (creating a new cgraph node and updating
its callees and callers).

REDIRECT_CALLERS varray includes the edges to be redirected
to the new version.

TREE_MAP is a mapping of tree nodes we want to replace with
new ones (according to results of prior analysis).

If non-NULL ARGS_TO_SKIP determine function parameters to remove
from new version.
If SKIP_RETURN is true, the new version will return void.
If non-NULL BLOCK_TO_COPY determine what basic blocks to copy.
If non_NULL NEW_ENTRY determine new entry BB of the clone.

If TARGET_ATTRIBUTES is non-null, when creating a new declaration,
add the attributes to DECL_ATTRIBUTES.  And call valid_attribute_p
that will promote value of the attribute DECL_FUNCTION_SPECIFIC_TARGET
of the declaration.

If VERSION_DECL is set true, use clone_function_name_numbered for the
function clone.  Otherwise, use clone_function_name.

Return the new version's cgraph node.   

References ipa_param_adjustments::adjust_decl(), symbol_table::call_cgraph_insertion_hooks(), clone_function_name(), clone_function_name_numbered(), copy_node(), create_version_clone(), symtab_node::decl, DECL_ATTRIBUTES, DECL_COMDAT, DECL_EXTERNAL, DECL_IS_REPLACEABLE_OPERATOR, DECL_NAME, DECL_SET_IS_OPERATOR_DELETE, DECL_SET_IS_OPERATOR_NEW, DECL_SOURCE_LOCATION, DECL_STATIC_CONSTRUCTOR, DECL_STATIC_DESTRUCTOR, DECL_VIRTUAL_P, DECL_WEAK, gcc_unreachable, get_attribute_name(), ggc_alloc(), IDENTIFIER_POINTER, symtab_node::implicit_section, input_location, ipa_transforms_to_apply, NULL, r, SET_DECL_ASSEMBLER_NAME, SET_DECL_RTL, symtab, targetm, tree_function_versioning(), TREE_PUBLIC, TREE_VALUE, tree_versionable_function_p(), and update_call_expr().

Referenced by create_target_clone(), and simd_clone_create().

◆ create_virtual_clone()

◆ create_wrapper()

◆ debug()

DEBUG_FUNCTION void cgraph_node::debug ( void )
Dump call graph node NODE to stderr.   

References dump(), and ggc_alloc().

Referenced by symbol_table::compile(), cgraph_edge::debug(), and mark_functions_to_output().

◆ debug_cgraph()

static void cgraph_node::debug_cgraph ( void )
inlinestatic

References dump_cgraph(), and ggc_alloc().

◆ definition_alignment()

unsigned int symtab_node::definition_alignment ( )
inherited
Return desired alignment of the definition.  This is NOT alignment useful
to access THIS, because THIS may be interposable and DECL_ALIGN should
be used instead.  It however must be guaranteed when output definition
of THIS.   

References symtab_node::alias, symtab_node::call_for_symbol_and_aliases(), gcc_assert, and get_alignment_1().

Referenced by assemble_start_function(), build_constant_desc(), emit_local(), function_section_1(), and output_constant_def_contents().

◆ delete_function_version_by_decl()

void cgraph_node::delete_function_version_by_decl ( tree decl)
static
Remove the cgraph_function_version_info and cgraph_node for DECL.  This
DECL is a duplicate declaration.   

References delete_function_version(), get(), ggc_alloc(), and NULL.

◆ dissolve_same_comdat_group_list()

void symtab_node::dissolve_same_comdat_group_list ( void )
inherited

◆ dump()

void cgraph_node::dump ( FILE * f)
Dump call graph node to file F.   

References symtab_node::body_removed, callees, callers, calls_comdat_local, cgraph_availability_names, clone_of, count, DECL_IS_MALLOC, DECL_IS_OPERATOR_DELETE_P, DECL_IS_OPERATOR_NEW_P, DECL_IS_REPLACEABLE_OPERATOR, lang_hooks::decl_printable_name, DECL_STATIC_CHAIN, DECL_STATIC_CONSTRUCTOR, DECL_STATIC_DESTRUCTOR, profile_count::differs_from_p(), thunk_info::dump(), profile_count::dump(), symtab_node::dump_asm_name(), symtab_node::dump_base(), symtab_node::dump_name(), EXPANSION, FOR_EACH_ALIAS, former_thunk_p(), frequency, profile_count::from_gcov_type(), symbol_table::function_flags_ready, function_version(), gcc_checking_assert, thunk_info::get(), get_availability(), get_fini_priority(), symtab_node::get_init_priority(), ggc_alloc(), gimple_has_body_p(), icf_merged, indirect_call_target, indirect_calls, profile_count::initialized_p(), inlined_to, profile_count::ipa(), local, merged_comdat, merged_extern_inline, nested_function_origin(), NODE_FREQUENCY_EXECUTED_ONCE, NODE_FREQUENCY_HOT, NODE_FREQUENCY_UNLIKELY_EXECUTED, nonfreeing_fn, NULL, NULL_TREE, only_called_at_exit, only_called_at_startup, only_called_directly_p(), opt_for_fn, parallelized_function, PRId64, print_generic_expr(), process, profile_id, redefined_extern_inline, ipa_ref::referring, split_part, symbol_table::state, symtab, TDF_SLIM, thunk, tm_clone, tp_first_run, ultimate_alias_target(), unit_id, and profile_count::zero().

Referenced by debug(), dump_cgraph(), function_called_by_processed_nodes_p(), and verify_node().

◆ dump_asm_name()

◆ dump_base()

void symtab_node::dump_base ( FILE * f)
protectedinherited
Dump base fields of symtab nodes to F.  Not to be used directly.   

References symtab_node::address_taken, symtab_node::alias, symtab_node::alias_target, symtab_node::analyzed, symtab_node::aux, symtab_node::body_removed, symtab_node::cpp_implicit_alias, DECL_ARTIFICIAL, DECL_ASSEMBLER_NAME, DECL_COMDAT, DECL_COMMON, DECL_DLLIMPORT_P, DECL_EXTERNAL, DECL_ONE_ONLY, DECL_P, DECL_STATIC_CONSTRUCTOR, DECL_STATIC_DESTRUCTOR, DECL_VIRTUAL_P, DECL_VISIBILITY, DECL_VISIBILITY_SPECIFIED, DECL_WEAK, symtab_node::definition, dump_addr(), symtab_node::dump_asm_name(), dump_flags, symtab_node::dump_references(), symtab_node::dump_referring(), symtab_node::externally_visible, lto_file_decl_data::file_name, symtab_node::force_output, symtab_node::forced_by_abi, symtab_node::get_comdat_group(), symtab_node::get_comdat_group_id(), symtab_node::get_section(), ggc_alloc(), IDENTIFIER_POINTER, symtab_node::ifunc_resolver, symtab_node::implicit_section, symtab_node::in_other_partition, ld_plugin_symbol_resolution_names, symtab_node::lto_file_data, symtab_node::name(), symtab_node::next_sharing_asm_name, symtab_node::no_reorder, symtab_node::order, symtab_node::previous_sharing_asm_name, symtab_node::resolution, symtab_node::same_comdat_group, symtab_node::semantic_interposition, symtab_type_names, symtab_node::symver, TDF_ADDRESS, symtab_node::transparent_alias, TREE_ASM_WRITTEN, TREE_CODE, TREE_PUBLIC, symtab_node::used_from_other_partition, and symtab_node::weakref.

Referenced by dump(), and varpool_node::dump().

◆ dump_cgraph()

void cgraph_node::dump_cgraph ( FILE * f)
static
Dump the callgraph to file F.   

References dump(), FOR_EACH_FUNCTION, and ggc_alloc().

Referenced by debug_cgraph(), propagate(), propagate_nothrow(), and propagate_pure_const().

◆ dump_graphviz()

void cgraph_node::dump_graphviz ( FILE * f)
Dump call graph node to file F in graphviz format.   

References callees, symtab_node::dump_name(), and ggc_alloc().

◆ dump_name()

const char * symtab_node::dump_name ( ) const
inherited

References symtab_node::get_dump_name().

Referenced by adjust_references_in_caller(), analyze_function(), analyze_function_body(), analyze_functions(), call_may_clobber_ref_p_1(), copy_bb(), create_specialized_node(), decide_about_value(), decide_whether_version_node(), determine_versionability(), drop_profile(), dump(), speculative_call_summary::dump(), ipa_icf::sem_item::dump(), dump_graphviz(), dump_ipa_call_summary(), dump_malloc_lattice(), dump_modref_edge_summaries(), dump_profile_updates(), ipa_icf::sem_function::equals(), ipa_icf::sem_variable::equals(), estimate_local_effects(), ipa_call_context::estimate_size_and_time(), function_and_variable_visibility(), generate_summary(), get_create(), identify_dead_nodes(), init_node_map(), initialize_node_lattices(), inline_analyze_function(), inline_call(), inline_small_functions(), inline_to_all_callers_1(), ipa_devirt(), ipa_dump_fn_summary(), ipa_impossible_devirt_target(), ipa_inline(), ipa_make_edge_direct_to_target(), ipa_make_function_const(), ipa_make_function_pure(), ipa_merge_modref_summary_after_inlining(), ipa_merge_profiles(), ipa_print_node_jump_functions(), ipa_print_node_params(), ipa_profile(), ipa_profile_dump_all_summaries(), ipa_propagate_frequency(), ipa_pta_execute(), ipa_single_use(), ipcp_cloning_candidate_p(), ipcp_store_vr_results(), ipcp_transform_function(), make_item_for_dump_symtab_node(), cgraph_edge::make_speculative(), materialize_clone(), ipa_icf::sem_item_optimizer::merge_classes(), optimize_weakref(), output_constructor(), output_function(), perhaps_add_new_callers(), print_all_lattices(), propagate(), propagate_bits_across_jump_function(), propagate_controlled_uses(), propagate_malloc(), propagate_pure_const(), pure_const_read_summary(), read_write_all_from_decl(), recursive_inlining(), cgraph_edge::redirect_call_stmt_to_callee(), ref_maybe_used_by_call_p_1(), remove_described_reference(), symbol_table::remove_unreachable_nodes(), cgraph_edge::resolve_speculation(), save_inline_function_body(), stmt_kills_ref_p(), verify_speculative_call(), walk_polymorphic_call_targets(), walk_polymorphic_call_targets(), and worse_state().

◆ dump_references()

void symtab_node::dump_references ( FILE * file)
inherited

◆ dump_referring()

void symtab_node::dump_referring ( FILE * file)
inherited

◆ equal_address_to()

int symtab_node::equal_address_to ( symtab_node * s2,
bool memory_accessed = false )
inherited
Return 0 if symbol is known to have different address than S2,
Return 1 if symbol is known to have same address as S2,
return -1 otherwise.  

If MEMORY_ACCESSED is true, assume that both memory pointer to THIS
and S2 is going to be accessed.  This eliminates the situations when
either THIS or S2 is NULL and is useful for comparing bases when deciding
about memory aliasing.   

References symtab_node::analyzed, AVAIL_AVAILABLE, DECL_ATTRIBUTES, decl_binds_to_current_def_p(), DECL_VIRTUAL_P, symtab_node::equal_address_to(), folding_initializer, symtab_node::get_alias_target(), ggc_alloc(), lookup_attribute(), symtab_node::nonzero_address(), symtab_node::refuse_visibility_changes, symtab_node::transparent_alias, TREE_CODE, symtab_node::ultimate_alias_target(), and VAR_P.

Referenced by ipa_icf::sem_item::compare_symbol_references(), and symtab_node::equal_address_to().

◆ expand()

◆ expand_all_artificial_thunks()

void cgraph_node::expand_all_artificial_thunks ( )
Call expand_thunk on all callers that are thunks and if analyze those nodes
that were expanded.   

References cgraph_edge::caller, callers, expand_thunk(), inline_analyze_function(), ipa_analyze_node(), cgraph_edge::next_caller, and thunk.

Referenced by create_clone(), create_specialized_node(), and perhaps_add_new_callers().

◆ finalize_function()

◆ find_reference()

ipa_ref * symtab_node::find_reference ( symtab_node * referred_node,
gimple * stmt,
unsigned int lto_stmt_uid,
enum ipa_ref_use use_type )
inherited
Find the structure describing a reference to REFERRED_NODE of USE_TYPE and
associated with statement STMT or LTO_STMT_UID.   

References ggc_alloc(), i, symtab_node::iterate_reference(), NULL, and r.

Referenced by adjust_references_in_caller(), ipa_edge_args_sum_t::duplicate(), ipcp_discover_new_direct_edges(), propagate_controlled_uses(), and remove_described_reference().

◆ find_replacement()

cgraph_node * cgraph_node::find_replacement ( struct clone_info * info)
callgraph node being removed from symbol table; see if its entry can be
replaced by other inline clone. 
INFO is clone info to attach to the new root.   

References clone_of, clones, symtab_node::decl, gcc_assert, clone_info::get_create(), ggc_alloc(), next_sibling_clone, NULL, symtab_node::order, and prev_sibling_clone.

◆ fixup_same_cpp_alias_visibility()

void symtab_node::fixup_same_cpp_alias_visibility ( symtab_node * target)
inherited
C++ FE sometimes change linkage flags after producing same body aliases.

FIXME: C++ produce implicit aliases for virtual functions and vtables that
are obviously equivalent.  The way it is doing so is however somewhat
kludgy and interferes with the visibility code. As a result we need to
copy the visibility from the target to get things right.   

References symtab_node::add_to_same_comdat_group(), symtab_node::decl, DECL_COMDAT, DECL_DECLARED_INLINE_P, DECL_DISREGARD_INLINE_LIMITS, DECL_EXTERNAL, DECL_VISIBILITY, DECL_WEAK, symtab_node::externally_visible, symtab_node::get_comdat_group(), ggc_alloc(), symtab_node::same_comdat_group, symtab_node::set_comdat_group(), and TREE_PUBLIC.

Referenced by analyze_functions(), and symtab_node::resolve_alias().

◆ former_thunk_p()

bool cgraph_node::former_thunk_p ( void )
Return true if this node represents a former, i.e. an expanded, thunk.   

References gcc_checking_assert, thunk_info::get(), i, and thunk.

Referenced by clone_of_p(), and dump().

◆ function_or_virtual_thunk_symbol()

cgraph_node * cgraph_node::function_or_virtual_thunk_symbol ( enum availability * availability = NULL,
struct symtab_node * ref = NULL )
Walk the alias chain to return the function cgraph_node is alias of.
Walk through non virtual thunks, too.  Thus we return either a function
or a virtual thunk node.
When AVAILABILITY is non-NULL, get minimal availability in the chain. 
When REF is non-NULL, assume that reference happens in symbol REF
when determining the availability.   

References a, cgraph_edge::callee, callees, thunk_info::get(), NULL, thunk, ultimate_alias_target(), and thunk_info::virtual_offset_p.

Referenced by ignore_edge_for_nothrow(), ignore_edge_for_pure_const(), ignore_edge_p(), ignore_edge_p(), and ignore_edge_p().

◆ function_symbol()

◆ function_version()

cgraph_function_version_info * cgraph_node::function_version ( void )
Get the cgraph_function_version_info node corresponding to node.   

References cgraph_fnver_htab, NULL, and cgraph_function_version_info::this_node.

Referenced by analyze(), create_dispatcher_calls(), dump(), expand_target_clones(), redirect_to_specific_clone(), and remove().

◆ get()

static cgraph_node * cgraph_node::get ( const_tree decl)
inlinestatic

References gcc_checking_assert, symtab_node::get(), ggc_alloc(), and TREE_CODE.

Referenced by autofdo::afdo_annotate_cfg(), autofdo::afdo_indirect_call(), autofdo::afdo_vpt_for_early_inline(), analyze(), autofdo::auto_profile(), call_may_clobber_ref_p_1(), cgraph_update_edges_for_call_stmt(), check_for_nested_with_variably_modified(), cgraph_edge::clone(), ipa_icf_gimple::func_checker::compare_gimple_call(), computation_cost(), compute_fn_summary_for_current(), compute_function_frequency(), compute_value_histograms(), convert_all_function_calls(), coverage_begin_function(), coverage_end_function(), create_dispatcher_calls(), create_same_body_alias(), create_task_copyfn(), create_thunk(), create_variable_info_for(), decide_function_section(), decl_fini_priority_insert(), decl_fini_priority_lookup(), decl_is_tm_clone(), default_binds_local_p_3(), default_function_section(), delete_function_version_by_decl(), determine_global_memory_access(), determine_unlikely_bbs(), devirtualization_time_bonus(), do_assemble_alias(), dse_optimize_call(), dump_function_header(), dump_tm_clone_pairs(), autofdo::early_inline(), early_inliner(), estimate_edge_devirt_benefit(), estimate_num_insns(), execute_all_ipa_transforms(), execute_fixup_cfg(), execute_omp_device_lower(), execute_one_pass(), execute_ranger_vrp(), execute_split_functions(), expand_call_tm(), expand_omp_target(), find_func_by_profile_id(), fndecl_maybe_in_other_partition(), function_called_by_processed_nodes_p(), function_section_1(), get_coverage_counts(), get_create(), get_modref_function_summary(), get_modref_function_summary(), gimple_call_arg_flags(), gimple_call_retslot_flags(), gimple_call_static_chain_flags(), gimple_fold_call(), gimple_gen_ic_func_profiler(), gimplify_bind_expr(), handle_alias_pairs(), if_convertible_stmt_p(), init_node_map(), inline_small_functions(), input_offload_tables(), ipa_get_indirect_edge_target_1(), ipa_make_edge_direct_to_target(), ipa_polymorphic_call_context::ipa_polymorphic_call_context(), ipa_record_return_value_range(), ipa_return_value_range(), ipa_tm_decrement_clone_counts(), ipa_tm_execute(), ipa_tm_insert_gettmclone_call(), ipa_tm_mayenterirr_function(), ipa_tm_scan_calls_block(), ipa_tm_scan_irr_block(), ipcp_get_aggregate_const(), ipcp_get_parm_bits(), is_pass_explicitly_enabled_or_disabled(), local_info_node(), lower_nested_functions(), lower_omp_critical(), maybe_diag_incompatible_alias(), maybe_hot_count_p(), maybe_materialize_called_clones(), maybe_record_node(), ipa_param_adjustments::modify_call(), need_assembler_name_p(), new_omp_context(), nonfreeing_call_p(), omp_maybe_offloaded_ctx(), omp_resolve_declare_variant(), omp_resolve_late_declare_variant(), optimize_function_for_size_p(), optimize_inline_calls(), parallelized_function_p(), probably_never_executed(), propagate_controlled_uses(), prune_offload_funcs(), cgraph_edge::rebuild_edges(), cgraph_edge::rebuild_references(), record_cdtor_fn(), cgraph_edge::redirect_call_stmt_to_callee(), ref_maybe_used_by_call_p_1(), reference_to_unused(), remove(), symbol_table::remove_unreachable_nodes(), rtl_info(), save_inline_function_body(), cgraph_edge::set_call_stmt(), set_nothrow_function_flags(), simd_clone_call_p(), split_function(), stmt_kills_ref_p(), tree_could_trap_p(), tree_function_versioning(), tree_profiling(), try_make_edge_direct_virtual_call(), ubsan_create_edge(), unlikely_executed_stmt_p(), unnest_nesting_tree_1(), unshare_body(), unvisit_body(), update_call_edge_frequencies(), vect_get_datarefs_in_loop(), vectorizable_simd_clone_call(), cgraph_edge::verify_corresponds_to_fndecl(), and write_symbol().

◆ get_alias_target()

cgraph_node * cgraph_node::get_alias_target ( void )
inline
Return node that alias is aliasing.   

References symtab_node::get_alias_target(), and ggc_alloc().

Referenced by analyze(), cgraph_externally_visible_p(), create_variable_info_for(), and get_cg_data().

◆ get_alias_target_tree()

tree symtab_node::get_alias_target_tree ( )
inlineinherited
Return the DECL (or identifier) that alias is aliasing.  Unlike the above,
this works whether or not the alias has been analyzed already.   

References symtab_node::alias_target, symtab_node::decl, and symtab_node::get_alias_target().

Referenced by process_function_and_variable_attributes().

◆ get_availability()

◆ get_body()

◆ get_comdat_group()

◆ get_comdat_group_id()

tree symtab_node::get_comdat_group_id ( )
inlineinherited

◆ get_create()

cgraph_node * cgraph_node::get_create ( tree decl)
static
Try to find a call graph node for declaration DECL and if it does not exist
or if it corresponds to an inline clone, create a new one.   

References clones, create(), symtab_node::decl, dump_file, symtab_node::dump_name(), get(), ggc_alloc(), symtab_node::order, PARSING, symbol_table::state, symtab, and symbol_table::symtab_prevail_in_asm_name_hash().

Referenced by add_call_edges_for_seq(), add_new_function(), analyze_functions(), assemble_alias(), canonicalize_constructor_val(), cgraph_update_edges_for_call_stmt_node(), copy_bb(), create_alias(), create_omp_child_function(), create_target_clone(), decl_fini_priority_insert(), decl_init_priority_insert(), gcc::pass_manager::dump_passes(), execute_fixup_cfg(), expand_call_inline(), expand_omp_target(), expand_omp_taskreg(), finalize_function(), finalize_task_copyfn(), symtab_node::get_create(), gimple_get_virt_method_for_vtable(), ipa_impossible_devirt_target(), ipa_make_edge_direct_to_target(), ipa_tm_insert_gettmclone_call(), ipa_tm_insert_irr_call(), ipa_tm_transform_calls_redirect(), lower_emutls_function_body(), make_decl_one_only(), malloc_candidate_p(), malloc_candidate_p_1(), mark_address(), mark_decl_referenced(), mark_load(), maybe_record_nested_function(), omp_resolve_declare_variant(), symbol_table::process_same_body_aliases(), cgraph_edge::rebuild_edges(), record_eh_tables(), record_function_versions(), record_reference(), recursive_call_p(), redirect_to_unreachable(), set_decl_section_name(), set_decl_section_name(), simd_clone_adjust(), try_make_edge_direct_virtual_call(), ubsan_create_edge(), vect_recog_pow_pattern(), and walk_polymorphic_call_targets().

◆ get_dump_name()

const char * symtab_node::get_dump_name ( bool asm_name_p) const
privateinherited

◆ get_edge()

◆ get_fini_priority()

◆ get_for_asmname() [1/2]

◆ get_for_asmname() [2/2]

cgraph_node * cgraph_node::get_for_asmname ( tree asmname)
static
Return the cgraph node that has ASMNAME for its DECL_ASSEMBLER_NAME.
Return NULL if there's no such node.   

References symtab_node::get_for_asmname(), ggc_alloc(), symtab_node::next_sharing_asm_name, and NULL.

Referenced by autofdo::afdo_indirect_call(), and autofdo::function_instance::find_icall_target_map().

◆ get_fun()

struct function * cgraph_node::get_fun ( ) const
Return the DECL_STRUCT_FUNCTION of the function.   

References clone_of, symtab_node::decl, and DECL_STRUCT_FUNCTION.

◆ get_init_priority()

◆ get_partitioning_class()

◆ get_section()

◆ get_summary_id()

◆ get_symtab_type_string()

const char * symtab_node::get_symtab_type_string ( ) const
inherited
Dump the type_name of the symbol.   

References symtab_type_names, and symtab_node::type.

◆ get_uid()

◆ get_untransformed_body()

◆ get_visibility_string()

const char * symtab_node::get_visibility_string ( ) const
inherited
Dump the visibility of the symbol.   

References DECL_VISIBILITY, and ggc_alloc().

◆ has_aliases_p()

◆ has_gimple_body_p()

◆ has_thunk_p()

bool cgraph_node::has_thunk_p ( cgraph_node * node,
void *  )
static
Return true if NODE has thunk.   

References callers.

Referenced by ipa_icf::sem_function::merge(), and ipa_icf::redirect_all_callers().

◆ in_same_comdat_group_p()

bool symtab_node::in_same_comdat_group_p ( symtab_node * target)
inlineinherited

◆ increase_alignment()

void symtab_node::increase_alignment ( unsigned int align)
inherited

◆ insert_new_function_version()

cgraph_function_version_info * cgraph_node::insert_new_function_version ( void )
Insert a new cgraph_function_version_info node into cgraph_fnver_htab
corresponding to cgraph_node NODE.   

References cgraph_fnver_htab, hash_table< Descriptor, Lazy, Allocator >::create_ggc(), ggc_alloc(), NULL, cgraph_function_version_info::this_node, and version_info_node.

Referenced by expand_target_clones().

◆ iterate_direct_aliases()

◆ iterate_reference()

◆ iterate_referring()

◆ local_info_node()

cgraph_node * cgraph_node::local_info_node ( tree decl)
static
Return local info node for the compiled function.   

References gcc_assert, get(), ggc_alloc(), NULL, TREE_CODE, and ultimate_alias_target().

Referenced by ipa_tm_diagnose_transaction(), and setup_incoming_promotions().

◆ local_p()

◆ make_decl_local()

◆ make_local() [1/2]

◆ make_local() [2/2]

void cgraph_node::make_local ( void )
Bring cgraph node local.   

References call_for_symbol_thunks_and_aliases(), make_local(), and NULL.

Referenced by make_local().

◆ mark_address_taken()

◆ mark_force_output()

void cgraph_node::mark_force_output ( void )
inline
Likewise indicate that a node is needed, i.e. reachable via some
external means.   

References symtab_node::force_output, gcc_checking_assert, and inlined_to.

Referenced by input_offload_tables(), ipa_tm_mark_force_output_node(), mark_decl_referenced(), and process_function_and_variable_attributes().

◆ materialize_clone()

◆ maybe_create_reference()

◆ name()

◆ native_rtl_p()

bool symtab_node::native_rtl_p ( ) const
inherited
Return true if this symbol is a function from the C frontend specified
directly in RTL form (with "__RTL").   

References DECL_STRUCT_FUNCTION, ggc_alloc(), PROP_rtl, and TREE_CODE.

Referenced by analyze(), expand(), finalize_function(), and symtab_node::needed_p().

◆ needed_p()

bool symtab_node::needed_p ( void )
inherited

◆ next_defined_symbol()

symtab_node * symtab_node::next_defined_symbol ( void )
inlineinherited
Return next reachable static symbol with initializer after the node.   

References ggc_alloc(), symtab_node::next, and NULL.

◆ noninterposable_alias() [1/2]

bool symtab_node::noninterposable_alias ( symtab_node * node,
void * data )
staticprivateinherited

◆ noninterposable_alias() [2/2]

◆ nonzero_address()

◆ num_references()

unsigned symtab_node::num_references ( void )
inlineinherited

◆ only_called_directly_or_aliased_p()

bool cgraph_node::only_called_directly_or_aliased_p ( void )
inline
Return true when function is only called directly or it has alias.
i.e. it is not externally visible, address was not taken and
it is not used in any other non-standard way.   

References symtab_node::address_taken, DECL_STATIC_CONSTRUCTOR, DECL_STATIC_DESTRUCTOR, DECL_VIRTUAL_P, symtab_node::externally_visible, symtab_node::force_output, gcc_assert, symtab_node::ifunc_resolver, inlined_to, symtab_node::used_from_object_file_p(), and symtab_node::used_from_other_partition.

Referenced by cgraph_not_only_called_directly_p_1(), and non_local_p().

◆ only_called_directly_p()

bool cgraph_node::only_called_directly_p ( void )
Return true when function cgraph_node and all its aliases are only called
directly.
i.e. it is not externally visible, address was not taken and
it is not used in any other non-standard way.   

References call_for_symbol_and_aliases(), cgraph_not_only_called_directly_p_1(), gcc_assert, NULL, and ultimate_alias_target().

Referenced by compute_strub_mode(), dump(), ipa_reverse_postorder(), and will_be_removed_from_program_if_no_direct_calls_p().

◆ optimize_for_size_p()

◆ output_to_lto_symbol_table_p()

◆ prevailing_p()

bool symtab_node::prevailing_p ( void )
inlineinherited
During LTO stream-in this predicate can be used to check whether node
in question prevails in the linking to save some memory usage.   

References DECL_EXTERNAL, symtab_node::definition, NULL, symtab_node::previous_sharing_asm_name, and TREE_PUBLIC.

Referenced by inline_read_section(), ipa_read_node_info(), and cgraph_edge::possibly_call_in_translation_unit_p().

◆ priority_info()

symbol_priority_map * symtab_node::priority_info ( void )
protectedinherited
Return the initialization and finalization priority information for
DECL.  If there is no previous priority information, a freshly
allocated structure is returned.   

References hash_map< KeyId, Value, Traits >::create_ggc(), DEFAULT_INIT_PRIORITY, hash_map< KeyId, Value, Traits >::get_or_insert(), ggc_alloc(), symtab_node::in_init_priority_hash, symbol_table::init_priority_hash, and symtab.

Referenced by set_fini_priority(), and symtab_node::set_init_priority().

◆ real_symbol_p()

bool symtab_node::real_symbol_p ( void )
inlineinherited
Return true when the symbol is real symbol, i.e. it is not inline clone
or abstract function kept for debug info purposes only.   

References DECL_ABSTRACT_P, symtab_node::definition, ggc_alloc(), and symtab_node::transparent_alias.

Referenced by build_type_inheritance_graph(), ipa_comdats(), symtab_node::output_to_lto_symbol_table_p(), set_comdat_group(), and update_type_inheritance_graph().

◆ record_function_versions()

void cgraph_node::record_function_versions ( tree decl1,
tree decl2 )
static
Record that DECL1 and DECL2 are semantically identical function
versions.   

References gcc_assert, get_create(), ggc_alloc(), and NULL.

◆ record_stmt_references()

void cgraph_node::record_stmt_references ( gimple * stmt)
Record all references from cgraph_node that are taken in statement STMT.   

References mark_address(), mark_load(), mark_store(), and walk_stmt_load_store_addr_ops().

Referenced by cgraph_edge::rebuild_edges(), and cgraph_edge::rebuild_references().

◆ referred_to_p()

bool symtab_node::referred_to_p ( bool include_self = true)
inherited
Return true when there are references to the node.  INCLUDE_SELF is
true if a self reference counts as a reference.   

References ggc_alloc(), symtab_node::iterate_referring(), and NULL.

Referenced by analyze_functions(), varpool_node::finalize_decl(), and finalize_function().

◆ register_symbol()

void symtab_node::register_symbol ( void )
inherited
Add node into symbol table.  This function is not used directly, but via
cgraph/varpool node creation routines.   

References ipa_ref_list::clear(), symbol_table::insert_to_assembler_name_hash(), symtab_node::ref_list, symbol_table::register_symbol(), and symtab.

Referenced by create(), create_clone(), varpool_node::get_create(), input_node(), and input_varpool_node().

◆ release_body()

void cgraph_node::release_body ( bool keep_arguments = false)
Release memory used to represent body of function.
Use this only for functions that are released before being translated to
target code (i.e. RTL).  Functions that are compiled to RTL and beyond
are free'd in final.cc via free_after_compilation().
KEEP_ARGUMENTS are useful only if you want to rebuild body as thunk.   

References clones, DECL_ARGUMENTS, DECL_INITIAL, DECL_RESULT, error_mark_node, gcc_assert, ggc_alloc(), ipa_transforms_to_apply, symtab_node::lto_file_data, lto_free_function_in_decl_state_for_node(), next_sibling_clone, NULL, PARSING, release_function_body(), symtab_node::remove_all_references(), remove_callees(), symbol_table::state, symtab, and used_as_abstract_origin.

Referenced by create_wrapper(), execute_one_pass(), expand(), expand_all_functions(), ipa_merge_profiles(), ipa_icf::sem_function::merge(), remove(), and symbol_table::remove_unreachable_nodes().

◆ remove()

◆ remove_all_references()

◆ remove_all_referring()

void symtab_node::remove_all_referring ( void )
inherited
Remove all referring items in ref list.   

References symtab_node::ref_list, and ipa_ref_list::referring.

Referenced by symtab_node::unregister().

◆ remove_callees()

◆ remove_callers()

void cgraph_node::remove_callers ( void )

◆ remove_from_clone_tree()

void cgraph_node::remove_from_clone_tree ( )
Remove the node from the tree of virtual and inline clones and make it a
standalone node - not a clone any more.   

References clone_of, clones, next_sibling_clone, NULL, and prev_sibling_clone.

Referenced by materialize_clone(), and symbol_table::remove_unreachable_nodes().

◆ remove_from_same_comdat_group()

void symtab_node::remove_from_same_comdat_group ( void )
inherited

◆ remove_stmt_references()

void symtab_node::remove_stmt_references ( gimple * stmt)
inherited
Remove all references that are associated with statement STMT.   

References i, symtab_node::iterate_reference(), NULL, r, and ipa_ref::remove_reference().

Referenced by delete_unreachable_blocks_update_callgraph().

◆ remove_symbol_and_inline_clones()

bool cgraph_node::remove_symbol_and_inline_clones ( cgraph_node * forbidden_node = NULL)
Remove the node from cgraph and all inline clones inlined into it.
Skip however removal of FORBIDDEN_NODE and return true if it needs to be
removed.  This allows to call the function from outer loop walking clone
tree.   

References cgraph_edge::callee, callees, callers, ggc_alloc(), cgraph_edge::inline_failed, symtab_node::next, cgraph_edge::next_callee, cgraph_edge::remove(), remove(), and remove_symbol_and_inline_clones().

Referenced by cgraph_update_edges_for_call_stmt_node(), delete_unreachable_blocks_update_callgraph(), redirect_to_unreachable(), remove_symbol_and_inline_clones(), and cgraph_edge::resolve_speculation().

◆ reset()

void symtab_node::reset ( bool preserve_comdat_group = false)
inherited
As an GCC extension we allow redefinition of the function.  The
semantics when both copies of bodies differ is not well defined.
We replace the old body with new body so in unit at a time mode
we always use new body, while in normal mode we may end up with
old body inlined into some functions and new body expanded and
inlined in others.

??? It may make more sense to use one body for inlining and other
body for expanding the function but this is difficult to do.

This is also used to cancel C++ mangling aliases, which can be for
functions or variables.   

References symtab_node::alias, symtab_node::analyzed, symtab_node::cpp_implicit_alias, symtab_node::definition, gcc_assert, ggc_alloc(), NULL, symtab_node::remove_all_references(), symtab_node::remove_from_same_comdat_group(), symtab_node::transparent_alias, and symtab_node::weakref.

Referenced by create_thunk(), create_wrapper(), finalize_function(), handle_alias_pairs(), and ipa_icf::sem_function::merge().

◆ resolve_alias()

◆ rtl_info()

◆ semantically_equivalent_p()

bool symtab_node::semantically_equivalent_p ( symtab_node * target)
inherited

◆ set_call_stmt_including_clones()

void cgraph_node::set_call_stmt_including_clones ( gimple * old_stmt,
gcall * new_stmt,
bool update_speculative = true )
Like cgraph_set_call_stmt but walk the clone tree and update all
clones sharing the same function body.  
When WHOLE_SPECULATIVE_EDGES is true, all three components of
speculative edge gets updated.  Otherwise we update only direct
call.   

References clone_of, clones, get_edge(), ggc_alloc(), symtab_node::next, next_sibling_clone, cgraph_edge::set_call_stmt(), cgraph_edge::speculative, and cgraph_edge::speculative_call_indirect_edge().

Referenced by cgraph_edge::redirect_call_stmt_to_callee().

◆ set_comdat_group()

◆ set_const_flag()

bool cgraph_node::set_const_flag ( bool set_const,
bool looping )
If SET_CONST is true, mark function, aliases and thunks to be ECF_CONST.
If SET_CONST if false, clear the flag.

When setting the flag be careful about possible interposition and
do not set the flag for functions that can be interposed and set pure
flag for functions that can bind to other definition. 

Return true if any change was done.  

References symtab_node::alias, AVAIL_INTERPOSABLE, changed, FOR_EACH_ALIAS, get_availability(), ggc_alloc(), ipa_ref::referring, and set_const_flag_1().

Referenced by ipa_make_function_const(), and tree_profiling().

◆ set_fini_priority()

void cgraph_node::set_fini_priority ( priority_type priority)

◆ set_implicit_section()

bool symtab_node::set_implicit_section ( symtab_node * n,
void * data )
staticprivateinherited
Worker for symtab_resolve_alias.   

References symtab_node::implicit_section.

Referenced by symtab_node::resolve_alias().

◆ set_init_priority()

void symtab_node::set_init_priority ( priority_type priority)
inherited

◆ set_malloc_flag()

bool cgraph_node::set_malloc_flag ( bool malloc_p)
Set DECL_IS_MALLOC on NODE's decl and on NODE's aliases if any.   

References symtab_node::alias, AVAIL_INTERPOSABLE, changed, FOR_EACH_ALIAS, get_availability(), ggc_alloc(), ipa_ref::referring, and set_malloc_flag_1().

Referenced by propagate_malloc().

◆ set_noreturn_flag()

bool cgraph_node::set_noreturn_flag ( bool noreturn_p)
Set TREE_THIS_VOLATILE on NODE's decl and on NODE's aliases if any.   

References symtab_node::alias, AVAIL_INTERPOSABLE, changed, FOR_EACH_ALIAS, get_availability(), ggc_alloc(), ipa_ref::referring, and set_noreturn_flag_1().

◆ set_nothrow_flag()

bool cgraph_node::set_nothrow_flag ( bool nothrow)
Set TREE_NOTHROW on NODE's decl and on aliases of NODE
if any to NOTHROW.   

References symtab_node::alias, AVAIL_INTERPOSABLE, changed, FOR_EACH_ALIAS, get_availability(), ggc_alloc(), opt_for_fn, ipa_ref::referring, and set_nothrow_flag_1().

Referenced by set_nothrow_function_flags().

◆ set_pure_flag()

bool cgraph_node::set_pure_flag ( bool pure,
bool looping )
Set DECL_PURE_P on cgraph_node's decl and on aliases of the node
if any to PURE.

When setting the flag, be careful about possible interposition.
Return true if any change was done.  

References call_for_symbol_thunks_and_aliases(), set_pure_flag_info::changed, cgraph_simd_clone::next_clone, NULL, set_pure_flag_1(), simd_clones, and simdclone.

Referenced by ipa_make_function_pure(), and tree_profiling().

◆ set_section() [1/2]

◆ set_section() [2/2]

void symtab_node::set_section ( const symtab_node & other)
inherited

◆ set_section_for_node() [1/2]

◆ set_section_for_node() [2/2]

void symtab_node::set_section_for_node ( const symtab_node & other)
inherited
Set the section of node THIS to be the same as the section
of node OTHER.  Keep reference counts of the sections
up-to-date as needed.   

References gcc_checking_assert, symtab_node::get_section(), ggc_alloc(), symtab_node::implicit_section, NULL, release_section_hash_entry(), retain_section_hash_entry(), and symtab_node::x_section.

◆ set_section_from_node()

bool symtab_node::set_section_from_node ( symtab_node * n,
void * o )
staticprivateinherited
Set the section of node N to be the same as the section
of node O.   

References ggc_alloc(), and symtab_node::set_section_for_node().

Referenced by symtab_node::set_section().

◆ set_section_from_string()

bool symtab_node::set_section_from_string ( symtab_node * n,
void * s )
staticprivateinherited
Workers for set_section.   

References symtab_node::set_section_for_node().

Referenced by symtab_node::set_section().

◆ ultimate_alias_target()

cgraph_node * cgraph_node::ultimate_alias_target ( availability * availability = NULL,
symtab_node * ref = NULL )
inline
Given function symbol, walk the alias chain to return the function node
is alias of. Do not walk through thunks.
When AVAILABILITY is non-NULL, get minimal availability in the chain.
When REF is non-NULL, assume that reference happens in symbol REF
when determining the availability.   

References AVAIL_NOT_AVAILABLE, ggc_alloc(), and symtab_node::ultimate_alias_target().

Referenced by ipa_icf::sem_item_optimizer::build_graph(), caller_growth_limits(), can_early_inline_edge_p(), can_inline_edge_by_limits_p(), can_inline_edge_p(), can_remove_if_no_direct_calls_p(), clone_of_p(), collect_callers_of_node_1(), do_estimate_edge_hints(), do_estimate_edge_size(), do_estimate_edge_time(), dump(), dump_ipa_call_summary(), duplicate_thunk_for_node(), early_inline_small_functions(), edge_badness(), estimate_min_edge_growth(), evaluate_properties_for_edge(), flatten_function(), function_or_virtual_thunk_symbol(), function_symbol(), get_availability(), get_modref_function_summary(), inline_always_inline_functions(), inline_call(), inline_small_functions(), inline_to_all_callers_1(), ipa_compute_jump_functions_for_bb(), ipa_return_value_range(), local_info_node(), local_p(), lookup_recursive_calls(), mark_address_taken(), only_called_directly_p(), cgraph_edge::recursive_p(), cgraph_edge::redirect_callee_duplicating_thunks(), report_inline_failed_reason(), rtl_info(), set_strub_mode(), set_strub_mode_to(), simple_edge_hints(), speculation_useful_p(), unlikely_executed_stmt_p(), update_callee_keys(), cgraph_edge::verify_corresponds_to_fndecl(), want_early_inline_function_p(), want_inline_small_function_p(), and will_be_removed_from_program_if_no_direct_calls_p().

◆ ultimate_alias_target_1()

symtab_node * symtab_node::ultimate_alias_target_1 ( enum availability * availability = NULL,
symtab_node * ref = NULL )
privateinherited
Walk the alias chain to return the symbol NODE is alias of.
If NODE is not an alias, return NODE.
Assumes NODE is known to be alias.   

References symtab_node::alias, symtab_node::analyzed, AVAIL_NOT_AVAILABLE, symtab_node::get_alias_target(), symtab_node::get_availability(), ggc_alloc(), NULL, and symtab_node::transparent_alias.

Referenced by symtab_node::ultimate_alias_target().

◆ unregister()

void symtab_node::unregister ( struct clone_info * info)
protectedinherited

◆ used_from_object_file_p()

bool symtab_node::used_from_object_file_p ( void )
inlineinherited

◆ verify()

◆ verify_base()

◆ verify_cgraph_nodes()

DEBUG_FUNCTION void cgraph_node::verify_cgraph_nodes ( void )
static
Verify whole cgraph structure.   

References FOR_EACH_FUNCTION, seen_error(), and symtab_node::verify().

Referenced by checking_verify_cgraph_nodes().

◆ verify_node()

DEBUG_FUNCTION void cgraph_node::verify_node ( void )
Verify cgraph nodes of given cgraph node.   

References hash_set< KeyId, Lazy, Traits >::add(), symtab_node::address_taken, symtab_node::alias, symtab_node::analyzed, cgraph_edge::aux, cgraph_edge::call_stmt, cgraph_edge::callee, callees, cgraph_edge::caller, callers, calls_comdat_local, cgraph_debug_gimple_stmt(), check_calls_comdat_local_p(), clone_of, clones, symtab_node::comdat_local_p(), profile_count::compatible_p(), hash_set< KeyId, Lazy, Traits >::contains(), basic_block_def::count, count, cgraph_edge::count, profile_count::debug(), debug_tree(), symtab_node::decl, DECL_EXTERNAL, DECL_IS_MALLOC, DECL_STRUCT_FUNCTION, symtab_node::definition, profile_count::differs_from_p(), dump(), profile_count::dump(), ENTRY_BLOCK_PTR_FOR_FN, error(), error_found, symtab_node::externally_visible, fndecl_built_in_p(), FOR_EACH_BB_FN, symtab_node::force_output, gcc_unreachable, nested_function_info::get(), get_edge(), ggc_alloc(), gimple_bb(), gimple_call_fndecl(), gimple_has_body_p(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_start_phis(), gsi_stmt(), i, identifier_to_locale(), symtab_node::in_other_partition, symtab_node::in_same_comdat_group_p(), indirect_calls, cgraph_edge::indirect_info, cgraph_edge::indirect_unknown_callee, cgraph_edge::inline_failed, inlined_to, internal_error(), profile_count::ipa_p(), IPA_REF_ALIAS, is_gimple_call(), symtab_node::iterate_reference(), local, cgraph_edge::lto_stmt_uid, ipa_ref::lto_stmt_uid, LTO_STREAMING, symtab_node::name(), cgraph_edge::next_callee, cgraph_edge::next_caller, next_nested_function(), next_sibling_clone, profile_count::nonzero_p(), NULL, opt_for_fn, POINTER_TYPE_P, prev_sibling_clone, PROP_assumptions_done, symtab_node::same_comdat_group, seen_error(), symtab_node::semantic_interposition, cgraph_edge::speculative, ipa_ref::speculative, symbol_table::state, ipa_ref::stmt, symtab, thunk, timevar_pop(), timevar_push(), tp_first_run, TREE_ASM_WRITTEN, TREE_TYPE, ipa_ref::use, profile_count::verify(), symtab_node::verify_base(), cgraph_edge::verify_corresponds_to_fndecl(), cgraph_edge::verify_count(), and verify_speculative_call().

◆ verify_symtab_nodes()

◆ will_be_removed_from_program_if_no_direct_calls_p()

bool cgraph_node::will_be_removed_from_program_if_no_direct_calls_p ( bool will_inline = false)
Return true when function cgraph_node can be expected to be removed
from program when direct calls in this compilation unit are removed.

As a special case COMDAT functions are
cgraph_can_remove_if_no_direct_calls_p while the are not
cgraph_only_called_directly_p (it is possible they are called from other
unit)

This function behaves as cgraph_only_called_directly_p because eliminating
all uses of COMDAT function does not make it necessarily disappear from
the program unless we are compiling whole program or we do LTO.  In this
case we know we win since dynamic linking will not really discard the
linkonce section.   

References symtab_node::address_taken, symtab_node::alias, can_remove_if_no_direct_calls_p(), DECL_EXTERNAL, symtab_node::externally_visible, gcc_assert, symtab_node::get_comdat_group(), ggc_alloc(), inlined_to, symtab_node::next, only_called_directly_p(), symtab_node::same_comdat_group, ultimate_alias_target(), and symtab_node::ultimate_alias_target().

Referenced by offline_size().

Friends And Related Symbol Documentation

◆ symbol_table

Field Documentation

◆ address_taken

◆ alias

unsigned symtab_node::alias
inherited

Referenced by add_detected_attribute(), symtab_node::address_matters_p(), analyze(), varpool_node::analyze(), analyze_function(), analyze_functions(), assemble_alias(), varpool_node::assemble_aliases(), varpool_node::assemble_decl(), assemble_thunks_and_aliases(), associate_varinfo_to_alias(), call_for_symbol_and_aliases_1(), symtab_node::call_for_symbol_and_aliases_1(), varpool_node::call_for_symbol_and_aliases_1(), call_for_symbol_thunks_and_aliases(), can_remove_if_no_direct_calls_p(), can_remove_node_now_p(), clone_inlined_nodes(), symbol_table::compile(), compute_ltrans_boundary(), symtab_node::copy_visibility_from(), create_alias(), varpool_node::create_alias(), create_emultls_var(), varpool_node::create_extra_name_alias(), create_same_body_alias(), create_thunk(), ctor_for_folding(), symtab_node::definition_alignment(), determine_versionability(), symtab_node::dump_base(), dump_overall_stats(), expand_target_clones(), varpool_node::finalize_named_section_flags(), function_and_variable_visibility(), generate_summary(), get_constraint_for_ssa_var(), symtab_node::get_partitioning_class(), handle_alias_pairs(), has_gimple_body_p(), initialize_node_lattices(), inline_call(), inline_small_functions(), input_node(), input_overwrite_node(), input_varpool_node(), ipa_comdats(), ipa_devirt(), ipa_fn_summary_generate(), ipa_inline(), ipa_lower_emutls(), ipa_merge_profiles(), ipa_profile(), ipa_propagate_frequency(), ipa_pta_execute(), ipa_reverse_postorder(), ipa_strub_set_mode_for_new_functions(), ipa_tm_execute(), ipa_tm_mayenterirr_function(), ipa_write_summaries(), ipcp_propagate_stage(), localize_node(), lto_output_node(), lto_output_varpool_node(), symtab_node::make_decl_local(), mark_functions_to_output(), ipa_icf::sem_variable::merge(), symtab_node::noninterposable_alias(), symtab_node::nonzero_address(), omp_discover_declare_target_tgt_fn_r(), optimize_weakref(), output_refs(), symbol_table::output_weakrefs(), ipa_icf::sem_variable::parse(), preserve_function_body_p(), process_function_and_variable_attributes(), process_references(), propagate(), propagate_malloc(), propagate_nothrow(), propagate_pure_const(), recursive_call_p(), symbol_table::remove_unreachable_nodes(), symtab_node::reset(), symtab_node::resolve_alias(), set_const_flag(), set_malloc_flag(), set_noreturn_flag(), set_nothrow_flag(), symtab_node::set_section(), set_strub_mode(), set_strub_mode_to(), symtab_node::ultimate_alias_target(), symtab_node::ultimate_alias_target_1(), ultimate_transparent_alias_target(), update_caller_keys(), symtab_node::verify_base(), verify_node(), walk_polymorphic_call_targets(), want_inline_function_to_all_callers_p(), will_be_removed_from_program_if_no_direct_calls_p(), and wrapup_global_declaration_2().

◆ alias_target

◆ analyzed

◆ aux

◆ body_removed

◆ call_site_hash

◆ called_by_ifunc_resolver

unsigned cgraph_node::called_by_ifunc_resolver

◆ callees

cgraph_edge* cgraph_node::callees

Referenced by analyze(), calls_builtin_apply_args_p(), calls_builtin_va_start_p(), can_early_inline_edge_p(), can_strub_internally_p(), check_calls_comdat_local_p(), check_speculations_1(), clone_inlined_nodes(), clone_of_p(), compute_fn_summary(), compute_ltrans_boundary(), contains_hot_call_p(), create_clone(), create_edge(), create_version_clone(), create_wrapper(), determine_versionability(), drop_profile(), dump(), dump_graphviz(), dump_inline_stats(), dump_ipa_call_summary(), dump_modref_edge_summaries(), dump_profile_updates(), ipa_fn_summary_t::duplicate(), duplicate_thunk_for_node(), early_inline_small_functions(), early_inliner(), estimate_calls_size_and_time(), estimate_calls_size_and_time_1(), ipa_call_context::estimate_size_and_time(), expand_thunk(), cgraph_edge::first_speculative_call_target(), fixup_call_stmt_edges_1(), flatten_function(), function_and_variable_visibility(), function_or_virtual_thunk_symbol(), function_symbol(), get_edge(), get_read_write_all_from_node(), handle_missing_profiles(), inline_always_inline_functions(), inline_analyze_function(), inline_call(), inline_read_section(), inline_small_functions(), inline_transform(), inline_update_callee_summaries(), input_node_opt_summary(), ipa_analyze_node(), ipa_inline(), ipa_merge_profiles(), ipa_print_node_jump_functions(), ipa_profile(), ipa_read_node_info(), ipa_tm_diagnose_tm_safe(), ipa_tm_transform_clone(), ipa_update_overall_fn_summary(), ipa_write_node_info(), ipcp_propagate_stage(), local_p(), localize_profile(), lookup_recursive_calls(), mark_all_inlined_calls_cdtor(), maybe_materialize_called_clones(), merge_profile_summaries(), num_calls(), output_node_opt_summary(), output_symtab(), propagate_bits(), propagate_constants_topo(), propagate_info_to_inlined_callees(), propagate_malloc(), read_thunk_profile(), redirect_to_specific_clone(), remap_edge_summaries(), ipa_fn_summary_t::remove_callees(), remove_callees(), cgraph_edge::remove_caller(), remove_modref_edge_summaries(), remove_symbol_and_inline_clones(), reset_edge_caches(), scale_ipa_profile_for_fn(), searchc(), self_recursive_p(), spread_undeadness(), summarize_calls_size_and_time(), update_callee_keys(), update_inlined_to_pointer(), update_noncloned_counts(), update_profiling_info(), update_specialized_profile(), verify_node(), verify_speculative_call(), and verify_strub().

◆ callers

cgraph_edge* cgraph_node::callers

Referenced by add_detected_attribute_1(), symtab_node::add_to_same_comdat_group(), adjust_clone_incoming_counts(), adjust_refs_in_act_callers(), analyze_clone_icoming_counts(), assemble_thunks_and_aliases(), call_for_symbol_thunks_and_aliases(), called_directly_with_type_override_p(), caller_growth_limits(), can_remove_node_now_p_1(), check_callers(), check_callers(), clone_inlined_nodes(), collect_callers_of_node_1(), count_callers(), create_dispatcher_calls(), create_edge(), create_specialized_node(), decide_whether_version_node(), distinctify_node_type(), do_estimate_growth_1(), dump(), duplicate_thunk_for_node(), execute_split_functions(), expand_all_artificial_thunks(), function_and_variable_visibility(), gather_caller_stats(), gather_count_of_non_rec_edges(), get_info_about_necessary_edges(), growth_positive_p(), handle_missing_profiles(), has_caller_p(), has_thunk_p(), has_undead_caller_from_outside_scc_p(), inline_small_functions(), inline_to_all_callers(), inline_to_all_callers_1(), ipa_get_stack_frame_offset(), ipa_merge_modref_summary_after_inlining(), ipa_propagate_frequency_1(), ipa_reverse_postorder(), ipa_tm_execute(), ipa_tm_note_irrevocable(), is_caller_ifunc_resolver(), mark_address_taken(), ok_for_auto_simd_clone(), propagate_controlled_uses(), reachable_from_other_partition_p(), reachable_from_this_partition_p(), ipa_icf::redirect_all_callers(), cgraph_edge::remove_callee(), remove_callers(), remove_symbol_and_inline_clones(), symbol_table::remove_unreachable_nodes(), reset_edge_caches(), cgraph_edge::set_callee(), set_const_flag_1(), set_malloc_flag_1(), set_noreturn_flag_1(), set_nothrow_flag_1(), set_nothrow_function_flags(), set_single_call_flag(), sum_callers(), update_callee_keys(), update_caller_keys(), and verify_node().

◆ calls_comdat_local

◆ calls_declare_variant_alt

◆ can_change_signature

◆ clone_of

◆ clones

◆ count

◆ count_materialization_scale

int cgraph_node::count_materialization_scale

◆ cpp_implicit_alias

◆ decl

tree symtab_node::decl
inherited

Referenced by add_detected_attribute_1(), ipcp_lattice< valtype >::add_value(), ipa_ref::address_matters_p(), analyze(), analyze_function(), analyze_function(), analyze_function_body(), analyze_functions(), assemble_alias(), assemble_variable_contents(), associate_varinfo_to_alias(), autofdo::auto_profile(), big_speedup_p(), btf_collect_datasec(), btf_init_postprocess(), build_type_inheritance_graph(), caller_growth_limits(), calls_builtin_apply_args_p(), can_early_inline_edge_p(), symtab_node::can_increase_alignment_p(), can_inline_edge_by_limits_p(), can_inline_edge_p(), can_remove_node_now_p_1(), can_replace_by_local_alias(), can_replace_by_local_alias_in_vtable(), can_strub_internally_p(), can_strub_p(), cgraph_edge::cannot_lead_to_return_p(), cdtor_p(), cgraph_externally_visible_p(), cgraph_node_cannot_be_local_p_1(), cgraph_update_edges_for_call_stmt_node(), symbol_table::change_decl_assembler_name(), check_argument_count(), check_callers(), ipa_icf::clear_decl_rtl(), clone_inlined_nodes(), clone_of_p(), comdat_can_be_unshared_p_1(), ipa_icf::sem_function::compare_polymorphic_p(), ipa_icf::sem_item::compare_referenced_symbol_properties(), symbol_table::compile(), compute_bb_predicates(), compute_fn_summary(), compute_max_insns(), compute_strub_mode(), copy_function_or_variable(), symtab_node::copy_visibility_from(), coverage_compute_profile_id(), create(), varpool_node::create_alias(), create_clone(), create_dispatcher_calls(), symbol_table::create_edge(), create_emultls_var(), create_specialized_node(), create_target_clone(), create_variable_info_for(), create_version_clone_with_body(), create_virtual_clone(), create_wrapper(), ctor_for_folding(), determine_versionability(), devirt_variable_node_removal_hook(), devirtualization_time_bonus(), symtab_node::dissolve_same_comdat_group_list(), distinctify_node_type(), do_assemble_alias(), do_estimate_edge_time(), do_estimate_growth_1(), do_per_function(), do_per_function_toporder(), drop_profile(), ipa_icf::sem_item::dump(), dump_callgraph_transformation(), dump_inline_stats(), funct_state_summary_t::duplicate(), duplicate_thunk_for_node(), early_inline_small_functions(), early_inliner(), edge_badness(), asmname_hasher::equal(), ipa_icf::sem_variable::equals(), estimate_edge_devirt_benefit(), ipa_call_context::estimate_size_and_time(), estimated_stack_frame_size(), execute_all_ipa_transforms(), execute_split_functions(), expand_all_functions(), expand_simd_clones(), expand_target_clones(), expand_thunk(), varpool_node::finalize_decl(), find_decl(), find_replacement(), symbol_table::first_static_initializer(), fixup_call_stmt_edges(), symtab_node::fixup_same_cpp_alias_visibility(), flatten_function(), flatten_remove_node_hook(), fre_will_run_p(), function_and_variable_visibility(), function_called_by_processed_nodes_p(), generate_summary(), symtab_node::get_alias_target_tree(), get_alignment_1(), get_constraint_for_ssa_var(), varpool_node::get_create(), get_create(), get_fun(), get_max_overall_size(), get_read_write_all_from_node(), get_section_name(), get_strub_mode(), get_untransformed_body(), gimplify_all_functions(), good_cloning_opportunity_p(), handle_missing_profiles(), omp_declare_variant_hasher::hash(), omp_declare_variant_alt_hasher::hash(), asmname_hasher::hash(), ipa_icf::sem_item::hash_referenced_symbol_properties(), hint_time_bonus(), ignore_edge_for_nothrow(), ignore_edge_for_pure_const(), ignore_edge_p(), incorporate_penalties(), increase_alignment_1(), ipa_icf::sem_function::init(), ipa_icf::sem_variable::init(), init_node_map(), inline_account_function_p(), inline_always_inline_functions(), inline_analyze_function(), inline_call(), inline_insns_auto(), inline_insns_single(), inline_small_functions(), inline_transform(), input_cgraph_1(), input_edge(), input_node(), input_overwrite_node(), input_varpool_node(), funct_state_summary_t::insert(), modref_summaries::insert(), modref_summaries_lto::insert(), symbol_table::insert_to_assembler_name_hash(), ipa_analyze_controlled_uses(), ipa_analyze_node(), ipa_cdtor_merge(), ipa_comdats(), ipa_compute_jump_functions_for_edge(), ipa_devirt(), ipa_dump_fn_summary(), ipa_fn_summary_generate(), ipa_get_callee_param_type(), ipa_get_indirect_edge_target_1(), ipa_initialize_node_params(), ipa_inline(), ipa_lower_emutls(), ipa_make_function_const(), ipa_make_function_pure(), ipa_merge_modref_summary_after_inlining(), ipa_merge_profiles(), ipa_populate_param_decls(), ipa_profile(), ipa_profile_generate_summary(), ipa_propagate_frequency(), ipa_pta_execute(), ipa_read_edge_info(), ipa_reference_get_read_global(), ipa_reference_get_written_global(), ipa_return_value_range(), ipa_simd_modify_function_body(), ipa_sra_summarize_function(), ipa_tm_create_version(), ipa_tm_create_version_alias(), ipa_tm_diagnose_tm_safe(), ipa_tm_execute(), ipa_tm_mayenterirr_function(), ipa_tm_note_irrevocable(), ipa_tm_scan_calls_clone(), ipa_tm_scan_irr_function(), ipa_tm_transform_calls_redirect(), ipa_tm_transform_clone(), ipa_tm_transform_transaction(), ipa_write_summaries(), ipcp_cloning_candidate_p(), ipcp_propagate_stage(), ipcp_store_vr_results(), ipcp_transform_function(), ipcp_update_vr(), ipcp_verify_propagated_values(), is_improper(), likely_target_p(), localize_node(), lower_emutls_function_body(), lto_free_function_in_decl_state_for_node(), lto_output_node(), lto_output_varpool_node(), lto_prepare_function_for_streaming(), lto_read_body_or_constructor(), cgraph_edge::make_direct(), make_item_for_dump_symtab_node(), make_local(), cgraph_edge::make_speculative(), mark_functions_to_output(), master_clone_with_noninline_clones_p(), materialize_clone(), cgraph_edge::maybe_hot_p(), maybe_record_nested_function(), ipa_icf::sem_function::merge(), ipa_icf::sem_variable::merge(), merge_aggregate_lattices(), ipa_param_adjustments::modify_call(), new_emutls_decl(), non_local_p(), symtab_node::noninterposable_alias(), symtab_node::noninterposable_alias(), symtab_node::nonzero_address(), num_calls(), offline_size(), ok_for_auto_simd_clone(), omp_declare_variant_remove_hook(), omp_discover_declare_target_tgt_fn_r(), omp_discover_declare_target_var_r(), omp_discover_implicit_declare_target(), omp_lto_input_declare_variant_alt(), omp_lto_output_declare_variant_alt(), optimize_weakref(), output_constructor(), output_function(), symtab_node::output_to_lto_symbol_table_p(), symbol_table::output_variables(), symbol_table::output_weakrefs(), ipa_icf::sem_function::parse(), ipa_icf::sem_variable::parse(), perform_estimation_of_a_value(), possible_inline_candidate_p(), possible_polymorphic_call_target_p(), cgraph_edge::possibly_call_in_translation_unit_p(), process_function_and_variable_attributes(), symbol_table::process_new_functions(), process_references(), process_symver_attribute(), produce_symtab(), produce_symtab_extension(), propagate(), propagate_aggs_across_jump_function(), propagate_constants_across_call(), propagate_constants_topo(), value_topo_info< valtype >::propagate_effects(), propagate_malloc(), propagate_nothrow(), propagate_pure_const(), propagate_vals_across_arith_jfunc(), pure_const_generate_summary(), pure_const_read_summary(), read_ipa_call_summary(), read_thunk_profile(), read_write_all_from_decl(), record_cdtor_fn(), record_eh_tables(), record_reference(), recursive_inlining(), cgraph_edge::recursive_p(), ipa_icf::redirect_all_callers(), cgraph_edge::redirect_call_stmt_to_callee(), redirect_to_specific_clone(), redirect_to_unreachable(), refered_from_nonlocal_fn(), refered_from_nonlocal_var(), referenced_from_vtable_p(), remove(), symbol_table::remove_unreachable_nodes(), symbol_table::remove_unreferenced_decls(), report_inline_failed_reason(), rtl_info(), save_inline_function_body(), ipa_icf::sem_item::sem_item(), symtab_node::semantically_equivalent_p(), ipa_icf::set_addressable(), ipa_icf::set_alias_uids(), cgraph_edge::set_call_stmt(), set_const_flag_1(), set_malloc_flag_1(), set_new_clone_decl_and_node_flags(), set_noreturn_flag_1(), set_nothrow_flag_1(), set_pure_flag_1(), set_strub_mode(), set_strub_mode_to(), simd_clone_adjust(), simd_clone_adjust_argument_types(), simd_clone_adjust_return_type(), simd_clone_clauses_extract(), simd_clone_compute_base_data_type(), simd_clone_create(), simd_clone_init_simd_arrays(), simd_clone_mangle(), speculation_useful_p(), split_function(), strub_always_inline_p(), strub_callable_builtin_p(), strub_from_body_p(), ipa_icf::symbol_compare_collection::symbol_compare_collection(), tree_profiling(), try_make_edge_direct_virtual_call(), unlikely_executed_stmt_p(), symbol_table::unlink_from_assembler_name_hash(), update_call_expr(), update_indirect_edges_after_inlining(), update_type_inheritance_graph(), update_visibility_by_resolution_info(), update_vtable_references(), varpool_removal_hook(), symtab_node::verify_base(), cgraph_edge::verify_corresponds_to_fndecl(), verify_node(), verify_node_partition(), verify_strub(), symtab_node::verify_symtab_nodes(), vrp_will_run_p(), walk_polymorphic_call_targets(), want_early_inline_function_p(), want_inline_small_function_p(), worse_state(), and wrapper_heuristics_may_apply().

◆ declare_variant_alt

◆ definition

unsigned symtab_node::definition
inherited

Referenced by add_new_function(), varpool_node::all_refs_explicit_p(), analyze(), analyze_functions(), varpool_node::assemble_decl(), symtab_node::binds_to_current_def_p(), can_inline_edge_p(), can_replace_by_local_alias(), cgraph_externally_visible_p(), symbol_table::change_decl_assembler_name(), clone_inlined_nodes(), ipa_icf::sem_function::compare_polymorphic_p(), compute_ltrans_boundary(), copy_bb(), create_clone(), create_dispatcher_calls(), create_thunk(), create_version_clone(), create_wrapper(), devirtualization_time_bonus(), symtab_node::dump_base(), enqueue_references(), estimate_edge_devirt_benefit(), estimate_num_insns(), expand_simd_clones(), expand_target_clones(), varpool_node::externally_visible_p(), varpool_node::finalize_decl(), finalize_function(), symbol_table::first_defined_symbol(), function_and_variable_visibility(), varpool_node::get_availability(), symtab_node::get_partitioning_class(), handle_alias_pairs(), has_gimple_body_p(), initialize_inline_failed(), inline_always_inline_functions(), input_overwrite_node(), input_varpool_node(), ipa_compute_jump_functions_for_bb(), ipa_dump_fn_summary(), ipa_inline(), ipa_lower_emutls(), ipa_merge_profiles(), ipa_print_node_params(), ipa_profile_write_summary(), ipa_prop_read_section(), ipa_single_use(), ipa_target_clone(), ipa_write_summaries(), ipcp_propagate_stage(), lto_output_node(), lto_output_varpool_node(), mark_decl_referenced(), symtab_node::needed_p(), non_local_p(), symtab_node::nonzero_address(), ok_for_auto_simd_clone(), optimize_weakref(), symtab_node::output_to_lto_symbol_table_p(), symbol_table::output_variables(), possible_polymorphic_call_target_p(), symtab_node::prevailing_p(), process_function_and_variable_attributes(), process_references(), process_symver_attribute(), propagate_constants_across_call(), propagate_malloc(), pure_const_write_summary(), reachable_from_other_partition_p(), ipa_icf::sem_item_optimizer::read_section(), symtab_node::real_symbol_p(), reference_to_unused(), symbol_table::remove_unreachable_nodes(), symtab_node::reset(), symtab_node::resolve_alias(), simd_clone_adjust_argument_types(), simd_clone_create(), update_type_inheritance_graph(), vect_recog_pow_pattern(), symtab_node::verify_base(), verify_node(), walk_polymorphic_call_targets(), wrapup_global_declaration_2(), and write_node_summary_p().

◆ dispatcher_function

unsigned cgraph_node::dispatcher_function

Referenced by analyze().

◆ externally_visible

◆ force_output

◆ forced_by_abi

◆ former_clone_of

◆ frequency

◆ gc_candidate

unsigned cgraph_node::gc_candidate

◆ icf_merged

◆ ifunc_resolver

◆ implicit_section

◆ in_init_priority_hash

◆ in_other_partition

◆ indirect_call_target

◆ indirect_calls

cgraph_edge* cgraph_node::indirect_calls

Referenced by can_early_inline_edge_p(), compute_fn_summary(), compute_ltrans_boundary(), contains_hot_call_p(), create_clone(), create_indirect_edge(), create_version_clone(), devirtualization_time_bonus(), drop_profile(), dump(), dump_inline_stats(), dump_ipa_call_summary(), dump_modref_edge_summaries(), ipa_fn_summary_t::duplicate(), estimate_calls_size_and_time(), estimate_calls_size_and_time_1(), ipa_call_context::estimate_size_and_time(), fixup_call_stmt_edges_1(), get_edge(), get_read_write_all_from_node(), initialize_node_lattices(), inline_analyze_function(), inline_read_section(), inline_update_callee_summaries(), input_node_opt_summary(), ipa_analyze_node(), ipa_devirt(), ipa_inline(), ipa_merge_profiles(), ipa_print_node_jump_functions(), ipa_profile(), ipa_profile_dump_all_summaries(), ipa_profile_read_summary_section(), ipa_profile_write_summary(), ipa_read_node_info(), ipa_tm_transform_clone(), ipa_update_overall_fn_summary(), ipa_write_node_info(), ipcp_discover_new_direct_edges(), localize_profile(), mark_all_inlined_calls_cdtor(), merge_profile_summaries(), output_node_opt_summary(), output_symtab(), propagate_info_to_inlined_callees(), propagate_malloc(), remap_edge_summaries(), ipa_fn_summary_t::remove_callees(), remove_callees(), cgraph_edge::remove_caller(), remove_modref_edge_summaries(), scale_ipa_profile_for_fn(), cgraph_edge::speculative_call_indirect_edge(), summarize_calls_size_and_time(), update_indirect_edges_after_inlining(), update_noncloned_counts(), update_profiling_info(), verify_node(), verify_speculative_call(), and verify_strub().

◆ inlined_to

cgraph_node* cgraph_node::inlined_to

Referenced by symtab_node::add_to_same_comdat_group(), assemble_thunks_and_aliases(), associate_varinfo_to_alias(), big_speedup_p(), caller_growth_limits(), can_early_inline_edge_p(), can_inline_edge_by_limits_p(), can_inline_edge_p(), can_refer_decl_in_current_unit_p(), can_remove_if_no_direct_calls_and_refs_p(), check_callers(), clone_inlined_nodes(), symbol_table::compile(), compute_fn_summary(), compute_ltrans_boundary(), create_clone(), create_version_clone(), dump(), dump_overall_stats(), ipa_edge_args_sum_t::duplicate(), ipcp_transformation_t::duplicate(), ipa_fn_summary_t::duplicate(), evaluate_properties_for_edge(), execute_one_pass(), expand(), expand_simd_clones(), flatten_function(), cgraph_edge::frequency(), function_and_variable_visibility(), function_called_by_processed_nodes_p(), get_availability(), get_body(), inline_call(), inline_small_functions(), inline_to_all_callers_1(), input_node(), ipa_dump_fn_summaries(), ipa_get_stack_frame_offset(), ipa_inline(), ipa_make_edge_direct_to_target(), ipa_merge_modref_summary_after_inlining(), ipa_pta_execute(), ipa_reverse_postorder(), ipa_value_range_from_jfunc(), lto_output_node(), mark_address_taken(), mark_force_output(), mark_functions_to_output(), cgraph_edge::maybe_hot_p(), only_called_directly_or_aliased_p(), output_symtab(), propagate(), propagate_controlled_uses(), propagate_malloc(), reachable_from_other_partition_p(), cgraph_edge::rebuild_edges(), recursive_inlining(), cgraph_edge::recursive_p(), cgraph_edge::redirect_callee(), remove(), symbol_table::remove_unreachable_nodes(), reset_edge_caches(), resolve_noninline_speculation(), cgraph_edge::sreal_frequency(), update_caller_keys(), update_indirect_edges_after_inlining(), update_inlined_to_pointer(), cgraph_edge::verify_corresponds_to_fndecl(), verify_node(), walk_polymorphic_call_targets(), want_inline_function_to_all_callers_p(), want_inline_small_function_p(), will_be_removed_from_program_if_no_direct_calls_p(), and write_node_summary_p().

◆ ipa_transforms_to_apply

◆ ipcp_clone

◆ local

◆ lowered

◆ lto_file_data

◆ m_summary_id

int cgraph_node::m_summary_id
private

◆ m_uid

int cgraph_node::m_uid
private

Referenced by get_uid().

◆ merged_comdat

◆ merged_extern_inline

◆ need_lto_streaming

◆ next

◆ next_sharing_asm_name

◆ next_sibling_clone

◆ no_reorder

◆ nonfreeing_fn

unsigned cgraph_node::nonfreeing_fn

◆ offloadable

◆ only_called_at_exit

◆ only_called_at_startup

◆ order

◆ parallelized_function

◆ prev_sibling_clone

◆ previous

symtab_node* symtab_node::previous
inherited

◆ previous_sharing_asm_name

◆ process

◆ profile_id

◆ redefined_extern_inline

◆ ref_list

◆ refuse_visibility_changes

unsigned symtab_node::refuse_visibility_changes
inherited

◆ resolution

◆ rtl

struct cgraph_rtl_info* cgraph_node::rtl

◆ same_comdat_group

◆ semantic_interposition

◆ simd_clones

◆ simdclone

◆ split_part

◆ symver

◆ thunk

◆ tm_clone

◆ tm_may_enter_irr

◆ tp_first_run

◆ transparent_alias

◆ type

◆ unique_name

◆ unit_id

◆ used_as_abstract_origin

unsigned cgraph_node::used_as_abstract_origin

◆ used_from_other_partition

◆ versionable

◆ weakref

◆ writeonly

unsigned symtab_node::writeonly
inherited

◆ x_comdat_group

◆ x_section


The documentation for this struct was generated from the following files: