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"
21 #include "Language/Spec/Memory.h"
28 class CFGReachabilityAnalysis;
29 class ControlDependenceAnalysis;
30 class DebugInfoAnalysis;
32 class FunctionPropertyPass;
34 class CBCallGraphWrapper;
43 void getAnalysisUsage(AnalysisUsage &)
const;
45 bool runOnModule(Module &);
57 CFGReachabilityAnalysis *CRA =
nullptr;
58 ControlDependenceAnalysis *CDGs =
nullptr;
60 TSDataLayout *TSDL =
nullptr;
61 DebugInfoAnalysis *DIA =
nullptr;
62 FalconAA *Falcon =
nullptr;
63 AADriver *AA =
nullptr;
64 FunctionPropertyPass *FPP =
nullptr;
65 TypeInference *INFER =
nullptr;
66 CBCallGraphWrapper *CGWrapper =
nullptr;
70 typedef std::unordered_map<Value *, kvec<SEGLoadMemNode *>>
71 ValueLoadMemNodesMapTy;
72 typedef std::unordered_map<Value *, kvec<SEGStoreMemNode *>>
73 ValueStoreMemNodesMapTy;
79 ValueStoreMemNodesMapTy *);
81 void labelBackEdge(Module &M);
96 SEGOpcodeNode *modelGEPOperator(GEPOperator *GEP, BasicBlock *B,