retdec
Protected Member Functions | Protected Attributes | List of all members
retdec::llvmir2hll::FuncOptimizer Class Reference

A base class of all function optimizers. More...

#include <func_optimizer.h>

Inheritance diagram for retdec::llvmir2hll::FuncOptimizer:
Inheritance graph
[legend]
Collaboration diagram for retdec::llvmir2hll::FuncOptimizer:
Collaboration graph
[legend]

Protected Member Functions

 FuncOptimizer (ShPtr< Module > module)
 Constructs a new function optimizer. More...
 
virtual void doOptimization () override
 Performs the optimization on all functions in the module. More...
 
virtual void runOnFunction (ShPtr< Function > func)
 Performs all optimizations on the given function. More...
 
template<typename T >
void visitNestedAndSuccessorStatements (ShPtr< T > stmt)
 Visits the given statement, its nested statements, and successor statements (depending on the settings of the visitor). More...
 
- Protected Member Functions inherited from retdec::llvmir2hll::Optimizer
virtual void doInitialization ()
 Performs pre-optimization matters. More...
 
virtual void doFinalization ()
 Performs post-optimization matters. More...
 
- Protected Member Functions inherited from retdec::llvmir2hll::OrderedAllVisitor
 OrderedAllVisitor (bool visitSuccessors=true, bool visitNestedStmts=true)
 Constructs a new visitor. More...
 
virtual void visitStmt (ShPtr< Statement > stmt, bool visitSuccessors=true, bool visitNestedStmts=true)
 Visits the given statement, and possibly its successors or nested statements. More...
 
void restart (bool visitSuccessors=true, bool visitNestedStmts=true)
 "Restarts" the visitor so it is in the state like it was when it was created. More...
 
bool makeAccessedAndCheckIfAccessed (ShPtr< Type > type)
 Makes the given type accessed. More...
 
- Protected Member Functions inherited from retdec::llvmir2hll::Visitor
 Visitor ()=default
 

Protected Attributes

ShPtr< FunctioncurrFunc
 Function that is currently being optimized. More...
 
- Protected Attributes inherited from retdec::llvmir2hll::Optimizer
ShPtr< Modulemodule
 The module that is being optimized. More...
 
- Protected Attributes inherited from retdec::llvmir2hll::OrderedAllVisitor
ShPtr< StatementlastStmt
 Statement that has been accessed as the last one. More...
 
StmtUSet accessedStmts
 A set of all accessed statements. More...
 
TypeUSet accessedTypes
 A set of all accessed types. More...
 
bool visitSuccessors
 Should statements' successor be accessed? More...
 
bool visitNestedStmts
 Should nested statements be accessed? More...
 

Additional Inherited Members

- Public Member Functions inherited from retdec::llvmir2hll::Optimizer
 Optimizer (ShPtr< Module > module)
 Constructs a new optimizer. More...
 
virtual std::string getId () const =0
 Returns the ID of the optimizer. More...
 
ShPtr< Moduleoptimize ()
 Performs all the optimizations of the specific optimizer. More...
 
- Public Member Functions inherited from retdec::llvmir2hll::OrderedAllVisitor
virtual void visit (ShPtr< GlobalVarDef > varDef) override
 
virtual void visit (ShPtr< Function > func) override
 
virtual void visit (ShPtr< AssignStmt > stmt) override
 
virtual void visit (ShPtr< BreakStmt > stmt) override
 
virtual void visit (ShPtr< CallStmt > stmt) override
 
virtual void visit (ShPtr< ContinueStmt > stmt) override
 
virtual void visit (ShPtr< EmptyStmt > stmt) override
 
virtual void visit (ShPtr< ForLoopStmt > stmt) override
 
virtual void visit (ShPtr< UForLoopStmt > stmt) override
 
virtual void visit (ShPtr< GotoStmt > stmt) override
 
virtual void visit (ShPtr< IfStmt > stmt) override
 
virtual void visit (ShPtr< ReturnStmt > stmt) override
 
virtual void visit (ShPtr< SwitchStmt > stmt) override
 
virtual void visit (ShPtr< UnreachableStmt > stmt) override
 
virtual void visit (ShPtr< VarDefStmt > stmt) override
 
virtual void visit (ShPtr< WhileLoopStmt > stmt) override
 
virtual void visit (ShPtr< AddOpExpr > expr) override
 
virtual void visit (ShPtr< AddressOpExpr > expr) override
 
virtual void visit (ShPtr< AndOpExpr > expr) override
 
virtual void visit (ShPtr< ArrayIndexOpExpr > expr) override
 
virtual void visit (ShPtr< AssignOpExpr > expr) override
 
virtual void visit (ShPtr< BitAndOpExpr > expr) override
 
virtual void visit (ShPtr< BitOrOpExpr > expr) override
 
virtual void visit (ShPtr< BitShlOpExpr > expr) override
 
virtual void visit (ShPtr< BitShrOpExpr > expr) override
 
virtual void visit (ShPtr< BitXorOpExpr > expr) override
 
virtual void visit (ShPtr< CallExpr > expr) override
 
virtual void visit (ShPtr< CommaOpExpr > expr) override
 
virtual void visit (ShPtr< DerefOpExpr > expr) override
 
virtual void visit (ShPtr< DivOpExpr > expr) override
 
virtual void visit (ShPtr< EqOpExpr > expr) override
 
virtual void visit (ShPtr< GtEqOpExpr > expr) override
 
virtual void visit (ShPtr< GtOpExpr > expr) override
 
virtual void visit (ShPtr< LtEqOpExpr > expr) override
 
virtual void visit (ShPtr< LtOpExpr > expr) override
 
virtual void visit (ShPtr< ModOpExpr > expr) override
 
virtual void visit (ShPtr< MulOpExpr > expr) override
 
virtual void visit (ShPtr< NegOpExpr > expr) override
 
virtual void visit (ShPtr< NeqOpExpr > expr) override
 
virtual void visit (ShPtr< NotOpExpr > expr) override
 
virtual void visit (ShPtr< OrOpExpr > expr) override
 
virtual void visit (ShPtr< StructIndexOpExpr > expr) override
 
virtual void visit (ShPtr< SubOpExpr > expr) override
 
virtual void visit (ShPtr< TernaryOpExpr > expr) override
 
virtual void visit (ShPtr< Variable > var) override
 
virtual void visit (ShPtr< BitCastExpr > expr) override
 
virtual void visit (ShPtr< ExtCastExpr > expr) override
 
virtual void visit (ShPtr< FPToIntCastExpr > expr) override
 
virtual void visit (ShPtr< IntToFPCastExpr > expr) override
 
virtual void visit (ShPtr< IntToPtrCastExpr > expr) override
 
virtual void visit (ShPtr< PtrToIntCastExpr > expr) override
 
virtual void visit (ShPtr< TruncCastExpr > expr) override
 
virtual void visit (ShPtr< ConstArray > constant) override
 
virtual void visit (ShPtr< ConstBool > constant) override
 
virtual void visit (ShPtr< ConstFloat > constant) override
 
virtual void visit (ShPtr< ConstInt > constant) override
 
virtual void visit (ShPtr< ConstNullPointer > constant) override
 
virtual void visit (ShPtr< ConstString > constant) override
 
virtual void visit (ShPtr< ConstStruct > constant) override
 
virtual void visit (ShPtr< ConstSymbol > constant) override
 
virtual void visit (ShPtr< ArrayType > type) override
 
virtual void visit (ShPtr< FloatType > type) override
 
virtual void visit (ShPtr< IntType > type) override
 
virtual void visit (ShPtr< PointerType > type) override
 
virtual void visit (ShPtr< StringType > type) override
 
virtual void visit (ShPtr< StructType > type) override
 
virtual void visit (ShPtr< FunctionType > type) override
 
virtual void visit (ShPtr< VoidType > type) override
 
virtual void visit (ShPtr< UnknownType > type) override
 
- Public Member Functions inherited from retdec::llvmir2hll::Visitor
virtual ~Visitor ()=default
 
- Static Public Member Functions inherited from retdec::llvmir2hll::Optimizer
template<class OptimizerType , typename... Args>
static ShPtr< Moduleoptimize (ShPtr< Module > module, Args &&... args)
 Creates an instance of OptimizerType with the given arguments and optimizes the given module by it. More...
 

Detailed Description

A base class of all function optimizers.

Concrete optimizers should:

The functions are not optimized in any particular order. Optimizations for a single function should not affect optimizations of other functions.

Instances of this class have reference object semantics.

Constructor & Destructor Documentation

◆ FuncOptimizer()

retdec::llvmir2hll::FuncOptimizer::FuncOptimizer ( ShPtr< Module module)
protected

Constructs a new function optimizer.

Parameters
[in]moduleModule to be optimized.
Preconditions
  • module is non-null

Member Function Documentation

◆ doOptimization()

void retdec::llvmir2hll::FuncOptimizer::doOptimization ( )
overrideprotectedvirtual

◆ runOnFunction()

void retdec::llvmir2hll::FuncOptimizer::runOnFunction ( ShPtr< Function func)
protectedvirtual

Performs all optimizations on the given function.

Parameters
[in,out]funcFunction to be optimized.

By default, this function calls func->accept(this).

Reimplemented in retdec::llvmir2hll::VarDefStmtOptimizer, retdec::llvmir2hll::VarDefForLoopOptimizer, retdec::llvmir2hll::SimpleCopyPropagationOptimizer, retdec::llvmir2hll::DeadLocalAssignOptimizer, and retdec::llvmir2hll::CopyPropagationOptimizer.

◆ visitNestedAndSuccessorStatements()

template<typename T >
void retdec::llvmir2hll::FuncOptimizer::visitNestedAndSuccessorStatements ( ShPtr< T >  stmt)
inlineprotected

Visits the given statement, its nested statements, and successor statements (depending on the settings of the visitor).

This function is very handy in subclasses. Typical usage:

void ForLoopOptimizer::visit(ShPtr<WhileLoopStmt> stmt) {
tryConversionToForLoop(stmt);
}
void visitNestedAndSuccessorStatements(ShPtr< T > stmt)
Visits the given statement, its nested statements, and successor statements (depending on the setting...
Definition: func_optimizer.h:64

Member Data Documentation

◆ currFunc

ShPtr<Function> retdec::llvmir2hll::FuncOptimizer::currFunc
protected

Function that is currently being optimized.


The documentation for this class was generated from the following files: