retdec
idioms_analysis.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_BIN2LLVMIR_OPTIMIZATIONS_IDIOMS_IDIOMS_ANALYSIS_H
8 #define RETDEC_BIN2LLVMIR_OPTIMIZATIONS_IDIOMS_IDIOMS_ANALYSIS_H
9 
10 #include <cstdio>
11 
12 #include <llvm/ADT/Statistic.h>
13 #include <llvm/IR/BasicBlock.h>
14 #include <llvm/IR/Instruction.h>
15 #include <llvm/Support/Debug.h>
16 #include <llvm/Support/raw_ostream.h>
17 
29 
30 namespace retdec {
31 namespace bin2llvmir {
32 
34  public IdiomsBorland,
35  public IdiomsCommon,
36  public IdiomsGCC,
37  public IdiomsIntel,
38  public IdiomsLLVM,
39  public IdiomsMagicDivMod,
40  public IdiomsOWatcom,
41  public IdiomsVStudio {
42 public:
43  IdiomsAnalysis(llvm::Module * M, CC_compiler cc, CC_arch arch)
44  {
45  init(M, cc, arch);
46  }
47  virtual bool doAnalysis(llvm::Function & f, llvm::Pass * p) override;
48 
49 private:
50  bool analyse(llvm::Function & f, llvm::Pass * p, int (IdiomsAnalysis::*exchanger)(llvm::Function &, llvm::Pass *) const, const char * fname);
51  bool analyse(llvm::BasicBlock & bb, llvm::Instruction * (IdiomsAnalysis::*exchanger)(llvm::BasicBlock::iterator) const, const char * fname);
52 };
53 
54 } // namespace bin2llvmir
55 } // namespace retdec
56 
57 #endif
Config DB provider for bin2llvmirl.
void init(llvm::Module *M, CC_compiler cc, CC_arch arch)
Definition: idioms_abstract.cpp:17
Definition: idioms_analysis.h:41
bool analyse(llvm::Function &f, llvm::Pass *p, int(IdiomsAnalysis::*exchanger)(llvm::Function &, llvm::Pass *) const, const char *fname)
Definition: idioms_analysis.cpp:277
virtual bool doAnalysis(llvm::Function &f, llvm::Pass *p) override
Definition: idioms_analysis.cpp:64
IdiomsAnalysis(llvm::Module *M, CC_compiler cc, CC_arch arch)
Definition: idioms_analysis.h:43
Borland C/C++ instruction idioms.
Definition: idioms_borland.h:18
Common compiler instruction idioms.
Definition: idioms_common.h:18
GNU/GCC instruction idioms.
Definition: idioms_gcc.h:20
Intel compiler instruction idioms.
Definition: idioms_intel.h:18
clang/LLVM instruction idioms
Definition: idioms_llvm.h:18
Division and modulo using magic number.
Definition: idioms_magicdivmod.h:23
Open Watcom instruction idioms.
Definition: idioms_owatcom.h:18
Visual Studio instruction idioms.
Definition: idioms_vstudio.h:20
Instruction idioms analysis abstract class.
Borland C/C++ instruction idioms.
Common compiler instruction idioms.
GNU/GCC instruction idioms.
Intel compiler instruction idioms.
clang/LLVM instruction idioms
Magic div and modulo exchangers.
Open Watcom instruction idioms.
Instruction idioms analysis types.
Visual Studio instruction idioms.
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