7 #ifndef RETDEC_BIN2LLVMIR_OPTIMIZATIONS_PARAM_RETURN_FILTER_FILTER_H
8 #define RETDEC_BIN2LLVMIR_OPTIMIZATIONS_PARAM_RETURN_FILTER_FILTER_H
10 #include <llvm/IR/Instructions.h>
51 typedef std::unique_ptr<Filter>
Ptr;
68 bool isVoidarg)
const;
72 bool isVoidarg)
const;
90 std::vector<FilterableLayout>& allArgs)
const;
93 std::vector<FilterableLayout>& allRets)
const;
96 std::vector<FilterableLayout>& allRets)
const;
101 std::vector<llvm::Value*>& stacks,
102 bool asc =
true)
const;
105 std::vector<uint32_t>& regs,
106 const std::vector<uint32_t>& orderedVector)
const;
110 const std::vector<llvm::Value*>& group,
111 const std::vector<llvm::Type*>& knownTypes)
const;
114 const std::vector<llvm::Value*>& group,
115 llvm::Type* knownType)
const;
118 const std::vector<llvm::Value*>& group,
119 const std::vector<llvm::Type*>& knownTypes)
const;
122 const std::vector<llvm::Value*>& paramValues)
const;
125 const std::vector<llvm::Value*>& paramValues)
const;
134 const std::vector<llvm::Value*>& paramValues,
135 const std::vector<uint32_t>& gpRegs,
136 const std::vector<uint32_t>& fpRegs,
137 const std::vector<uint32_t>& doubleRegs,
138 const std::vector<uint32_t>& vecRegs)
const;
144 const std::vector<llvm::Type*>& types)
const;
165 std::vector<uint32_t>& store,
166 const std::vector<uint32_t>& regs,
167 std::size_t maxRegsPerObject)
const;
180 std::vector<uint32_t>& regs,
181 const std::vector<uint32_t>& templRegs)
const;
Calling convention information.
Definition: calling_convention.h:22
Definition: collector.h:24
Definition: data_entries.h:150
static Filter::Ptr createFilter(Abi *abi, const CallingConvention::ID &id)
Definition: filter.cpp:1367
void filterCallsVariadic(DataFlowEntry *de, const Collector *collector) const
Definition: filter.cpp:250
FilterableLayout createArgsFilterableLayout(const std::vector< llvm::Value * > &group, const std::vector< llvm::Type * > &knownTypes) const
Definition: filter.cpp:920
virtual std::vector< llvm::Value * > createGroupedArgValues(const FilterableLayout &lay) const
Definition: filter.cpp:1019
std::size_t fetchGPRegsForType(llvm::Type *type, FilterableLayout &lay) const
Definition: filter.cpp:520
virtual void filterArgsByKnownTypes(FilterableLayout &lay) const
Definition: filter.cpp:399
virtual FilterableLayout separateArgValues(const std::vector< llvm::Value * > ¶mValues) const
Definition: filter.cpp:952
void orderRegistersBy(std::vector< uint32_t > ®s, const std::vector< uint32_t > &orderedVector) const
Definition: filter.cpp:904
void leaveOnlyContinuousRegisters(std::vector< uint32_t > ®s, const std::vector< uint32_t > &templRegs) const
Definition: filter.cpp:1333
void leaveOnlyPositiveStacks(FilterableLayout &lay) const
Definition: filter.cpp:1158
const CallingConvention * _cc
Definition: filter.h:187
std::size_t fetchDoubleRegsForType(llvm::Type *type, FilterableLayout &lay) const
Definition: filter.cpp:560
void createContinuousArgRegisters(FilterableLayout &lay) const
Definition: filter.cpp:1259
void estimateRetValue(DataFlowEntry *de) const
Definition: filter.cpp:32
std::unique_ptr< Filter > Ptr
Definition: filter.h:51
FilterableLayout createRetsFilterableLayout(const std::vector< llvm::Value * > &group, llvm::Type *knownType) const
Definition: filter.cpp:932
void leaveCommonRets(std::vector< FilterableLayout > &allRets) const
Definition: filter.cpp:804
const Abi * _abi
Definition: filter.h:186
virtual void filterCallArgs(FilterableLayout &args, bool isVoidarg) const
Definition: filter.cpp:337
void leaveCommon(std::vector< FilterableLayout > &allRets) const
Definition: filter.cpp:809
void leaveSameStacks(FilterableLayout &lay, const FilterableLayout &fig) const
Definition: filter.cpp:1356
void filterCalls(DataFlowEntry *de) const
Definition: filter.cpp:136
std::vector< llvm::Type * > expandTypes(const std::vector< llvm::Type * > &types) const
Definition: filter.cpp:481
virtual void filterRets(FilterableLayout &rets) const
Definition: filter.cpp:373
void filterDefinition(DataFlowEntry *de) const
Definition: filter.cpp:98
void leaveCommonArgs(std::vector< FilterableLayout > &allArgs) const
Definition: filter.cpp:799
Filter(const Abi *_abi, const CallingConvention *_cc)
Definition: filter.cpp:24
void leaveOnlyContinuousArgRegisters(FilterableLayout &lay) const
Definition: filter.cpp:1206
void leaveOnlyContinuousStack(FilterableLayout &lay) const
Definition: filter.cpp:1172
virtual void filterDefinitionArgs(FilterableLayout &args, bool isVoidarg) const
Definition: filter.cpp:313
std::size_t fetchFPRegsForType(llvm::Type *type, FilterableLayout &lay) const
Definition: filter.cpp:540
virtual FilterableLayout separateRetValues(const std::vector< llvm::Value * > ¶mValues) const
Definition: filter.cpp:962
void orderStacks(std::vector< llvm::Value * > &stacks, bool asc=true) const
Definition: filter.cpp:873
virtual ~Filter()=default
std::size_t fetchVecRegsForType(llvm::Type *type, FilterableLayout &lay) const
Definition: filter.cpp:580
virtual void filterRetsByDefLayout(FilterableLayout &args, const FilterableLayout &def) const
Definition: filter.cpp:385
void orderFiterableLayout(FilterableLayout &lay) const
Definition: filter.cpp:864
virtual void filterRetsByKnownTypes(FilterableLayout &lay) const
Definition: filter.cpp:693
virtual std::vector< llvm::Value * > createGroupedRetValues(const FilterableLayout &lay) const
Definition: filter.cpp:1024
virtual void filterCallArgsByDefLayout(FilterableLayout &args, const FilterableLayout &def) const
Definition: filter.cpp:359
std::size_t fetchRegsForType(llvm::Type *type, std::vector< uint32_t > &store, const std::vector< uint32_t > ®s, std::size_t maxRegsPerObject) const
Definition: filter.cpp:600
void leaveOnlyContinuousRetRegisters(FilterableLayout &lay) const
Definition: filter.cpp:1325
FilterableLayout separateValues(const std::vector< llvm::Value * > ¶mValues, 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
Definition: filter.cpp:975
std::size_t getNumberOfStacksForType(llvm::Type *type) const
Definition: filter.cpp:679
std::vector< llvm::Value * > createGroupedValues(const FilterableLayout &lay) const
Definition: filter.cpp:1029
Order
Definition: filter.h:23
std::vector< uint32_t > vectorRegisters
Definition: filter.h:40
std::vector< uint32_t > gpRegisters
Definition: filter.h:37
std::vector< llvm::Type * > knownTypes
Definition: filter.h:42
std::vector< llvm::Value * > stacks
Definition: filter.h:41
std::vector< uint32_t > fpRegisters
Definition: filter.h:38
std::vector< uint32_t > doubleRegisters
Definition: filter.h:39
std::vector< Order > knownOrder
Definition: filter.h:43
eCC
Definition: calling_convention.h:24
Collects possible arguments and returns of functions.
Data entries for parameter analysis.
The frontend-end part of the decompiler.
FilterableLayout::Order OrderID
Definition: filter.h:46
Definition: archive_wrapper.h:19