retdec
expr_types_analysis.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_LLVMIR2HLL_ANALYSIS_EXPR_TYPES_ANALYSIS_H
8 #define RETDEC_LLVMIR2HLL_ANALYSIS_EXPR_TYPES_ANALYSIS_H
9 
10 #include <cstddef>
11 
16 
17 namespace retdec {
18 namespace llvmir2hll {
19 
20 class Expression;
21 
54 class ExprTypesAnalysis final: private OrderedAllVisitor,
56 public:
59  enum class ExprTag {
60  Signed,
61  Unsigned
62  };
63 
64  using TagVector = std::vector<ExprTag>;
65  using ExprTagsMap = std::map< ShPtr<Expression>, TagVector>;
66 
67 public:
68  std::size_t getCountOfTag(ShPtr<Expression> expr, ExprTag tag);
70 
72 
73 private:
76 
77 private:
79 
80  void addTagToExpr(ShPtr<Expression> expr, ExprTag tag);
81 
85  virtual void visit(ShPtr<ExtCastExpr> expr) override;
86  virtual void visit(ShPtr<IntToFPCastExpr> expr) override;
87  virtual void visit(ShPtr<DivOpExpr> expr) override;
88  virtual void visit(ShPtr<ModOpExpr> expr) override;
89  virtual void visit(ShPtr<AssignStmt> stmt) override;
90  virtual void visit(ShPtr<VarDefStmt> stmt) override;
91  virtual void visit(ShPtr<LtEqOpExpr> expr) override;
92  virtual void visit(ShPtr<GtEqOpExpr> expr) override;
93  virtual void visit(ShPtr<LtOpExpr> expr) override;
94  virtual void visit(ShPtr<GtOpExpr> expr) override;
95  virtual void visit(ShPtr<BitShlOpExpr> expr) override;
96  virtual void visit(ShPtr<BitShrOpExpr> expr) override;
98 };
99 
100 } // namespace llvmir2hll
101 } // namespace retdec
102 
103 #endif
A visitor for analyzing the types in BIR.
Definition: expr_types_analysis.h:55
static ShPtr< ExprTypesAnalysis > create()
Creates a new analysis of integer types.
Definition: expr_types_analysis.cpp:74
ExprTag
Definition: expr_types_analysis.h:59
ExprTagsMap exprTagsMap
Map of all analyzed expressions and tags for every expression.
Definition: expr_types_analysis.h:75
ExprTagsMap analyzeExprTypes(ShPtr< Module > module)
Fixes some types to correct type.
Definition: expr_types_analysis.cpp:83
void addTagToExpr(ShPtr< Expression > expr, ExprTag tag)
Adds tag to the expression and puts it into exprTagsMap.
Definition: expr_types_analysis.cpp:45
std::size_t getCountOfTag(ShPtr< Expression > expr, ExprTag tag)
Gets count of found tags of expression expr.
Definition: expr_types_analysis.cpp:60
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
std::vector< ExprTag > TagVector
Definition: expr_types_analysis.h:64
std::map< ShPtr< Expression >, TagVector > ExprTagsMap
Definition: expr_types_analysis.h:65
ExprTypesAnalysis()
Constructs a new visitor.
Definition: expr_types_analysis.cpp:36
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 mixin to make classes non-copyable.
Definition: non_copyable.h:27
ShPtr< Module > module
The current module.
Definition: hll_writer.cpp:100
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
Definition: archive_wrapper.h:19
A mixin to make classes non-copyable.
A visitor that visits everything in an ordered way.
Declarations, aliases, macros, etc. for the use of smart pointers.
Aliases for several useful types.