retdec
|
#include <idioms_analysis.h>
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 | |
![]() | |
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 |
![]() | |
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 |
![]() | |
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 |
![]() | |
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 |
![]() | |
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 |
![]() | |
llvm::Instruction * | exchangeAndZeroAssign (llvm::BasicBlock::iterator) const |
llvm::Instruction * | exchangeOrMinusOneAssign (llvm::BasicBlock::iterator) const |
![]() | |
static void | eraseInstFromBasicBlock (llvm::Value *val, llvm::BasicBlock *bb) |
static bool | isPowerOfTwo (unsigned x) |
static bool | isPowerOfTwoRepresentable (const llvm::ConstantInt *cnst) |
|
inline |
|
private |
Analyse given BasicBlock and use instruction exchanger to transform instruction idioms
bb | BasicBlock to analyse |
exchanger | instruction idiom exchanger |
fname | instruction idiom exchanger name (for debug purpose only) |
|
private |
Analyse given Function and use instruction exchanger to transform instruction idioms
f | function to visit |
p | actual pass |
exchanger | instruction idiom exchanger |
fname | instruction idiom exchanger name (for debug purpose only) |
|
overridevirtual |
Do instruction idioms analysis pass
f | Function to analyse for instruction idioms |
p | actual pass |
Implements retdec::bin2llvmir::IdiomsAbstract.