retdec
dead_code_optimizer.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_LLVMIR2HLL_OPTIMIZER_OPTIMIZERS_DEAD_CODE_OPTIMIZER_H
8 #define RETDEC_LLVMIR2HLL_OPTIMIZER_OPTIMIZERS_DEAD_CODE_OPTIMIZER_H
9 
17 
18 namespace retdec {
19 namespace llvmir2hll {
20 
21 class ArithmExprEvaluator;
22 
106 class DeadCodeOptimizer final: public FuncOptimizer {
107 public:
110 
111  virtual std::string getId() const override { return "DeadCode"; }
112 
113 private:
117  virtual void visit(ShPtr<IfStmt> stmt) override;
118  virtual void visit(ShPtr<SwitchStmt> stmt) override;
119  virtual void visit(ShPtr<ForLoopStmt> stmt) override;
120  virtual void visit(ShPtr<WhileLoopStmt> stmt) override;
122 
124  ShPtr<SwitchStmt> stmt, ShPtr<Constant> controlExpr);
128  clause_iterator trueClause);
130  SwitchStmt::clause_iterator resultClause);
137 
138 private:
141 };
142 
143 } // namespace llvmir2hll
144 } // namespace retdec
145 
146 #endif
A base class for all evaluators.
Removes dead code. Examples are mentioned below.
Definition: dead_code_optimizer.h:106
void tryToOptimizeIfStmt(ShPtr< IfStmt > stmt)
Try to optimize stmt.
Definition: dead_code_optimizer.cpp:55
ShPtr< ArithmExprEvaluator > arithmExprEvaluator
The used evaluator of arithmetical expressions.
Definition: dead_code_optimizer.h:140
void removeFalseClausesWithoutGotoLabel(ShPtr< IfStmt > stmt)
Removes if, else-if clauses with evaluated condition as false. Clause can be removed if doesn't have ...
Definition: dead_code_optimizer.cpp:100
void optimizeSwitchStmt(ShPtr< SwitchStmt > stmt, SwitchStmt::clause_iterator resultClause)
Optimize stmt.
Definition: dead_code_optimizer.cpp:337
void optimizeBecauseTrueClauseIsPresent(ShPtr< IfStmt > stmt, IfStmt::clause_iterator trueClause)
Optimize stmt when one of clauses was evaluated as true.
Definition: dead_code_optimizer.cpp:129
IfStmt::clause_iterator findTrueClause(ShPtr< IfStmt > stmt)
Find first true clause in stmt and return it.
Definition: dead_code_optimizer.cpp:83
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
bool hasBreakContinueReturnInAllClausesAsLastStmt(ShPtr< SwitchStmt > stmt)
Find if all clauses in stmt have break, continue, return statement at last statement.
Definition: dead_code_optimizer.cpp:275
void tryToOptimizeWhileLoopStmt(ShPtr< WhileLoopStmt > stmt)
Try to optimize WhileLoopStmt.
Definition: dead_code_optimizer.cpp:400
DeadCodeOptimizer(ShPtr< Module > module, ShPtr< ArithmExprEvaluator > arithmExprEvaluator)
Constructs a new optimizer.
Definition: dead_code_optimizer.cpp:37
void correctIfStmtDueToPresenceOfFalseClauses(ShPtr< IfStmt > stmt)
Make correctness on stmt in special cases.
Definition: dead_code_optimizer.cpp:199
void tryToOptimizeSwitchStmt(ShPtr< SwitchStmt > stmt)
Try to optimize SwitchStmt.
Definition: dead_code_optimizer.cpp:240
SwitchStmt::clause_iterator findClauseWithCondEqualToControlExpr(ShPtr< SwitchStmt > stmt, ShPtr< Constant > controlExpr)
Try to find the first clause with condition that is equal to control expression.
Definition: dead_code_optimizer.cpp:297
virtual std::string getId() const override
Returns the ID of the optimizer.
Definition: dead_code_optimizer.h:111
void tryToOptimizeForLoopStmt(ShPtr< ForLoopStmt > stmt)
Try to optimize ForLoopStmt.
Definition: dead_code_optimizer.cpp:430
A base class of all function optimizers.
Definition: func_optimizer.h:44
An if/else-if/else statement.
Definition: if_stmt.h:28
IfClauseList::const_iterator clause_iterator
Definition: if_stmt.h:42
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
SwitchClauseList::const_iterator clause_iterator
Definition: switch_stmt.h:44
A base class for all constants.
A base class of all function optimizers.
An if/else-if/else statement.
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.
A switch statement.