GCC Middle and Back End API Reference
|
Public Types | |
enum | reachability { ALL_BLOCKS , REACHABLE_BLOCKS , REACHABLE_BLOCKS_PRESERVING_FLAGS } |
Public Member Functions | |
rewrite_dom_walker (cdi_direction direction) | |
edge | before_dom_children (basic_block) final override |
void | after_dom_children (basic_block) final override |
void | walk (basic_block) |
Static Public Attributes | |
static const edge | STOP = (edge)-1 |
Private Member Functions | |
bool | bb_reachable (struct function *, basic_block) |
void | propagate_unreachable_to_edges (basic_block, FILE *, dump_flags_t) |
Private Attributes | |
enum cdi_direction | m_dom_direction: 2 |
enum reachability | m_reachability: 2 |
bool | m_user_bb_to_rpo |
basic_block | m_unreachable_dom |
int * | m_bb_to_rpo |
|
inherited |
|
inline |
|
finaloverridevirtual |
Called after visiting all the statements in basic block BB and all of its dominator children. Restore CURRDEFS to its original value.
Reimplemented from dom_walker.
References block_defs_stack, common_info::current_def, get_common_info(), is_gimple_reg(), NULL, NULL_TREE, SSA_NAME_VAR, and TREE_CODE.
|
privateinherited |
Return TRUE if BB is reachable, false otherwise.
References dom_walker::ALL_BLOCKS, CDI_DOMINATORS, dominated_by_p(), ENTRY_BLOCK_PTR_FOR_FN, FOR_EACH_EDGE, dom_walker::m_reachability, dom_walker::m_unreachable_dom, and basic_block_def::preds.
Referenced by dom_walker::walk().
|
finaloverridevirtual |
SSA Rewriting Step 1. Initialization, create a block local stack of reaching definitions for new SSA names produced in this block (BLOCK_DEFS). Register new definitions for every PHI node in the block.
Reimplemented from dom_walker.
References bitmap_bit_p, block_defs_stack, dump_file, dump_flags, gimple_phi_result(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_start_phis(), gsi_stmt(), basic_block_def::index, interesting_blocks, NULL, NULL_TREE, register_new_def(), rewrite_add_phi_arguments(), rewrite_stmt(), SSA_NAME_VAR, and TDF_DETAILS.
|
privateinherited |
BB has been determined to be unreachable. Propagate that property to incoming and outgoing edges of BB as appropriate.
References CDI_DOMINATORS, dominated_by_p(), dump_file, dump_flags, FOR_EACH_EDGE, basic_block_def::index, dom_walker::m_unreachable_dom, basic_block_def::preds, basic_block_def::succs, and TDF_DETAILS.
Referenced by dom_walker::walk().
|
inherited |
Recursively walk the dominator tree. BB is the basic block we are currently visiting.
References dom_walker::after_dom_children(), dom_walker::bb_reachable(), dom_walker::before_dom_children(), CDI_DOMINATORS, cfun, dump_file, dump_flags, EDGE_COUNT, ENTRY_BLOCK_PTR_FOR_FN, EXIT_BLOCK_PTR_FOR_FN, first_dom_son(), FOR_EACH_EDGE, free(), i, last_basic_block_for_fn, dom_walker::m_bb_to_rpo, dom_walker::m_dom_direction, dom_walker::m_reachability, dom_walker::m_unreachable_dom, dom_walker::m_user_bb_to_rpo, n_basic_blocks_for_fn, next_dom_son(), NULL, pre_and_rev_post_order_compute(), basic_block_def::preds, dom_walker::propagate_unreachable_to_edges(), dom_walker::REACHABLE_BLOCKS, set_all_edges_as_executable(), sort_bbs_postorder(), dom_walker::STOP, basic_block_def::succs, and worklist.
Referenced by array_bounds_checker::check(), eliminate_with_rpo_vn(), find_comparisons(), get_non_trapping(), ipa_analyze_node(), ipcp_transform_function(), rewrite_blocks(), and substitute_and_fold_engine::substitute_and_fold().
|
privateinherited |
Referenced by dom_walker::walk(), and dom_walker::~dom_walker().
|
privateinherited |
Referenced by dom_walker::walk().
|
privateinherited |
Referenced by dom_walker::bb_reachable(), and dom_walker::walk().
|
privateinherited |
Referenced by dom_walker::bb_reachable(), dom_walker::propagate_unreachable_to_edges(), and dom_walker::walk().
|
privateinherited |
Referenced by dom_walker::walk(), and dom_walker::~dom_walker().
Referenced by rewrite_update_dom_walker::before_dom_children(), and dom_walker::walk().