retdec
Public Member Functions | Protected Member Functions | Protected Attributes | Private Attributes | List of all members
retdec::llvmir2hll::SubOptimizer Class Referenceabstract

A base class for all simplify arithmetical expression optimizations. More...

#include <sub_optimizer.h>

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

Public Member Functions

virtual std::string getId () const =0
 Returns the ID of the optimizer. More...
 
virtual bool tryOptimize (ShPtr< Expression > expr)
 Run optimization and try to optimize. 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
 

Protected Member Functions

 SubOptimizer (ShPtr< ArithmExprEvaluator > arithmExprEvaluator)
 Constructs the SubOptimizer. More...
 
bool isConstFloatOrConstInt (ShPtr< Expression > expr) const
 Check if expression is a ConstInt or ConstFloat. More...
 
void optimizeExpr (ShPtr< Expression > oldExpr, ShPtr< Expression > newExpr)
 Optimize expression from oldExpr to newExpr. More...
 
bool tryOptimizeAndReturnIfCodeChanged (ShPtr< Expression > expr)
 Start traversal in abstract syntax tree. 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< ArithmExprEvaluatorarithmExprEvaluator
 The used evaluator of arithmetical expressions. 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...
 

Private Attributes

bool codeChanged
 

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 for all simplify arithmetical expression optimizations.

Constructor & Destructor Documentation

◆ SubOptimizer()

retdec::llvmir2hll::SubOptimizer::SubOptimizer ( ShPtr< ArithmExprEvaluator arithmExprEvaluator)
protected

Constructs the SubOptimizer.

Parameters
[in]arithmExprEvaluatorThe used evaluator of arithmetical expressions.
Preconditions
  • arithmExprEvaluator is non-null

Member Function Documentation

◆ getId()

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

◆ isConstFloatOrConstInt()

bool retdec::llvmir2hll::SubOptimizer::isConstFloatOrConstInt ( ShPtr< Expression expr) const
protected

Check if expression is a ConstInt or ConstFloat.

Parameters
[in]exprExpression to check.
Returns
true if expr is a ConstInt or ConstFloat, otherwise false.

◆ optimizeExpr()

void retdec::llvmir2hll::SubOptimizer::optimizeExpr ( ShPtr< Expression oldExpr,
ShPtr< Expression newExpr 
)
protected

Optimize expression from oldExpr to newExpr.

Parameters
[in]oldExprOld expression that will be replaced.
[in]newExprNew expression that is used to replace oldExpr.

◆ tryOptimize()

bool retdec::llvmir2hll::SubOptimizer::tryOptimize ( ShPtr< Expression expr)
virtual

Run optimization and try to optimize.

Parameters
[in]exprAn expression to optimize.
Returns
true if something was optimized, otherwise false.

◆ tryOptimizeAndReturnIfCodeChanged()

bool retdec::llvmir2hll::SubOptimizer::tryOptimizeAndReturnIfCodeChanged ( ShPtr< Expression expr)
protected

Start traversal in abstract syntax tree.

Parameters
[in]exprExpression from which the traversal is started.
Returns
true if something was optimized, otherwise false.

Member Data Documentation

◆ arithmExprEvaluator

ShPtr<ArithmExprEvaluator> retdec::llvmir2hll::SubOptimizer::arithmExprEvaluator
protected

The used evaluator of arithmetical expressions.

◆ codeChanged

bool retdec::llvmir2hll::SubOptimizer::codeChanged
private

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