retdec
|
A CFG traversal that returns all nodes where the variables from VarDefStms are used. More...
#include <nodes_of_var_use_cfg_traversal.h>
Public Types | |
using | CFGNodeSet = std::set< ShPtr< CFG::Node > > |
Set of cfg nodes. More... | |
using | VarDefStmtNodeMap = std::map< ShPtr< VarDefStmt >, CFGNodeSet > |
Static Public Member Functions | |
static ShPtr< VarDefStmtNodeMap > | getNodesOfUseVariable (const VarDefStmtSet &setOfVarDefStmt, ShPtr< CFG > cfg, ShPtr< ValueAnalysis > va) |
Function finds all nodes where is variable from it's own definition used. More... | |
Private Types | |
using | VarVarDefMap = std::map< ShPtr< Variable >, ShPtr< VarDefStmt > > |
Maping of a variable into a VarDefStmt. More... | |
Private Member Functions | |
NodesOfVarUseCFGTraversal (const VarDefStmtSet &setOfVarDefStmt, ShPtr< CFG > cfg, ShPtr< ValueAnalysis > va) | |
Constructs a new traverser. More... | |
virtual bool | visitStmt (ShPtr< Statement > stmt) override |
Visits the given statement stmt. More... | |
virtual bool | getEndRetVal () const override |
Returns the value that should be returned when an end of the traversal is reached. More... | |
virtual bool | combineRetVals (bool origRetVal, bool newRetVal) const override |
Computes a new return value from the original return value (origRetVal) and the new return value (newRetVal). More... | |
Private Attributes | |
ShPtr< ValueAnalysis > | va |
Analysis of values. More... | |
ShPtr< VarDefStmtNodeMap > | mapOfVarDefStmtNodes |
VarVarDefMap | mapOfVarVarDef |
Mapping a variable from VarDefStmt to VarDefStmt. More... | |
Additional Inherited Members | |
![]() | |
CFGTraversal (ShPtr< CFG > cfg, bool defaultCurrRetVal) | |
Constructs a new traverser. More... | |
~CFGTraversal ()=default | |
bool | getCurrRetVal () const |
Returns the value that should be returned as the result of visiting a statement. More... | |
bool | performTraversal (ShPtr< Statement > startStmt) |
Performs a traversal of the current CFG, starting at startStmt. More... | |
bool | performTraversalFromSuccessors (ShPtr< Statement > stmt) |
Performs a traversal of the current CFG, starting at the successor(s) of stmt. More... | |
bool | performReverseTraversal (ShPtr< Statement > startStmt) |
Performs a reverse traversal of the current CFG, starting at startStmt. More... | |
bool | performReverseTraversalFromPredecessors (ShPtr< Statement > stmt) |
Performs a reverse traversal of the current CFG, starting at the predecessor(s) of stmt. More... | |
![]() | |
ShPtr< CFG > | cfg |
CFG that is being traversed. More... | |
StmtUSet | checkedStmts |
Statements that have been checked (to prevent looping). More... | |
bool | currRetVal |
Current return value of visitStmt(). More... | |
bool | stopTraversal |
Should the traversal be stopped? More... | |
A CFG traversal that returns all nodes where the variables from VarDefStms are used.
This class is meant to be used in VarDefStmtOptimizer.
Instances of this class have reference object semantics. This is a concrete traverser which should not be subclassed.
using retdec::llvmir2hll::NodesOfVarUseCFGTraversal::CFGNodeSet = std::set<ShPtr<CFG::Node> > |
Set of cfg nodes.
using retdec::llvmir2hll::NodesOfVarUseCFGTraversal::VarDefStmtNodeMap = std::map<ShPtr<VarDefStmt>, CFGNodeSet> |
Mapping of a VarDefStmt into a Node. Saves all nodes where variable from it's own definition is used.
|
private |
Maping of a variable into a VarDefStmt.
|
private |
Constructs a new traverser.
See the description of getNodesOfUseVariable for information on the parameters.
|
overrideprivatevirtual |
Computes a new return value from the original return value (origRetVal) and the new return value (newRetVal).
Implements retdec::llvmir2hll::CFGTraversal.
|
overrideprivatevirtual |
Returns the value that should be returned when an end of the traversal is reached.
For example, the end may mean the end node of the CFG or a statement that has already been traversed.
Implements retdec::llvmir2hll::CFGTraversal.
|
static |
Function finds all nodes where is variable from it's own definition used.
[in] | setOfVarDefStmt | Set with VarDefStmt statements. |
[in] | cfg | CFG that should be traversed. |
[in] | va | Analysis of values. |
This function leaves va in a valid state.
|
overrideprivatevirtual |
Visits the given statement stmt.
return true
if the traversing should continue, false
otherwise.
Note: checkedStmts
is modified in CFGTraversal, so it is not necessary for the implementation of this function to add stmt to checkedStmts
.
If you want the traversal to end prematurely, set the stopTraversal variable to true
. Otherwise, if you just return false
, the traversal may still continue from other branches because of recursion.
Implements retdec::llvmir2hll::CFGTraversal.
|
private |
A result map where key is a VarDefStmt statement and item is a set of nodes where variable from VarDefStmt statement is used.
|
private |
Mapping a variable from VarDefStmt to VarDefStmt.
|
private |
Analysis of values.