|
| SVFGOPT (std::unique_ptr< MemSSA > mssa, VFGK kind) |
| Constructor.
|
|
| ~SVFGOPT () override=default |
| Destructor.
|
|
void | setTokeepActualOutFormalIn () |
|
void | setTokeepAllSelfCycle () |
|
void | setTokeepContextSelfCycle () |
|
virtual | ~SVFG () |
| Destructor.
|
|
SVFGStat * | getStat () const |
| Return statistics.
|
|
void | clearMSSA () |
| Clear MSSA.
|
|
MemSSA * | getMSSA () const |
| Get SVFG memory SSA.
|
|
PointerAnalysis * | getPTA () const |
| Get Pointer Analysis.
|
|
SVFGNode * | getSVFGNode (NodeID id) const |
| Get a SVFG node.
|
|
bool | hasSVFGNode (NodeID id) const |
| Whether has the SVFGNode.
|
|
void | getInterVFEdgesForIndirectCallSite (const CallICFGNode *cs, const SVFFunction *callee, SVFGEdgeSetTy &edges) |
| Get all inter value flow edges of a indirect call site.
|
|
void | dump (const std::string &file, bool simple=false) |
| Dump graph into dot file.
|
|
virtual void | connectCallerAndCallee (const CallICFGNode *cs, const SVFFunction *callee, SVFGEdgeSetTy &edges) |
| Connect SVFG nodes between caller and callee for indirect call site.
|
|
const SVFGNode * | getDefSVFGNode (const PAGNode *pagNode) const |
| Given a pagNode, return its definition site.
|
|
bool | hasDefSVFGNode (const PAGNode *pagNode) const |
| Given a pagNode, return whether it has definition site.
|
|
void | performStat () |
| Perform statistics.
|
|
bool | hasActualINSVFGNodes (const CallICFGNode *cs) const |
| Has a SVFGNode.
|
|
bool | hasActualOUTSVFGNodes (const CallICFGNode *cs) const |
|
bool | hasFormalINSVFGNodes (const SVFFunction *fun) const |
|
bool | hasFormalOUTSVFGNodes (const SVFFunction *fun) const |
|
ActualINSVFGNodeSet & | getActualINSVFGNodes (const CallICFGNode *cs) |
| Get SVFGNode set.
|
|
ActualOUTSVFGNodeSet & | getActualOUTSVFGNodes (const CallICFGNode *cs) |
|
FormalINSVFGNodeSet & | getFormalINSVFGNodes (const SVFFunction *fun) |
|
FormalOUTSVFGNodeSet & | getFormalOUTSVFGNodes (const SVFFunction *fun) |
|
const SVFFunction * | isFunEntrySVFGNode (const SVFGNode *node) const |
| Whether a node is function entry SVFGNode.
|
|
const CallICFGNode * | isCallSiteRetSVFGNode (const SVFGNode *node) const |
| Whether a node is callsite return SVFGNode.
|
|
void | removeSVFGEdge (SVFGEdge *edge) |
| Remove a SVFG edge.
|
|
void | removeSVFGNode (SVFGNode *node) |
| Remove a SVFGNode.
|
|
bool | addSVFGEdge (SVFGEdge *edge) |
| Add SVFG edge.
|
|
u32_t | getSVFGNodeNum () const |
| Return total SVFG node number.
|
|
const DummyVersionPropSVFGNode * | addDummyVersionPropSVFGNode (const NodeID object, const NodeID version) |
|
virtual void | writeToFile (const std::string &filename) |
|
virtual void | readFile (const std::string &filename) |
|
virtual MRVer * | getMRVERFromString (const std::string &input) |
|
| VFG (PTACallGraph *callgraph, VFGK k=FULLSVFG) |
| Constructor.
|
|
virtual | ~VFG () |
| Destructor.
|
|
VFGK | getKind () const |
| Get VFG kind.
|
|
bool | isPtrOnlySVFG () const |
| Return true if this VFG only contains pointer related SVFGNodes for pointer analysis.
|
|
SVFIR * | getPAG () const |
| Return SVFIR.
|
|
PTACallGraph * | getCallGraph () const |
| Return PTACallGraph.
|
|
VFGNode * | getVFGNode (NodeID id) const |
| Get a VFG node.
|
|
bool | hasVFGNode (NodeID id) const |
| Whether has the VFGNode.
|
|
GlobalVFGNodeSet & | getGlobalVFGNodes () |
| Return global stores.
|
|
VFGEdge * | getIntraVFGEdge (const VFGNode *src, const VFGNode *dst, VFGEdge::VFGEdgeK kind) |
| Get a SVFG edge according to src and dst.
|
|
void | dump (const std::string &file, bool simple=false) |
| Dump graph into dot file.
|
|
void | view () |
| Dump graph into dot file.
|
|
void | updateCallGraph (PointerAnalysis *pta) |
| Update VFG based on pointer analysis results.
|
|
CallSiteID | getCallSiteID (const CallICFGNode *cs, const SVFFunction *func) const |
| Get callsite given a callsiteID.
|
|
const CallICFGNode * | getCallSite (CallSiteID id) const |
|
const VFGNode * | getDefVFGNode (const PAGNode *pagNode) const |
| Given a pagNode, return its definition site.
|
|
const PAGNode * | getLHSTopLevPtr (const VFGNode *node) const |
|
StmtVFGNode * | getStmtVFGNode (const PAGEdge *pagEdge) const |
| Get an VFGNode.
|
|
IntraPHIVFGNode * | getIntraPHIVFGNode (const PAGNode *pagNode) const |
|
BinaryOPVFGNode * | getBinaryOPVFGNode (const PAGNode *pagNode) const |
|
UnaryOPVFGNode * | getUnaryOPVFGNode (const PAGNode *pagNode) const |
|
BranchVFGNode * | getBranchVFGNode (const PAGNode *pagNode) const |
|
CmpVFGNode * | getCmpVFGNode (const PAGNode *pagNode) const |
|
ActualParmVFGNode * | getActualParmVFGNode (const PAGNode *aparm, const CallICFGNode *cs) const |
|
ActualRetVFGNode * | getActualRetVFGNode (const PAGNode *aret) const |
|
FormalParmVFGNode * | getFormalParmVFGNode (const PAGNode *fparm) const |
|
FormalRetVFGNode * | getFormalRetVFGNode (const PAGNode *fret) const |
|
const SVFFunction * | isFunEntryVFGNode (const VFGNode *node) const |
| Whether a node is function entry VFGNode.
|
|
bool | hasBlackHoleConstObjAddrAsDef (const PAGNode *pagNode) const |
| Whether a PAGNode has a blackhole or const object as its definition.
|
|
VFGEdge * | addIntraDirectVFEdge (NodeID srcId, NodeID dstId) |
|
VFGEdge * | addCallEdge (NodeID srcId, NodeID dstId, CallSiteID csId) |
|
VFGEdge * | addRetEdge (NodeID srcId, NodeID dstId, CallSiteID csId) |
|
void | removeVFGEdge (VFGEdge *edge) |
| Remove a SVFG edge.
|
|
void | removeVFGNode (VFGNode *node) |
| Remove a VFGNode.
|
|
VFGEdge * | hasIntraVFGEdge (VFGNode *src, VFGNode *dst, VFGEdge::VFGEdgeK kind) |
| Whether we has a SVFG edge.
|
|
VFGEdge * | hasInterVFGEdge (VFGNode *src, VFGNode *dst, VFGEdge::VFGEdgeK kind, CallSiteID csId) |
|
VFGEdge * | hasThreadVFGEdge (VFGNode *src, VFGNode *dst, VFGEdge::VFGEdgeK kind) |
|
bool | addVFGEdge (VFGEdge *edge) |
| Add VFG edge.
|
|
VFGNodeSet & | getVFGNodes (const SVFFunction *fun) |
|
bool | hasVFGNodes (const SVFFunction *fun) const |
|
bool | VFGNodes (const SVFFunction *fun) const |
|
VFGNodeSet::const_iterator | getVFGNodeBegin (const SVFFunction *fun) const |
|
VFGNodeSet::const_iterator | getVFGNodeEnd (const SVFFunction *fun) const |
|
| GenericGraph () |
| Constructor.
|
|
virtual | ~GenericGraph () |
| Destructor.
|
|
void | destroy () |
| Release memory.
|
|
iterator | begin () |
| Iterators.
|
|
iterator | end () |
|
const_iterator | begin () const |
|
const_iterator | end () const |
|
void | addGNode (NodeID id, NodeType *node) |
| Add a Node.
|
|
NodeType * | getGNode (NodeID id) const |
| Get a node.
|
|
bool | hasGNode (NodeID id) const |
| Has a node.
|
|
void | removeGNode (NodeType *node) |
| Delete a node.
|
|
u32_t | getTotalNodeNum () const |
| Get total number of node/edge.
|
|
u32_t | getTotalEdgeNum () const |
|
void | incNodeNum () |
| Increase number of node/edge.
|
|
void | incEdgeNum () |
|
|
void | buildSVFG () override |
| Start building SVFG.
|
|
void | connectAParamAndFParam (const PAGNode *cs_arg, const PAGNode *fun_arg, const CallICFGNode *, CallSiteID csId, SVFGEdgeSetTy &edges) override |
| Connect SVFG nodes between caller and callee for indirect call sites.
|
|
void | connectFRetAndARet (const PAGNode *fun_ret, const PAGNode *cs_ret, CallSiteID csId, SVFGEdgeSetTy &edges) override |
| Connect formal-ret and actual ret.
|
|
void | connectAInAndFIn (const ActualINSVFGNode *actualIn, const FormalINSVFGNode *formalIn, CallSiteID csId, SVFGEdgeSetTy &edges) override |
| Connect actual-in and formal-in.
|
|
void | connectFOutAndAOut (const FormalOUTSVFGNode *formalOut, const ActualOUTSVFGNode *actualOut, CallSiteID csId, SVFGEdgeSetTy &edges) override |
| Connect formal-out and actual-out.
|
|
NodeID | getActualINDef (NodeID ai) const |
| Get def-site of actual-in/formal-out.
|
|
NodeID | getFormalOUTDef (NodeID fo) const |
|
void | destroy () |
| Clean up memory.
|
|
| SVFG (std::unique_ptr< MemSSA > mssa, VFGK k) |
| Constructor.
|
|
SVFGEdge * | addIntraIndirectVFEdge (NodeID srcId, NodeID dstId, const NodeBS &cpts) |
| Add indirect def-use edges of a memory region between two statements,.
|
|
SVFGEdge * | addCallIndirectVFEdge (NodeID srcId, NodeID dstId, const NodeBS &cpts, CallSiteID csId) |
|
SVFGEdge * | addRetIndirectVFEdge (NodeID srcId, NodeID dstId, const NodeBS &cpts, CallSiteID csId) |
|
SVFGEdge * | addThreadMHPIndirectVFEdge (NodeID srcId, NodeID dstId, const NodeBS &cpts) |
|
SVFGEdge * | addInterIndirectVFCallEdge (const ActualINSVFGNode *src, const FormalINSVFGNode *dst, CallSiteID csId) |
| Add inter VF edge from callsite mu to function entry chi.
|
|
SVFGEdge * | addInterIndirectVFRetEdge (const FormalOUTSVFGNode *src, const ActualOUTSVFGNode *dst, CallSiteID csId) |
| Add inter VF edge from function exit mu to callsite chi.
|
|
virtual void | getInterVFEdgeAtIndCSFromAPToFP (const PAGNode *cs_arg, const PAGNode *fun_arg, const CallICFGNode *, CallSiteID csId, SVFGEdgeSetTy &edges) |
| Get inter value flow edges between indirect call site and callee.
|
|
virtual void | getInterVFEdgeAtIndCSFromFRToAR (const PAGNode *fun_ret, const PAGNode *cs_ret, CallSiteID csId, SVFGEdgeSetTy &edges) |
|
virtual void | getInterVFEdgeAtIndCSFromAInToFIn (ActualINSVFGNode *actualIn, const SVFFunction *callee, SVFGEdgeSetTy &edges) |
|
virtual void | getInterVFEdgeAtIndCSFromFOutToAOut (ActualOUTSVFGNode *actualOut, const SVFFunction *callee, SVFGEdgeSetTy &edges) |
|
void | setDef (const PAGNode *pagNode, const SVFGNode *node) |
| Given a PAGNode, set/get its def SVFG node (definition of top level pointers)
|
|
NodeID | getDef (const PAGNode *pagNode) const |
|
bool | hasDef (const PAGNode *pagNode) const |
|
void | setDef (const MRVer *mvar, const SVFGNode *node) |
| Given a MSSADef, set/get its def SVFG node (definition of address-taken variables)
|
|
NodeID | getDef (const MRVer *mvar) const |
|
void | addSVFGNodesForAddrTakenVars () |
| Create SVFG nodes for address-taken variables.
|
|
void | connectIndirectSVFGEdges () |
| Connect direct SVFG edges between two SVFG nodes (value-flow of top address-taken variables)
|
|
void | connectFromGlobalToProgEntry () |
| Connect indirect SVFG edges from global initializers (store) to main function entry.
|
|
virtual void | addSVFGNode (SVFGNode *node, ICFGNode *icfgNode) |
| Add SVFG node.
|
|
void | addFormalINSVFGNode (const FunEntryICFGNode *funEntry, const MRVer *resVer, const NodeID nodeId) |
| Add memory Function entry chi SVFG node.
|
|
void | addFormalOUTSVFGNode (const FunExitICFGNode *funExit, const MRVer *ver, const NodeID nodeId) |
| Add memory Function return mu SVFG node.
|
|
void | addActualINSVFGNode (const CallICFGNode *callsite, const MRVer *ver, const NodeID nodeId) |
| Add memory callsite mu SVFG node.
|
|
void | addActualOUTSVFGNode (const CallICFGNode *callsite, const MRVer *resVer, const NodeID nodeId) |
| Add memory callsite chi SVFG node.
|
|
void | addIntraMSSAPHISVFGNode (ICFGNode *BlockICFGNode, const Map< u32_t, const MRVer * >::const_iterator opVerBegin, const Map< u32_t, const MRVer * >::const_iterator opVerEnd, const MRVer *resVer, const NodeID nodeId) |
| Add memory SSA PHI SVFG node.
|
|
bool | hasFuncEntryChi (const SVFFunction *func) const |
| Has function for EntryCHI/RetMU/CallCHI/CallMU.
|
|
bool | hasFuncRetMu (const SVFFunction *func) const |
|
bool | hasCallSiteChi (const CallICFGNode *cs) const |
|
bool | hasCallSiteMu (const CallICFGNode *cs) const |
|
void | destroy () |
| Clean up memory.
|
|
void | checkIntraEdgeParents (const VFGNode *srcNode, const VFGNode *dstNode) |
| sanitize Intra edges, verify that both nodes belong to the same function.
|
|
VFGEdge * | addInterEdgeFromAPToFP (ActualParmVFGNode *src, FormalParmVFGNode *dst, CallSiteID csId) |
| Add inter VF edge from actual to formal parameters.
|
|
VFGEdge * | addInterEdgeFromFRToAR (FormalRetVFGNode *src, ActualRetVFGNode *dst, CallSiteID csId) |
| Add inter VF edge from callee return to callsite receive parameter.
|
|
VFGEdge * | addInterEdgeFromAPToFP (NodeID src, NodeID dst, CallSiteID csId) |
| Add inter VF edge from actual to formal parameters.
|
|
VFGEdge * | addInterEdgeFromFRToAR (NodeID src, NodeID dst, CallSiteID csId) |
| Add inter VF edge from callee return to callsite receive parameter.
|
|
void | setDef (const PAGNode *pagNode, const VFGNode *node) |
| Given a PAGNode, set/get its def VFG node (definition of top level pointers)
|
|
NodeID | getDef (const PAGNode *pagNode) const |
|
bool | hasDef (const PAGNode *pagNode) const |
|
void | addVFGNodes () |
| Create VFG nodes.
|
|
virtual SVFStmt::SVFStmtSetTy & | getPAGEdgeSet (SVFStmt::PEDGEK kind) |
| Get PAGEdge set.
|
|
virtual bool | isInterestedPAGNode (const SVFVar *node) const |
|
void | connectDirectVFGEdges () |
| Create edges between VFG nodes within a function.
|
|
void | addVFGInterEdges (const CallICFGNode *cs, const SVFFunction *callee) |
| Create edges between VFG nodes across functions.
|
|
bool | isPhiCopyEdge (const PAGEdge *copy) const |
|
virtual void | addVFGNode (VFGNode *vfgNode, ICFGNode *icfgNode) |
| Add a VFG node.
|
|
void | addStmtVFGNode (StmtVFGNode *node, const PAGEdge *pagEdge) |
| Add a VFG node for program statement.
|
|
void | addNullPtrVFGNode (const PAGNode *pagNode) |
|
void | addAddrVFGNode (const AddrStmt *addr) |
| Add an Address VFG node.
|
|
void | addCopyVFGNode (const CopyStmt *copy) |
| Add a Copy VFG node.
|
|
void | addGepVFGNode (const GepStmt *gep) |
| Add a Gep VFG node.
|
|
void | addLoadVFGNode (const LoadStmt *load) |
| Add a Load VFG node.
|
|
void | addStoreVFGNode (const StoreStmt *store) |
|
void | addActualParmVFGNode (const PAGNode *aparm, const CallICFGNode *cs) |
|
void | addFormalParmVFGNode (const PAGNode *fparm, const SVFFunction *fun, CallPESet &callPEs) |
| Add a formal parameter VFG node.
|
|
void | addFormalRetVFGNode (const PAGNode *uniqueFunRet, const SVFFunction *fun, RetPESet &retPEs) |
|
void | addActualRetVFGNode (const PAGNode *ret, const CallICFGNode *cs) |
| Add a callsite Receive VFG node.
|
|
void | addIntraPHIVFGNode (const MultiOpndStmt *edge) |
| Add an llvm PHI VFG node.
|
|
void | addCmpVFGNode (const CmpStmt *edge) |
| Add a Compare VFG node.
|
|
void | addBinaryOPVFGNode (const BinaryOPStmt *edge) |
| Add a BinaryOperator VFG node.
|
|
void | addUnaryOPVFGNode (const UnaryOPStmt *edge) |
| Add a UnaryOperator VFG node.
|
|
void | addBranchVFGNode (const BranchStmt *edge) |
| Add a BranchVFGNode.
|
|
|
void | parseSelfCycleHandleOption () |
|
SVFGEdge * | addCallIndirectSVFGEdge (NodeID srcId, NodeID dstId, CallSiteID csid, const NodeBS &cpts) |
| Add inter-procedural value flow edge.
|
|
SVFGEdge * | addRetIndirectSVFGEdge (NodeID srcId, NodeID dstId, CallSiteID csid, const NodeBS &cpts) |
| Add indirect ret edge from src to dst with one call site ID.
|
|
void | handleInterValueFlow () |
|
void | replaceFParamARetWithPHI (PHISVFGNode *phi, SVFGNode *svfgNode) |
| Replace FormalParam/ActualRet node with PHI node.
|
|
void | retargetEdgesOfAInFOut (SVFGNode *node) |
| Retarget edges related to actual-in/-out and formal-in/-out.
|
|
void | retargetEdgesOfAOutFIn (SVFGNode *node) |
| Connect actual-out/formal-in's predecessors to their successors directly.
|
|
void | handleIntraValueFlow () |
| Remove MSSAPHI SVFG nodes.
|
|
void | initialWorkList () |
| Initial work list with MSSAPHI nodes which may be removed.
|
|
bool | addIntoWorklist (const SVFGNode *node) |
|
void | bypassMSSAPHINode (const MSSAPHISVFGNode *node) |
| Remove MSSAPHI node if possible.
|
|
bool | checkSelfCycleEdges (const MSSAPHISVFGNode *node) |
| Remove self cycle edges if needed. Return TRUE if some self cycle edges remained.
|
|
bool | addNewSVFGEdge (NodeID srcId, NodeID dstId, const SVFGEdge *preEdge, const SVFGEdge *succEdge) |
| Add new SVFG edge from src to dst.
|
|
bool | bothInterEdges (const SVFGEdge *edge1, const SVFGEdge *edge2) const |
| Return TRUE if both edges are indirect call/ret edges.
|
|
void | addInterPHIOperands (PHISVFGNode *phi, const PAGNode *operand) |
|
InterPHISVFGNode * | addInterPHIForFP (const FormalParmSVFGNode *fp) |
| Add inter PHI SVFG node for formal parameter.
|
|
InterPHISVFGNode * | addInterPHIForAR (const ActualRetSVFGNode *ar) |
| Add inter PHI SVFG node for actual return.
|
|
void | resetDef (const PAGNode *pagNode, const SVFGNode *node) |
|
bool | isDefOfAInFOut (const SVFGNode *node) |
|
bool | actualInOfIndCS (const ActualINSVFGNode *ai) const |
| Check if actual-in/actual-out exist at indirect call site.
|
|
bool | actualOutOfIndCS (const ActualOUTSVFGNode *ao) const |
|
bool | formalInOfAddressTakenFunc (const FormalINSVFGNode *fi) const |
| Check if formal-in/formal-out reside in address-taken function.
|
|
bool | formalOutOfAddressTakenFunc (const FormalOUTSVFGNode *fo) const |
|
bool | isConnectingTwoCallSites (const SVFGNode *node) const |
| Return TRUE if this node has both incoming call/ret and outgoing call/ret edges.
|
|
bool | canBeRemoved (const SVFGNode *node) |
|
void | removeAllEdges (const SVFGNode *node) |
| Remove edges of a SVFG node.
|
|
void | removeInEdges (const SVFGNode *node) |
|
void | removeOutEdges (const SVFGNode *node) |
|
|
void | setActualINDef (NodeID ai, NodeID def) |
|
void | setFormalOUTDef (NodeID fo, NodeID def) |
|
|
typedef VFGNodeIDToNodeMapTy | SVFGNodeIDToNodeMapTy |
|
typedef Map< const PAGNode *, NodeID > | PAGNodeToDefMapTy |
|
typedef Map< const MRVer *, NodeID > | MSSAVarToDefMapTy |
|
typedef NodeBS | ActualINSVFGNodeSet |
|
typedef NodeBS | ActualOUTSVFGNodeSet |
|
typedef NodeBS | FormalINSVFGNodeSet |
|
typedef NodeBS | FormalOUTSVFGNodeSet |
|
typedef Map< const CallICFGNode *, ActualINSVFGNodeSet > | CallSiteToActualINsMapTy |
|
typedef Map< const CallICFGNode *, ActualOUTSVFGNodeSet > | CallSiteToActualOUTsMapTy |
|
typedef Map< const SVFFunction *, FormalINSVFGNodeSet > | FunctionToFormalINsMapTy |
|
typedef Map< const SVFFunction *, FormalOUTSVFGNodeSet > | FunctionToFormalOUTsMapTy |
|
typedef MemSSA::MUSet | MUSet |
|
typedef MemSSA::CHISet | CHISet |
|
typedef MemSSA::PHISet | PHISet |
|
typedef MemSSA::MU | MU |
|
typedef MemSSA::CHI | CHI |
|
typedef MemSSA::LOADMU | LOADMU |
|
typedef MemSSA::STORECHI | STORECHI |
|
typedef MemSSA::RETMU | RETMU |
|
typedef MemSSA::ENTRYCHI | ENTRYCHI |
|
typedef MemSSA::CALLCHI | CALLCHI |
|
typedef MemSSA::CALLMU | CALLMU |
|
enum | VFGK { FULLSVFG
, PTRONLYSVFG
, FULLSVFG_OPT
, PTRONLYSVFG_OPT
} |
| VFG kind. More...
|
|
typedef OrderedMap< NodeID, VFGNode * > | VFGNodeIDToNodeMapTy |
|
typedef Set< VFGNode * > | VFGNodeSet |
|
typedef Map< const PAGNode *, NodeID > | PAGNodeToDefMapTy |
|
typedef Map< std::pair< NodeID, const CallICFGNode * >, ActualParmVFGNode * > | PAGNodeToActualParmMapTy |
|
typedef Map< const PAGNode *, ActualRetVFGNode * > | PAGNodeToActualRetMapTy |
|
typedef Map< const PAGNode *, FormalParmVFGNode * > | PAGNodeToFormalParmMapTy |
|
typedef Map< const PAGNode *, FormalRetVFGNode * > | PAGNodeToFormalRetMapTy |
|
typedef Map< const PAGEdge *, StmtVFGNode * > | PAGEdgeToStmtVFGNodeMapTy |
|
typedef Map< const PAGNode *, IntraPHIVFGNode * > | PAGNodeToPHIVFGNodeMapTy |
|
typedef Map< const PAGNode *, BinaryOPVFGNode * > | PAGNodeToBinaryOPVFGNodeMapTy |
|
typedef Map< const PAGNode *, UnaryOPVFGNode * > | PAGNodeToUnaryOPVFGNodeMapTy |
|
typedef Map< const PAGNode *, BranchVFGNode * > | PAGNodeToBranchVFGNodeMapTy |
|
typedef Map< const PAGNode *, CmpVFGNode * > | PAGNodeToCmpVFGNodeMapTy |
|
typedef Map< const SVFFunction *, VFGNodeSet > | FunToVFGNodesMapTy |
|
typedef FormalParmVFGNode::CallPESet | CallPESet |
|
typedef FormalRetVFGNode::RetPESet | RetPESet |
|
typedef VFGEdge::VFGEdgeSetTy | VFGEdgeSetTy |
|
typedef VFGEdge::SVFGEdgeSetTy | SVFGEdgeSetTy |
|
typedef VFGEdge::VFGEdgeSetTy::iterator | VFGNodeIter |
|
typedef VFGNodeIDToNodeMapTy::iterator | iterator |
|
typedef VFGNodeIDToNodeMapTy::const_iterator | const_iterator |
|
typedef SVFIR::SVFStmtSet | SVFStmtSet |
|
typedef Set< const VFGNode * > | GlobalVFGNodeSet |
|
typedef Set< const PAGNode * > | PAGNodeSet |
|
typedef NodeTy | NodeType |
|
typedef EdgeTy | EdgeType |
|
typedef OrderedMap< NodeID, NodeType * > | IDToNodeMapTy |
| NodeID to GenericNode map.
|
|
typedef IDToNodeMapTy::iterator | iterator |
| Node Iterators.
|
|
typedef IDToNodeMapTy::const_iterator | const_iterator |
|
u32_t | edgeNum |
| total num of node
|
|
u32_t | nodeNum |
| total num of edge
|
|
MSSAVarToDefMapTy | MSSAVarToDefMap |
| map a memory SSA operator to its definition SVFG node
|
|
CallSiteToActualINsMapTy | callSiteToActualINMap |
|
CallSiteToActualOUTsMapTy | callSiteToActualOUTMap |
|
FunctionToFormalINsMapTy | funToFormalINMap |
|
FunctionToFormalOUTsMapTy | funToFormalOUTMap |
|
SVFGStat * | stat |
|
std::unique_ptr< MemSSA > | mssa |
|
PointerAnalysis * | pta |
|
NodeID | totalVFGNode |
|
PAGNodeToDefMapTy | PAGNodeToDefMap |
| map a pag node to its definition SVG node
|
|
PAGNodeToActualParmMapTy | PAGNodeToActualParmMap |
| map a PAGNode to an actual parameter
|
|
PAGNodeToActualRetMapTy | PAGNodeToActualRetMap |
| map a PAGNode to an actual return
|
|
PAGNodeToFormalParmMapTy | PAGNodeToFormalParmMap |
| map a PAGNode to a formal parameter
|
|
PAGNodeToFormalRetMapTy | PAGNodeToFormalRetMap |
| map a PAGNode to a formal return
|
|
PAGNodeToPHIVFGNodeMapTy | PAGNodeToIntraPHIVFGNodeMap |
| map a PAGNode to its PHIVFGNode
|
|
PAGNodeToBinaryOPVFGNodeMapTy | PAGNodeToBinaryOPVFGNodeMap |
| map a PAGNode to its BinaryOPVFGNode
|
|
PAGNodeToUnaryOPVFGNodeMapTy | PAGNodeToUnaryOPVFGNodeMap |
| map a PAGNode to its UnaryOPVFGNode
|
|
PAGNodeToBranchVFGNodeMapTy | PAGNodeToBranchVFGNodeMap |
| map a PAGNode to its BranchVFGNode
|
|
PAGNodeToCmpVFGNodeMapTy | PAGNodeToCmpVFGNodeMap |
| map a PAGNode to its CmpVFGNode
|
|
PAGEdgeToStmtVFGNodeMapTy | PAGEdgeToStmtVFGNodeMap |
| map a PAGEdge to its StmtVFGNode
|
|
FunToVFGNodesMapTy | funToVFGNodesMap |
| map a function to its VFGNodes;
|
|
GlobalVFGNodeSet | globalVFGNodes |
| set of global store VFG nodes
|
|
PTACallGraph * | callgraph |
|
SVFIR * | pag |
|
VFGK | kind |
|
IDToNodeMapTy | IDToNodeMap |
| node map
|
|
Optimised SVFG.
- FormalParam/ActualRet is converted into Phi. ActualParam/FormalRet becomes the operands of Phi nodes created at callee/caller's entry/callsite.
- ActualIns/ActualOuts resides at direct call sites id removed. Sources of its incoming edges are connected with the destinations of its outgoing edges directly.
- FormalIns/FormalOuts reside at the entry/exit of non-address-taken functions is removed as ActualIn/ActualOuts.
- MSSAPHI nodes are removed if it have no self cycle. Otherwise depends on user option.
Definition at line 56 of file SVFGOPT.h.