retdec
Public Member Functions | Private Member Functions | List of all members
retdec::bin2llvmir::IdiomsAnalysis Class Reference

#include <idioms_analysis.h>

Inheritance diagram for retdec::bin2llvmir::IdiomsAnalysis:
Inheritance graph
[legend]
Collaboration diagram for retdec::bin2llvmir::IdiomsAnalysis:
Collaboration graph
[legend]

Public Member Functions

 IdiomsAnalysis (llvm::Module *M, CC_compiler cc, CC_arch arch)
 
virtual bool doAnalysis (llvm::Function &f, llvm::Pass *p) override
 

Private Member Functions

bool analyse (llvm::Function &f, llvm::Pass *p, int(IdiomsAnalysis::*exchanger)(llvm::Function &, llvm::Pass *) const, const char *fname)
 
bool analyse (llvm::BasicBlock &bb, llvm::Instruction *(IdiomsAnalysis::*exchanger)(llvm::BasicBlock::iterator) const, const char *fname)
 

Additional Inherited Members

- Protected Member Functions inherited from retdec::bin2llvmir::IdiomsAbstract
 IdiomsAbstract ()
 
void init (llvm::Module *M, CC_compiler cc, CC_arch arch)
 
CC_compiler getCompiler () const
 
CC_arch getArch () const
 
llvm::Module * getModule () const
 
virtual ~IdiomsAbstract ()=default
 
bool findBranchDependingOn (llvm::BranchInst **br, llvm::BasicBlock &bb, const llvm::Value *val) const
 
- Protected Member Functions inherited from retdec::bin2llvmir::IdiomsCommon
llvm::Instruction * exchangeDivByMinusTwo (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeUnsignedModulo2n (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeLessThanZero (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeGreaterEqualZero (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeBitShiftSDiv1 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeBitShiftUDiv (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeBitShiftMul (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeSignedModulo2n (llvm::BasicBlock::iterator iter) const
 
- Protected Member Functions inherited from retdec::bin2llvmir::IdiomsGCC
llvm::Instruction * exchangeFloatNeg (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeXorMinusOne (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeSignedModuloByTwo (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeCondBitShiftDiv1 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeCondBitShiftDiv2 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeCondBitShiftDiv3 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeCopysign (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeFloatAbs (llvm::BasicBlock::iterator iter) const
 
int exchangeCondBitShiftDivMultiBB (llvm::Function &f, llvm::Pass *pass) const
 
- Protected Member Functions inherited from retdec::bin2llvmir::IdiomsLLVM
llvm::Instruction * exchangeIsGreaterThanMinusOne (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeCompareEq (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeCompareNeq (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeCompareSlt (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * exchangeCompareSle (llvm::BasicBlock::iterator iter) const
 
- Protected Member Functions inherited from retdec::bin2llvmir::IdiomsMagicDivMod
llvm::Instruction * magicUnsignedDiv1 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * magicUnsignedDiv2 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * magicSignedDiv1 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * magicSignedDiv2 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * magicSignedDiv3 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * magicSignedDiv4 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * magicSignedDiv5 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * magicSignedDiv6 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * magicSignedDiv7pos (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * magicSignedDiv7neg (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * magicSignedDiv8pos (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * magicSignedDiv8neg (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * signedMod1 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * signedMod2 (llvm::BasicBlock::iterator iter) const
 
llvm::Instruction * unsignedMod (llvm::BasicBlock::iterator iter) const
 
- Protected Member Functions inherited from retdec::bin2llvmir::IdiomsVStudio
llvm::Instruction * exchangeAndZeroAssign (llvm::BasicBlock::iterator) const
 
llvm::Instruction * exchangeOrMinusOneAssign (llvm::BasicBlock::iterator) const
 
- Static Protected Member Functions inherited from retdec::bin2llvmir::IdiomsAbstract
static void eraseInstFromBasicBlock (llvm::Value *val, llvm::BasicBlock *bb)
 
static bool isPowerOfTwo (unsigned x)
 
static bool isPowerOfTwoRepresentable (const llvm::ConstantInt *cnst)
 

Constructor & Destructor Documentation

◆ IdiomsAnalysis()

retdec::bin2llvmir::IdiomsAnalysis::IdiomsAnalysis ( llvm::Module *  M,
CC_compiler  cc,
CC_arch  arch 
)
inline

Member Function Documentation

◆ analyse() [1/2]

bool retdec::bin2llvmir::IdiomsAnalysis::analyse ( llvm::BasicBlock &  bb,
llvm::Instruction *(IdiomsAnalysis::*)(llvm::BasicBlock::iterator) const  exchanger,
const char *  fname 
)
private

Analyse given BasicBlock and use instruction exchanger to transform instruction idioms

Parameters
bbBasicBlock to analyse
exchangerinstruction idiom exchanger
fnameinstruction idiom exchanger name (for debug purpose only)

◆ analyse() [2/2]

bool retdec::bin2llvmir::IdiomsAnalysis::analyse ( llvm::Function &  f,
llvm::Pass *  p,
int(IdiomsAnalysis::*)(llvm::Function &, llvm::Pass *) const  exchanger,
const char *  fname 
)
private

Analyse given Function and use instruction exchanger to transform instruction idioms

Parameters
ffunction to visit
pactual pass
exchangerinstruction idiom exchanger
fnameinstruction idiom exchanger name (for debug purpose only)
Returns
true whenever an exchange has been made, otherwise 0

◆ doAnalysis()

bool retdec::bin2llvmir::IdiomsAnalysis::doAnalysis ( llvm::Function &  f,
llvm::Pass *  p 
)
overridevirtual

Do instruction idioms analysis pass

Parameters
fFunction to analyse for instruction idioms
pactual pass
Returns
true whenever an exchange has been made, otherwise 0

Implements retdec::bin2llvmir::IdiomsAbstract.


The documentation for this class was generated from the following files: