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

Public Types

enum  reachability { ALL_BLOCKS , REACHABLE_BLOCKS , REACHABLE_BLOCKS_PRESERVING_FLAGS }
 

Public Member Functions

 rpo_elim (basic_block entry_)
 
tree eliminate_avail (basic_block, tree op) final override
 
void eliminate_push_avail (basic_block, tree) final override
 
edge before_dom_children (basic_block) final override
 
void after_dom_children (basic_block) final override
 
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

basic_block entry
 
vn_availm_avail_freelist
 
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

Adaptor to the elimination engine using RPO availability.   

Member Enumeration Documentation

◆ reachability

Enumerator
ALL_BLOCKS 
REACHABLE_BLOCKS 
REACHABLE_BLOCKS_PRESERVING_FLAGS 

Constructor & Destructor Documentation

◆ rpo_elim()

rpo_elim::rpo_elim ( basic_block entry_)
inline

Member Function Documentation

◆ after_dom_children()

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

Reimplemented from dom_walker.

References eliminate_dom_walker::avail, eliminate_dom_walker::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()

◆ eliminate_stmt()

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

References alias_set_subset_of(), ao_ref_alias_set(), ao_ref_base_alias_set(), ao_ref_init(), b, 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, eliminate_dom_walker::do_pre, dump_enabled_p(), dump_file, dump_flags, dump_possible_polymorphic_call_targets(), dump_printf_loc(), duplicate_ssa_name_ptr_info(), duplicate_ssa_name_range_info(), EDGE_SUCC, eliminate_dom_walker::el_todo, eliminate_dom_walker::eliminate_avail(), eliminate_dom_walker::eliminate_insert(), eliminate_dom_walker::eliminate_push_avail(), eliminate_dom_walker::eliminations, 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(), ggc_alloc(), 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(), eliminate_dom_walker::inserted_exprs, INTEGRAL_TYPE_P, is_gimple_assign(), is_gimple_call(), is_gimple_debug(), is_gimple_min_invariant(), is_gimple_reg(), is_global_var(), loop_outer(), MAX_FIXED_MODE_SIZE, may_propagate_copy(), maybe_clean_or_replace_eh_stmt(), maybe_remove_unused_call_args(), MSG_OPTIMIZED_LOCATIONS, eliminate_dom_walker::need_ab_cleanup, eliminate_dom_walker::need_eh_cleanup, 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(), reset_flow_sensitive_info(), simple_iv(), SSA_NAME_DEF_STMT, SSA_NAME_IN_FREE_LIST, SSA_NAME_IS_DEFAULT_DEF, SSA_NAME_PTR_INFO, SSA_NAME_RANGE_INFO, SSA_NAME_VERSION, SSA_OP_ALL_DEFS, SSA_OP_DEF, SSA_OP_USE, stmt_can_make_abnormal_goto(), TDF_DETAILS, eliminate_dom_walker::to_fixup, eliminate_dom_walker::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_INFO(), vn_reference_lookup(), VN_TOP, VN_WALKREWRITE, void_type_node, and VOID_TYPE_P.

Referenced by eliminate_dom_walker::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, 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().

◆ walk()

Field Documentation

◆ avail

◆ avail_stack

◆ do_pre

bool eliminate_dom_walker::do_pre
inherited

◆ el_todo

unsigned int eliminate_dom_walker::el_todo
inherited

◆ eliminations

◆ entry

basic_block rpo_elim::entry

◆ inserted_exprs

bitmap eliminate_dom_walker::inserted_exprs
inherited

◆ insertions

unsigned int eliminate_dom_walker::insertions
inherited

◆ m_avail_freelist

vn_avail* rpo_elim::m_avail_freelist

Referenced by do_unwind(), and eliminate_push_avail().

◆ 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

◆ need_eh_cleanup

◆ STOP

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

◆ to_fixup

auto_vec<gimple *> eliminate_dom_walker::to_fixup
inherited

◆ to_remove


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