GCC Middle and Back End API Reference
eliminate_dom_walker Class Reference
Inheritance diagram for eliminate_dom_walker:
Collaboration diagram for eliminate_dom_walker:

Public Types

enum  reachability { ALL_BLOCKS , REACHABLE_BLOCKS , REACHABLE_BLOCKS_PRESERVING_FLAGS }
 

Public Member Functions

 eliminate_dom_walker (cdi_direction, bitmap)
 
 ~eliminate_dom_walker ()
 
edge before_dom_children (basic_block) final override
 
void after_dom_children (basic_block) final override
 
virtual tree eliminate_avail (basic_block, tree op)
 
virtual void eliminate_push_avail (basic_block, tree op)
 
tree eliminate_insert (basic_block, gimple_stmt_iterator *gsi, tree val)
 
void eliminate_stmt (basic_block, gimple_stmt_iterator *)
 
unsigned eliminate_cleanup (bool region_p=false)
 
void walk (basic_block)
 

Data Fields

bool do_pre
 
unsigned int el_todo
 
unsigned int eliminations
 
unsigned int insertions
 
bitmap inserted_exprs
 
bitmap need_eh_cleanup
 
bitmap need_ab_cleanup
 
auto_vec< gimple * > to_remove
 
auto_vec< gimple * > to_fixup
 
auto_vec< treeavail
 
auto_vec< treeavail_stack
 

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
 

Detailed Description

Elimination engine.   

Member Enumeration Documentation

◆ reachability

enum dom_walker::reachability
inherited
Enumerator
ALL_BLOCKS 
REACHABLE_BLOCKS 
REACHABLE_BLOCKS_PRESERVING_FLAGS 

Constructor & Destructor Documentation

◆ eliminate_dom_walker()

eliminate_dom_walker::eliminate_dom_walker ( cdi_direction direction,
bitmap inserted_exprs_ )

◆ ~eliminate_dom_walker()

eliminate_dom_walker::~eliminate_dom_walker ( )

Member Function Documentation

◆ after_dom_children()

void eliminate_dom_walker::after_dom_children ( basic_block )
finaloverridevirtual
Make no longer available leaders no longer available.   

Reimplemented from dom_walker.

References avail, avail_stack, NULL_TREE, SSA_NAME_VERSION, vn_ssa_aux::valnum, and VN_INFO().

◆ bb_reachable()

bool dom_walker::bb_reachable ( struct function * fun,
basic_block bb )
privateinherited

◆ before_dom_children()

◆ eliminate_avail()

◆ eliminate_cleanup()

◆ eliminate_insert()

◆ eliminate_push_avail()

void eliminate_dom_walker::eliminate_push_avail ( basic_block ,
tree op )
virtual
At the current point of the eliminate domwalk make OP available.   

Reimplemented in rpo_elim.

References avail, avail_stack, SSA_NAME_VERSION, TREE_CODE, vn_ssa_aux::valnum, and VN_INFO().

Referenced by before_dom_children(), and eliminate_stmt().

◆ eliminate_stmt()

void eliminate_dom_walker::eliminate_stmt ( basic_block b,
gimple_stmt_iterator * gsi )

References alias_set_subset_of(), ao_ref_alias_set(), ao_ref_base_alias_set(), ao_ref_init(), as_a(), b, vn_reference_s::base_set, bit_from_pos(), bitmap_bit_p, bitmap_set_bit, build2(), build3(), build_nonstandard_integer_type(), builtin_decl_unreachable(), cfun, component_ref_field_offset(), CONVERT_EXPR_CODE_P, current_function_decl, dbg_cnt(), DECL_BIT_FIELD_TYPE, DECL_FIELD_BIT_OFFSET, DECL_HARD_REGISTER, lang_hooks::decl_printable_name, do_pre, dump_enabled_p(), dump_file, dump_flags, dump_possible_polymorphic_call_targets(), dump_printf_loc(), dyn_cast(), EDGE_SUCC, el_todo, eliminate_avail(), eliminate_insert(), eliminate_push_avail(), eliminations, vn_ssa_aux::expr, flow_bb_inside_loop_p(), fold_convert, fold_stmt(), follow_all_ssa_edges(), FOR_EACH_SSA_TREE_OPERAND, FOR_EACH_SSA_USE_OPERAND, FUNC_OR_METHOD_TYPE_P, gcc_assert, gcc_unreachable, ipa_polymorphic_call_context::get_dynamic_type(), gimple_assign_lhs(), gimple_assign_load_p(), gimple_assign_rhs1(), gimple_assign_rhs_code(), gimple_assign_single_p(), gimple_bb(), gimple_call_fn(), gimple_call_noreturn_p(), gimple_call_set_fndecl(), gimple_call_set_fntype(), gimple_cond_false_p(), gimple_cond_make_false(), gimple_cond_make_true(), gimple_cond_true_p(), gimple_get_lhs(), gimple_has_volatile_ops(), gimple_nop_p(), gimple_switch_index(), gimple_vdef(), gimple_vuse(), gsi_end_p(), gsi_next(), gsi_prev(), gsi_start_bb(), gsi_stmt(), has_VN_INFO(), has_zero_uses(), loop::header, inserted_exprs, INTEGRAL_TYPE_P, is_gimple_assign(), is_gimple_call(), is_gimple_debug(), is_gimple_min_invariant(), is_gimple_reg(), is_global_var(), basic_block_def::loop_father, loop_outer(), MAX_FIXED_MODE_SIZE, may_propagate_copy(), maybe_clean_or_replace_eh_stmt(), maybe_duplicate_ssa_info_at_copy(), maybe_remove_unused_call_args(), MSG_OPTIMIZED_LOCATIONS, need_ab_cleanup, need_eh_cleanup, vn_ssa_aux::needs_insertion, NULL, NULL_TREE, loop::num, obj_type_ref_class(), OBJ_TYPE_REF_OBJECT, OBJ_TYPE_REF_TOKEN, operand_equal_p(), POINTER_TYPE_P, poly_int_tree_p(), possible_polymorphic_call_targets(), print_generic_expr(), print_gimple_expr(), print_gimple_stmt(), propagate_tree_value_into_stmt(), propagate_value(), recompute_tree_invariant_for_addr_expr(), vn_reference_s::set, simple_iv(), SSA_NAME_DEF_STMT, SSA_NAME_IN_FREE_LIST, SSA_NAME_IS_DEFAULT_DEF, SSA_NAME_VERSION, SSA_OP_ALL_DEFS, SSA_OP_DEF, SSA_OP_USE, stmt_can_make_abnormal_goto(), TDF_DETAILS, to_fixup, to_remove, TODO_cleanup_cfg, TREE_CODE, TREE_INT_CST_LOW, TREE_OPERAND, tree_to_uhwi(), TREE_TYPE, TREE_VALUE, TYPE_ARG_TYPES, type_has_mode_precision_p(), TYPE_PRECISION, TYPE_SIZE, TYPE_UNSIGNED, update_stmt(), USE_FROM_PTR, useless_type_conversion_p(), vn_ssa_aux::valnum, virtual_method_call_p(), vn_ssa_aux::visited, VN_INFO(), vn_reference_lookup(), VN_TOP, VN_WALKREWRITE, void_type_node, and VOID_TYPE_P.

Referenced by before_dom_children(), and process_bb().

◆ propagate_unreachable_to_edges()

void dom_walker::propagate_unreachable_to_edges ( basic_block bb,
FILE * dump_file,
dump_flags_t dump_flags )
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().

◆ walk()

Field Documentation

◆ avail

auto_vec<tree> eliminate_dom_walker::avail

◆ avail_stack

auto_vec<tree> eliminate_dom_walker::avail_stack

◆ do_pre

bool eliminate_dom_walker::do_pre

Referenced by eliminate_stmt().

◆ el_todo

unsigned int eliminate_dom_walker::el_todo

◆ eliminations

unsigned int eliminate_dom_walker::eliminations

◆ inserted_exprs

bitmap eliminate_dom_walker::inserted_exprs

◆ insertions

unsigned int eliminate_dom_walker::insertions

◆ m_bb_to_rpo

int* dom_walker::m_bb_to_rpo
privateinherited

◆ m_dom_direction

enum cdi_direction dom_walker::m_dom_direction
privateinherited

Referenced by dom_walker::walk().

◆ m_reachability

enum reachability dom_walker::m_reachability
privateinherited

◆ m_unreachable_dom

basic_block dom_walker::m_unreachable_dom
privateinherited

◆ m_user_bb_to_rpo

bool dom_walker::m_user_bb_to_rpo
privateinherited

◆ need_ab_cleanup

bitmap eliminate_dom_walker::need_ab_cleanup

◆ need_eh_cleanup

bitmap eliminate_dom_walker::need_eh_cleanup

◆ STOP

const edge dom_walker::STOP = (edge)-1
staticinherited

◆ to_fixup

auto_vec<gimple *> eliminate_dom_walker::to_fixup

◆ to_remove

auto_vec<gimple *> eliminate_dom_walker::to_remove

The documentation for this class was generated from the following file: