retdec
expr_types_fixer.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_LLVMIR2HLL_SUPPORT_EXPR_TYPES_FIXER_H
8 #define RETDEC_LLVMIR2HLL_SUPPORT_EXPR_TYPES_FIXER_H
9 
14 
15 namespace retdec {
16 namespace llvmir2hll {
17 
18 class Expression;
19 class Type;
20 
56 class ExprTypesFixer final: private OrderedAllVisitor,
58 public:
59  static void fixTypes(ShPtr<Module> module);
60 
61 private:
65 
69  virtual void visit(ShPtr<ExtCastExpr> expr) override;
70  virtual void visit(ShPtr<IntToFPCastExpr> expr) override;
71  virtual void visit(ShPtr<DivOpExpr> expr) override;
72  virtual void visit(ShPtr<ModOpExpr> expr) override;
73  virtual void visit(ShPtr<AssignStmt> stmt) override;
74  virtual void visit(ShPtr<VarDefStmt> stmt) override;
75  virtual void visit(ShPtr<LtEqOpExpr> expr) override;
76  virtual void visit(ShPtr<GtEqOpExpr> expr) override;
77  virtual void visit(ShPtr<LtOpExpr> expr) override;
78  virtual void visit(ShPtr<GtOpExpr> expr) override;
79  virtual void visit(ShPtr<BitShlOpExpr> expr) override;
80  virtual void visit(ShPtr<BitShrOpExpr> expr) override;
82 };
83 
84 } // namespace llvmir2hll
85 } // namespace retdec
86 
87 #endif
A visitor for fixing the types in the IR.
Definition: expr_types_fixer.h:57
void setProbablyTypes(ShPtr< Module > module)
Sets the probably types based on statistics. Statistics are from ExprTypesAnalysis.
Definition: expr_types_fixer.cpp:50
static void fixTypes(ShPtr< Module > module)
Fixes some types to correct type.
Definition: expr_types_fixer.cpp:169
ShPtr< Expression > exprCheckAndChange(bool isSigned, ShPtr< Expression > expr)
Checks that types of expressions are correct or not. If not returns cast to correct type.
Definition: expr_types_fixer.cpp:147
ExprTypesFixer()
Constructs a new visitor.
Definition: expr_types_fixer.cpp:41
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
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.