GCC Middle and Back End API Reference
cgraph_edge Struct Reference

#include <cgraph.h>

Collaboration diagram for cgraph_edge:

Data Fields

gcov_type count
struct cgraph_nodecaller
struct cgraph_nodecallee
struct cgraph_edgeprev_caller
struct cgraph_edgenext_caller
struct cgraph_edgeprev_callee
struct cgraph_edgenext_callee
gimple call_stmt
struct cgraph_indirect_call_infoindirect_info
PTR aux
cgraph_inline_failed_t inline_failed
unsigned int lto_stmt_uid
int frequency
int uid
unsigned int indirect_inlining_edge: 1
unsigned int indirect_unknown_callee: 1
unsigned int call_stmt_cannot_inline_p: 1
unsigned int can_throw_external: 1
unsigned int speculative: 1

Field Documentation

PTR cgraph_edge::aux
unsigned int cgraph_edge::call_stmt_cannot_inline_p

Whether this edge is still a dangling True if the corresponding CALL stmt cannot be inlined.

Referenced by cgraph_clone_edge().

unsigned int cgraph_edge::can_throw_external

Can this call throw externally?

Referenced by cgraph_clone_edge().

int cgraph_edge::frequency

Expected frequency of executions within the function. When set to CGRAPH_FREQ_BASE, the edge is expected to be called once per function call. The range is 0 to CGRAPH_FREQ_MAX.

Referenced by cgraph_can_remove_if_no_direct_calls_and_refs_p(), cgraph_clone_edge(), cgraph_edge_cannot_lead_to_return(), cgraph_maybe_hot_edge_p(), clone_inlined_nodes(), copy_static_chain(), initialize_growth_caches(), remap_predicate(), update_call_edge_frequencies(), update_noncloned_frequencies(), and want_inline_self_recursive_call_p().

unsigned int cgraph_edge::indirect_inlining_edge

Whether this edge was made direct by indirect inlining.

Referenced by cgraph_clone_edge(), and cgraph_release_function_body().

unsigned int cgraph_edge::indirect_unknown_callee

Whether this edge describes an indirect call with an undetermined callee.

Referenced by cgraph_allocate_init_indirect_info(), cgraph_clone_edge(), cgraph_for_node_and_aliases(), cgraph_set_edge_callee(), and lto_symtab_encoder_in_partition_p().

cgraph_inline_failed_t cgraph_edge::inline_failed

When equal to CIF_OK, inline this call. Otherwise, points to the explanation why function was not inlined.

Referenced by cgraph_clone_edge(), do_estimate_edge_time(), num_calls(), remap_predicate(), replace_locals_op(), update_noncloned_frequencies(), and want_inline_small_function_p().

unsigned int cgraph_edge::lto_stmt_uid

The stmt_uid of call_stmt. This is used by LTO to recover the call_stmt when the function is serialized in.

Referenced by cgraph_clone_edge(), cgraph_set_edge_callee(), input_ssa_names(), ipa_free_all_edge_args(), and update_call_expr().

struct cgraph_edge* cgraph_edge::prev_callee

Referenced by cgraph_create_edge_1().

struct cgraph_edge* cgraph_edge::prev_caller

Referenced by cgraph_create_edge_1().

unsigned int cgraph_edge::speculative

Edges with SPECULATIVE flag represents indirect calls that was speculatively turned into direct (i.e. by profile feedback). The final code sequence will have form:

if (call_target == expected_fn) expected_fn (); else call_target ();

Every speculative call is represented by three components attached to a same call statement: 1) a direct call (to expected_fn) 2) an indirect call (to call_target) 3) a IPA_REF_ADDR refrence to expected_fn.

Optimizers may later redirect direct call to clone, so 1) and 3) do not need to necesarily agree with destination.

Referenced by add_new_edges_to_heap(), cgraph_clone_edge(), and cgraph_set_edge_callee().

int cgraph_edge::uid

Unique id of the edge.

Referenced by cgraph_create_indirect_edge().


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