retdec
optimizer_manager.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_LLVMIR2HLL_OPTIMIZER_OPTIMIZER_MANAGER_H
8 #define RETDEC_LLVMIR2HLL_OPTIMIZER_OPTIMIZER_MANAGER_H
9 
14 
15 namespace retdec {
16 namespace llvmir2hll {
17 
18 class ArithmExprEvaluator;
19 class CallInfoObtainer;
20 class HLLWriter;
21 class Module;
22 class ValueAnalysis;
23 
31 public:
35  bool enableAggressiveOpts, bool enableDebug = false);
36 
37  void optimize(ShPtr<Module> m);
38 
39 private:
40  void printOptimization(const std::string &optName) const;
41  bool optShouldBeRun(const std::string &optName) const;
44 
45  template<typename Optimization, typename... Args>
46  void run(ShPtr<Module> m, Args &&... args);
47 
48 private:
51 
54 
57 
60 
63 
66 
69 
72 
75 
78 };
79 
80 } // namespace llvmir2hll
81 } // namespace retdec
82 
83 #endif
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.