retdec
bit_op_to_log_op_optimizer.h
Go to the documentation of this file.
1 
8 #ifndef RETDEC_LLVMIR2HLL_OPTIMIZER_OPTIMIZERS_BIT_OP_TO_LOG_OP_OPTIMIZER_H
9 #define RETDEC_LLVMIR2HLL_OPTIMIZER_OPTIMIZERS_BIT_OP_TO_LOG_OP_OPTIMIZER_H
10 
14 
15 namespace retdec {
16 namespace llvmir2hll {
17 
18 class IfStmt;
19 class SwitchStmt;
20 class WhileLoopStmt;
21 class BinaryOpExpr;
22 class ValueAnalysis;
23 
103 public:
105 
106  virtual std::string getId() const override { return "BitOpToLogOp"; }
107 
108 private:
114 
118  virtual void visit(ShPtr<IfStmt> stmt) override;
119  virtual void visit(ShPtr<SwitchStmt> stmt) override;
120  virtual void visit(ShPtr<WhileLoopStmt> stmt) override;
121  virtual void visit(ShPtr<BitAndOpExpr> expr) override;
122  virtual void visit(ShPtr<BitOrOpExpr> expr) override;
123  virtual void visit(ShPtr<DivOpExpr> expr) override;
124  virtual void visit(ShPtr<ModOpExpr> expr) override;
125  virtual void visit(ShPtr<MulOpExpr> expr) override;
127 
128 private:
131 
134 
137 };
138 
139 } // namespace llvmir2hll
140 } // namespace retdec
141 
142 #endif
Optimizes Optimizes BitAndExpr to AndOpExpr or BitOrExpr to OrOpExpr if fulfil conditions.
Definition: bit_op_to_log_op_optimizer.h:102
bool canBeBitOrBitAndOptimized(ShPtr< Expression > expr)
Function checks if expr has an array access or has a call or has a derefs or has a divide with zero.
Definition: bit_op_to_log_op_optimizer.cpp:163
virtual std::string getId() const override
Returns the ID of the optimizer.
Definition: bit_op_to_log_op_optimizer.h:106
bool isPotentionalProblem
A variable for check if is some chance to divide by zero.
Definition: bit_op_to_log_op_optimizer.h:136
bool isCondition
A variable for check if we are in some condition.
Definition: bit_op_to_log_op_optimizer.h:133
bool isPotentionalModProblem(ShPtr< Expression > expr)
Function checks if a expr is ConstInt or ConstFloat zero.
Definition: bit_op_to_log_op_optimizer.cpp:232
void tryOptimizeCond(ShPtr< Expression > expr)
This function try optimize on conditions.
Definition: bit_op_to_log_op_optimizer.cpp:307
bool isPotentionalDivProblem(ShPtr< DivOpExpr > divOpExpr)
Function checks if divOpExpr can cause problem in optimization.
Definition: bit_op_to_log_op_optimizer.cpp:189
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
ShPtr< ValueAnalysis > va
Analysis of values.
Definition: bit_op_to_log_op_optimizer.h:130
BitOpToLogOpOptimizer(ShPtr< Module > module, ShPtr< ValueAnalysis > va)
Constructs a new optimizer.
Definition: bit_op_to_log_op_optimizer.cpp:36
bool isPotentionalMulProblem(ShPtr< MulOpExpr > mulOpExpr)
Function checks if mulOpExpr can cause problem in optimization.
Definition: bit_op_to_log_op_optimizer.cpp:257
A base class of all function optimizers.
Definition: func_optimizer.h:44
ShPtr< Module > module
The module that is being optimized.
Definition: optimizer.h:79
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
A base class of all function optimizers.
Debugging support.
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
Declarations, aliases, macros, etc. for the use of smart pointers.