7 #ifndef IR_SEG_SYMBOLICEXPRGRAPHBUILDER_H
8 #define IR_SEG_SYMBOLICEXPRGRAPHBUILDER_H
10 #include <llvm/IR/Function.h>
11 #include <llvm/IR/Operator.h>
12 #include <llvm/Pass.h>
15 #include <unordered_map>
17 #include "Analysis/Bitcode/TSDataLayout.h"
18 #include "Analysis/CallGraph/CBCallGraph.h"
19 #include "IR/SEG/SEGMapBase.h"
20 #include "IR/SEG/SymbolicExprGraph.h"
27 class CFGReachabilityAnalysis;
28 class ControlDependenceAnalysis;
29 class DebugInfoAnalysis;
31 class FunctionPropertyPass;
34 namespace FalconPlus {
44 void getAnalysisUsage(AnalysisUsage &)
const;
46 bool runOnModule(Module &);
60 CFGReachabilityAnalysis *CRA =
nullptr;
61 ControlDependenceAnalysis *CDGs =
nullptr;
63 TSDataLayout *TSDL =
nullptr;
64 DebugInfoAnalysis *DIA =
nullptr;
65 FalconAA *Falcon =
nullptr;
66 FalconPlus::FalconAA *FalconPlus =
nullptr;
67 FunctionPropertyPass *FPP =
nullptr;
68 TypeInference *INFER =
nullptr;
72 std::vector<SymbolicExprGraph *> SEGVector;
75 typedef std::unordered_map<Value *, kvec<SEGLoadMemNode *>>
76 ValueLoadMemNodesMapTy;
77 typedef std::unordered_map<Value *, kvec<SEGStoreMemNode *>>
78 ValueStoreMemNodesMapTy;
84 ValueStoreMemNodesMapTy *);
86 void labelBackEdge(Module &M);
101 SEGOpcodeNode *modelGEPOperator(GEPOperator *GEP, BasicBlock *B,
111 void storePersistentSEG(Module &M, CBCallGraph &CBCG);