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

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_hasherm_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
 

Member Enumeration Documentation

◆ reachability

Enumerator
ALL_BLOCKS 
REACHABLE_BLOCKS 
REACHABLE_BLOCKS_PRESERVING_FLAGS 

Constructor & Destructor Documentation

◆ nontrapping_dom_walker()

nontrapping_dom_walker::nontrapping_dom_walker ( cdi_direction direction,
hash_set< tree > * ps )
inline

Member Function Documentation

◆ add_or_mark_expr()

void nontrapping_dom_walker::add_or_mark_expr ( basic_block bb,
tree exp,
bool store )
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().

◆ after_dom_children()

void nontrapping_dom_walker::after_dom_children ( basic_block bb)
finaloverridevirtual
Called by walk_dominator_tree, when basic block BB is exited.   

Reimplemented from dom_walker.

References basic_block_def::aux.

◆ bb_reachable()

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

◆ before_dom_children()

◆ 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

◆ 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_nontrapping

hash_set<tree>* nontrapping_dom_walker::m_nontrapping
private

Referenced by add_or_mark_expr().

◆ m_reachability

enum reachability dom_walker::m_reachability
privateinherited

◆ m_seen_refs

hash_table<refs_hasher> nontrapping_dom_walker::m_seen_refs
private

Referenced by add_or_mark_expr().

◆ 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

◆ STOP

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

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