retdec
nodes_of_var_use_cfg_traversal.h
Go to the documentation of this file.
1 
9 #ifndef RETDEC_LLVMIR2HLL_GRAPHS_CFG_CFG_TRAVERSALS_NODES_OF_VAR_USE_CFG_TRAVERSAL_H
10 #define RETDEC_LLVMIR2HLL_GRAPHS_CFG_CFG_TRAVERSALS_NODES_OF_VAR_USE_CFG_TRAVERSAL_H
11 
12 #include <map>
13 #include <set>
14 
16 
17 namespace retdec {
18 namespace llvmir2hll {
19 
20 class CFG;
21 class ValueAnalysis;
22 class VarDefStmt;
23 
34 public:
36  using CFGNodeSet = std::set<ShPtr<CFG::Node>>;
37 
40  using VarDefStmtNodeMap = std::map<ShPtr<VarDefStmt>, CFGNodeSet>;
41 
42 public:
44  &setOfVarDefStmt, ShPtr<CFG> cfg, ShPtr<ValueAnalysis> va);
45 
46 private:
48  using VarVarDefMap = std::map<ShPtr<Variable>, ShPtr<VarDefStmt>>;
49 
50 private:
51  NodesOfVarUseCFGTraversal(const VarDefStmtSet &setOfVarDefStmt,
53 
54  virtual bool visitStmt(ShPtr<Statement> stmt) override;
55  virtual bool getEndRetVal() const override;
56  virtual bool combineRetVals(bool origRetVal, bool newRetVal) const override;
57 
58 private:
61 
65 
68 };
69 
70 } // namespace llvmir2hll
71 } // namespace retdec
72 
73 #endif
A base class of all CFG traversals.
A base class of all CFG traversals.
Definition: cfg_traversal.h:28
ShPtr< CFG > cfg
CFG that is being traversed.
Definition: cfg_traversal.h:74
A CFG traversal that returns all nodes where the variables from VarDefStms are used.
Definition: nodes_of_var_use_cfg_traversal.h:33
NodesOfVarUseCFGTraversal(const VarDefStmtSet &setOfVarDefStmt, ShPtr< CFG > cfg, ShPtr< ValueAnalysis > va)
Constructs a new traverser.
Definition: nodes_of_var_use_cfg_traversal.cpp:22
ShPtr< ValueAnalysis > va
Analysis of values.
Definition: nodes_of_var_use_cfg_traversal.h:60
VarVarDefMap mapOfVarVarDef
Mapping a variable from VarDefStmt to VarDefStmt.
Definition: nodes_of_var_use_cfg_traversal.h:67
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 (new...
Definition: nodes_of_var_use_cfg_traversal.cpp:97
virtual bool visitStmt(ShPtr< Statement > stmt) override
Visits the given statement stmt.
Definition: nodes_of_var_use_cfg_traversal.cpp:73
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.
Definition: nodes_of_var_use_cfg_traversal.cpp:50
virtual bool getEndRetVal() const override
Returns the value that should be returned when an end of the traversal is reached.
Definition: nodes_of_var_use_cfg_traversal.cpp:93
std::set< ShPtr< CFG::Node > > CFGNodeSet
Set of cfg nodes.
Definition: nodes_of_var_use_cfg_traversal.h:36
std::map< ShPtr< VarDefStmt >, CFGNodeSet > VarDefStmtNodeMap
Definition: nodes_of_var_use_cfg_traversal.h:40
ShPtr< VarDefStmtNodeMap > mapOfVarDefStmtNodes
Definition: nodes_of_var_use_cfg_traversal.h:64
std::map< ShPtr< Variable >, ShPtr< VarDefStmt > > VarVarDefMap
Maping of a variable into a VarDefStmt.
Definition: nodes_of_var_use_cfg_traversal.h:48
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::set< ShPtr< VarDefStmt > > VarDefStmtSet
Set of VarDefStmt.
Definition: types.h:60
Definition: archive_wrapper.h:19