retdec
simple_alias_analysis.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_LLVMIR2HLL_ANALYSIS_ALIAS_ANALYSIS_ALIAS_ANALYSES_SIMPLE_ALIAS_ANALYSIS_H
8 #define RETDEC_LLVMIR2HLL_ANALYSIS_ALIAS_ANALYSIS_ALIAS_ANALYSES_SIMPLE_ALIAS_ANALYSIS_H
9 
10 #include <string>
11 
16 
17 namespace retdec {
18 namespace llvmir2hll {
19 
20 class Module;
21 class Variable;
22 
36 public:
38 
39  virtual void init(ShPtr<Module> module) override;
40  virtual std::string getId() const override;
41  virtual const VarSet &mayPointTo(ShPtr<Variable> var) const override;
42  virtual ShPtr<Variable> pointsTo(ShPtr<Variable> var) const override;
43  virtual bool mayBePointed(ShPtr<Variable> var) const override;
44 
45 private:
47  using FuncVarSetMap = std::map<ShPtr<Function>, VarSet>;
48 
50  using VarFuncMap = std::map<ShPtr<Variable>, ShPtr<Function>>;
51 
52 private:
54 
58  virtual void visit(ShPtr<AddressOpExpr> expr) override;
60 
61 private:
64 
68 
72 
75 };
76 
77 } // namespace llvmir2hll
78 } // namespace retdec
79 
80 #endif
A base class for all alias analyses.
A base class for all alias analyses.
Definition: alias_analysis.h:32
ShPtr< Module > module
The current module.
Definition: alias_analysis.h:78
A visitor that visits everything in an ordered way.
Definition: ordered_all_visitor.h:44
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
A very simple alias analysis.
Definition: simple_alias_analysis.h:35
virtual void init(ShPtr< Module > module) override
Initializes the analysis.
Definition: simple_alias_analysis.cpp:50
FuncVarSetMap funcAddressedVarsMap
Definition: simple_alias_analysis.h:67
SimpleAliasAnalysis()
Constructs a new analysis.
Definition: simple_alias_analysis.cpp:35
ShPtr< Function > func
Currently traversed function.
Definition: simple_alias_analysis.h:74
VarFuncMap varFuncMap
Definition: simple_alias_analysis.h:71
static ShPtr< AliasAnalysis > create()
Creates a new alias analysis.
Definition: simple_alias_analysis.cpp:42
std::map< ShPtr< Function >, VarSet > FuncVarSetMap
Mapping of a function into a set of variables.
Definition: simple_alias_analysis.h:47
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
virtual std::string getId() const override
Returns the ID of the analysis.
Definition: simple_alias_analysis.cpp:46
std::map< ShPtr< Variable >, ShPtr< Function > > VarFuncMap
Mapping of a variable into a function.
Definition: simple_alias_analysis.h:50
virtual bool mayBePointed(ShPtr< Variable > var) const override
Returns true if a pointer may point to var, false otherwise.
Definition: simple_alias_analysis.cpp:121
virtual const VarSet & mayPointTo(ShPtr< Variable > var) const override
Returns the set of variables to which var may point to.
Definition: simple_alias_analysis.cpp:88
VarSet allAddressedVars
All variables in the module whose address is taken.
Definition: simple_alias_analysis.h:63
virtual ShPtr< Variable > pointsTo(ShPtr< Variable > var) const override
Returns the variable to which var always points.
Definition: simple_alias_analysis.cpp:114
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< Variable > > VarSet
Set of variables.
Definition: types.h:57
Definition: archive_wrapper.h:19
A visitor that visits everything in an ordered way.
Declarations, aliases, macros, etc. for the use of smart pointers.
Aliases for several useful types.