GCC Middle and Back End API Reference
|
Go to the source code of this file.
Data Structures | |
struct | edge_def |
union | edge_def::edge_def_insns |
struct | profile_record |
struct | rtl_bb_info |
struct | gimple_bb_info |
struct | basic_block_def |
union | basic_block_def::basic_block_il_dependent |
struct | control_flow_graph |
struct | ce_if_block |
struct | edge_list |
struct | edge_iterator |
Typedefs | |
typedef HOST_WIDEST_INT | gcov_type |
typedef unsigned HOST_WIDEST_INT | gcov_type_unsigned |
typedef int | __assert_gimple_bb_smaller_rtl_bb [(int) sizeof(struct rtl_bb_info)-(int) sizeof(struct gimple_bb_info)] |
typedef struct ce_if_block | ce_if_block_t |
typedef struct gcov_working_set_info | gcov_working_set_t |
Enumerations | |
enum | cfg_edge_flags { LAST_CFG_EDGE_FLAG } |
enum | cfg_bb_flags { LAST_CFG_BB_FLAG } |
enum | dom_state { DOM_NONE, DOM_NO_FAST_QUERY, DOM_OK } |
enum | profile_status_d { PROFILE_ABSENT, PROFILE_GUESSED, PROFILE_READ, PROFILE_LAST } |
enum | replace_direction { dir_none, dir_forward, dir_backward, dir_both } |
enum | cdi_direction { CDI_DOMINATORS = 1, CDI_POST_DOMINATORS = 2 } |
Variables | |
struct gcov_ctr_summary * | profile_info |
edge | mfb_kj_edge |
typedef int __assert_gimple_bb_smaller_rtl_bb[(int) sizeof(struct rtl_bb_info)-(int) sizeof(struct gimple_bb_info)] |
This ensures that struct gimple_bb_info is smaller than struct rtl_bb_info, so that inlining the former into basic_block_def is the better choice.
typedef struct ce_if_block ce_if_block_t |
Structure to group all of the information to process IF-THEN and IF-THEN-ELSE blocks for the conditional execution support. This needs to be in a public file in case the IFCVT macros call functions passing the ce_if_block data structure.
typedef HOST_WIDEST_INT gcov_type |
Type we use to hold basic block counters. Should be at least 64bit. Although a counter cannot be negative, we use a signed type, because erroneous negative counts can be generated when the flow graph is manipulated by various optimizations. A signed type makes those easy to detect.
typedef unsigned HOST_WIDEST_INT gcov_type_unsigned |
typedef struct gcov_working_set_info gcov_working_set_t |
In profile.c.
enum cdi_direction |
enum cfg_bb_flags |
enum cfg_edge_flags |
enum dom_state |
enum profile_status_d |
enum replace_direction |
void add_noreturn_fake_exit_edges | ( | void | ) |
This function will add a fake edge between any block which has no successors, and the exit block. Some data flow equations require these edges to exist.
References make_single_succ_edge(), and basic_block_def::succs.
Referenced by branch_prob(), cleanup_cfg(), one_pre_gcse_pass(), one_store_motion_pass(), rebuild_frequencies(), and tree_estimate_probability().
void add_to_dominance_info | ( | enum | cdi_direction, |
basic_block | |||
) |
Referenced by create_basic_block().
void alloc_aux_for_blocks | ( | int | ) |
void alloc_aux_for_edge | ( | edge | , |
int | |||
) |
Referenced by alloc_aux_for_edges(), and execute_sm_if_changed().
void alloc_aux_for_edges | ( | int | ) |
Referenced by branch_prob(), estimate_bb_frequencies(), and tree_ssa_lim_initialize().
basic_block alloc_block | ( | void | ) |
Allocate memory for basic_block.
Referenced by create_basic_block_structure(), create_bb(), and make_new_block().
|
inlinestatic |
Apply probability PROB on frequency or count FREQ.
Referenced by cgraph_clone_edge(), compute_outgoing_frequencies(), estimate_edge_size_and_time(), estimate_node_size_and_time(), expand_transaction(), inline_merge_summary(), loopify(), lv_adjust_loop_entry_edge(), scale_loop_profile(), set_prologue_iterations(), shrink_wrap_one_built_in_call(), slpeel_add_loop_guard(), slpeel_tree_peel_loop_to_edge(), try_forward_edges(), unswitch_loop(), update_profiling_info(), and update_specialized_profile().
|
inlinestatic |
Apply scale factor SCALE on frequency or count FREQ. Use this interface when potentially scaling up, so that SCALE is not constrained to be < REG_BR_PROB_BASE.
Referenced by copy_bb(), copy_cfg_body(), copy_edges_for_bb(), execute_fixup_cfg(), input_bb(), input_cfg(), ipa_profile(), and merge_profile_summaries().
unsigned bb_dom_dfs_in | ( | enum | cdi_direction, |
basic_block | |||
) |
Referenced by prune_unused_phi_nodes().
unsigned bb_dom_dfs_out | ( | enum | cdi_direction, |
basic_block | |||
) |
Referenced by prune_unused_phi_nodes().
|
inlinestatic |
Return true when one of the predecessor edges of BB is marked with EDGE_ABNORMAL.
Referenced by bb_loop_header_p(), create_new_def_for(), has_nonexceptional_receiver(), merge_phi_nodes(), process_bb_lives(), process_bb_node_lives(), remove_forwarder_block(), and rewrite_update_enter_block().
|
inlinestatic |
Return true when one of the predecessor edges of BB is marked with EDGE_EH.
Referenced by cse_extended_basic_block(), df_bb_refs_collect(), df_exit_block_uses_collect(), df_simulate_fixup_sets(), fast_dce(), initiate_bb_reg_pressure_info(), process_bb_lives(), and process_bb_node_lives().
rtx bb_note | ( | basic_block | ) |
Referenced by _succ_iter_cond(), advance_target_bb(), commit_schedule(), create_basic_block_structure(), create_speculation_check(), delete_insn(), inherit_in_ebb(), init_seqno_1(), move_insn_for_shrink_wrap(), move_nop_to_previous_block(), restore_other_notes(), sel_dump_cfg_2(), sel_region_finish(), and sel_sched_region_1().
void bitmap_intersection_of_preds | ( | sbitmap | , |
sbitmap * | , | ||
basic_block | |||
) |
Referenced by compute_available().
void bitmap_intersection_of_succs | ( | sbitmap | , |
sbitmap * | , | ||
basic_block | |||
) |
In cfganal.c
Referenced by compute_antinout_edge(), and compute_code_hoist_vbeinout().
void bitmap_union_of_preds | ( | sbitmap | , |
sbitmap * | , | ||
basic_block | |||
) |
Referenced by compute_out(), and link_btr_uses().
void bitmap_union_of_succs | ( | sbitmap | , |
sbitmap * | , | ||
basic_block | |||
) |
rtx block_label | ( | basic_block | ) |
In cfgrtl.c
Referenced by add_labels_and_missing_jumps(), add_test(), block_has_preserve_label(), dead_or_predicable(), doloop_modify(), doloop_optimize(), fix_crossing_conditional_branches(), fix_up_crossing_landing_pad(), fix_up_fall_thru_edges(), force_nonfallthru_and_redirect(), init_before_recovery(), label_for_bb(), label_rtx_for_bb(), patch_jump_insn(), rtl_lv_add_condition_to_bb(), sched_create_recovery_edges(), try_redirect_by_replacing_jump(), try_simplify_condjump(), unroll_loop_runtime_iterations(), and unswitch_loop().
bool br_prob_note_reliable_p | ( | const_rtx | ) |
void break_superblocks | ( | void | ) |
Splits superblocks.
References bitmap_clear(), bitmap_set_bit(), find_many_sub_basic_blocks(), basic_block_def::flags, free(), get_insns(), basic_block_def::index, rebuild_jump_labels(), and sbitmap_alloc().
Referenced by finish_eh_generation().
void brief_dump_cfg | ( | FILE * | , |
int | |||
) |
Referenced by gimple_dump_cfg(), and tracer().
edge cached_make_edge | ( | sbitmap | , |
basic_block | , | ||
basic_block | , | ||
int | |||
) |
Referenced by make_edges(), and make_label_edge().
void calculate_dominance_info | ( | enum | cdi_direction | ) |
Referenced by branch_target_load_optimize(), build_omp_regions(), cleanup_cfg(), cleanup_tree_cfg_noloop(), compute_code_hoist_data(), create_parallel_loop(), create_sese_edges(), do_ssa_ccp(), eliminate_degenerate_phis(), estimate_function_body_sizes(), execute_cse_reciprocals(), execute_cse_sincos(), execute_early_warn_uninitialized(), execute_late_warn_uninitialized(), execute_optimize_stdarg(), execute_sink_code(), execute_split_functions(), find_comparisons(), find_moveable_pseudos(), flow_loops_find(), fwprop_init(), gate_tm_init(), get_non_trapping(), identify_jump_threads(), if_convert(), if_convertible_loop_p_1(), init_pre(), init_reassoc(), init_scc_vn(), insert_range_assertions(), ipa_tm_execute(), ipa_tm_scan_irr_function(), ipa_tm_transform_clone(), ipa_tm_transform_transaction(), loop_optimizer_init(), merge_phi_nodes(), peel_loops_completely(), perform_tree_ssa_dce(), recompute_all_dominators(), repair_loop_structures(), rewrite_into_ssa(), sched_rgn_init(), sel_global_init(), tail_merge_optimize(), tree_estimate_probability(), tree_ssa_dominator_optimize(), tree_ssa_dse(), tree_ssa_ifcombine(), tree_ssa_phiprop(), tree_ssa_strlen(), tree_ssa_uncprop(), unroll_and_peel_loops(), unswitch_loops(), update_ssa(), verify_loop_structure(), and verify_ssa().
bool can_fallthru | ( | basic_block | , |
basic_block | |||
) |
|
inlinestatic |
Check tha probability is sane.
bool cleanup_cfg | ( | int | ) |
In cfgcleanup.c.
Referenced by branch_target_load_optimize(), cfg_layout_initialize(), convert_regs(), do_reload(), execute_jump(), execute_jump2(), execute_rtl_cprop(), execute_rtl_hoist(), execute_rtl_pre(), fwprop(), fwprop_addr(), fwprop_done(), gimple_expand_cfg(), optimize_mode_switching(), reload_cse_regs_1(), rest_of_handle_combine(), rest_of_handle_cse(), rest_of_handle_cse2(), rest_of_handle_cse_after_global_opts(), rest_of_handle_if_conversion(), rest_of_handle_postreload(), rest_of_handle_reorder_blocks(), rest_of_handle_thread_prologue_and_epilogue(), and rtl_loop_done().
void clear_aux_for_blocks | ( | void | ) |
Clear AUX pointers of all blocks.
References basic_block_def::aux.
Referenced by compute_antinout_edge(), compute_available(), convert_regs(), find_comparisons(), find_spanning_tree(), free_aux_for_blocks(), get_non_trapping(), if_convert(), partition_hot_cold_basic_blocks(), and reorder_loops().
void clear_aux_for_edges | ( | void | ) |
Clear AUX pointers of all edges.
References edge_def::aux, and basic_block_def::succs.
Referenced by compute_antinout_edge(), compute_available(), compute_laterin(), compute_nearerout(), free_aux_for_edges(), and optimize_mode_switching().
void clear_bb_flags | ( | void | ) |
Clear all basic block flags that do not have to be preserved.
References basic_block_def::flags.
Referenced by combine_instructions(), duplicate_computed_gotos(), and try_optimize_cfg().
void clear_edges | ( | void | ) |
Free the memory associated with the edge structures.
References free_edge(), basic_block_def::preds, basic_block_def::succs, and vec_safe_truncate().
Referenced by release_function_body().
|
inlinestatic |
Given PROB1 and PROB2, return PROB1*PROB2/REG_BR_PROB_BASE. Used to combine BB probabilities.
Referenced by compute_dom_prob_ps(), duplicate_loop_to_header_edge(), remap_edge_change_prob(), and slpeel_tree_peel_loop_to_edge().
void commit_edge_insertions | ( | void | ) |
Update the CFG for all queued instructions.
References commit_one_edge_insertion(), edge_def::insns, edge_def::edge_def_insns::r, basic_block_def::succs, and verify_flow_info().
Referenced by bypass_conditional_jumps(), convert_regs(), eliminate_partially_redundant_loads(), emit_insn_at_entry(), finish_eh_generation(), ira_emit(), lra(), one_store_motion_pass(), optimize_mode_switching(), pre_gcse(), reload(), rtl_flow_call_edges_add(), and thread_prologue_and_epilogue_insns().
void commit_one_edge_insertion | ( | edge | e | ) |
Referenced by commit_edge_insertions(), and gimple_expand_cfg().
void compact_blocks | ( | void | ) |
Sequentially order blocks and compact the arrays.
References df, df_compact_blocks(), and basic_block_def::index.
Referenced by analyze_function(), branch_prob(), cleanup_cfg(), cleanup_tree_cfg_noloop(), and relink_block_chain().
Compute the AVIN and AVOUT vectors from the AVLOC and KILL vectors. Return the number of passes we performed to iterate to a solution.
References basic_block_def::aux, bitmap_clear(), bitmap_intersection_of_preds(), bitmap_ior_and_compl(), bitmap_vector_ones(), clear_aux_for_blocks(), clear_aux_for_edges(), edge_def::dest, free(), basic_block_def::index, basic_block_def::succs, and worklist.
Referenced by compute_cprop_data(), pre_edge_lcm(), and pre_edge_rev_lcm().
void compute_bb_for_insn | ( | void | ) |
Records the basic block struct in BLOCK_FOR_INSN for every insn.
Referenced by schedule_ebbs_init().
void compute_dominance_frontiers | ( | struct bitmap_head_def * | ) |
Referenced by df_md_local_compute(), rewrite_into_ssa(), and update_ssa().
bitmap compute_idf | ( | bitmap | , |
struct bitmap_head_def * | |||
) |
Referenced by insert_phi_nodes(), and insert_updated_phi_nodes_for().
void connect_infinite_loops_to_exit | ( | void | ) |
This function adds a fake edge between any infinite loops to the exit block. Some optimizations require a path from each node to the exit node. See also Morgan, Figure 3.10, pp. 82-83. The current implementation is ugly, not attempting to minimize the number of inserted fake edges. To reduce the number of fake edges to insert, add fake edges from _innermost_ loops containing only nodes not reachable from the exit block.
References dfs_find_deadend(), flow_dfs_compute_reverse_add_bb(), flow_dfs_compute_reverse_execute(), flow_dfs_compute_reverse_finish(), flow_dfs_compute_reverse_init(), and make_edge().
Referenced by execute_sink_code(), init_pre(), one_store_motion_pass(), rebuild_frequencies(), and tree_estimate_probability().
bool contains_no_active_insn_p | ( | const_basic_block | ) |
Referenced by doloop_optimize(), and forwarder_block_p().
bool control_flow_insn_p | ( | const_rtx | ) |
Referenced by add_deps_for_risky_insns(), add_labels_and_missing_jumps(), advance_target_bb(), begin_move_insn(), commit_schedule(), dce_process_block(), decompose_multiword_subregs(), emit_moves(), find_bb_boundaries(), find_moveable_pseudos(), find_place_for_bookkeeping(), move_for_stack_reg(), move_insn(), moveup_expr(), reload_combine(), remove_insns_that_need_bookkeeping(), rtl_verify_bb_insns(), sched_analyze_insn(), sel_rank_for_schedule(), try_head_merge_bb(), unify_moves(), update_and_record_unavailable_insns(), and word_dce_process_block().
basic_block create_basic_block_structure | ( | rtx | , |
rtx | , | ||
rtx | , | ||
basic_block | |||
) |
Referenced by rtl_create_basic_block().
|
read |
Functions to access an edge list with a vector representation. Enough data is kept such that given an index number, the pred and succ that edge represents can be determined, or given a pred and a succ, its index number can be returned. This allows algorithms which consume a lot of memory to represent the normally full matrix of edge (pred,succ) with a single indexed vector, edge (EDGE_INDEX (pred, succ)), with no wasted space in the client code due to sparse flow graphs.
This functions initializes the edge list. Basically the entire flowgraph is processed, and all edges are assigned a number, and the data structure is filled in.
References edge_list::index_to_edge, edge_list::num_edges, and basic_block_def::succs.
Referenced by branch_prob(), perform_tree_ssa_dce(), pre_edge_lcm(), and pre_edge_rev_lcm().
void debug | ( | edge_def & | ref | ) |
void debug | ( | edge_def * | ptr | ) |
void debug_bb | ( | basic_block | ) |
Referenced by debug_bb_n().
basic_block debug_bb_n | ( | int | ) |
void default_rtl_profile | ( | void | ) |
Set RTL expansion to default mode (i.e. when profile info is not known).
Referenced by combine_instructions(), computation_cost(), gimple_expand_cfg(), gimplify_body(), init_expmed(), init_set_costs(), optimize_mode_switching(), peephole2_optimize(), prepare_function_start(), split_all_insns(), and thread_prologue_and_epilogue_insns().
void delete_from_dominance_info | ( | enum | cdi_direction, |
basic_block | |||
) |
Referenced by delete_basic_block(), merge_blocks(), and move_block_to_fn().
bool delete_unreachable_blocks | ( | void | ) |
Delete all unreachable basic blocks.
References CDI_DOMINATORS, changed, current_ir_type(), delete_basic_block(), dom_info_available_p(), find_unreachable_blocks(), first_dom_son(), basic_block_def::flags, get_all_dominated_blocks(), IR_GIMPLE, basic_block_def::prev_bb, and tidy_fallthru_edges().
Referenced by cleanup_cfg(), cleanup_tree_cfg_noloop(), delete_unmarked_insns(), execute_cleanup_eh_1(), execute_lower_eh_dispatch(), execute_rtl_cprop(), execute_rtl_hoist(), execute_rtl_pre(), execute_rtl_store_motion(), expand_thunk(), ira(), one_cprop_pass(), and tail_merge_optimize().
int dfs_enumerate_from | ( | basic_block | bb, |
int | reverse, | ||
bool(*)(const_basic_block, const void *) | predicate, | ||
basic_block * | rslt, | ||
int | rslt_max, | ||
const void * | data | ||
) |
Performs dfs search from BB over vertices satisfying PREDICATE; if REVERSE, go against direction of edges. Returns number of blocks found and their list in RSLT. RSLT can contain at most RSLT_MAX items.
References bitmap_clear(), edge_def::dest, free(), basic_block_def::preds, sbitmap_alloc(), sbitmap_resize(), depth_first_search_dsS::sp, edge_def::src, basic_block_def::succs, and visited.
Referenced by determine_bb_domination_status(), find_path(), get_loop_body_with_size(), new_loop_vec_info(), and thread_through_loop_header().
basic_block dfs_find_deadend | ( | basic_block | ) |
Referenced by calc_dfs_tree(), connect_infinite_loops_to_exit(), and inverted_post_order_compute().
bool dom_info_available_p | ( | enum | cdi_direction | ) |
Referenced by adjust_debug_stmts_now(), and_comparisons_1(), calculate_dominance_info(), cleanup_cfg(), cleanup_tree_cfg_noloop(), compute_dom_fast_query(), create_basic_block(), create_cond_insert_point(), delete_basic_block(), delete_unreachable_blocks(), eliminate_unnecessary_stmts(), emit_case_bit_tests(), expand_complex_div_wide(), force_nonfallthru(), free_dominance_info(), gen_inbound_check(), insert_debug_temp_for_var_def(), make_forwarder_block(), merge_blocks(), mf_build_check_statement_for(), or_comparisons_1(), redirect_edge_and_branch_force(), remove_edge_and_dominated_blocks(), remove_forwarder_block(), sched_create_recovery_edges(), split_block(), split_edge(), tail_merge_optimize(), verify_dominators(), and verify_loop_structure().
enum dom_state dom_info_state | ( | enum | cdi_direction | ) |
Referenced by find_if_header(), fix_loop_structure(), gimple_verify_flow_info(), split_edge(), and verify_ssa().
bool dominated_by_p | ( | enum | cdi_direction, |
const_basic_block | , | ||
const_basic_block | |||
) |
Referenced by add_autoinc_candidates(), adjust_debug_stmts_now(), all_non_dominated_preds_marked_p(), analyze_insns_in_loop(), and_comparisons_1(), augment_live_range(), bb_in_region(), bb_loop_header_p(), check_dependency(), check_simple_exit(), collect_phi_def_edges(), combine_btr_defs(), compute_always_reached(), compute_live_loop_exits(), compute_merit(), create_single_entry_edge(), deps_ok_for_redirect_from_bb_to_bb(), do_invalidate(), do_warn_aggressive_loop_optimizations(), dominated_by_forbidden(), dr_indices_valid_in_loop(), dse_possible_dead_store_p(), duplicate_loop_to_header_edge(), expr_invariant_in_region_p(), extract_true_false_args_from_phi(), fill_always_executed_in_1(), fill_sons_in_loop(), find_basis_for_base_expr(), find_basis_for_candidate(), find_control_equiv_block(), find_if_case_2(), find_predicates(), find_subloop_latch_edge_by_ivs(), flow_loop_nodes_find(), get_continuation_for_phi(), get_continuation_for_phi_1(), get_loop_latch_edges(), gimple_duplicate_sese_region(), glb_enum_p(), haifa_find_rgns(), idx_infer_loop_bounds(), if_convertible_bb_p(), infer_loop_bounds_from_undefined(), insert_updated_phi_nodes_for(), insn_dominated_by_p(), instantiate_scev_name(), invariant_for_use(), is_non_loop_exit_postdominating(), iv_get_reaching_def(), just_once_each_iteration_p(), lhs_of_dominating_assert(), mark_aliased_reaching_defs_necessary_1(), may_eliminate_iv(), maybe_record_sincos(), merge_phi_nodes(), move_sese_region_to_fn(), not_dominated_by(), number_of_iterations_exit(), or_comparisons_1(), phi_add_costs(), phivn_valid_p(), predict_paths_for_bb(), predict_paths_leading_to_edge(), propagate_with_phi(), prune_bbs_to_update_dominators(), prune_clobbered_mems(), reachable_at_most_once(), recompute_dominator(), record_estimate(), record_increment(), register_new_assert_for(), remove_edge_and_dominated_blocks(), remove_insns_that_need_bookkeeping(), remove_path(), rewrite_debug_stmt_uses(), rpe_enum_p(), scopdet_basic_block_info(), set_livein_block(), single_incoming_edge_ignoring_loop_edges(), split_data_refs_to_components(), split_edge(), statement_sink_location(), stmt_after_inc_pos(), stmt_dominates_stmt_p(), suitable_component_p(), thread_private_new_memory(), tm_log_add(), transaction_invariant_address_p(), tree_estimate_loop_size(), tree_estimate_probability_bb(), update_debug_stmt(), update_dep_bb(), update_rep_bb(), use_killed_between(), vect_recog_rotate_pattern(), verify_loop_structure(), verify_use(), and warn_uninitialized_vars().
void dump_bb_info | ( | FILE * | outf, |
basic_block | bb, | ||
int | indent, | ||
int | flags, | ||
bool | do_header, | ||
bool | do_footer | ||
) |
Dumps cfg related information about basic block BB to OUTF. If HEADER is true, dump things that appear before the instructions contained in BB. If FOOTER is true, dump things that appear after. Flags are the TDF_* masks as documented in dumpfile.h. NB: With TDF_DETAILS, it is assumed that cfun is available, so that maybe_hot_bb_p and probably_never_executed_bb_p don't ICE.
References bb_loop_depth(), check_bb_profile(), basic_block_def::count, current_function_decl, dump_edge_info(), first, basic_block_def::flags, basic_block_def::frequency, HOST_WIDEST_INT, HOST_WIDEST_INT_PRINT_DEC, indent, basic_block_def::index, maybe_hot_bb_p(), memset(), basic_block_def::next_bb, basic_block_def::preds, basic_block_def::prev_bb, probably_never_executed_bb_p(), and basic_block_def::succs.
Referenced by brief_dump_cfg(), dump_bb(), and print_rtl_with_bb().
void dump_edge_info | ( | FILE * | , |
edge | , | ||
int | , | ||
int | |||
) |
Referenced by debug(), dump_asserts_for(), dump_basic_block_info(), dump_bb_info(), and verify_flow_info().
void dump_flow_info | ( | FILE * | , |
int | |||
) |
bool edge_probability_reliable_p | ( | const_edge | ) |
|
inlinestatic |
Return 1 if we should continue to iterate. Return 0 otherwise. *Edge P is set to the next edge if we are to continue to iterate and NULL otherwise.
Referenced by _succ_iter_cond().
Referenced by remove_reachable_equiv_notes().
|
inlinestatic |
Return the edge pointed to by the iterator `i'.
Referenced by calc_dfs_tree_nonrec(), calc_idoms(), haifa_find_rgns(), input_function(), inverted_post_order_compute(), mark_dfs_back_edges(), post_order_compute(), pre_and_rev_post_order_compute(), remove_reachable_equiv_notes(), and vt_stack_adjustments().
|
inlinestatic |
Is the iterator `i' at the end of the sequence?
Referenced by calc_dfs_tree_nonrec(), calc_idoms(), and remove_reachable_equiv_notes().
|
inlinestatic |
Return an iterator pointing to the last element of an edge vector.
|
inlinestatic |
Advance the iterator to the next element.
Referenced by _succ_iter_cond(), _succ_iter_next(), bypass_block(), calc_dfs_tree_nonrec(), calc_idoms(), cleanup_control_expr_graph(), cleanup_control_flow_bb(), cleanup_empty_eh(), cleanup_empty_eh_merge_phis(), combine_blocks(), disconnect_src(), dup_block_and_redirect(), emit_to_new_bb_before(), expand_gimple_tailcall(), expand_phi_nodes(), fix_up_crossing_landing_pad(), fixup_reorder_chain(), force_nonfallthru_and_redirect(), force_one_exit_fallthru(), gimple_expand_cfg(), gimple_purge_dead_abnormal_call_edges(), gimple_purge_dead_eh_edges(), haifa_find_rgns(), inverted_post_order_compute(), make_forwarder_block(), mark_dfs_back_edges(), post_order_compute(), pre_and_rev_post_order_compute(), propagate_rhs_into_lhs(), purge_dead_edges(), purge_dead_tablejump_edges(), remove_ctrl_stmt_and_useless_edges(), remove_dead_stmt(), remove_fake_predecessors(), remove_reachable_equiv_notes(), simplify_gimple_switch_label_vec(), thread_prologue_and_epilogue_insns(), try_forward_edges(), update_bb_profile_for_threading(), and vt_stack_adjustments().
|
inlinestatic |
Is the iterator `i' at one position before the end of the sequence?
Referenced by inverted_post_order_compute(), mark_dfs_back_edges(), maybe_move_debug_stmts_to_successors(), post_order_compute(), pre_and_rev_post_order_compute(), and vt_stack_adjustments().
|
inlinestatic |
Move the iterator to the previous element.
|
inlinestatic |
Return an edge pointed to by the iterator. Do it safely so that NULL is returned when the iterator is pointing at the end of the sequence.
Referenced by bypass_block(), cleanup_control_expr_graph(), cleanup_control_flow_bb(), cleanup_empty_eh(), cleanup_empty_eh_merge_phis(), combine_blocks(), disconnect_src(), dup_block_and_redirect(), emit_insn_at_entry(), emit_to_new_bb_before(), expand_gimple_tailcall(), expand_phi_nodes(), fix_up_crossing_landing_pad(), fixup_reorder_chain(), force_nonfallthru_and_redirect(), force_one_exit_fallthru(), gimple_expand_cfg(), gimple_purge_dead_abnormal_call_edges(), gimple_purge_dead_eh_edges(), make_forwarder_block(), move_sese_region_to_fn(), propagate_rhs_into_lhs(), prune_bbs(), purge_dead_edges(), purge_dead_tablejump_edges(), remove_ctrl_stmt_and_useless_edges(), remove_dead_stmt(), remove_fake_predecessors(), remove_forwarder_block(), simplify_gimple_switch_label_vec(), thread_prologue_and_epilogue_insns(), try_forward_edges(), and update_bb_profile_for_threading().
|
inlinestatic |
Return an iterator pointing to the start of an edge vector.
void emit_barrier_after_bb | ( | basic_block | bb | ) |
void expunge_block | ( | basic_block | ) |
Referenced by delete_basic_block(), and merge_blocks().
edge find_edge | ( | basic_block | , |
basic_block | |||
) |
Referenced by add_phi_args_after_copy_edge(), associate_equivalences_with_edges(), build_constructors(), bypass_block(), cached_make_edge(), cleanup_empty_eh_merge_phis(), collect_switch_conv_info(), compute_cases_per_edge(), cond_move_process_if_block(), convert_jumps_to_returns(), copy_phis_for_bb(), create_cond_insert_point(), cse_extended_basic_block(), cse_find_path(), disambiguate_multiple_latches(), emit_case_bit_tests(), execute_sm_if_changed(), expand_case(), expand_omp_for_generic(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), find_implicit_sets(), find_switch_asserts(), find_taken_edge_computed_goto(), find_taken_edge_switch_expr(), force_single_succ_latches(), gather_default_values(), get_cases_for_edge(), gimple_flow_call_edges_add(), gimple_lv_adjust_loop_header_phi(), gimple_redirect_edge_and_branch(), is_inconsistent(), loop_latch_edge(), lower_eh_dispatch(), make_edge(), make_edges(), make_forwarder_block(), maybe_optimize_range_tests(), mf_build_check_statement_for(), noce_process_if_block(), phi_translate_1(), predict_loops(), propagate_freq(), prune_bbs_to_update_dominators(), redirect_edge_and_branch_force(), redirect_edge_succ_nodup(), remove_dead_stmt(), remove_forwarder_block(), remove_forwarder_block_with_phi(), rtl_flow_call_edges_add(), same_phi_alternatives(), same_phi_args_p(), same_succ_hash(), set_switch_stmt_execution_predicate(), simplify_switch_using_ranges(), split_edge_bb_loc(), ssa_fix_duplicate_block_edges(), suitable_cond_bb(), tail_duplicate(), thread_across_edge(), translate_vuse_through_block(), tree_transform_and_unroll_loop(), unsplit_eh(), update_destination_phis(), update_ssa_across_abnormal_edges(), verify_eh_dispatch_edge(), verify_loop_structure(), vrp_visit_switch_stmt(), and vt_initialize().
int find_edge_index | ( | struct edge_list * | , |
basic_block | , | ||
basic_block | |||
) |
|
inlinestatic |
Return the fallthru edge in EDGES if it exists, NULL otherwise.
Referenced by begin_move_insn(), block_fallthru(), cfg_layout_can_merge_blocks_p(), dump_implicit_edges(), expand_complex_move(), find_fallthru_edge_from(), find_single_block_region(), fixup_abnormal_edges(), fixup_fallthru_exit_predecessor(), fixup_reorder_chain(), gimple_ic(), insert_stmt_after(), instrument_expr(), lra_inheritance(), merge_blocks_move(), rtl_split_edge(), rtl_verify_fallthru(), schedule_ebbs(), schedule_region(), shrink_wrap_one_built_in_call(), thread_prologue_and_epilogue_insns(), try_crossjump_bb(), try_crossjump_to_edge(), and walk_to_nondebug_insn().
void find_many_sub_basic_blocks | ( | sbitmap | ) |
In cfgbuild.c.
Referenced by break_superblocks(), gimple_expand_cfg(), lra(), reload(), split_all_insns(), and thread_prologue_and_epilogue_insns().
void find_unreachable_blocks | ( | void | ) |
In cfganal.c
Find unreachable blocks. An unreachable block will have 0 in the reachable bit in block->flags. A nonzero value indicates the block is reachable.
References edge_def::dest, basic_block_def::flags, free(), basic_block_def::succs, and worklist.
Referenced by delete_unreachable_blocks(), delete_unreachable_blocks_update_callgraph(), and eliminate_unnecessary_stmts().
gcov_working_set_t* find_working_set | ( | unsigned | pct_times_10 | ) |
Referenced by get_hot_bb_threshold().
basic_block first_dom_son | ( | enum | cdi_direction, |
basic_block | |||
) |
Referenced by break_up_subtract_bb(), build_omp_regions_1(), compute_avail(), debug_dominance_tree_1(), delete_unreachable_blocks(), eliminate_degenerate_phis_1(), eliminate_unnecessary_stmts(), fill_sons_in_loop(), gather_blocks_in_sese_region(), get_dominated_by_region(), get_dominated_to_depth(), insert_aux(), ipa_tm_propagate_irr(), predict_paths_for_bb(), prepare_block_for_update(), reassociate_bb(), remove_edge_and_dominated_blocks(), remove_path(), scale_dominated_blocks_in_loop(), sink_code_in_bb(), update_dominators_in_loop(), and walk_dominator_tree().
bool fixup_abnormal_edges | ( | void | ) |
This is used by a few passes that emit some instructions after abnormal calls, moving the basic block's end, while they in fact do want to emit them on the fallthru edge. Look for abnormal call edges, find backward the call in the block and insert the instructions on the edge instead. Similarly, handle instructions throwing exceptions internally. Return true when instructions have been found and inserted on edges.
References can_throw_internal(), delete_insn(), find_fallthru_edge(), edge_def::flags, insert_insn_on_edge(), inserted, purge_dead_edges(), and basic_block_def::succs.
Referenced by convert_regs(), lra(), and reload().
int flow_find_cross_jump | ( | basic_block | bb1, |
basic_block | bb2, | ||
rtx * | f1, | ||
rtx * | f2, | ||
enum replace_direction * | dir_p | ||
) |
Look through the insns at the end of BB1 and BB2 and find the longest sequence that are either equivalent, or allow forward or backward replacement. Store the first insns for that sequence in *F1 and *F2 and return the sequence length. DIR_P indicates the allowed replacement direction on function entry, and the actual replacement direction on function exit. If NULL, only equivalent sequences are allowed. To simplify callers of this function, if the blocks match exactly, store the head of the blocks in *F1 and *F2.
References cc0_rtx, dir_backward, dir_both, dir_forward, dir_none, i1, i2, merge_dir(), merge_memattrs(), merge_notes(), old_insns_match_p(), onlyjump_p(), reg_mentioned_p(), returnjump_p(), sets_cc0_p(), side_effects_p(), simplejump_p(), and walk_to_nondebug_insn().
Referenced by cond_exec_process_if_block(), and try_crossjump_to_edge().
int flow_find_head_matching_sequence | ( | basic_block | bb1, |
basic_block | bb2, | ||
rtx * | f1, | ||
rtx * | f2, | ||
int | stop_after | ||
) |
Like flow_find_cross_jump, except start looking for a matching sequence from the head of the two blocks. Do not include jumps at the end. If STOP_AFTER is nonzero, stop after finding that many matching instructions.
References cc0_rtx, dir_both, edge_def::flags, i1, i2, merge_memattrs(), merge_notes(), old_insns_match_p(), reg_mentioned_p(), sets_cc0_p(), and basic_block_def::succs.
Referenced by cond_exec_process_if_block(), and try_head_merge_bb().
basic_block force_nonfallthru_and_redirect | ( | edge | , |
basic_block | , | ||
rtx | |||
) |
Referenced by find_if_case_1(), fixup_reorder_chain(), rtl_force_nonfallthru(), and rtl_redirect_edge_and_branch_force().
bool forwarder_block_p | ( | const_basic_block | ) |
void free_aux_for_blocks | ( | void | ) |
Free data allocated in block_aux_obstack and clear AUX pointers of all blocks.
References block_aux_obstack, and clear_aux_for_blocks().
Referenced by compute_branch_probabilities(), delete_worklist(), estimate_bb_frequencies(), fini_pre(), one_code_hoisting_pass(), reg_to_stack(), and vt_finalize().
void free_aux_for_edges | ( | void | ) |
Free data allocated in edge_aux_obstack and clear AUX pointers of all edges.
References clear_aux_for_edges(), and edge_aux_obstack.
Referenced by branch_prob(), estimate_bb_frequencies(), and tree_ssa_lim_finalize().
unsigned int free_bb_for_insn | ( | void | ) |
Release the basic_block_for_insn array.
References get_insns().
Referenced by rest_of_clean_state(), and rest_of_pass_free_cfg().
void free_dominance_info | ( | enum | cdi_direction | ) |
Referenced by analyze_function(), branch_target_load_optimize(), canonicalize_loop_closed_ssa(), cgraph_process_new_functions(), cleanup_cfg(), compute_alignments(), create_parallel_loop(), do_per_function(), do_per_function_toporder(), do_reload(), do_ssa_ccp(), do_switchconv(), eliminate_degenerate_phis(), estimate_function_body_sizes(), execute_cleanup_eh_1(), execute_cse_reciprocals(), execute_cse_sincos(), execute_early_warn_uninitialized(), execute_late_warn_uninitialized(), execute_lower_resx(), execute_sink_code(), execute_tm_edges(), execute_tm_mark(), execute_vrp(), find_comparisons(), find_moveable_pseudos(), fini_pre(), fini_reassoc(), free_code_hoist_mem(), fwprop_done(), gimple_expand_cfg(), if_convert(), input_function(), ipa_modify_call_arguments(), ipa_tm_scan_calls_transaction(), ira(), modify_function(), optimize_inline_calls(), perform_tree_ssa_dce(), recompute_all_dominators(), rest_of_handle_sms(), rtl_loop_done(), sched_rgn_init(), sel_global_finish(), simplify_gimple_switch_label_vec(), split_function(), tail_merge_optimize(), thread_block(), tracer(), tree_call_cdce(), tree_estimate_probability(), tree_function_versioning(), tree_optimize_tail_calls_1(), tree_profiling(), tree_ssa_dominator_optimize(), tree_ssa_dse(), verify_loop_structure(), and verify_ssa().
void free_edge_list | ( | struct edge_list * | ) |
Referenced by branch_prob(), one_pre_gcse_pass(), one_store_motion_pass(), optimize_mode_switching(), and perform_tree_ssa_dce().
void free_original_copy_tables | ( | void | ) |
Free the data structures to maintain mapping between blocks and its copies.
References hash_table< Descriptor, Allocator >::dispose(), and free_alloc_pool().
Referenced by copy_loop_before(), gen_parallel_loop(), gimple_duplicate_sese_region(), gimple_duplicate_sese_tail(), graphite_finalize(), ipa_tm_execute(), relink_block_chain(), tail_duplicate(), thread_through_all_blocks(), tree_predictive_commoning(), tree_ssa_prefetch_arrays(), tree_unswitch_single_loop(), try_unroll_loop_completely(), vect_do_peeling_for_alignment(), vect_do_peeling_for_loop_bound(), and vect_loop_versioning().
vec<basic_block> get_all_dominated_blocks | ( | enum | cdi_direction, |
basic_block | |||
) |
basic_block get_bb_copy | ( | basic_block | ) |
basic_block get_bb_original | ( | basic_block | ) |
vec<basic_block> get_dominated_by | ( | enum | cdi_direction, |
basic_block | |||
) |
vec<basic_block> get_dominated_by_region | ( | enum cdi_direction | dir, |
basic_block * | region, | ||
unsigned | n_region | ||
) |
Returns the list of basic blocks that are immediately dominated (in direction DIR) by some block between N_REGION ones stored in REGION, except for blocks in the REGION itself.
References dom, first_dom_son(), basic_block_def::flags, next_dom_son(), and vNULL.
Referenced by gimple_duplicate_sese_region(), gimple_duplicate_sese_tail(), and move_sese_region_to_fn().
vec<basic_block> get_dominated_to_depth | ( | enum | cdi_direction, |
basic_block | , | ||
int | |||
) |
Referenced by get_all_dominated_blocks(), and hoist_code().
basic_block get_immediate_dominator | ( | enum | cdi_direction, |
basic_block | |||
) |
Referenced by bound_difference(), compute_avail(), compute_dominance_frontiers_1(), copy_bbs(), debug_dominance_info(), determine_max_movement(), expand_omp_for_generic(), fill_always_executed_in_1(), find_dom(), find_pdom(), gen_inbound_check(), gsi_prev_dom_bb_nondebug(), hoist_edge_and_branch_if_true(), insert_aux(), migrate_btr_def(), migrate_btr_defs(), move_computations_stmt(), move_sese_region_to_fn(), noce_can_store_speculate_p(), propagate_necessity(), prune_unused_phi_nodes(), record_equivalences_from_incoming_edge(), remove_dead_stmt(), remove_edge_and_dominated_blocks(), remove_forwarder_block(), remove_forwarder_block_with_phi(), remove_path(), select_best_block(), simplify_using_initial_conditions(), slpeel_tree_duplicate_loop_to_edge_cfg(), split_edge(), strlen_enter_block(), uncprop_enter_block(), and verify_dominators().
rtx get_last_bb_insn | ( | basic_block | ) |
Referenced by duplicate_block().
void gimple_predict_edge | ( | edge | , |
enum | br_predictor, | ||
int | |||
) |
bool gimple_predicted_by_p | ( | const_basic_block | , |
enum | br_predictor | ||
) |
void gt_ggc_mx | ( | edge_def * | e | ) |
Garbage collection and PCH support for edge_def.
Referenced by gt_ggc_mx().
void gt_pch_nx | ( | edge_def * | e | ) |
Referenced by gt_pch_nx().
void gt_pch_nx | ( | edge_def * | e, |
gt_pointer_operator | , | ||
void * | |||
) |
void guess_outgoing_edge_probabilities | ( | basic_block | ) |
Referenced by compute_outgoing_frequencies().
void init_flow | ( | struct function * | ) |
In cfg.c
Referenced by init_empty_tree_cfg_for_function().
void init_rtl_bb_info | ( | basic_block | ) |
Referenced by construct_init_block(), create_basic_block_structure(), and expand_gimple_basic_block().
void initialize_original_copy_tables | ( | void | ) |
Initialize the data structures to maintain mapping between blocks and its copies.
References hash_table< Descriptor, Allocator >::create(), and create_alloc_pool().
Referenced by cfg_layout_initialize(), copy_loop_before(), gen_parallel_loop(), gimple_duplicate_sese_region(), gimple_duplicate_sese_tail(), graphite_initialize(), ipa_tm_execute(), relink_block_chain(), tail_duplicate(), thread_through_all_blocks(), tree_predictive_commoning(), tree_ssa_prefetch_arrays(), tree_unswitch_single_loop(), try_unroll_loop_completely(), vect_do_peeling_for_alignment(), vect_do_peeling_for_loop_bound(), and vect_loop_versioning().
Referenced by bypass_block(), compensate_edge(), convert_regs_entry(), eliminate_partially_redundant_load(), emit_insn_at_entry(), emit_moves(), fixup_abnormal_edges(), insert_part_to_rtx_on_edge(), insert_partition_copy_on_edge(), insert_rtx_to_part_on_edge(), insert_store(), insert_value_copy_on_edge(), optimize_mode_switching(), pre_edge_insert(), rtl_flow_call_edges_add(), sjlj_emit_function_enter(), and thread_prologue_and_epilogue_insns().
bool inside_basic_block_p | ( | const_rtx | ) |
Referenced by find_bb_boundaries(), save_point_p(), and scan_trace().
|
inlinestatic |
Return inverse probability for PROB.
Referenced by scale_loop_profile(), set_prologue_iterations(), shrink_wrap_one_built_in_call(), slpeel_add_loop_guard(), and slpeel_tree_peel_loop_to_edge().
int inverted_post_order_compute | ( | int * | ) |
Referenced by df_analyze(), init_pre(), lra_create_live_ranges(), rest_of_handle_df_initialize(), and walk_dominator_tree().
void iterate_fix_dominators | ( | enum cdi_direction | dir, |
vec< basic_block > | bbs, | ||
bool | conservative | ||
) |
Recompute dominance information for basic blocks in the set BBS. The function assumes that the immediate dominators of all the other blocks in CFG are correct, and that there are no unreachable blocks. If CONSERVATIVE is true, we additionally assume that all the ancestors of a block of BBS in the current dominance tree dominate it.
References add_edge(), bitmap_set_bit(), CDI_DOMINATORS, pointer_map< T >::contains(), vertex::data, determine_dominators_for_sons(), dom, dom_convert_dir_to_idx(), free(), free_graph(), g, graphds_domtree(), pointer_map< T >::insert(), map, graph::n_vertices, new_graph(), basic_block_def::preds, prune_bbs_to_update_dominators(), recompute_dominator(), root_of_dom_tree(), set_immediate_dominator(), edge_def::src, and graph::vertices.
Referenced by emit_case_bit_tests(), gen_inbound_check(), gimple_duplicate_sese_region(), gimple_duplicate_sese_tail(), make_forwarder_block(), remove_edge_and_dominated_blocks(), remove_path(), unroll_loop_runtime_iterations(), and update_dominators_in_loop().
void link_block | ( | basic_block | , |
basic_block | |||
) |
edge make_edge | ( | basic_block | , |
basic_block | , | ||
int | |||
) |
Referenced by add_test(), branch_prob(), cached_make_edge(), cfg_layout_split_edge(), combine_blocks(), connect_infinite_loops_to_exit(), construct_exit_block(), construct_init_block(), copy_cfg_body(), copy_edges_for_bb(), create_cond_insert_point(), create_edge_and_update_destination_phis(), create_empty_if_region_on_edge(), create_empty_loop_on_edge(), create_parallel_loop(), dw2_build_landing_pads(), emit_case_bit_tests(), execute_sm_if_changed(), expand_complex_div_wide(), expand_gimple_cond(), expand_gimple_tailcall(), expand_omp_atomic_pipeline(), expand_omp_for_generic(), expand_omp_for_init_counts(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), expand_omp_sections(), expand_omp_simd(), expand_omp_taskreg(), expand_parallel_call(), expand_thunk(), expand_transaction(), extract_omp_for_update_vars(), find_bb_boundaries(), fix_crossing_conditional_branches(), fix_up_crossing_landing_pad(), force_nonfallthru_and_redirect(), gen_inbound_check(), gimple_divmod_fixed_value(), gimple_duplicate_sese_tail(), gimple_flow_call_edges_add(), gimple_ic(), gimple_mod_pow2(), gimple_mod_subtract(), gimple_split_edge(), gimple_stringop_fixed_value(), init_lowered_empty_function(), input_cfg(), ipa_uninstrument_transaction(), lower_resx(), lv_adjust_loop_entry_edge(), make_abnormal_goto_edges(), make_cond_expr_edges(), make_edges(), make_eh_dispatch_edges(), make_eh_edges(), make_gimple_asm_edges(), make_gimple_switch_edges(), make_goto_expr_edges(), make_single_succ_edge(), mf_build_check_statement_for(), move_sese_region_to_fn(), peep2_attempt(), rtl_flow_call_edges_add(), sched_create_recovery_edges(), shrink_wrap_one_built_in_call(), sjlj_emit_dispatch_table(), slpeel_add_loop_guard(), split_bb_make_tm_edge(), split_function(), thread_prologue_and_epilogue_insns(), tree_transform_and_unroll_loop(), unloop_loops(), unroll_loop_runtime_iterations(), and unswitch_loop().
edge make_single_succ_edge | ( | basic_block | , |
basic_block | , | ||
int | |||
) |
bool mark_dfs_back_edges | ( | void | ) |
Mark the back edges in DFS traversal. Return nonzero if a loop (natural or otherwise) is present. Inspired by Depth_First_Search_PP described in: Advanced Compiler Design and Implementation Steven Muchnick Morgan Kaufmann, 1997 and heavily borrowed from pre_and_rev_post_order_compute.
References bitmap_bit_p(), bitmap_clear(), bitmap_set_bit(), edge_def::dest, ei_edge(), ei_next(), ei_one_before_end_p(), edge_def::flags, free(), basic_block_def::index, sbitmap_alloc(), sbitmap_free(), depth_first_search_dsS::sp, edge_def::src, stack, basic_block_def::succs, and visited.
Referenced by analyze_function(), bypass_conditional_jumps(), compute_antic(), draw_cfg_edges(), estimate_bb_frequencies(), execute_split_functions(), execute_vrp(), identify_jump_threads(), insert_backedge_copies(), perform_tree_ssa_dce(), reg_to_stack(), reorder_basic_blocks(), tracer(), tree_ssa_dominator_optimize(), and variable_tracking_main_1().
bool maybe_hot_bb_p | ( | struct function * | , |
const_basic_block | |||
) |
In predict.c
Referenced by compute_function_frequency(), dump_bb_info(), optimize_bb_for_size_p(), and rtl_profile_for_bb().
bool maybe_hot_edge_p | ( | edge | ) |
Referenced by optimize_edge_for_size_p(), and rtl_profile_for_edge().
bool mfb_keep_just | ( | edge | ) |
Referenced by create_preheader(), and thread_through_loop_header().
basic_block nearest_common_dominator | ( | enum | cdi_direction, |
basic_block | , | ||
basic_block | |||
) |
Referenced by determine_dominators_for_sons(), duplicate_loop_to_header_edge(), insert_bb(), last_always_executed_block(), ncd_for_two_cands(), nearest_common_dominator_for_set(), nearest_common_dominator_of_uses(), prune_bbs_to_update_dominators(), recompute_dominator(), remove_forwarder_block(), and remove_forwarder_block_with_phi().
basic_block nearest_common_dominator_for_set | ( | enum | cdi_direction, |
bitmap | |||
) |
Referenced by deps_ok_for_redirect_from_bb_to_bb(), hoist_code(), insert_updated_phi_nodes_for(), and update_ssa().
basic_block next_dom_son | ( | enum | cdi_direction, |
basic_block | |||
) |
Referenced by break_up_subtract_bb(), build_omp_regions_1(), compute_avail(), debug_dominance_tree_1(), eliminate_degenerate_phis_1(), fill_sons_in_loop(), gather_blocks_in_sese_region(), get_dominated_by_region(), get_dominated_to_depth(), insert_aux(), ipa_tm_propagate_irr(), predict_paths_for_bb(), prepare_block_for_update(), reassociate_bb(), remove_edge_and_dominated_blocks(), remove_path(), scale_dominated_blocks_in_loop(), sink_code_in_bb(), update_dominators_in_loop(), and walk_dominator_tree().
bool optimize_bb_for_size_p | ( | const_basic_block | ) |
Referenced by array_value_type(), coalesce_cost_bb(), compute_alignments(), create_outofssa_var_map(), eliminate_partially_redundant_load(), eliminate_partially_redundant_loads(), execute_cse_reciprocals(), gimple_divmod_fixed_value_transform(), gimple_mod_pow2_value_transform(), gimple_mod_subtract_transform(), gimple_stringops_transform(), ignore_bb_p(), optimize_bb_for_speed_p(), optimize_loop_for_size_p(), try_crossjump_bb(), and try_head_merge_bb().
bool optimize_bb_for_speed_p | ( | const_basic_block | ) |
Referenced by attempt_change(), calculate_elim_costs_all_insns(), cheap_bb_rtx_cost_p(), combine_instructions(), compute_alignments(), copy_bb_p(), create_new_invariant(), cse_extended_basic_block(), find_candidates_in_block(), find_if_case_1(), find_if_case_2(), forward_propagate_and_simplify(), forward_propagate_asm(), get_computation_cost_at(), get_stored_val(), gimple_expand_builtin_cabs(), move2add_use_add2_insn(), move2add_use_add3_insn(), noce_find_if_block(), noce_try_cmove_arith(), noce_try_sign_mask(), note_reg_elim_costly(), optimize_cands_for_speed_p(), optimize_loop_for_speed_p(), outgoing_edges_match(), reload_cse_move2add(), reload_cse_simplify_operands(), reload_cse_simplify_set(), replace_reciprocal(), replace_uncond_cands_and_profitable_phis(), try_fwprop_subst(), and try_replace_in_use().
bool optimize_edge_for_size_p | ( | edge | ) |
Referenced by coalesce_cost_edge(), and optimize_edge_for_speed_p().
bool optimize_edge_for_speed_p | ( | edge | ) |
Referenced by connect_traces(), do_partial_partial_insertion(), do_regular_insertion(), and find_traces_1_round().
bool optimize_loop_for_size_p | ( | struct loop * | ) |
bool optimize_loop_for_speed_p | ( | struct loop * | ) |
bool optimize_loop_nest_for_size_p | ( | struct loop * | ) |
Referenced by loop_prefetch_arrays(), parallelize_loops(), and vect_mark_for_runtime_alias_test().
bool optimize_loop_nest_for_speed_p | ( | struct loop * | ) |
int post_order_compute | ( | int * | post_order, |
bool | include_entry_exit, | ||
bool | delete_unreachable | ||
) |
Compute reverse top sort order. This is computing a post order numbering of the graph. If INCLUDE_ENTRY_EXIT is true, then ENTRY_BLOCK and EXIT_BLOCK are included. If DELETE_UNREACHABLE is true, unreachable blocks are deleted.
References bitmap_bit_p(), bitmap_clear(), bitmap_set_bit(), count, delete_basic_block(), edge_def::dest, ei_edge(), ei_next(), ei_one_before_end_p(), free(), basic_block_def::index, basic_block_def::next_bb, sbitmap_alloc(), sbitmap_free(), depth_first_search_dsS::sp, edge_def::src, stack, basic_block_def::succs, tidy_fallthru_edges(), and visited.
Referenced by df_analyze(), extend_rgns(), and rest_of_handle_df_initialize().
int pre_and_rev_post_order_compute | ( | int * | pre_order, |
int * | rev_post_order, | ||
bool | include_entry_exit | ||
) |
Compute the depth first search order and store in the array PRE_ORDER if nonzero, marking the nodes visited in VISITED. If REV_POST_ORDER is nonzero, return the reverse completion number for each node. Returns the number of nodes visited. A depth first search tries to get as far away from the starting point as quickly as possible. pre_order is a really a preorder numbering of the graph. rev_post_order is really a reverse postorder numbering of the graph.
References bitmap_bit_p(), bitmap_clear(), bitmap_set_bit(), edge_def::dest, ei_edge(), ei_next(), ei_one_before_end_p(), free(), basic_block_def::index, sbitmap_alloc(), sbitmap_free(), depth_first_search_dsS::sp, edge_def::src, stack, basic_block_def::succs, and visited.
Referenced by add_scope_conflicts(), cse_main(), draw_cfg_nodes_no_loops(), estimate_function_body_sizes(), find_assert_locations(), flow_loops_find(), init_alias_analysis(), init_reassoc(), init_scc_vn(), regrename_analyze(), and vt_find_locations().
|
read |
In lcm.c
Given local properties TRANSP, ANTLOC, AVOUT, KILL return the insert and delete vectors for edge based LCM. Returns an edgelist which is used to map the insert vector to what edge an expression should be inserted on.
References bitmap_vector_clear(), compute_antinout_edge(), compute_available(), compute_earliest(), compute_insert_delete(), compute_laterin(), create_edge_list(), dump_bitmap_vector(), dump_file, edge_list, edge_list::num_edges, print_edge_list(), sbitmap_vector_alloc(), sbitmap_vector_free(), and verify_edge_list().
Referenced by compute_pre_data(), and optimize_mode_switching().
|
read |
Given local properties TRANSP, ST_AVLOC, ST_ANTLOC, KILL return the insert and delete vectors for edge based reverse LCM. Returns an edgelist which is used to map the insert vector to what edge an expression should be inserted on.
References bitmap_vector_clear(), compute_antinout_edge(), compute_available(), compute_farthest(), compute_nearerout(), compute_rev_insert_delete(), create_edge_list(), dump_bitmap_vector(), dump_file, edge_list, edge_list::num_edges, print_edge_list(), sbitmap_vector_alloc(), sbitmap_vector_free(), and verify_edge_list().
Referenced by one_store_motion_pass().
void predict_edge_def | ( | edge | e, |
enum br_predictor | predictor, | ||
enum prediction | taken | ||
) |
Predict edge E by given predictor if possible.
References predict_edge(), and TAKEN.
Referenced by predict_iv_comparison(), predict_loops(), predict_paths_for_bb(), predict_paths_leading_to_edge(), tree_estimate_probability_bb(), and tree_predict_by_opcode().
bool predictable_edge_p | ( | edge | ) |
Referenced by find_if_case_1(), find_if_case_2(), noce_find_if_block(), and tree_ssa_phiopt_worker().
void print_edge_list | ( | FILE * | , |
struct edge_list * | |||
) |
Referenced by pre_edge_lcm(), and pre_edge_rev_lcm().
bool probably_never_executed_bb_p | ( | struct function * | , |
const_basic_block | |||
) |
bool purge_all_dead_edges | ( | void | ) |
Search all basic blocks for potentially dead edges and purge them. Return true if some edge has been eliminated.
References purge_dead_edges().
Referenced by combine_instructions(), gimple_expand_cfg(), ira(), rest_of_handle_cse_after_global_opts(), and rest_of_handle_postreload().
bool purge_dead_edges | ( | basic_block | ) |
basic_block recompute_dominator | ( | enum | cdi_direction, |
basic_block | |||
) |
void redirect_edge_pred | ( | edge | , |
basic_block | |||
) |
void redirect_edge_succ | ( | edge | , |
basic_block | |||
) |
Referenced by cfg_layout_redirect_edge_and_branch(), cleanup_empty_eh_merge_phis(), construct_exit_block(), construct_init_block(), convert_jumps_to_returns(), dead_or_predicable(), execute_sm_if_changed(), expand_complex_div_wide(), expand_gimple_cond(), find_if_case_1(), finish_eh_generation(), fix_crossing_conditional_branches(), fix_up_crossing_landing_pad(), if_region_set_false_region(), init_before_recovery(), redirect_edge_succ_nodup(), rtl_split_edge(), and try_redirect_by_replacing_jump().
edge redirect_edge_succ_nodup | ( | edge | , |
basic_block | |||
) |
void redirect_immediate_dominators | ( | enum cdi_direction | dir, |
basic_block | bb, | ||
basic_block | to | ||
) |
Redirect all edges pointing to BB to TO.
References basic_block_def::dom, dom_convert_dir_to_idx(), DOM_NO_FAST_QUERY, DOM_OK, et_set_father(), et_split(), and et_node::son.
Referenced by merge_blocks(), and split_block().
void relink_block_chain | ( | bool | ) |
Referenced by fixup_reorder_chain(), and reorder_basic_blocks().
void remove_edge_raw | ( | edge | ) |
Referenced by remove_edge().
void remove_fake_edges | ( | void | ) |
This routine will remove all fake edges from the flow graph. If we remove all fake successors, it will automatically remove all fake predecessors.
References basic_block_def::next_bb, and remove_fake_predecessors().
Referenced by branch_prob().
void remove_fake_exit_edges | ( | void | ) |
This routine will remove all fake edges to the EXIT_BLOCK.
References remove_fake_predecessors().
Referenced by cleanup_cfg(), do_pre(), execute_sink_code(), one_pre_gcse_pass(), one_store_motion_pass(), rebuild_frequencies(), and tree_estimate_probability().
void remove_predictions_associated_with_edge | ( | edge | ) |
Referenced by remove_edge_raw().
void rtl_make_eh_edge | ( | sbitmap | , |
basic_block | , | ||
rtx | |||
) |
Referenced by decompose_multiword_subregs(), and make_edges().
void rtl_predict_edge | ( | edge | , |
enum | br_predictor, | ||
int | |||
) |
bool rtl_predicted_by_p | ( | const_basic_block | , |
enum | br_predictor | ||
) |
void rtl_profile_for_bb | ( | basic_block | ) |
void rtl_profile_for_edge | ( | edge | ) |
Referenced by optimize_mode_switching().
void scale_bbs_frequencies_gcov_type | ( | basic_block * | bbs, |
int | nbbs, | ||
gcov_type | num, | ||
gcov_type | den | ||
) |
Multiply all frequencies of basic blocks in array BBS of length NBBS by NUM/DEN, in gcov_type arithmetic. More accurate than previous function but considerably slower.
References count, edge_def::count, basic_block_def::count, frequency, and basic_block_def::frequency.
Referenced by gimple_duplicate_sese_region(), and gimple_duplicate_sese_tail().
void scale_bbs_frequencies_int | ( | basic_block * | , |
int | , | ||
int | , | ||
int | |||
) |
void set_bb_copy | ( | basic_block | , |
basic_block | |||
) |
Referenced by duplicate_block().
void set_bb_original | ( | basic_block | , |
basic_block | |||
) |
Referenced by duplicate_block().
void set_dom_info_availability | ( | enum | cdi_direction, |
enum | dom_state | ||
) |
Referenced by verify_ssa().
void set_immediate_dominator | ( | enum cdi_direction | dir, |
basic_block | bb, | ||
basic_block | dominated_by | ||
) |
Set the immediate dominator of the block possibly removing existing edge. NULL can be used to remove any edge.
References et_node::data, basic_block_def::dom, dom_convert_dir_to_idx(), DOM_NO_FAST_QUERY, DOM_OK, et_set_father(), et_split(), and et_node::father.
Referenced by combine_blocks(), copy_bbs(), create_cond_insert_point(), create_empty_if_region_on_edge(), create_empty_loop_on_edge(), destroy_loop(), determine_dominators_for_sons(), doloop_modify(), duplicate_loop_to_header_edge(), emit_case_bit_tests(), execute_sm_if_changed(), expand_complex_div_wide(), expand_omp_for_generic(), expand_omp_for_init_counts(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), expand_omp_sections(), expand_omp_simd(), expand_parallel_call(), extract_omp_for_update_vars(), force_nonfallthru(), gen_inbound_check(), gimple_duplicate_sese_region(), gimple_duplicate_sese_tail(), hoist_edge_and_branch_if_true(), iterate_fix_dominators(), loopify(), lv_adjust_loop_entry_edge(), mf_build_check_statement_for(), move_sese_region_to_fn(), prune_bbs_to_update_dominators(), redirect_edge_and_branch_force(), remove_forwarder_block(), remove_forwarder_block_with_phi(), sched_create_recovery_edges(), set_prologue_iterations(), slpeel_add_loop_guard(), slpeel_tree_duplicate_loop_to_edge_cfg(), split_block(), split_edge(), translate_clast_for_loop(), unloop_loops(), and unroll_loop_runtime_iterations().
|
inlinestatic |
Returns the single predecessor block of basic block BB. Aborts if BB does not have exactly one predecessor.
Referenced by blocks_in_phiopt_order(), check_final_bb(), combine_instructions(), compute_complex_ancestor_jump_func(), cond_exec_find_if_block(), copyprop_hardreg_forward(), create_parallel_loop(), expand_omp_sections(), expand_simple_operations(), find_comparisons_in_bb(), force_nonfallthru(), ip_normal_pos(), ipa_analyze_indirect_call_uses(), is_cfg_nonregular(), maybe_optimize_range_tests(), move_cond_jump(), phi_result_unknown_predicate(), propagate_threaded_block_debug_into(), prune_bbs_to_update_dominators(), redirect_edge_and_branch_force(), scopdet_basic_block_info(), separate_decls_in_region(), set_location_for_edge(), simplify_using_initial_values(), slpeel_tree_duplicate_loop_to_edge_cfg(), split_edge(), transform_statements(), tree_ssa_ifcombine_bb(), tree_ssa_phiopt_worker(), tree_transform_and_unroll_loop(), try_optimize_cfg(), and use_killed_between().
|
inlinestatic |
Returns the single predecessor edge of basic block BB. Aborts if BB does not have exactly one predecessor.
Referenced by bound_difference(), build_sese_conditions_before(), cond_exec_find_if_block(), copy_loop_headers(), copyprop_hardreg_forward(), create_block_for_bookkeeping(), create_empty_loop_on_edge(), create_tailcall_accumulator(), expand_omp_for_static_chunk(), expand_phi_nodes(), find_return_bb(), gimple_find_edge_insert_loc(), gimple_ic(), loop_version(), move_sese_in_condition(), remove_path(), rewrite_close_phi_out_of_ssa(), set_prologue_iterations(), simplify_using_entry_checks(), simplify_using_initial_conditions(), simplify_using_initial_values(), single_pred_cond_non_loop_exit(), slpeel_tree_duplicate_loop_to_edge_cfg(), split_edge(), split_region_for_bb(), tree_optimize_tail_calls_1(), tree_transform_and_unroll_loop(), try_crossjump_to_edge(), try_optimize_cfg(), unroll_loop_runtime_iterations(), unsplit_eh(), and unswitch_loop().
|
inlinestatic |
Returns true if BB has precisely one predecessor.
Referenced by blocks_in_phiopt_order(), bound_difference(), bypass_conditional_jumps(), canonicalize_loop_closed_ssa(), cfg_layout_can_merge_blocks_p(), check_final_bb(), collect_switch_conv_info(), combine_instructions(), commit_one_edge_insertion(), compute_complex_ancestor_jump_func(), cond_exec_find_if_block(), copy_loop_headers(), copyprop_hardreg_forward(), create_block_for_bookkeeping(), create_empty_if_region_on_edge(), cse_find_path(), duplicate_computed_gotos(), eliminate_temp_copies(), emit_case_bit_tests(), emit_mfence_after_loop(), execute_sm_if_changed(), expand_omp_sections(), expand_phi_nodes(), extract_new_fences_from(), extract_true_false_args_from_phi(), find_comparisons_in_bb(), find_if_case_1(), find_if_case_2(), find_implicit_sets(), find_return_bb(), find_traces_1_round(), fixup_reorder_chain(), gimple_can_merge_blocks_p(), gimple_find_edge_insert_loc(), gimple_make_forwarder_block(), insert_aux(), ip_normal_pos(), ipa_analyze_indirect_call_uses(), is_cfg_nonregular(), is_non_loop_exit_postdominating(), maybe_move_debug_stmts_to_successors(), maybe_optimize_range_tests(), maybe_register_def(), noce_find_if_block(), phi_result_unknown_predicate(), potentially_threadable_block(), propagate_threaded_block_debug_into(), prune_bbs_to_update_dominators(), remove_forwarder_block(), remove_path(), rtl_can_merge_blocks(), scev_const_prop(), scopdet_basic_block_info(), set_location_for_edge(), should_duplicate_loop_header_p(), simplify_using_entry_checks(), simplify_using_initial_conditions(), simplify_using_initial_values(), single_pred_cond_non_loop_exit(), sink_clobbers(), split_critical_edges(), split_region_for_bb(), thread_around_empty_block(), thread_single_edge(), transform_statements(), tree_optimize_tail_calls_1(), tree_ssa_ifcombine_bb(), tree_ssa_phiopt_worker(), try_crossjump_to_edge(), try_optimize_cfg(), try_simplify_condjump(), unsplit_eh(), use_killed_between(), vect_analyze_loop_form(), vect_update_ivs_after_vectorizer(), and vt_initialize().
|
inlinestatic |
Returns the single successor block of basic block BB. Aborts if BB does not have exactly one successor.
Referenced by bb_next_bb(), build_and_add_sum(), build_scops(), cfg_layout_can_merge_blocks_p(), cleanup_tree_cfg_bb(), collect_switch_conv_info(), compute_antic_aux(), compute_partial_antic_aux(), cond_exec_find_if_block(), create_block_for_bookkeeping(), create_empty_loop_on_edge(), dead_or_predicable(), determine_parallel_type(), dom_opt_leave_block(), dse_step1(), duplicate_computed_gotos(), eliminate_tail_call(), eliminate_unnecessary_stmts(), expand_gimple_basic_block(), expand_omp_atomic(), expand_omp_atomic_fetch_op(), expand_omp_atomic_load(), expand_omp_atomic_pipeline(), expand_omp_atomic_store(), expand_omp_for_generic(), expand_omp_for_static_chunk(), expand_omp_for_static_nochunk(), expand_omp_sections(), expand_omp_simd(), expand_omp_taskreg(), extract_new_fences_from(), find_control_dependence(), find_tail_calls(), find_traces_1_round(), fix_up_crossing_landing_pad(), force_nonfallthru(), gate_tm_init(), get_all_loop_exits(), get_ws_args_for(), gimple_can_merge_blocks_p(), gimple_verify_flow_info(), haifa_find_rgns(), if_region_set_false_region(), independent_of_stmt_p(), instrument_func_entry(), ipa_analyze_indirect_call_uses(), ipa_tm_scan_irr_function(), ipa_tm_transform_clone(), make_edges(), maybe_optimize_range_tests(), merge_if_block(), merge_phi_nodes(), noce_find_if_block(), outgoing_edges_match(), predicate_bbs(), redirect_edge_and_branch_force(), remap_ssa_name(), rewrite_debug_stmt_uses(), rotate_loop(), rtl_can_merge_blocks(), scopdet_basic_block_info(), slsr_process_phi(), split_edge(), split_function(), split_region_for_bb(), sra_ipa_reset_debug_stmts(), suitable_cond_bb(), thread_prologue_and_epilogue_insns(), thread_through_loop_header(), tm_region_init(), transform_to_exit_first_loop(), tree_forwarder_block_p(), tree_optimize_tail_calls_1(), tree_ssa_dominator_optimize(), tree_ssa_phiprop(), try_crossjump_to_edge(), try_forward_edges(), try_optimize_cfg(), try_simplify_condjump(), verify_loop_structure(), and warn_uninitialized_vars().
|
inlinestatic |
Returns the single successor edge of basic block BB. Aborts if BB does not have exactly one successor.
Referenced by add_test(), branch_prob(), build_constructors(), canonicalize_loop_closed_ssa(), cfg_layout_can_merge_blocks_p(), cleanup_control_expr_graph(), cleanup_empty_eh(), combine_predictions_for_insn(), commit_one_edge_insertion(), compute_outgoing_frequencies(), compute_partial_antic_aux(), cond_exec_find_if_block(), cond_move_process_if_block(), copy_bb_and_scalar_dependences(), create_empty_if_region_on_edge(), create_empty_loop_on_edge(), create_if_region_on_edge(), create_parallel_loop(), create_preheader(), create_single_exit_edge(), cse_find_path(), decrease_profile(), doloop_modify(), dom_opt_leave_block(), duplicate_computed_gotos(), eliminate_tail_call(), emit_return_for_exit(), estimate_bb_frequencies(), expand_gimple_basic_block(), expand_omp_atomic_pipeline(), expand_omp_for_static_chunk(), expand_omp_sections(), expand_omp_simd(), expand_omp_single(), expand_omp_synch(), expand_omp_taskreg(), expand_thunk(), final_range_test_p(), find_cond_trap(), find_if_case_1(), find_if_case_2(), find_tail_calls(), find_traces_1_round(), finish_eh_generation(), fix_up_fall_thru_edges(), gather_default_values(), gimple_can_merge_blocks_p(), gimple_duplicate_sese_tail(), gimple_gen_ic_func_profiler(), gimple_lv_add_condition_to_bb(), gimple_merge_blocks(), gimple_verify_flow_info(), gsi_commit_edge_inserts(), infinite_empty_loop_p(), initialize_parameter_reductions(), insert_insn_end_basic_block(), limit_scops(), loop_version(), lower_eh_dispatch(), lower_resx(), lv_adjust_loop_entry_edge(), make_edges(), merge_if_block(), merge_phi_nodes(), move_sese_in_condition(), noce_find_if_block(), noce_process_if_block(), optimize_mode_switching(), optimize_stack_restore(), outgoing_edges_match(), purge_dead_edges(), remove_forwarder_block(), remove_forwarder_block_with_phi(), rotate_loop(), rtl_can_merge_blocks(), rtl_split_edge(), separate_decls_in_region(), sink_clobbers(), sjlj_emit_function_enter(), slpeel_tree_duplicate_loop_to_edge_cfg(), slpeel_tree_peel_loop_to_edge(), split_edge(), split_loop_exit_edge(), split_region_for_bb(), thread_prologue_and_epilogue_insns(), thread_single_edge(), thread_through_loop_header(), tidy_fallthru_edges(), transform_to_exit_first_loop(), translate_clast_assignment(), translate_clast_for_loop(), tree_estimate_probability_bb(), tree_forwarder_block_p(), tree_function_versioning(), tree_optimize_tail_calls_1(), tree_ssa_dominator_optimize(), try_crossjump_to_edge(), try_forward_edges(), try_optimize_cfg(), try_redirect_by_replacing_jump(), unloop(), unroll_loop_runtime_iterations(), unsplit_eh(), unswitch_loop(), update_cfg_for_uncondjump(), update_parameter_components(), and value_replacement().
|
inlinestatic |
Returns true if BB has precisely one successor.
Referenced by add_labels_and_missing_jumps(), branch_prob(), cfg_layout_can_merge_blocks_p(), cleanup_control_expr_graph(), cleanup_tree_cfg_bb(), collect_switch_conv_info(), combine_predictions_for_insn(), commit_one_edge_insertion(), compute_antic_aux(), compute_outgoing_frequencies(), compute_partial_antic_aux(), cond_exec_find_if_block(), contains_no_active_insn_p(), convert_jumps_to_returns(), create_add_on_incoming_edge(), create_block_for_bookkeeping(), create_preheader(), cse_find_path(), dead_or_predicable(), decrease_profile(), dom_opt_leave_block(), dse_step1(), duplicate_computed_gotos(), expand_gimple_basic_block(), extract_new_fences_from(), final_range_test_p(), find_if_case_1(), find_if_case_2(), find_tail_calls(), find_traces_1_round(), force_single_succ_latches(), get_bb_type(), gimple_can_merge_blocks_p(), gimple_expand_cfg(), gimple_find_edge_insert_loc(), gimple_verify_flow_info(), haifa_find_rgns(), infinite_empty_loop_p(), insert_insn_end_basic_block(), ipa_analyze_indirect_call_uses(), is_non_loop_exit_postdominating(), limit_scops(), merge_if_block(), noce_find_if_block(), outgoing_edges_match(), phi_result_unknown_predicate(), potentially_threadable_block(), predicate_bbs(), purge_dead_edges(), remap_ssa_name(), rewrite_debug_stmt_uses(), rotate_loop(), rtl_can_merge_blocks(), rtl_tidy_fallthru_edge(), scopdet_basic_block_info(), should_duplicate_loop_header_p(), sink_clobbers(), split_region_for_bb(), sra_ipa_reset_debug_stmts(), thread_around_empty_block(), thread_prologue_and_epilogue_insns(), thread_through_loop_header(), tidy_fallthru_edges(), tree_estimate_probability_bb(), tree_forwarder_block_p(), tree_ssa_dominator_optimize(), tree_ssa_phiopt_worker(), try_forward_edges(), try_optimize_cfg(), try_redirect_by_replacing_jump(), unsplit_eh(), verify_loop_structure(), and walk_to_nondebug_insn().
basic_block split_edge_and_insert | ( | edge | , |
rtx | |||
) |
Referenced by add_test(), generate_prolog_epilog(), and unroll_loop_runtime_iterations().
edge try_redirect_by_replacing_jump | ( | edge | , |
basic_block | , | ||
bool | |||
) |
edge unchecked_make_edge | ( | basic_block | , |
basic_block | , | ||
int | |||
) |
Referenced by cached_make_edge(), duplicate_block(), force_nonfallthru_and_redirect(), and make_edge().
void unlink_block | ( | basic_block | ) |
void update_bb_for_insn | ( | basic_block | ) |
void update_bb_profile_for_threading | ( | basic_block | bb, |
int | edge_frequency, | ||
gcov_type | count, | ||
edge | taken_edge | ||
) |
An edge originally destinating BB of FREQUENCY and COUNT has been proved to leave the block by TAKEN_EDGE. Update profile of BB such that edge E can be redirected to destination of TAKEN_EDGE. This function may leave the profile inconsistent in the case TAKEN_EDGE frequency or count is believed to be lower than FREQUENCY or COUNT respectively.
References count, edge_def::count, basic_block_def::count, edge_def::dest, dump_file, ei_next(), ei_safe_edge(), basic_block_def::frequency, basic_block_def::index, prob, edge_def::probability, edge_def::src, and basic_block_def::succs.
Referenced by thread_block(), thread_single_edge(), and try_forward_edges().
void update_br_prob_note | ( | basic_block | ) |
void verify_dominators | ( | enum | cdi_direction | ) |
void verify_edge_list | ( | FILE * | , |
struct edge_list * | |||
) |
Referenced by pre_edge_lcm(), and pre_edge_rev_lcm().
edge mfb_kj_edge |
In cfgloopmanip.c.
A callback for make_forwarder block, to redirect all edges except for MFB_KJ_EDGE to the entry part. E is the edge for that we should decide whether to redirect it.
Referenced by mfb_keep_just(), and thread_through_loop_header().
struct gcov_ctr_summary* profile_info |
Counter summary from the last set of coverage counts read by profile.c.
Counter summary from the last set of coverage counts read.
Referenced by cgraph_maybe_hot_edge_p(), compute_function_frequency(), eliminate_partially_redundant_load(), find_single_block_region(), inline_small_functions(), maybe_hot_count_p(), maybe_hot_frequency_p(), merge_profile_summaries(), output_profile_summary(), probably_never_executed_bb_p(), report_unroll_peel(), schedule_ebbs(), sms_schedule(), tail_duplicate(), and try_unroll_loop_completely().