7 #ifndef RETDEC_LLVMIR2HLL_GRAPHS_CFG_CFG_TRAVERSAL_H
8 #define RETDEC_LLVMIR2HLL_GRAPHS_CFG_CFG_TRAVERSAL_H
A representation of a control-flow graph (CFG).
A base class of all CFG traversals.
Definition: cfg_traversal.h:28
bool performReverseTraversalFromPredecessors(ShPtr< Statement > stmt)
Performs a reverse traversal of the current CFG, starting at the predecessor(s) of stmt.
Definition: cfg_traversal.cpp:252
virtual bool getEndRetVal() const =0
Returns the value that should be returned when an end of the traversal is reached.
ShPtr< CFG > cfg
CFG that is being traversed.
Definition: cfg_traversal.h:74
CFGTraversal(ShPtr< CFG > cfg, bool defaultCurrRetVal)
Constructs a new traverser.
Definition: cfg_traversal.cpp:145
bool performTraversalImpl(ShPtr< CFG::Node > startNode, CFG::stmt_iterator startStmtIter)
A non-recursive implementation of performTraversal().
Definition: cfg_traversal.cpp:293
bool stopTraversal
Should the traversal be stopped?
Definition: cfg_traversal.h:83
bool performTraversalFromSuccessors(ShPtr< Statement > stmt)
Performs a traversal of the current CFG, starting at the successor(s) of stmt.
Definition: cfg_traversal.cpp:185
bool performReverseTraversalImpl(ShPtr< CFG::Node > startNode, CFG::stmt_reverse_iterator startStmtRIter)
A non-recursive implementation of performReverseTraversal().
Definition: cfg_traversal.cpp:359
bool currRetVal
Current return value of visitStmt().
Definition: cfg_traversal.h:80
bool getCurrRetVal() const
Returns the value that should be returned as the result of visiting a statement.
Definition: cfg_traversal.cpp:280
bool traverseNodePredecessors(ShPtr< CFG::Node > node)
Traverses all the predecessors of node.
Definition: cfg_traversal.cpp:390
bool performTraversal(ShPtr< Statement > startStmt)
Performs a traversal of the current CFG, starting at startStmt.
Definition: cfg_traversal.cpp:160
virtual bool combineRetVals(bool origRetVal, bool newRetVal) const =0
Computes a new return value from the original return value (origRetVal) and the new return value (new...
StmtUSet checkedStmts
Statements that have been checked (to prevent looping).
Definition: cfg_traversal.h:77
std::pair< bool, bool > visitSingleNode(CFG::stmt_iterator startStmtIter, CFG::stmt_iterator endStmtIter)
Visit a single node during our traversal, and all the statements in it.
Definition: cfg_traversal.cpp:328
bool performReverseTraversal(ShPtr< Statement > startStmt)
Performs a reverse traversal of the current CFG, starting at startStmt.
Definition: cfg_traversal.cpp:226
virtual bool visitStmt(ShPtr< Statement > stmt)=0
Visits the given statement stmt.
StmtVector::const_iterator stmt_iterator
Statements iterator.
Definition: cfg.h:49
StmtVector::const_reverse_iterator stmt_reverse_iterator
Statements reverse iterator.
Definition: cfg.h:52
A mixin to make classes non-copyable.
Definition: non_copyable.h:27
A library providing API for working with back-end IR.
std::shared_ptr< T > ShPtr
An alias for a shared pointer.
Definition: smart_ptr.h:18
std::unordered_set< ShPtr< Statement > > StmtUSet
Unordered set of statements.
Definition: types.h:81
Definition: archive_wrapper.h:19
A mixin to make classes non-copyable.
Declarations, aliases, macros, etc. for the use of smart pointers.
Aliases for several useful types.