GCC Middle and Back End API Reference
|
#include <cgraph.h>
Data Fields | |
gcov_type | count |
struct cgraph_node * | caller |
struct cgraph_node * | callee |
struct cgraph_edge * | prev_caller |
struct cgraph_edge * | next_caller |
struct cgraph_edge * | prev_callee |
struct cgraph_edge * | next_callee |
gimple | call_stmt |
struct cgraph_indirect_call_info * | indirect_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 |
PTR cgraph_edge::aux |
Referenced by inline_small_functions(), and update_caller_keys().
gimple cgraph_edge::call_stmt |
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().
struct cgraph_node* cgraph_edge::callee |
Referenced by cgraph_can_remove_if_no_direct_calls_p(), cgraph_clone_edge(), cgraph_for_node_and_aliases(), cgraph_node_for_asm(), cgraph_redirect_edge_call_stmt_to_callee(), clone_inlined_nodes(), ipa_find_agg_cst_for_param(), ipa_reverse_postorder(), known_aggs_to_agg_replacement_list(), propagate_aggs_accross_jump_function(), propagate_controlled_uses(), propagate_effects(), read_write_all_from_decl(), remap_hint_predicate(), remap_predicate(), replace_locals_op(), report_inline_failed_reason(), searchc(), and update_noncloned_frequencies().
struct cgraph_node* cgraph_edge::caller |
Referenced by add_new_edges_to_heap(), cgraph_allocate_init_indirect_info(), cgraph_can_remove_if_no_direct_calls_and_refs_p(), cgraph_edge_cannot_lead_to_return(), cgraph_edge_remove_caller(), cgraph_for_node_and_aliases(), cgraph_set_edge_callee(), copy_plats_to_inter(), do_estimate_edge_time(), flatten_function(), ipa_free_all_edge_args(), ipa_reverse_postorder(), ipcp_discover_new_direct_edges(), known_aggs_to_agg_replacement_list(), remap_hint_predicate(), report_inline_failed_reason(), set_chain_of_aglats_contains_variable(), try_decrement_rdesc_refcount(), update_specialized_profile(), and want_early_inline_function_p().
unsigned int cgraph_edge::can_throw_external |
Can this call throw externally?
Referenced by cgraph_clone_edge().
gcov_type cgraph_edge::count |
Expected number of executions: calculated in profile.c.
Referenced by cgraph_clone_edge(), cgraph_edge_cannot_lead_to_return(), clone_inlined_nodes(), copy_static_chain(), edge_badness(), known_aggs_to_agg_replacement_list(), remap_predicate(), and want_inline_self_recursive_call_p().
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().
struct cgraph_indirect_call_info* cgraph_edge::indirect_info |
Additional information about an indirect call. Not cleared when an edge becomes direct.
Referenced by cgraph_clone_edge(), cgraph_create_indirect_edge(), cgraph_for_node_and_aliases(), dump_possible_polymorphic_call_targets(), ipa_find_agg_cst_for_param(), possible_polymorphic_call_target_p(), safe_add(), set_agg_lats_contain_variable(), and try_decrement_rdesc_refcount().
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::next_callee |
struct cgraph_edge* cgraph_edge::next_caller |
Referenced by cgraph_create_edge_1(), clone_inlined_nodes(), do_estimate_edge_time(), and ipa_reverse_postorder().
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().