retdec
Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
retdec::llvmir2hll::Optimizer Class Referenceabstract

A base class of all optimizers. More...

#include <optimizer.h>

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

Public Member Functions

 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

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...
 

Protected Member Functions

virtual void doInitialization ()
 Performs pre-optimization matters. More...
 
virtual void doOptimization ()
 Performs the optimization. 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< 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

- Private Member Functions inherited from retdec::utils::NonCopyable
 NonCopyable (const NonCopyable &)=delete
 
NonCopyableoperator= (const NonCopyable &)=delete
 
 NonCopyable ()=default
 
 ~NonCopyable ()=default
 

Detailed Description

A base class of all optimizers.

Concrete optimizers should:

To use it (or any more concrete optimizer), either instantiate it and call optimize() in it, or use any of the templated optimize() static functions as a shorthand.

Instances of this class have reference object semantics.

Constructor & Destructor Documentation

◆ Optimizer()

retdec::llvmir2hll::Optimizer::Optimizer ( ShPtr< Module module)

Constructs a new optimizer.

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

Member Function Documentation

◆ doFinalization()

void retdec::llvmir2hll::Optimizer::doFinalization ( )
protectedvirtual

Performs post-optimization matters.

This function is called after all optimizations are done.

By default, this function does nothing.

◆ doInitialization()

void retdec::llvmir2hll::Optimizer::doInitialization ( )
protectedvirtual

Performs pre-optimization matters.

This function is called before any optimizations are done.

By default, this function does nothing.

◆ doOptimization()

void retdec::llvmir2hll::Optimizer::doOptimization ( )
protectedvirtual

◆ getId()

virtual std::string retdec::llvmir2hll::Optimizer::getId ( ) const
pure virtual

Returns the ID of the optimizer.

Implemented in retdec::llvmir2hll::WhileTrueToWhileCondOptimizer, retdec::llvmir2hll::WhileTrueToUForLoopOptimizer, retdec::llvmir2hll::WhileTrueToForLoopOptimizer, retdec::llvmir2hll::VoidReturnOptimizer, retdec::llvmir2hll::VarDefStmtOptimizer, retdec::llvmir2hll::VarDefForLoopOptimizer, retdec::llvmir2hll::UnusedGlobalVarOptimizer, retdec::llvmir2hll::SimplifyArithmExprOptimizer, retdec::llvmir2hll::SimpleCopyPropagationOptimizer, retdec::llvmir2hll::SelfAssignOptimizer, retdec::llvmir2hll::RemoveUselessCastsOptimizer, retdec::llvmir2hll::RemoveAllCastsOptimizer, retdec::llvmir2hll::PreWhileTrueLoopConvOptimizer, retdec::llvmir2hll::NoInitVarDefOptimizer, retdec::llvmir2hll::LoopLastContinueOptimizer, retdec::llvmir2hll::LLVMIntrinsicsOptimizer, retdec::llvmir2hll::IfToSwitchOptimizer, retdec::llvmir2hll::IfStructureOptimizer, retdec::llvmir2hll::IfBeforeLoopOptimizer, retdec::llvmir2hll::GotoStmtOptimizer, retdec::llvmir2hll::EmptyStmtOptimizer, retdec::llvmir2hll::EmptyArrayToStringOptimizer, retdec::llvmir2hll::DerefToArrayIndexOptimizer, retdec::llvmir2hll::DerefAddressOptimizer, retdec::llvmir2hll::DeadLocalAssignOptimizer, retdec::llvmir2hll::DeadCodeOptimizer, retdec::llvmir2hll::CopyPropagationOptimizer, retdec::llvmir2hll::CCastOptimizer, retdec::llvmir2hll::CArrayArgOptimizer, retdec::llvmir2hll::BreakContinueReturnOptimizer, retdec::llvmir2hll::BitShiftOptimizer, retdec::llvmir2hll::BitOpToLogOpOptimizer, retdec::llvmir2hll::AggressiveGlobalToLocalOptimizer, and retdec::llvmir2hll::AggressiveDerefOptimizer.

◆ optimize() [1/2]

ShPtr< Module > retdec::llvmir2hll::Optimizer::optimize ( )

Performs all the optimizations of the specific optimizer.

Returns
Optimized module.

This function calls the following functions (in the specified order), so subclass any of them to implement the desired behavior.

(1) doInitialization() (2) doOptimization() (3) doFinalization()

◆ optimize() [2/2]

template<class OptimizerType , typename... Args>
static ShPtr<Module> retdec::llvmir2hll::Optimizer::optimize ( ShPtr< Module module,
Args &&...  args 
)
inlinestatic

Creates an instance of OptimizerType with the given arguments and optimizes the given module by it.

Parameters
[in]moduleModule to be optimized.
[in]argsArguments to be passed to the optimization.
Template Parameters
OptimizerTypeType of the used optimizer.
Returns
Optimized module.

Member Data Documentation

◆ module

ShPtr<Module> retdec::llvmir2hll::Optimizer::module
protected

The module that is being optimized.


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