#include "config.h"#include "system.h"#include "rtl.h"#include "hard-reg-set.h"#include "basic-block.h"#include "errors.h"#include "et-forest.h"

Go to the source code of this file.
| #define BB_NODE | ( | info, | |||
| bb | ) | ((et_forest_node_t)VARRAY_GENERIC_PTR ((info)->varray, (bb)->index + 2)) |
Definition at line 50 of file dominance.c.
Referenced by CFG::Create_bb(), redirect_immediate_dominators(), set_immediate_dominator(), and CFG::Split_bb_with_wns().
| #define init_ar | ( | var, | |||
| type, | |||||
| num, | |||||
| content | ) |
Value:
do \ { \ unsigned int i = 1; /* Catch content == i. */ \ if (! (content)) \ (var) = (type *) xcalloc ((num), sizeof (type)); \ else \ { \ (var) = (type *) xmalloc ((num) * sizeof (type)); \ for (i = 0; i < num; i++) \ (var)[i] = (content); \ } \ } \ while (0)
Definition at line 132 of file dominance.c.
Referenced by init_dom_info().
| #define SET_BB_NODE | ( | info, | |||
| bb, | |||||
| node | ) | (VARRAY_GENERIC_PTR ((info)->varray, (bb)->index + 2) = (node)) |
Definition at line 52 of file dominance.c.
Referenced by add_to_dominance_info(), calculate_dominance_info(), and delete_from_dominance_info().
| typedef unsigned int TBB |
Definition at line 63 of file dominance.c.
| void add_to_dominance_info | ( | dominance_info | dom, | |
| basic_block | bb | |||
| ) |
Definition at line 786 of file dominance.c.
References abort, et_forest_add_node(), last_basic_block, SET_BB_NODE, and VARRAY_GROW.
Referenced by create_basic_block(), and find_if_case_1().
| static void calc_dfs_tree | ( | struct dom_info * | di, | |
| enum cdi_direction | reverse | |||
| ) | [static] |
Definition at line 322 of file dominance.c.
References abort, b, calc_dfs_tree_nonrec(), ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, FOR_EACH_BB_REVERSE, basic_block_def::index, last_basic_block, and n_basic_blocks.
Referenced by calculate_dominance_info().
| static void calc_dfs_tree_nonrec | ( | struct dom_info * | di, | |
| basic_block | bb, | |||
| enum cdi_direction | reverse | |||
| ) | [static] |
Definition at line 204 of file dominance.c.
References abort, edge::dest, ENTRY_BLOCK_PTR, EXIT_BLOCK_PTR, free(), basic_block_def::index, last_basic_block, n_basic_blocks, basic_block_def::pred, edge::pred_next, sp, edge::src, stack, basic_block_def::succ, edge::succ_next, and xmalloc().
Referenced by calc_dfs_tree().
| static void calc_idoms | ( | struct dom_info * | di, | |
| enum cdi_direction | reverse | |||
| ) | [static] |
Definition at line 462 of file dominance.c.
References b, edge::dest, ENTRY_BLOCK_PTR, eval(), EXIT_BLOCK_PTR, basic_block_def::index, last_basic_block, link_roots(), basic_block_def::pred, edge::pred_next, edge::src, basic_block_def::succ, and edge::succ_next.
Referenced by calculate_dominance_info().
| dominance_info calculate_dominance_info | ( | enum cdi_direction | reverse | ) |
Definition at line 558 of file dominance.c.
Referenced by branch_target_load_optimize(), build_omp_regions(), canonicalize_loop_headers(), cleanup_tree_cfg_loop(), compute_code_hoist_data(), convert_to_ssa(), eliminate_degenerate_phis(), estimate_probability(), execute_cse_reciprocals(), execute_optimize_stdarg(), execute_sink_code(), finalize_jump_threads(), flow_loops_find(), identify_jump_threads(), if_convert(), if_convertible_loop_p(), init_pre(), init_reassoc(), insert_range_assertions(), mark_def_site_blocks(), merge_phi_nodes(), move_sese_region_to_fn(), note_prediction_to_br_prob(), perform_tree_ssa_dce(), rewrite_def_def_chains(), rewrite_into_ssa(), rewrite_ssa_into_ssa(), ssa_eliminate_dead_code(), tree_estimate_probability(), tree_ssa_dominator_optimize(), tree_ssa_dse(), tree_ssa_uncprop(), update_ssa(), and verify_ssa().
| void debug_dominance_info | ( | dominance_info | dom | ) |
Definition at line 808 of file dominance.c.
References FOR_EACH_BB, fprintf(), get_immediate_dominator(), and basic_block_def::index.
| void delete_from_dominance_info | ( | dominance_info | dom, | |
| basic_block | bb | |||
| ) |
Definition at line 799 of file dominance.c.
References et_forest_remove_node(), NULL, and SET_BB_NODE.
Referenced by combine_blocks(), delete_basic_block(), find_cond_trap(), find_if_case_1(), find_if_case_2(), free_dominance_info(), merge_blocks(), and merge_if_block().
| bool dominated_by_p | ( | dominance_info | dom, | |
| basic_block | bb1, | |||
| basic_block | bb2 | |||
| ) |
Definition at line 708 of file dominance.c.
References nearest_common_dominator().
Referenced by analyze_insns_in_loop(), augment_live_range(), can_convert_to_perfect_nest(), can_put_after_inner_loop(), canonicalize_loop_headers(), check_dependencies(), check_simple_exit(), combine_btr_defs(), compute_always_reached(), compute_merit(), estimate_probability(), fill_always_executed_in(), fill_sons_in_loop(), find_if_case_2(), find_phi_replacement_condition(), flow_loop_pre_header_find(), flow_loops_find(), if_convertible_bb_p(), insert_updated_phi_nodes_for(), invariant_for_use(), iv_get_reaching_def(), just_once_each_iteration_p(), lhs_of_dominating_assert(), may_eliminate_iv(), may_replace_final_value(), memory_ssa_name_same(), merge_phi_nodes(), move_sese_region_to_fn(), number_of_iterations_exit(), perfect_nestify(), predict_paths_leading_to(), process_note_prediction(), reachable_at_most_once(), record_uses(), recount_dominator(), register_new_assert_for(), remove_path(), rpe_enum_p(), set_livein_block(), single_incoming_edge_ignoring_loop_edges(), split_edge(), statement_sink_location(), stmt_after_ip_original_pos(), stmt_dominates_stmt_p(), tree_duplicate_sese_region(), tree_estimate_probability(), verify_dominators(), and verify_use().
Definition at line 387 of file dominance.c.
References compress().
Referenced by calc_idoms(), DCE::Check_conditional_branches_pred(), DCE::Check_redundant_cond_br_new(), and lower_bit_field_id().
Definition at line 181 of file dominance.c.
References free().
Referenced by calculate_dominance_info().
| void free_dominance_info | ( | dominance_info | info | ) |
Definition at line 597 of file dominance.c.
References delete_from_dominance_info(), ENTRY_BLOCK_PTR, et_forest_delete(), EXIT_BLOCK_PTR, FOR_EACH_BB, free(), basic_block_def::index, and VARRAY_GROW.
Referenced by branch_target_load_optimize(), canonicalize_loop_headers(), cleanup_control_expr_graph(), convert_to_ssa(), create_loop_notes(), eliminate_degenerate_phis(), estimate_probability(), execute_cse_reciprocals(), execute_expand_omp(), execute_free_datastructures(), execute_ipa_pass_list(), execute_sink_code(), expand_omp_parallel(), finalize_jump_threads(), fini_pre(), fini_reassoc(), flow_loops_find(), flow_loops_free(), free_code_hoist_mem(), if_convert(), if_convertible_loop_p(), mark_loop_exit_edges(), move_sese_region_to_fn(), note_prediction_to_br_prob(), perform_edge_inserts(), perform_tree_ssa_dce(), rest_of_handle_branch_prob(), rest_of_handle_loop2(), rest_of_handle_sms(), rtl_loop_done(), tree_estimate_probability(), tree_if_conversion(), tree_lowering_passes(), tree_optimize_tail_calls_1(), tree_profiling(), tree_purge_dead_abnormal_call_edges(), tree_purge_dead_eh_edges(), tree_ssa_dominator_optimize(), tree_ssa_dse(), VEC(), and verify_ssa().
| int get_dominated_by | ( | dominance_info | dom, | |
| basic_block | bb, | |||
| basic_block ** | bbs | |||
| ) |
Definition at line 653 of file dominance.c.
References et_forest_enumerate_sons(), et_forest_node_value(), i, n, n_basic_blocks, and xmalloc().
Referenced by duplicate_loop_to_header_edge(), hoist_code(), and unroll_loop_runtime_iterations().
| basic_block get_immediate_dominator | ( | dominance_info | dom, | |
| basic_block | bb | |||
| ) |
Definition at line 617 of file dominance.c.
References et_forest_node_value(), and et_forest_parent().
Referenced by compute_avail(), compute_dominance_frontiers_1(), convert_to_ssa(), copy_bbs(), debug_dominance_info(), dom_opt_finalize_block(), fill_always_executed_in(), find_pdom(), insert_aux(), iterate_fix_dominators(), migrate_btr_def(), migrate_btr_defs(), predict_paths_leading_to(), process_note_prediction(), prune_unused_phi_nodes(), record_equivalences_from_incoming_edge(), remove_dead_stmt(), remove_forwarder_block(), remove_forwarder_block_with_phi(), remove_path(), rename_block(), simplify_using_initial_conditions(), slpeel_tree_duplicate_loop_to_edge_cfg(), split_edge(), uncprop_initialize_block(), and verify_dominators().
Definition at line 151 of file dominance.c.
References i, init_ar, last_basic_block, and n_basic_blocks.
Referenced by calculate_dominance_info().
| void iterate_fix_dominators | ( | dominance_info | dom, | |
| basic_block * | bbs, | |||
| int | n | |||
| ) |
Definition at line 761 of file dominance.c.
References changed, get_immediate_dominator(), i, recount_dominator(), and set_immediate_dominator().
Referenced by loopify(), make_forwarder_block(), remove_path(), tree_duplicate_sese_region(), and unroll_loop_runtime_iterations().
| basic_block nearest_common_dominator | ( | dominance_info | dom, | |
| basic_block | bb1, | |||
| basic_block | bb2 | |||
| ) |
Definition at line 690 of file dominance.c.
References et_forest_common_ancestor(), and et_forest_node_value().
Referenced by dominated_by_p(), duplicate_loop_to_header_edge(), insert_bb(), nearest_common_dominator_for_set(), nearest_common_dominator_of_uses(), recount_dominator(), remove_forwarder_block(), and remove_forwarder_block_with_phi().
| void debug_dominance_info PARAMS | ( | (dominance_info) | ) |
| static void calc_dfs_tree PARAMS | ( | (struct dom_info *, enum cdi_direction) | ) | [static] |
| static void calc_dfs_tree_nonrec PARAMS | ( | (struct dom_info *, basic_block, enum cdi_direction) | ) | [static] |
| basic_block recount_dominator | ( | dominance_info | dom, | |
| basic_block | bb | |||
| ) |
Definition at line 742 of file dominance.c.
References dominated_by_p(), nearest_common_dominator(), NULL, basic_block_def::pred, edge::pred_next, and edge::src.
Referenced by iterate_fix_dominators(), and verify_dominators().
| void redirect_immediate_dominators | ( | dominance_info | dom, | |
| basic_block | bb, | |||
| basic_block | to | |||
| ) |
Definition at line 669 of file dominance.c.
References BB_NODE, et_forest_add_edge(), et_forest_enumerate_sons(), et_forest_remove_edge(), free(), i, n, n_basic_blocks, node, and xmalloc().
Referenced by merge_blocks(), and split_block().
| void set_immediate_dominator | ( | dominance_info | dom, | |
| basic_block | bb, | |||
| basic_block | dominated_by | |||
| ) | [inline] |
Definition at line 632 of file dominance.c.
References abort, BB_NODE, et_forest_add_edge(), et_forest_parent(), et_forest_remove_edge(), and NULL.
Referenced by combine_blocks(), copy_bbs(), duplicate_loop_to_header_edge(), expand_complex_div_wide(), iterate_fix_dominators(), loopify(), lv_adjust_loop_entry_edge(), mf_build_check_statement_for(), mfb_update_loops(), perfect_nestify(), remove_forwarder_block(), remove_forwarder_block_with_phi(), slpeel_add_loop_guard(), slpeel_tree_duplicate_loop_to_edge_cfg(), split_block(), split_edge(), tree_duplicate_sese_region(), unroll_loop_runtime_iterations(), and update_latch_info().
| void verify_dominators | ( | dominance_info | dom | ) |
Definition at line 718 of file dominance.c.
References abort, err, error(), FOR_EACH_BB, get_immediate_dominator(), index(), basic_block_def::index, and recount_dominator().
Referenced by canonicalize_loop_headers(), loop_optimizer_init(), peel_loops_completely(), tree_ssa_unswitch_loops(), tree_unroll_loop(), tree_verify_flow_info(), unroll_and_peel_loops(), and unswitch_loops().
1.5.6