|
| | SVFGOPT (std::unique_ptr< MemSSA > mssa, VFGK kind) |
| | Constructor.
|
| |
| | ~SVFGOPT () override=default |
| | Destructor.
|
| |
| void | setTokeepActualOutFormalIn () |
| |
| void | setTokeepAllSelfCycle () |
| |
| void | setTokeepContextSelfCycle () |
| |
| void | readAndOptSVFG (const std::string &filename) |
| | Optimised SVFG's aren't written in their optimised form; read full SVFG and optimise it.
|
| |
| void | buildAndWriteSVFG (const std::string &filename) |
| | Optimised SVFG's shouldn't be written in their optimised form; writes the full SVFG to file before optimising.
|
| |
| 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 FunObjVar *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 FunObjVar *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 FunObjVar *fun) const |
| |
| bool | hasFormalOUTSVFGNodes (const FunObjVar *fun) const |
| |
| ActualINSVFGNodeSet & | getActualINSVFGNodes (const CallICFGNode *cs) |
| | Get SVFGNode set.
|
| |
| ActualOUTSVFGNodeSet & | getActualOUTSVFGNodes (const CallICFGNode *cs) |
| |
| FormalINSVFGNodeSet & | getFormalINSVFGNodes (const FunObjVar *fun) |
| |
| FormalOUTSVFGNodeSet & | getFormalOUTSVFGNodes (const FunObjVar *fun) |
| |
| const FunObjVar * | 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 (CallGraph *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.
|
| |
| CallGraph * | 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 FunObjVar *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.
|
| |
| bool | hasLHSTopLevPtr (const VFGNode *node) const |
| |
| const PAGNode * | getLHSTopLevPtr (const VFGNode *node) const |
| |
| bool | hasStmtVFGNode (const PAGEdge *pagEdge) const |
| | Existence checks for VFGNodes.
|
| |
| bool | hasIntraPHIVFGNode (const PAGNode *pagNode) const |
| |
| bool | hasBinaryOPVFGNode (const PAGNode *pagNode) const |
| |
| bool | hasUnaryOPVFGNode (const PAGNode *pagNode) const |
| |
| bool | hasBranchVFGNode (const PAGNode *pagNode) const |
| |
| bool | hasCmpVFGNode (const PAGNode *pagNode) const |
| |
| bool | hasActualParmVFGNode (const PAGNode *aparm, const CallICFGNode *cs) const |
| |
| bool | hasActualRetVFGNode (const PAGNode *aret) const |
| |
| bool | hasFormalParmVFGNode (const PAGNode *fparm) const |
| |
| bool | hasFormalRetVFGNode (const PAGNode *fret) 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 FunObjVar * | 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 FunObjVar *fun) |
| |
| bool | hasVFGNodes (const FunObjVar *fun) const |
| |
| bool | VFGNodes (const FunObjVar *fun) const |
| |
| VFGNodeSet::const_iterator | getVFGNodeBegin (const FunObjVar *fun) const |
| |
| VFGNodeSet::const_iterator | getVFGNodeEnd (const FunObjVar *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 | optimiseSVFG () |
| | Separate optimisation function to avoid duplicate code.
|
| |
| 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 FunObjVar *callee, SVFGEdgeSetTy &edges) |
| |
| virtual void | getInterVFEdgeAtIndCSFromFOutToAOut (ActualOUTSVFGNode *actualOut, const FunObjVar *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 FunObjVar *func) const |
| | Has function for EntryCHI/RetMU/CallCHI/CallMU.
|
| |
| bool | hasFuncRetMu (const FunObjVar *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 FunObjVar *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 FunObjVar *fun, CallPESet &callPEs) |
| | Add a formal parameter VFG node.
|
| |
| void | addFormalRetVFGNode (const PAGNode *uniqueFunRet, const FunObjVar *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 FunObjVar *, FormalINSVFGNodeSet > | FunctionToFormalINsMapTy |
| |
| typedef Map< const FunObjVar *, 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 FunObjVar *, 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
|
| |
| CallGraph * | 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.