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 |
|
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 hash_set< KeyId, Lazy, Traits >::add(), auto_var_p(), exp(), hash_table< Descriptor, Lazy, Allocator >::find_slot(), get_base_address(), ggc_alloc(), int_size_in_bytes(), m_nontrapping, m_seen_refs, map, nt_call_phase, 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 dom_walker::ALL_BLOCKS, CDI_DOMINATORS, dominated_by_p(), ENTRY_BLOCK_PTR_FOR_FN, FOR_EACH_EDGE, ggc_alloc(), dom_walker::m_reachability, dom_walker::m_unreachable_dom, and basic_block_def::preds.
Referenced by dom_walker::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, ggc_alloc(), 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, ggc_alloc(), 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(), ggc_alloc(), 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 find_comparisons(), get_non_trapping(), ipa_analyze_node(), and rewrite_blocks().
|
privateinherited |
Referenced by dom_walker::walk(), and dom_walker::~dom_walker().
|
privateinherited |
Referenced by dom_walker::walk().
Referenced by add_or_mark_expr().
|
privateinherited |
Referenced by dom_walker::bb_reachable(), and dom_walker::walk().
|
private |
Referenced by add_or_mark_expr().
|
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().