GCC Middle and Back End API Reference
|
Public Types | |
enum | reachability { ALL_BLOCKS , REACHABLE_BLOCKS , REACHABLE_BLOCKS_PRESERVING_FLAGS } |
Public Member Functions | |
check_array_bounds_dom_walker (array_bounds_checker *checker) | |
~check_array_bounds_dom_walker () | |
edge | before_dom_children (basic_block) final override |
void | walk (basic_block) |
virtual void | after_dom_children (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 | |
array_bounds_checker * | checker |
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 |
A dom_walker subclass for use by check_all_array_refs, to walk over all statements of all reachable BBs and call check_array_bounds on them.
|
inherited |
|
inline |
|
inline |
|
inlinevirtualinherited |
Reimplemented in dom_opt_dom_walker, eliminate_dom_walker, nontrapping_dom_walker, rewrite_dom_walker, rewrite_update_dom_walker, strlen_pass, substitute_and_fold_dom_walker, and uncprop_dom_walker.
Referenced by dom_walker::walk().
|
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 |
Implementation of dom_walker::before_dom_children. Walk over all statements of BB and call check_array_bounds on them, and determine if there's a unique successor edge.
Reimplemented from dom_walker.
References array_bounds_checker::check_array_bounds(), checker, find_taken_edge(), gimple_has_location(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_stmt(), is_gimple_debug(), array_bounds_checker::m_stmt, NULL_TREE, si, and walk_gimple_op().
|
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().
|
private |
Referenced by before_dom_children().
|
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().