retdec
idioms_gcc.h
Go to the documentation of this file.
1 
7 #ifndef RETDEC_BIN2LLVMIR_OPTIMIZATIONS_IDIOMS_IDIOMS_GCC_H
8 #define RETDEC_BIN2LLVMIR_OPTIMIZATIONS_IDIOMS_IDIOMS_GCC_H
9 
10 #include <llvm/IR/Instruction.h>
11 
13 
14 namespace retdec {
15 namespace bin2llvmir {
16 
20 class IdiomsGCC: virtual public IdiomsAbstract {
21  friend class IdiomsAnalysis;
22 
23 protected:
24  llvm::Instruction * exchangeFloatNeg(llvm::BasicBlock::iterator iter) const;
25  llvm::Instruction * exchangeXorMinusOne(llvm::BasicBlock::iterator iter) const;
26  llvm::Instruction * exchangeSignedModuloByTwo(llvm::BasicBlock::iterator iter) const;
27  llvm::Instruction * exchangeCondBitShiftDiv1(llvm::BasicBlock::iterator iter) const;
28  llvm::Instruction * exchangeCondBitShiftDiv2(llvm::BasicBlock::iterator iter) const;
29  llvm::Instruction * exchangeCondBitShiftDiv3(llvm::BasicBlock::iterator iter) const;
30  llvm::Instruction * exchangeCopysign(llvm::BasicBlock::iterator iter) const;
31  llvm::Instruction * exchangeFloatAbs(llvm::BasicBlock::iterator iter) const;
32 
33  // multi BB idioms
34  int exchangeCondBitShiftDivMultiBB(llvm::Function & f, llvm::Pass * pass) const;
35 };
36 
37 } // namespace bin2llvmir
38 } // namespace retdec
39 
40 #endif
Instruction idiom analysis abstract class.
Definition: idioms_abstract.h:22
Definition: idioms_analysis.h:41
GNU/GCC instruction idioms.
Definition: idioms_gcc.h:20
llvm::Instruction * exchangeXorMinusOne(llvm::BasicBlock::iterator iter) const
Definition: idioms_gcc.cpp:49
int exchangeCondBitShiftDivMultiBB(llvm::Function &f, llvm::Pass *pass) const
Definition: idioms_gcc.cpp:316
llvm::Instruction * exchangeFloatAbs(llvm::BasicBlock::iterator iter) const
Definition: idioms_gcc.cpp:270
llvm::Instruction * exchangeCondBitShiftDiv1(llvm::BasicBlock::iterator iter) const
Definition: idioms_gcc.cpp:136
llvm::Instruction * exchangeCopysign(llvm::BasicBlock::iterator iter) const
Definition: idioms_gcc.cpp:483
llvm::Instruction * exchangeCondBitShiftDiv3(llvm::BasicBlock::iterator iter) const
Definition: idioms_gcc.cpp:230
llvm::Instruction * exchangeCondBitShiftDiv2(llvm::BasicBlock::iterator iter) const
Definition: idioms_gcc.cpp:183
llvm::Instruction * exchangeSignedModuloByTwo(llvm::BasicBlock::iterator iter) const
Definition: idioms_gcc.cpp:76
llvm::Instruction * exchangeFloatNeg(llvm::BasicBlock::iterator iter) const
Definition: idioms_gcc.cpp:27
Instruction idioms analysis abstract class.
The frontend-end part of the decompiler.
Definition: archive_wrapper.h:19