GCC Middle and Back End API Reference
|
Public Types | |
enum | reachability { ALL_BLOCKS , REACHABLE_BLOCKS , REACHABLE_BLOCKS_PRESERVING_FLAGS } |
Public Member Functions | |
nontrapping_dom_walker (cdi_direction direction, hash_set< tree > *ps) | |
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 | |
void | add_or_mark_expr (basic_block, tree, bool) |
bool | bb_reachable (struct function *, basic_block) |
void | propagate_unreachable_to_edges (basic_block, FILE *, dump_flags_t) |
Private Attributes | |
hash_set< tree > * | m_nontrapping |
hash_table< refs_hasher > | m_seen_refs |
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 |
References dom_walker::dom_walker(), m_nontrapping, and m_seen_refs.
|
private |
We see the expression EXP in basic block BB. If it's an interesting expression of: 1) MEM_REF 2) ARRAY_REF 3) COMPONENT_REF possibly insert the expression into the set NONTRAP or the hash table of seen expressions. STORE is true if this expression is on the LHS, otherwise it's on the RHS.
References auto_var_p(), basic_block_def::aux, ref_to_bb::bb, exp(), ref_to_bb::exp, get_base_address(), int_size_in_bytes(), m_nontrapping, m_seen_refs, map, nt_call_phase, ref_to_bb::phase, ref_to_bb::size, TREE_ADDRESSABLE, TREE_CODE, and TREE_TYPE.
Referenced by before_dom_children().
|
finaloverridevirtual |
Called by walk_dominator_tree, when basic block BB is exited.
Reimplemented from dom_walker.
References basic_block_def::aux.
|
privateinherited |
Return TRUE if BB is reachable, false otherwise.
References ALL_BLOCKS, CDI_DOMINATORS, dominated_by_p(), ENTRY_BLOCK_PTR_FOR_FN, FOR_EACH_EDGE, m_reachability, m_unreachable_dom, and basic_block_def::preds.
Referenced by walk().
|
finaloverridevirtual |
Called by walk_dominator_tree, when entering the block BB.
Reimplemented from dom_walker.
References add_or_mark_expr(), basic_block_def::aux, FOR_EACH_EDGE, gimple_assign_lhs(), gimple_assign_rhs1(), gimple_assign_single_p(), gimple_has_volatile_ops(), gimple_vdef(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_stmt(), is_gimple_call(), nonbarrier_call_p(), nonfreeing_call_p(), nt_call_phase, NULL, and basic_block_def::preds.
|
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, m_unreachable_dom, basic_block_def::preds, basic_block_def::succs, and TDF_DETAILS.
Referenced by walk().
|
inherited |
Recursively walk the dominator tree. BB is the basic block we are currently visiting.
References after_dom_children(), bb_reachable(), 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, m_bb_to_rpo, m_dom_direction, m_reachability, m_unreachable_dom, m_user_bb_to_rpo, n_basic_blocks_for_fn, next_dom_son(), NULL, pre_and_rev_post_order_compute(), basic_block_def::preds, propagate_unreachable_to_edges(), REACHABLE_BLOCKS, set_all_edges_as_executable(), sort_bbs_postorder(), 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().
|
privateinherited |
Referenced by dom_walker(), and walk().
Referenced by add_or_mark_expr(), and nontrapping_dom_walker().
|
privateinherited |
Referenced by bb_reachable(), dom_walker(), and walk().
|
private |
Referenced by add_or_mark_expr(), and nontrapping_dom_walker().
|
privateinherited |
Referenced by bb_reachable(), dom_walker(), propagate_unreachable_to_edges(), and walk().
|
privateinherited |
Referenced by dom_walker(), walk(), and ~dom_walker().
Referenced by rewrite_update_dom_walker::before_dom_children(), and walk().