30 #ifndef INCLUDE_UTIL_ICFGBUILDER_H_
31 #define INCLUDE_UTIL_ICFGBUILDER_H_
46 typedef std::vector<const Instruction*>
InstVec;
InstToBlockNodeMapTy & instToBlockNodeMap()
FunEntryICFGNode * addFunEntryBlock(const Function *fun)
Map< const Instruction *, CallICFGNode * > CSToCallNodeMapTy
void connectGlobalToProgEntry()
GlobalICFGNode * getGlobalICFGNode() const
Map< const Instruction *, RetICFGNode * > CSToRetNodeMapTy
CSToRetNodeMapTy & csToRetNodeMap()
FIFOWorkList< const Instruction * > WorkList
IntraICFGNode * addIntraBlockICFGNode(const Instruction *inst)
Add and get IntraBlock ICFGNode.
Map< const Instruction *, IntraICFGNode * > InstToBlockNodeMapTy
IntraICFGNode * getIntraICFGNode(const Instruction *inst)
get a intra node
std::vector< const Instruction * > InstVec
Map< const Function *, FunEntryICFGNode * > FunToFunEntryNodeMapTy
CallICFGNode * getCallICFGNode(const Instruction *cs)
get a call node
Map< const Function *, FunExitICFGNode * > FunToFunExitNodeMapTy
RetICFGNode * getRetICFGNode(const Instruction *cs)
get a return node
void processNoPrecessorBasicBlocks(const Function *fun, WorkList &worklist)
InterICFGNode * addInterBlockICFGNode(const Instruction *inst)
Add/Get an inter block ICFGNode.
FunEntryICFGNode * getFunEntryICFGNode(const Function *fun)
get a function entry node
FunToFunExitNodeMapTy & funToFunExitNodeMap()
LLVMModuleSet * llvmModuleSet()
FunExitICFGNode * getFunExitICFGNode(const Function *fun)
get a function exit node
bool hasICFGNode(const Instruction *inst)
CSToCallNodeMapTy & csToCallNodeMap()
void processFunBody(WorkList &worklist)
Set< const Instruction * > BBSet
void checkICFGNodesVisited(const Function *fun)
void processFunEntry(const Function *fun, WorkList &worklist)
FunExitICFGNode * addFunExitBlock(const Function *fun)
ICFGNode * addBlockICFGNode(const Instruction *inst)
Add/Get a basic block ICFGNode.
void addICFGInterEdges(const Instruction *cs, const Function *callee)
Create edges between ICFG nodes across functions.
ICFGNode * getICFGNode(const Instruction *inst)
void processFunExit(const Function *fun)
FunToFunEntryNodeMapTy & funToFunEntryNodeMap()
virtual void addICFGNode(ICFGNode *node)
Add a ICFG node.
GlobalICFGNode * globalBlockNode
unique basic block for all globals
GlobalICFGNode * getGlobalICFGNode() const
InstToBlockNodeMapTy InstToBlockNodeMap
map a basic block to its ICFGNode
FunExitICFGNode * getFunExitICFGNode(const Function *fun)
Add a function exit node.
FunEntryICFGNode * getFunEntryICFGNode(const Function *fun)
Add a function entry node.
bool hasICFGNode(const Instruction *inst)
ICFGNode * getICFGNode(const Instruction *inst)
Get a basic block ICFGNode.
CallICFGNode * getCallICFGNode(const Instruction *cs)
get a call node
RetICFGNode * getRetICFGNode(const Instruction *cs)
get a return node
CSToCallNodeMapTy CSToCallNodeMap
map a callsite to its CallICFGNode
CSToRetNodeMapTy CSToRetNodeMap
map a callsite to its RetICFGNode
FunToFunEntryNodeMapTy FunToFunEntryNodeMap
map a function to its FunExitICFGNode
IntraICFGNode * getIntraICFGNode(const Instruction *inst)
get a intra node
static LLVMModuleSet * getLLVMModuleSet()
FunToFunExitNodeMapTy FunToFunExitNodeMap
map a function to its FunEntryICFGNode
llvm::Instruction Instruction
std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map
std::unordered_set< Key, Hash, KeyEqual, Allocator > Set