retdec
|
This optimizer changes expressions where one of the operands is a number one. Examples are mentioned below. More...
#include <one_sub_optimizer.h>
Public Member Functions | |
OneSubOptimizer (ShPtr< ArithmExprEvaluator > arithmExprEvaluator) | |
Constructs the OneSubOptimizer. More... | |
virtual std::string | getId () const override |
Returns the ID of the optimizer. More... | |
![]() | |
virtual bool | tryOptimize (ShPtr< Expression > expr) |
Run optimization and try to optimize. More... | |
![]() | |
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< CallExpr > expr) override |
virtual void | visit (ShPtr< CommaOpExpr > expr) override |
virtual void | visit (ShPtr< DerefOpExpr > 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< 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 |
![]() | |
virtual | ~Visitor ()=default |
Static Public Member Functions | |
static ShPtr< SubOptimizer > | create (ShPtr< ArithmExprEvaluator > arithmExprEvaluator) |
Creates a new OneSubOptimizer. More... | |
Private Member Functions | |
bool | isConstFloatOne (ShPtr< Expression > expr) const |
Check if expression is a ConstFloat one. More... | |
bool | isConstIntOne (ShPtr< Expression > expr) const |
Check if expression is a ConstInt one. More... | |
bool | isOne (ShPtr< ConstFloat > value) const |
Determines whether the float constant has the value 1.0 . More... | |
bool | isOne (ShPtr< ConstInt > value) const |
Determines whether the constant integer has the value 1 . More... | |
bool | isOpOne (ShPtr< Expression > expr) const |
Check if expression is a ConstInt or ConstFloat number one. More... | |
Visitor Interface | |
virtual void | visit (ShPtr< MulOpExpr > expr) override |
virtual void | visit (ShPtr< DivOpExpr > expr) override |
virtual void | visit (ShPtr< BitXorOpExpr > expr) override |
Additional Inherited Members | |
![]() | |
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... | |
![]() | |
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... | |
![]() | |
Visitor ()=default | |
![]() | |
ShPtr< ArithmExprEvaluator > | arithmExprEvaluator |
The used evaluator of arithmetical expressions. More... | |
![]() | |
ShPtr< Statement > | lastStmt |
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... | |
This optimizer changes expressions where one of the operands is a number one. Examples are mentioned below.
Optimizations are now only on these operators: *, /, ^.
List of performed simplifications (by examples):
Instances of this class have reference object semantics.
This is a concrete sub-optimizer which should not be subclassed.
retdec::llvmir2hll::OneSubOptimizer::OneSubOptimizer | ( | ShPtr< ArithmExprEvaluator > | arithmExprEvaluator | ) |
Constructs the OneSubOptimizer.
[in] | arithmExprEvaluator | The used evaluator of arithmetical expressions. |
|
static |
Creates a new OneSubOptimizer.
[in] | arithmExprEvaluator | The used evaluator of arithmetical expressions. |
|
overridevirtual |
Returns the ID of the optimizer.
Implements retdec::llvmir2hll::SubOptimizer.
|
private |
Check if expression is a ConstFloat
one.
[in] | expr | Expression to check. |
true
if expr is a ConstFloat
one, otherwise false
.
|
private |
Check if expression is a ConstInt
one.
[in] | expr | Expression to check. |
true
if expr is a ConstInt
one, otherwise false
.
|
private |
Determines whether the float constant has the value 1.0
.
[in] | value | A value to check. |
true
if value is a float constant with the value 1.0
, otherwise false
. Determines whether the constant integer has the value 1
.
[in] | value | A value to check. |
true
if value is a constant integer with the value 1
, otherwise false
.
|
private |
Check if expression is a ConstInt
or ConstFloat
number one.
[in] | expr | Expression to check. |
true
if expr is a ConstInt
or ConstFloat
one, otherwise false
.
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.