retdec
|
A base class of all function optimizers. More...
#include <func_optimizer.h>
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... | |
![]() | |
virtual void | doInitialization () |
Performs pre-optimization matters. More... | |
virtual void | doFinalization () |
Performs post-optimization matters. 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 | |
Protected Attributes | |
ShPtr< Function > | currFunc |
Function that is currently being optimized. More... | |
![]() | |
ShPtr< Module > | module |
The module that is being optimized. 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... | |
Additional Inherited Members | |
![]() | |
Optimizer (ShPtr< Module > module) | |
Constructs a new optimizer. More... | |
virtual std::string | getId () const =0 |
Returns the ID of the optimizer. More... | |
ShPtr< Module > | optimize () |
Performs all the optimizations of the specific optimizer. 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< 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 |
![]() | |
template<class OptimizerType , typename... Args> | |
static ShPtr< Module > | optimize (ShPtr< Module > module, Args &&... args) |
Creates an instance of OptimizerType with the given arguments and optimizes the given module by it. More... | |
A base class of all function optimizers.
Concrete optimizers should:
func->accept(this)
)using OrderedAllVisitor::visit;
declaration; otherwise, they'll be hidden by the overridden ones)accessedStmts
set to avoid looping over the same statements. Also, when a statement is accessed, it should check this set before accessing any of its "nested statements". For example, an if statement should check whether its body has already been accessed or not. visitStmt() takes care of that, so you can use it to visit statements (blocks).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.
Constructs a new function optimizer.
[in] | module | Module to be optimized. |
|
overrideprotectedvirtual |
Performs the optimization on all functions in the module.
This function calls runOnFunction() for each function in the module.
Only redefine if you want to prescribe the order in which functions are optimized; otherwise, just override runOnFunction().
Reimplemented from retdec::llvmir2hll::Optimizer.
Reimplemented in retdec::llvmir2hll::WhileTrueToUForLoopOptimizer, retdec::llvmir2hll::WhileTrueToForLoopOptimizer, retdec::llvmir2hll::VarDefStmtOptimizer, retdec::llvmir2hll::SimpleCopyPropagationOptimizer, retdec::llvmir2hll::PreWhileTrueLoopConvOptimizer, retdec::llvmir2hll::LLVMIntrinsicsOptimizer, retdec::llvmir2hll::IfBeforeLoopOptimizer, retdec::llvmir2hll::DeadLocalAssignOptimizer, and retdec::llvmir2hll::CopyPropagationOptimizer.
Performs all optimizations on the given function.
[in,out] | func | Function 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.
|
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:
Function that is currently being optimized.