7 #ifndef RETDEC_LLVMIR2HLL_OPTIMIZER_OPTIMIZER_MANAGER_H
8 #define RETDEC_LLVMIR2HLL_OPTIMIZER_OPTIMIZER_MANAGER_H
18 class ArithmExprEvaluator;
19 class CallInfoObtainer;
45 template<
typename Optimization,
typename... Args>
A manager managing optimizations.
Definition: optimizer_manager.h:30
void optimize(ShPtr< Module > m)
Runs the optimizations over m.
Definition: optimizer_manager.cpp:145
StringSet backendRunOpts
List of our optimizations that were run.
Definition: optimizer_manager.h:77
const StringSet enabledOpts
No other optimization than these will be run.
Definition: optimizer_manager.h:50
ShPtr< CallInfoObtainer > cio
Used call info obtainer.
Definition: optimizer_manager.h:62
void run(ShPtr< Module > m, Args &&... args)
Runs the given optimization (specified in the template parameter) over m with the given arguments.
Definition: optimizer_manager.cpp:374
void runOptimizerProvidedItShouldBeRun(ShPtr< Optimizer > optimizer)
Runs the given optimizer provided that it should be run.
Definition: optimizer_manager.cpp:295
bool enableAggressiveOpts
Enable aggressive optimizations?
Definition: optimizer_manager.h:68
ShPtr< ArithmExprEvaluator > arithmExprEvaluator
Used evaluator of arithmetical expressions.
Definition: optimizer_manager.h:65
bool enableDebug
Enable emission of debug messages?
Definition: optimizer_manager.h:71
bool shouldSecondCopyPropagationBeRun() const
Returns true if a second pass of CopyPropagation should be run, false otherwise.
Definition: optimizer_manager.cpp:340
void printOptimization(const std::string &optName) const
Prints debug information about the currently run optimization with optId.
Definition: optimizer_manager.cpp:330
const StringSet disabledOpts
Optimizations that won't be run.
Definition: optimizer_manager.h:53
ShPtr< ValueAnalysis > va
Used value analysis.
Definition: optimizer_manager.h:59
OptimizerManager(const StringSet &enabledOpts, const StringSet &disabledOpts, ShPtr< HLLWriter > hllWriter, ShPtr< ValueAnalysis > va, ShPtr< CallInfoObtainer > cio, ShPtr< ArithmExprEvaluator > arithmExprEvaluator, bool enableAggressiveOpts, bool enableDebug=false)
Constructs a new optimizer manager.
Definition: optimizer_manager.cpp:125
bool optShouldBeRun(const std::string &optName) const
Returns true if the optimization with optId should be run, false otherwise.
Definition: optimizer_manager.cpp:273
bool recoverFromOutOfMemory
Should we recover from out-of-memory errors during optimizations?
Definition: optimizer_manager.h:74
ShPtr< HLLWriter > hllWriter
Used HLL writer.
Definition: optimizer_manager.h:56
A mixin to make classes non-copyable.
Definition: non_copyable.h:27
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< std::string > StringSet
Set of strings.
Definition: types.h:51
Definition: archive_wrapper.h:19
A mixin to make classes non-copyable.
A base class of all optimizers.
Declarations, aliases, macros, etc. for the use of smart pointers.
Aliases for several useful types.