retdec
Public Member Functions | Private Member Functions | Private Attributes | List of all members
retdec::llvmir2hll::CopyPropagationOptimizer Class Referencefinal

Copy propagation optimization. More...

#include <copy_propagation_optimizer.h>

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

Public Member Functions

 CopyPropagationOptimizer (ShPtr< Module > module, ShPtr< ValueAnalysis > va, ShPtr< CallInfoObtainer > cio)
 Constructs a new optimizer. More...
 
virtual std::string getId () const override
 Returns the ID of the optimizer. More...
 
- Public Member Functions inherited from retdec::llvmir2hll::Optimizer
 Optimizer (ShPtr< Module > module)
 Constructs a new 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
 

Private Member Functions

virtual void doOptimization () override
 Performs the optimization on all functions in the module. More...
 
virtual void runOnFunction (ShPtr< Function > func) override
 Performs all optimizations on the given function. More...
 
void performOptimization ()
 Performs the copy propagation optimization. More...
 
bool stmtOrUseHasBeenModified (ShPtr< Statement > stmt, const StmtSet &uses) const
 Returns true if stmt or any its uses in uses has been modified, false otherwise. More...
 
void handleCaseEmptyUses (ShPtr< Statement > stmt, ShPtr< Variable > stmtLhsVar)
 Handles the situation from performOptimization() when there are no uses of a variable after its definition before a subsequent definition. More...
 
void handleCaseSingleUse (ShPtr< Statement > stmt, ShPtr< Variable > stmtLhsVar, ShPtr< Statement > use)
 Handles the situation from performOptimization() when there is a single use of a variable after its definition before a subsequent definition. More...
 
void handleCaseInductionVariable (ShPtr< Statement > stmt, ShPtr< Variable > stmtLhsVar, const StmtSet &uses)
 Handles a specific pattern occurring in for loop induction variables: More...
 
void handleCaseInductionVariable2 (ShPtr< Statement > stmt, ShPtr< Variable > stmtLhsVar, const StmtSet &uses)
 
void handleCaseMoreThanOneUse (ShPtr< Statement > stmt, ShPtr< Variable > stmtLhsVar, const StmtSet &uses)
 Handles the situation from performOptimization() when there is more than one use of a variable after its definition before a subsequent definition. More...
 
bool shouldBeIncludedInDefUseChains (ShPtr< Variable > var)
 Should the given variable be included in def-use chains? More...
 
Visitor Interface
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
 

Private Attributes

ShPtr< CFGBuildercfgBuilder
 The used builder of CFGs. More...
 
ShPtr< ValueAnalysisva
 Analysis of values. More...
 
ShPtr< CallInfoObtainercio
 Obtainer of information about function calls. More...
 
ShPtr< VarUsesVisitorvuv
 Visitor for obtaining uses of variables. More...
 
ShPtr< DefUseAnalysisdua
 Def-use analysis. More...
 
ShPtr< UseDefAnalysisuda
 Use-def analysis. More...
 
ShPtr< DefUseChainsducs
 Def-use chains. More...
 
ShPtr< UseDefChainsudcs
 Use-def chains. More...
 
std::map< DefUseChains::StmtVarPair, std::size_t > def2uses
 Associative def-use chains. More...
 
std::map< ShPtr< Variable >, std::set< std::size_t > > var2dus
 
VarSet globalVars
 
StmtSet toEntirelyRemoveStmts
 Set of statements that should be removed entirely. More...
 
StmtSet toRemoveStmtsPreserveCalls
 
StmtSet modifiedStmts
 Set of statements that have been modified (altered or removed). More...
 
bool codeChanged
 Has the code changed? More...
 

Additional Inherited Members

- Static Public Member Functions inherited from retdec::llvmir2hll::Optimizer
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 inherited from retdec::llvmir2hll::FuncOptimizer
 FuncOptimizer (ShPtr< Module > module)
 Constructs a new function optimizer. 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...
 
- Protected Member Functions inherited from retdec::llvmir2hll::Optimizer
virtual void doInitialization ()
 Performs pre-optimization matters. 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 inherited from retdec::llvmir2hll::FuncOptimizer
ShPtr< FunctioncurrFunc
 Function that is currently being optimized. More...
 
- Protected Attributes inherited from retdec::llvmir2hll::Optimizer
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...
 

Detailed Description

Copy propagation optimization.

This optimization replaces the occurrences of targets of direct assignments with their values. A direct assignment is a statement of the form x = y, which simply assigns the value of y to x.

For example, the following code

a = 1
b = a
return b

can be replaced with

return 1

provided that certain conditions are met (e.g. a and b are non-global and are not used anywhere else).

This optimization also removes dead assignments or variable definitions. These are assignments which assign a value into a variable which is then never used.

For example, the following code

a = 1
return x

can be replaced with

return x

provided that a is non-global.

Instances of this class have reference object semantics.

This is a concrete optimizer which should not be subclassed.

Constructor & Destructor Documentation

◆ CopyPropagationOptimizer()

retdec::llvmir2hll::CopyPropagationOptimizer::CopyPropagationOptimizer ( ShPtr< Module module,
ShPtr< ValueAnalysis va,
ShPtr< CallInfoObtainer cio 
)

Constructs a new optimizer.

Parameters
[in]moduleModule to be optimized.
[in]vaAnalysis of values.
[in]cioObtainer of information about function calls.
Preconditions
  • module, va, and cio are non-null

Member Function Documentation

◆ doOptimization()

void retdec::llvmir2hll::CopyPropagationOptimizer::doOptimization ( )
overrideprivatevirtual

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

◆ getId()

virtual std::string retdec::llvmir2hll::CopyPropagationOptimizer::getId ( ) const
inlineoverridevirtual

Returns the ID of the optimizer.

Implements retdec::llvmir2hll::Optimizer.

◆ handleCaseEmptyUses()

void retdec::llvmir2hll::CopyPropagationOptimizer::handleCaseEmptyUses ( ShPtr< Statement stmt,
ShPtr< Variable stmtLhsVar 
)
private

Handles the situation from performOptimization() when there are no uses of a variable after its definition before a subsequent definition.

Parameters
[in]stmtDefinition of stmtLhsVar.
[in]stmtLhsVarVariable defined in stmt.

If this function changes the code, codeChanged is set to true.

Preconditions
  • there are no uses of stmtLhsVar after its definition in stmt before a subsequent definition

◆ handleCaseInductionVariable()

void retdec::llvmir2hll::CopyPropagationOptimizer::handleCaseInductionVariable ( ShPtr< Statement defStmt,
ShPtr< Variable defVar,
const StmtSet uses 
)
private

Handles a specific pattern occurring in for loop induction variables:

int_32 new_i = undef // undefined in the same block
int_32 Ai = int_32 0 // 1. definition with single use
while (True)
...
int_32 new_i = int_32 Ai + int_32 1 // has 2 definitions
int_32 Ai = int_32 new_i // 2. definition with single use
...

This gets optimized into:

int_32 new_i = int_32 0
while (True)
...
int_32 new_i = int_32 new_i + int_32 1
...
Parameters
[in]defStmtDefinition of defVar
[in]defVarVariable defined in s
[in]usesUses of defVar.

If this function changes the code, codeChanged is set to true.

◆ handleCaseInductionVariable2()

void retdec::llvmir2hll::CopyPropagationOptimizer::handleCaseInductionVariable2 ( ShPtr< Statement stmt,
ShPtr< Variable x,
const StmtSet xUses 
)
private

x = undef y = undef x = 0 while(true) y = x ... x = y + A <- optimized stmt if (y cond B) break

y = undef y = 0 while(true) ... if (y cond B) break y = y + A

◆ handleCaseMoreThanOneUse()

void retdec::llvmir2hll::CopyPropagationOptimizer::handleCaseMoreThanOneUse ( ShPtr< Statement stmt,
ShPtr< Variable stmtLhsVar,
const StmtSet uses 
)
private

Handles the situation from performOptimization() when there is more than one use of a variable after its definition before a subsequent definition.

Parameters
[in]stmtDefinition of stmtLhsVar.
[in]stmtLhsVarVariable defined in stmt.
[in]usesUses of stmtLhsVar.

If this function changes the code, codeChanged is set to true.

Preconditions
  • there is more than one use of stmtLhsVar after it is defined in stmt

◆ handleCaseSingleUse()

void retdec::llvmir2hll::CopyPropagationOptimizer::handleCaseSingleUse ( ShPtr< Statement stmt,
ShPtr< Variable stmtLhsVar,
ShPtr< Statement use 
)
private

Handles the situation from performOptimization() when there is a single use of a variable after its definition before a subsequent definition.

Parameters
[in]stmtDefinition of stmtLhsVar.
[in]stmtLhsVarVariable defined in stmt.
[in]useUse of stmtLhsVar.

If this function changes the code, codeChanged is set to true.

Preconditions
  • there is a single use of stmtLhsVar after its definition in stmt before a subsequent definition

◆ performOptimization()

void retdec::llvmir2hll::CopyPropagationOptimizer::performOptimization ( )
private

Performs the copy propagation optimization.

If this function changes the code, codeChanged is set to true.

◆ runOnFunction()

void retdec::llvmir2hll::CopyPropagationOptimizer::runOnFunction ( ShPtr< Function func)
overrideprivatevirtual

Performs all optimizations on the given function.

Parameters
[in,out]funcFunction to be optimized.

By default, this function calls func->accept(this).

Reimplemented from retdec::llvmir2hll::FuncOptimizer.

◆ shouldBeIncludedInDefUseChains()

bool retdec::llvmir2hll::CopyPropagationOptimizer::shouldBeIncludedInDefUseChains ( ShPtr< Variable var)
private

Should the given variable be included in def-use chains?

◆ stmtOrUseHasBeenModified()

bool retdec::llvmir2hll::CopyPropagationOptimizer::stmtOrUseHasBeenModified ( ShPtr< Statement stmt,
const StmtSet uses 
) const
private

Returns true if stmt or any its uses in uses has been modified, false otherwise.

◆ visit() [1/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [2/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [3/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [4/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [5/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [6/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [7/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [8/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [9/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [10/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [11/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [12/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [13/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [14/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [15/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [16/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [17/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [18/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [19/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [20/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [21/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [22/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [23/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [24/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [25/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [26/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [27/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [28/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [29/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [30/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [31/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [32/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [33/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [34/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [35/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [36/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [37/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [38/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [39/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [40/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [41/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [42/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [43/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [44/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [45/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [46/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [47/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [48/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [49/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [50/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [51/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [52/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [53/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [54/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [55/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [56/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [57/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [58/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [59/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [60/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [61/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [62/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [63/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [64/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [65/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [66/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [67/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [68/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

◆ visit() [69/69]

void retdec::llvmir2hll::OrderedAllVisitor::visit
overrideprivate

Member Data Documentation

◆ cfgBuilder

ShPtr<CFGBuilder> retdec::llvmir2hll::CopyPropagationOptimizer::cfgBuilder
private

The used builder of CFGs.

◆ cio

ShPtr<CallInfoObtainer> retdec::llvmir2hll::CopyPropagationOptimizer::cio
private

Obtainer of information about function calls.

◆ codeChanged

bool retdec::llvmir2hll::CopyPropagationOptimizer::codeChanged
private

Has the code changed?

◆ def2uses

std::map<DefUseChains::StmtVarPair, std::size_t> retdec::llvmir2hll::CopyPropagationOptimizer::def2uses
private

Associative def-use chains.

◆ dua

ShPtr<DefUseAnalysis> retdec::llvmir2hll::CopyPropagationOptimizer::dua
private

Def-use analysis.

◆ ducs

ShPtr<DefUseChains> retdec::llvmir2hll::CopyPropagationOptimizer::ducs
private

Def-use chains.

◆ globalVars

VarSet retdec::llvmir2hll::CopyPropagationOptimizer::globalVars
private

Global variables in module. This is here to speedup the traversal. By using this set, we do not have to ask module every time we need such information.

◆ modifiedStmts

StmtSet retdec::llvmir2hll::CopyPropagationOptimizer::modifiedStmts
private

Set of statements that have been modified (altered or removed).

◆ toEntirelyRemoveStmts

StmtSet retdec::llvmir2hll::CopyPropagationOptimizer::toEntirelyRemoveStmts
private

Set of statements that should be removed entirely.

◆ toRemoveStmtsPreserveCalls

StmtSet retdec::llvmir2hll::CopyPropagationOptimizer::toRemoveStmtsPreserveCalls
private

Set of assign/variable-defining statements that should be removed, but function calls should be preserved.

◆ uda

ShPtr<UseDefAnalysis> retdec::llvmir2hll::CopyPropagationOptimizer::uda
private

Use-def analysis.

◆ udcs

ShPtr<UseDefChains> retdec::llvmir2hll::CopyPropagationOptimizer::udcs
private

Use-def chains.

◆ va

ShPtr<ValueAnalysis> retdec::llvmir2hll::CopyPropagationOptimizer::va
private

Analysis of values.

◆ var2dus

std::map<ShPtr<Variable>, std::set<std::size_t> > retdec::llvmir2hll::CopyPropagationOptimizer::var2dus
private

◆ vuv

ShPtr<VarUsesVisitor> retdec::llvmir2hll::CopyPropagationOptimizer::vuv
private

Visitor for obtaining uses of variables.


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