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

Public Types

enum  reachability { ALL_BLOCKS , REACHABLE_BLOCKS , REACHABLE_BLOCKS_PRESERVING_FLAGS }

Public Member Functions

 substitute_and_fold_dom_walker (cdi_direction direction, class substitute_and_fold_engine *engine)
 ~substitute_and_fold_dom_walker ()
edge before_dom_children (basic_block) final override
void after_dom_children (basic_block bb) final override
void walk (basic_block)

Data Fields

bool something_changed
bitmap dceworklist
vec< gimple * > stmts_to_fixup
bitmap need_eh_cleanup
bitmap need_ab_cleanup
class substitute_and_fold_enginesubstitute_and_fold_engine

Static Public Attributes

static const edge STOP = (edge)-1

Private Member Functions

void foreach_new_stmt_in_bb (gimple_stmt_iterator old_gsi, gimple_stmt_iterator new_gsi)
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

Member Enumeration Documentation

◆ reachability

enum dom_walker::reachability
inherited
Enumerator
ALL_BLOCKS 
REACHABLE_BLOCKS 
REACHABLE_BLOCKS_PRESERVING_FLAGS 

Constructor & Destructor Documentation

◆ substitute_and_fold_dom_walker()

substitute_and_fold_dom_walker::substitute_and_fold_dom_walker ( cdi_direction direction,
class substitute_and_fold_engine * engine )
inline

◆ ~substitute_and_fold_dom_walker()

substitute_and_fold_dom_walker::~substitute_and_fold_dom_walker ( )
inline

Member Function Documentation

◆ after_dom_children()

void substitute_and_fold_dom_walker::after_dom_children ( basic_block bb)
inlinefinaloverridevirtual

Reimplemented from dom_walker.

References substitute_and_fold_engine.

◆ bb_reachable()

bool dom_walker::bb_reachable ( struct function * fun,
basic_block bb )
privateinherited
Return TRUE if BB is reachable, false otherwise.

References ALL_BLOCKS, CDI_DOMINATORS, dominated_by_p(), ENTRY_BLOCK_PTR_FOR_FN, FOR_EACH_EDGE, m_reachability, m_unreachable_dom, and basic_block_def::preds.

Referenced by walk().

◆ before_dom_children()

◆ foreach_new_stmt_in_bb()

void substitute_and_fold_dom_walker::foreach_new_stmt_in_bb ( gimple_stmt_iterator old_gsi,
gimple_stmt_iterator new_gsi )
private
Call post_new_stmt for each new statement that has been added to the current BB. OLD_GSI is the statement iterator before the BB changes ocurred. NEW_GSI is the iterator which may contain new statements.

References gsi_bb(), gsi_end_p(), gsi_next(), gsi_start_bb(), gsi_stmt(), and substitute_and_fold_engine.

Referenced by 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, basic_block_def::index, m_unreachable_dom, basic_block_def::preds, basic_block_def::succs, and TDF_DETAILS.

Referenced by walk().

◆ walk()

Field Documentation

◆ dceworklist

◆ m_bb_to_rpo

int* dom_walker::m_bb_to_rpo
privateinherited

Referenced by dom_walker(), walk(), and ~dom_walker().

◆ m_dom_direction

enum cdi_direction dom_walker::m_dom_direction
privateinherited

Referenced by dom_walker(), and walk().

◆ m_reachability

enum reachability dom_walker::m_reachability
privateinherited

Referenced by bb_reachable(), dom_walker(), and walk().

◆ 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

Referenced by dom_walker(), walk(), and ~dom_walker().

◆ need_ab_cleanup

◆ need_eh_cleanup

◆ something_changed

bool substitute_and_fold_dom_walker::something_changed

◆ stmts_to_fixup

◆ STOP

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

◆ substitute_and_fold_engine

class substitute_and_fold_engine* substitute_and_fold_dom_walker::substitute_and_fold_engine

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