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;
36 namespace FalconPlus {
46 void getAnalysisUsage(AnalysisUsage &)
const;
48 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;
69 CBCallGraphWrapper *CGWrapper =
nullptr;
73 typedef std::unordered_map<Value *, kvec<SEGLoadMemNode *>>
74 ValueLoadMemNodesMapTy;
75 typedef std::unordered_map<Value *, kvec<SEGStoreMemNode *>>
76 ValueStoreMemNodesMapTy;
82 ValueStoreMemNodesMapTy *);
84 void labelBackEdge(Module &M);
99 SEGOpcodeNode *modelGEPOperator(GEPOperator *GEP, BasicBlock *B,