retdec
|
A CFG traversal that for an assign statement S
returns the uses of its left-hand side such that there are no modifications of variables used in S
before them.
More...
#include <lhs_rhs_uses_cfg_traversal.h>
Static Public Member Functions | |
static StmtSet | getUses (ShPtr< Statement > stmt, ShPtr< CFG > cfg, ShPtr< ValueAnalysis > va, ShPtr< CallInfoObtainer > cio) |
Returns the uses of left-hand side of stmt such that there are no modifications of variables used in stmt before them. More... | |
Private Member Functions | |
LhsRhsUsesCFGTraversal (ShPtr< Statement > stmt, ShPtr< Variable > origLhsVar, const VarSet &origRhsVars, ShPtr< CFG > cfg, ShPtr< ValueAnalysis > va, ShPtr< CallInfoObtainer > cio) | |
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< Statement > | origStmt |
Original statement. More... | |
ShPtr< Variable > | origLhsVar |
The left-hand side of the original statement. More... | |
const VarSet & | origRhsVars |
ShPtr< ValueAnalysis > | va |
Analysis of values. More... | |
ShPtr< CallInfoObtainer > | cio |
Obtainer of information about function calls. More... | |
StmtSet | uses |
Uses of the variable defined in origStmt . 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 for an assign statement S
returns the uses of its left-hand side such that there are no modifications of variables used in S
before them.
This traverser is meant to be used in SimpleCopyPropagationOptimizer, see its description for more details.
Instances of this class have reference object semantics. This is a concrete traverser which should not be subclassed.
|
private |
Constructs a new traverser.
See the description and implementation of getUses() 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 |
Returns the uses of left-hand side of stmt such that there are no modifications of variables used in stmt before them.
[in] | stmt | Statement from which we should start the search. |
[in] | cfg | CFG that should be traversed. |
[in] | va | Analysis of values. |
[in] | cio | The used call info obtainer. |
This function returns the empty StmtSet if:
a = x
where a
is a variable and x
is an expression containing only variables and arithmetical operationsThis 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 |
Obtainer of information about function calls.
The left-hand side of the original statement.
|
private |
The set of variables used in the right-hand side of the original statement.
|
private |
Uses of the variable defined in origStmt
.
|
private |
Analysis of values.