7 #ifndef RETDEC_LLVMIR2HLL_OPTIMIZER_OPTIMIZERS_COPY_PROPAGATION_OPTIMIZER_H
8 #define RETDEC_LLVMIR2HLL_OPTIMIZER_OPTIMIZERS_COPY_PROPAGATION_OPTIMIZER_H
18 class CallInfoObtainer;
69 virtual std::string
getId()
const override {
return "CopyPropagation"; }
125 std::map<DefUseChains::StmtVarPair, std::size_t>
def2uses;
126 std::map<ShPtr<Variable>, std::set<std::size_t>>
var2dus;
Copy propagation optimization.
Definition: copy_propagation_optimizer.h:64
ShPtr< VarUsesVisitor > vuv
Visitor for obtaining uses of variables.
Definition: copy_propagation_optimizer.h:110
void handleCaseInductionVariable(ShPtr< Statement > stmt, ShPtr< Variable > stmtLhsVar, const StmtSet &uses)
Handles a specific pattern occurring in for loop induction variables:
Definition: copy_propagation_optimizer.cpp:784
void handleCaseInductionVariable2(ShPtr< Statement > stmt, ShPtr< Variable > stmtLhsVar, const StmtSet &uses)
Definition: copy_propagation_optimizer.cpp:971
ShPtr< CFGBuilder > cfgBuilder
The used builder of CFGs.
Definition: copy_propagation_optimizer.h:101
ShPtr< UseDefChains > udcs
Use-def chains.
Definition: copy_propagation_optimizer.h:122
bool shouldBeIncludedInDefUseChains(ShPtr< Variable > var)
Should the given variable be included in def-use chains?
Definition: copy_propagation_optimizer.cpp:1295
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 d...
Definition: copy_propagation_optimizer.cpp:462
ShPtr< DefUseChains > ducs
Def-use chains.
Definition: copy_propagation_optimizer.h:119
std::map< ShPtr< Variable >, std::set< std::size_t > > var2dus
Definition: copy_propagation_optimizer.h:126
std::map< DefUseChains::StmtVarPair, std::size_t > def2uses
Associative def-use chains.
Definition: copy_propagation_optimizer.h:125
StmtSet toEntirelyRemoveStmts
Set of statements that should be removed entirely.
Definition: copy_propagation_optimizer.h:134
bool codeChanged
Has the code changed?
Definition: copy_propagation_optimizer.h:144
StmtSet modifiedStmts
Set of statements that have been modified (altered or removed).
Definition: copy_propagation_optimizer.h:141
VarSet globalVars
Definition: copy_propagation_optimizer.h:131
void handleCaseEmptyUses(ShPtr< Statement > stmt, ShPtr< Variable > stmtLhsVar)
Handles the situation from performOptimization() when there are no uses of a variable after its defin...
Definition: copy_propagation_optimizer.cpp:372
CopyPropagationOptimizer(ShPtr< Module > module, ShPtr< ValueAnalysis > va, ShPtr< CallInfoObtainer > cio)
Constructs a new optimizer.
Definition: copy_propagation_optimizer.cpp:207
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 ...
Definition: copy_propagation_optimizer.cpp:1134
void performOptimization()
Performs the copy propagation optimization.
Definition: copy_propagation_optimizer.cpp:263
StmtSet toRemoveStmtsPreserveCalls
Definition: copy_propagation_optimizer.h:138
ShPtr< CallInfoObtainer > cio
Obtainer of information about function calls.
Definition: copy_propagation_optimizer.h:107
virtual std::string getId() const override
Returns the ID of the optimizer.
Definition: copy_propagation_optimizer.h:69
virtual void doOptimization() override
Performs the optimization on all functions in the module.
Definition: copy_propagation_optimizer.cpp:219
ShPtr< ValueAnalysis > va
Analysis of values.
Definition: copy_propagation_optimizer.h:104
bool stmtOrUseHasBeenModified(ShPtr< Statement > stmt, const StmtSet &uses) const
Returns true if stmt or any its uses in uses has been modified, false otherwise.
Definition: copy_propagation_optimizer.cpp:342
ShPtr< UseDefAnalysis > uda
Use-def analysis.
Definition: copy_propagation_optimizer.h:116
virtual void runOnFunction(ShPtr< Function > func) override
Performs all optimizations on the given function.
Definition: copy_propagation_optimizer.cpp:232
ShPtr< DefUseAnalysis > dua
Def-use analysis.
Definition: copy_propagation_optimizer.h:113
A base class of all function optimizers.
Definition: func_optimizer.h:44
ShPtr< Module > module
The module that is being optimized.
Definition: optimizer.h:79
virtual void visit(ShPtr< GlobalVarDef > varDef) override
Definition: ordered_all_visitor.cpp:95
An analysis providing def-use chains.
A base class of all function optimizers.
A library providing API for working with back-end IR.
std::shared_ptr< T > ShPtr
An alias for a shared pointer.
Definition: smart_ptr.h:18
std::set< ShPtr< Variable > > VarSet
Set of variables.
Definition: types.h:57
std::set< ShPtr< Statement > > StmtSet
Set of statements.
Definition: types.h:69
Definition: archive_wrapper.h:19
Declarations, aliases, macros, etc. for the use of smart pointers.
Aliases for several useful types.