retdec
idioms_abstract.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_BIN2LLVMIR_OPTIMIZATIONS_IDIOMS_IDIOMS_ABSTRACT_H
8 #define RETDEC_BIN2LLVMIR_OPTIMIZATIONS_IDIOMS_IDIOMS_ABSTRACT_H
9 
10 #include <llvm/IR/IRBuilder.h>
11 #include <llvm/IR/Instruction.h>
12 #include <llvm/IR/Module.h>
13 
15 
16 namespace retdec {
17 namespace bin2llvmir {
18 
23 private:
26  llvm::Module * m_module;
27 
28 protected:
30 
31  void init(llvm::Module * M, CC_compiler cc, CC_arch arch);
32 
33  CC_compiler getCompiler() const { return m_compiler; }
34  CC_arch getArch() const { return m_arch; }
35  llvm::Module * getModule() const { return m_module; }
36 
37  virtual bool doAnalysis(llvm::Function &, llvm::Pass *) = 0;
38  virtual ~IdiomsAbstract() = default;
39 
40  bool findBranchDependingOn(llvm::BranchInst ** br, llvm::BasicBlock & bb,
41  const llvm::Value * val) const;
42  static void eraseInstFromBasicBlock(llvm::Value * val, llvm::BasicBlock * bb);
43  static bool isPowerOfTwo(unsigned x);
44  static bool isPowerOfTwoRepresentable(const llvm::ConstantInt *cnst);
45 };
46 
47 } // namespace bin2llvmir
48 } // namespace retdec
49 
50 #endif
Instruction idiom analysis abstract class.
Definition: idioms_abstract.h:22
static bool isPowerOfTwoRepresentable(const llvm::ConstantInt *cnst)
Definition: idioms_abstract.cpp:75
static bool isPowerOfTwo(unsigned x)
Definition: idioms_abstract.cpp:65
CC_arch getArch() const
Definition: idioms_abstract.h:34
CC_compiler getCompiler() const
Definition: idioms_abstract.h:33
void init(llvm::Module *M, CC_compiler cc, CC_arch arch)
Definition: idioms_abstract.cpp:17
llvm::Module * getModule() const
Definition: idioms_abstract.h:35
CC_arch m_arch
Definition: idioms_abstract.h:24
static void eraseInstFromBasicBlock(llvm::Value *val, llvm::BasicBlock *bb)
Definition: idioms_abstract.cpp:49
CC_compiler m_compiler
Definition: idioms_abstract.h:25
IdiomsAbstract()
Definition: idioms_abstract.cpp:14
virtual bool doAnalysis(llvm::Function &, llvm::Pass *)=0
llvm::Module * m_module
Definition: idioms_abstract.h:26
bool findBranchDependingOn(llvm::BranchInst **br, llvm::BasicBlock &bb, const llvm::Value *val) const
Definition: idioms_abstract.cpp:30
Instruction idioms analysis types.
The frontend-end part of the decompiler.
CC_arch
Target architecture.
Definition: idioms_types.h:28
CC_compiler
Compiler type.
Definition: idioms_types.h:16
Definition: archive_wrapper.h:19