retdec
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
retdec::bin2llvmir::Filter Class Reference

#include <filter.h>

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

Public Types

typedef std::unique_ptr< FilterPtr
 

Public Member Functions

 Filter (const Abi *_abi, const CallingConvention *_cc)
 
virtual ~Filter ()=default
 
void filterDefinition (DataFlowEntry *de) const
 
void filterCalls (DataFlowEntry *de) const
 
void filterCallsVariadic (DataFlowEntry *de, const Collector *collector) const
 
void estimateRetValue (DataFlowEntry *de) const
 

Protected Member Functions

virtual void filterDefinitionArgs (FilterableLayout &args, bool isVoidarg) const
 
virtual void filterCallArgs (FilterableLayout &args, bool isVoidarg) const
 
virtual void filterCallArgsByDefLayout (FilterableLayout &args, const FilterableLayout &def) const
 
virtual void filterRets (FilterableLayout &rets) const
 
virtual void filterRetsByDefLayout (FilterableLayout &args, const FilterableLayout &def) const
 
virtual void filterArgsByKnownTypes (FilterableLayout &lay) const
 
virtual void filterRetsByKnownTypes (FilterableLayout &lay) const
 
void leaveCommonArgs (std::vector< FilterableLayout > &allArgs) const
 
void leaveCommonRets (std::vector< FilterableLayout > &allRets) const
 
void leaveCommon (std::vector< FilterableLayout > &allRets) const
 
void orderFiterableLayout (FilterableLayout &lay) const
 
void orderStacks (std::vector< llvm::Value * > &stacks, bool asc=true) const
 
void orderRegistersBy (std::vector< uint32_t > &regs, const std::vector< uint32_t > &orderedVector) const
 
FilterableLayout createArgsFilterableLayout (const std::vector< llvm::Value * > &group, const std::vector< llvm::Type * > &knownTypes) const
 
FilterableLayout createRetsFilterableLayout (const std::vector< llvm::Value * > &group, llvm::Type *knownType) const
 
FilterableLayout createRetsFilterableLayout (const std::vector< llvm::Value * > &group, const std::vector< llvm::Type * > &knownTypes) const
 
virtual FilterableLayout separateArgValues (const std::vector< llvm::Value * > &paramValues) const
 
virtual FilterableLayout separateRetValues (const std::vector< llvm::Value * > &paramValues) const
 
virtual std::vector< llvm::Value * > createGroupedArgValues (const FilterableLayout &lay) const
 
virtual std::vector< llvm::Value * > createGroupedRetValues (const FilterableLayout &lay) const
 
FilterableLayout separateValues (const std::vector< llvm::Value * > &paramValues, const std::vector< uint32_t > &gpRegs, const std::vector< uint32_t > &fpRegs, const std::vector< uint32_t > &doubleRegs, const std::vector< uint32_t > &vecRegs) const
 
std::vector< llvm::Value * > createGroupedValues (const FilterableLayout &lay) const
 
std::vector< llvm::Type * > expandTypes (const std::vector< llvm::Type * > &types) const
 
std::size_t fetchGPRegsForType (llvm::Type *type, FilterableLayout &lay) const
 
std::size_t fetchFPRegsForType (llvm::Type *type, FilterableLayout &lay) const
 
std::size_t fetchDoubleRegsForType (llvm::Type *type, FilterableLayout &lay) const
 
std::size_t fetchVecRegsForType (llvm::Type *type, FilterableLayout &lay) const
 
std::size_t fetchRegsForType (llvm::Type *type, std::vector< uint32_t > &store, const std::vector< uint32_t > &regs, std::size_t maxRegsPerObject) const
 
std::size_t getNumberOfStacksForType (llvm::Type *type) const
 
void leaveOnlyPositiveStacks (FilterableLayout &lay) const
 
void leaveOnlyContinuousStack (FilterableLayout &lay) const
 
void leaveOnlyContinuousArgRegisters (FilterableLayout &lay) const
 
void leaveOnlyContinuousRetRegisters (FilterableLayout &lay) const
 
void leaveSameStacks (FilterableLayout &lay, const FilterableLayout &fig) const
 
void leaveOnlyContinuousRegisters (std::vector< uint32_t > &regs, const std::vector< uint32_t > &templRegs) const
 
void createContinuousArgRegisters (FilterableLayout &lay) const
 

Protected Attributes

const Abi_abi
 
const CallingConvention_cc
 

Member Typedef Documentation

◆ Ptr

typedef std::unique_ptr<Filter> retdec::bin2llvmir::Filter::Ptr

Constructor & Destructor Documentation

◆ Filter()

retdec::bin2llvmir::Filter::Filter ( const Abi _abi,
const CallingConvention _cc 
)

◆ ~Filter()

virtual retdec::bin2llvmir::Filter::~Filter ( )
virtualdefault

Member Function Documentation

◆ createArgsFilterableLayout()

FilterableLayout retdec::bin2llvmir::Filter::createArgsFilterableLayout ( const std::vector< llvm::Value * > &  group,
const std::vector< llvm::Type * > &  knownTypes 
) const
protected

◆ createContinuousArgRegisters()

void retdec::bin2llvmir::Filter::createContinuousArgRegisters ( FilterableLayout lay) const
protected

◆ createGroupedArgValues()

std::vector< llvm::Value * > retdec::bin2llvmir::Filter::createGroupedArgValues ( const FilterableLayout lay) const
protectedvirtual

◆ createGroupedRetValues()

std::vector< llvm::Value * > retdec::bin2llvmir::Filter::createGroupedRetValues ( const FilterableLayout lay) const
protectedvirtual

◆ createGroupedValues()

std::vector< llvm::Value * > retdec::bin2llvmir::Filter::createGroupedValues ( const FilterableLayout lay) const
protected

◆ createRetsFilterableLayout() [1/2]

FilterableLayout retdec::bin2llvmir::Filter::createRetsFilterableLayout ( const std::vector< llvm::Value * > &  group,
const std::vector< llvm::Type * > &  knownTypes 
) const
protected

◆ createRetsFilterableLayout() [2/2]

FilterableLayout retdec::bin2llvmir::Filter::createRetsFilterableLayout ( const std::vector< llvm::Value * > &  group,
llvm::Type *  knownType 
) const
protected

◆ estimateRetValue()

void retdec::bin2llvmir::Filter::estimateRetValue ( DataFlowEntry de) const

◆ expandTypes()

std::vector< Type * > retdec::bin2llvmir::Filter::expandTypes ( const std::vector< llvm::Type * > &  types) const
protected

◆ fetchDoubleRegsForType()

size_t retdec::bin2llvmir::Filter::fetchDoubleRegsForType ( llvm::Type *  type,
FilterableLayout lay 
) const
protected

◆ fetchFPRegsForType()

size_t retdec::bin2llvmir::Filter::fetchFPRegsForType ( llvm::Type *  type,
FilterableLayout lay 
) const
protected

◆ fetchGPRegsForType()

size_t retdec::bin2llvmir::Filter::fetchGPRegsForType ( llvm::Type *  type,
FilterableLayout lay 
) const
protected

◆ fetchRegsForType()

size_t retdec::bin2llvmir::Filter::fetchRegsForType ( llvm::Type *  type,
std::vector< uint32_t > &  store,
const std::vector< uint32_t > &  regs,
std::size_t  maxRegsPerObject 
) const
protected

◆ fetchVecRegsForType()

size_t retdec::bin2llvmir::Filter::fetchVecRegsForType ( llvm::Type *  type,
FilterableLayout lay 
) const
protected

◆ filterArgsByKnownTypes()

void retdec::bin2llvmir::Filter::filterArgsByKnownTypes ( FilterableLayout lay) const
protectedvirtual

◆ filterCallArgs()

void retdec::bin2llvmir::Filter::filterCallArgs ( FilterableLayout args,
bool  isVoidarg 
) const
protectedvirtual

◆ filterCallArgsByDefLayout()

void retdec::bin2llvmir::Filter::filterCallArgsByDefLayout ( FilterableLayout args,
const FilterableLayout def 
) const
protectedvirtual

◆ filterCalls()

void retdec::bin2llvmir::Filter::filterCalls ( DataFlowEntry de) const

◆ filterCallsVariadic()

void retdec::bin2llvmir::Filter::filterCallsVariadic ( DataFlowEntry de,
const Collector collector 
) const

◆ filterDefinition()

void retdec::bin2llvmir::Filter::filterDefinition ( DataFlowEntry de) const

◆ filterDefinitionArgs()

void retdec::bin2llvmir::Filter::filterDefinitionArgs ( FilterableLayout args,
bool  isVoidarg 
) const
protectedvirtual

◆ filterRets()

void retdec::bin2llvmir::Filter::filterRets ( FilterableLayout rets) const
protectedvirtual

◆ filterRetsByDefLayout()

void retdec::bin2llvmir::Filter::filterRetsByDefLayout ( FilterableLayout args,
const FilterableLayout def 
) const
protectedvirtual

◆ filterRetsByKnownTypes()

void retdec::bin2llvmir::Filter::filterRetsByKnownTypes ( FilterableLayout lay) const
protectedvirtual

◆ getNumberOfStacksForType()

size_t retdec::bin2llvmir::Filter::getNumberOfStacksForType ( llvm::Type *  type) const
protected

◆ leaveCommon()

void retdec::bin2llvmir::Filter::leaveCommon ( std::vector< FilterableLayout > &  allRets) const
protected

◆ leaveCommonArgs()

void retdec::bin2llvmir::Filter::leaveCommonArgs ( std::vector< FilterableLayout > &  allArgs) const
protected

◆ leaveCommonRets()

void retdec::bin2llvmir::Filter::leaveCommonRets ( std::vector< FilterableLayout > &  allRets) const
protected

◆ leaveOnlyContinuousArgRegisters()

void retdec::bin2llvmir::Filter::leaveOnlyContinuousArgRegisters ( FilterableLayout lay) const
protected

◆ leaveOnlyContinuousRegisters()

void retdec::bin2llvmir::Filter::leaveOnlyContinuousRegisters ( std::vector< uint32_t > &  regs,
const std::vector< uint32_t > &  templRegs 
) const
protected

◆ leaveOnlyContinuousRetRegisters()

void retdec::bin2llvmir::Filter::leaveOnlyContinuousRetRegisters ( FilterableLayout lay) const
protected

◆ leaveOnlyContinuousStack()

void retdec::bin2llvmir::Filter::leaveOnlyContinuousStack ( FilterableLayout lay) const
protected

◆ leaveOnlyPositiveStacks()

void retdec::bin2llvmir::Filter::leaveOnlyPositiveStacks ( FilterableLayout lay) const
protected

◆ leaveSameStacks()

void retdec::bin2llvmir::Filter::leaveSameStacks ( FilterableLayout lay,
const FilterableLayout fig 
) const
protected

◆ orderFiterableLayout()

void retdec::bin2llvmir::Filter::orderFiterableLayout ( FilterableLayout lay) const
protected

◆ orderRegistersBy()

void retdec::bin2llvmir::Filter::orderRegistersBy ( std::vector< uint32_t > &  regs,
const std::vector< uint32_t > &  orderedVector 
) const
protected

◆ orderStacks()

void retdec::bin2llvmir::Filter::orderStacks ( std::vector< llvm::Value * > &  stacks,
bool  asc = true 
) const
protected

◆ separateArgValues()

FilterableLayout retdec::bin2llvmir::Filter::separateArgValues ( const std::vector< llvm::Value * > &  paramValues) const
protectedvirtual

◆ separateRetValues()

FilterableLayout retdec::bin2llvmir::Filter::separateRetValues ( const std::vector< llvm::Value * > &  paramValues) const
protectedvirtual

◆ separateValues()

FilterableLayout retdec::bin2llvmir::Filter::separateValues ( const std::vector< llvm::Value * > &  paramValues,
const std::vector< uint32_t > &  gpRegs,
const std::vector< uint32_t > &  fpRegs,
const std::vector< uint32_t > &  doubleRegs,
const std::vector< uint32_t > &  vecRegs 
) const
protected

Member Data Documentation

◆ _abi

const Abi* retdec::bin2llvmir::Filter::_abi
protected

◆ _cc

const CallingConvention* retdec::bin2llvmir::Filter::_cc
protected

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