11 #ifndef RETDEC_BIN2LLVMIR_ANALYSES_SYMBOLIC_TREE_H
12 #define RETDEC_BIN2LLVMIR_ANALYSES_SYMBOLIC_TREE_H
15 #include <unordered_set>
18 #include <llvm/IR/Function.h>
19 #include <llvm/IR/Instruction.h>
20 #include <llvm/IR/Instructions.h>
21 #include <llvm/IR/Module.h>
55 unsigned maxNodeLevel = 10
66 std::map<llvm::Value*, llvm::Value*>* val2val,
67 unsigned maxNodeLevel = 10
80 unsigned maxNodeLevel = 10
89 unsigned maxNodeLevel = 10
103 std::string
print(
unsigned indent = 0)
const;
112 bool isNary(
unsigned N)
const;
133 std::vector<SymbolicTree>
ops;
164 std::map<llvm::Value*, llvm::Value*>* val2val,
165 unsigned maxNodeLevel,
171 void _getPreOrder(std::vector<SymbolicTree*>& res)
const;
186 unsigned maxNodeLevel,
187 std::map<llvm::Value*, llvm::Value*>* v2v,
Definition: fileimage.h:27
Definition: reaching_definitions.h:121
Definition: symbolic_tree.h:43
unsigned _level
Definition: symbolic_tree.h:193
void solveMemoryLoads(FileImage *image)
Definition: symbolic_tree.cpp:501
static Config * _config
Definition: symbolic_tree.h:151
bool isNary(unsigned N) const
Definition: symbolic_tree.cpp:691
bool operator!=(const SymbolicTree &o) const
Definition: symbolic_tree.cpp:136
unsigned getLevel() const
Definition: symbolic_tree.cpp:96
void expandNode(ReachingDefinitionsAnalysis *RDA, std::map< llvm::Value *, llvm::Value * > *val2val, unsigned maxNodeLevel, bool linear)
Definition: symbolic_tree.cpp:141
bool isTernary() const
Definition: symbolic_tree.cpp:686
std::string print(unsigned indent=0) const
Definition: symbolic_tree.cpp:565
std::vector< SymbolicTree * > getPreOrder() const
Definition: symbolic_tree.cpp:598
static void setToDefaultConfiguration()
Definition: symbolic_tree.cpp:718
bool isUnary() const
Definition: symbolic_tree.cpp:676
void _getPreOrder(std::vector< SymbolicTree * > &res) const
Definition: symbolic_tree.cpp:637
static unsigned _naryLimit
Definition: symbolic_tree.h:157
static SymbolicTree PrecomputedRdaWithValueMap(ReachingDefinitionsAnalysis &rda, llvm::Value *v, std::map< llvm::Value *, llvm::Value * > *val2val, unsigned maxNodeLevel=10)
Definition: symbolic_tree.cpp:38
static void setTrackThroughGeneralRegisterLoads(bool b)
Definition: symbolic_tree.cpp:748
static void setAbi(Abi *abi)
Definition: symbolic_tree.cpp:733
friend std::ostream & operator<<(std::ostream &out, const SymbolicTree &s)
Definition: symbolic_tree.cpp:581
bool isNullary() const
Definition: symbolic_tree.cpp:671
std::vector< SymbolicTree * > getLevelOrder() const
Definition: symbolic_tree.cpp:623
static void setConfig(Config *config)
Definition: symbolic_tree.cpp:738
void _getPostOrder(std::vector< SymbolicTree * > &res) const
Definition: symbolic_tree.cpp:646
SymbolicTree & operator=(SymbolicTree &&other)
Definition: symbolic_tree.cpp:101
static void setTrackThroughAllocaLoads(bool b)
Definition: symbolic_tree.cpp:743
void fixLevel(unsigned level=0)
Definition: symbolic_tree.cpp:655
static bool _trackThroughGeneralRegisterLoads
Definition: symbolic_tree.h:154
void simplifyNode()
Definition: symbolic_tree.cpp:341
static bool _val2valUsed
Definition: symbolic_tree.h:152
std::vector< SymbolicTree > ops
Definition: symbolic_tree.h:133
static SymbolicTree PrecomputedRda(ReachingDefinitionsAnalysis &rda, llvm::Value *v, unsigned maxNodeLevel=10)
Definition: symbolic_tree.cpp:30
void _simplifyNode()
Definition: symbolic_tree.cpp:347
static Abi * _abi
Definition: symbolic_tree.h:150
static void setNaryLimit(unsigned n)
Definition: symbolic_tree.cpp:763
bool operator==(const SymbolicTree &o) const
Definition: symbolic_tree.cpp:114
SymbolicTree * getMaxIntValue()
Definition: symbolic_tree.cpp:529
SymbolicTree(SymbolicTree &&other)=default
std::vector< SymbolicTree * > getPostOrder() const
Definition: symbolic_tree.cpp:613
static void clear()
Definition: symbolic_tree.cpp:711
llvm::Value * value
Definition: symbolic_tree.h:131
static bool isVal2ValMapUsed()
Definition: symbolic_tree.cpp:728
SymbolicTree(const SymbolicTree &other)=default
static SymbolicTree Linear(llvm::Value *v, unsigned maxNodeLevel=10)
Definition: symbolic_tree.cpp:55
static void setTrackOnlyFlagRegisters(bool b)
Definition: symbolic_tree.cpp:753
bool isBinary() const
Definition: symbolic_tree.cpp:681
static bool _simplifyAtCreation
Definition: symbolic_tree.h:156
static bool _trackThroughAllocaLoads
Definition: symbolic_tree.h:153
static SymbolicTree OnDemandRda(llvm::Value *v, unsigned maxNodeLevel=10)
Definition: symbolic_tree.cpp:48
llvm::Value * user
Definition: symbolic_tree.h:132
static bool _trackOnlyFlagRegisters
Definition: symbolic_tree.h:155
static void setSimplifyAtCreation(bool b)
Definition: symbolic_tree.cpp:758
File image provider for bin2llvmirl.
The frontend-end part of the decompiler.
Definition: archive_wrapper.h:19
Reaching definitions analysis (RDA) builds UD and DU chains.