retdec
|
This optimizer optimizes negation operators outside of expressions. More...
#include <negation_operator_sub_optimizer.h>
Public Member Functions | |
NegationOperatorSubOptimizer (ShPtr< ArithmExprEvaluator > arithmExprEvaluator) | |
Constructs the NegationOperatorSubOptimizer. 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< 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< 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 NegationOperatorSubOptimizer. More... | |
Private Member Functions | |
Visitor Interface | |
virtual void | visit (ShPtr< NotOpExpr > 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 optimizes negation operators outside of expressions.
Optimization is on the NegOpExpr operator (i.e. !
in C).
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::NegationOperatorSubOptimizer::NegationOperatorSubOptimizer | ( | ShPtr< ArithmExprEvaluator > | arithmExprEvaluator | ) |
Constructs the NegationOperatorSubOptimizer.
[in] | arithmExprEvaluator | The used evaluator of arithmetical expressions. |
|
static |
Creates a new NegationOperatorSubOptimizer.
[in] | arithmExprEvaluator | The used evaluator of arithmetical expressions. |
|
overridevirtual |
Returns the ID of the optimizer.
Implements retdec::llvmir2hll::SubOptimizer.
|
overrideprivatevirtual |
Reimplemented from retdec::llvmir2hll::OrderedAllVisitor.