svf-tools 1.0.595 → 1.0.596
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/Andersen_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/CFLGraphBuilder_8h_source.html +4 -4
- package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +8 -5
- package/SVF-doxygen/html/html/CFLGraph_8h.html +1 -1
- package/SVF-doxygen/html/html/CFLGraph_8h_source.html +18 -16
- package/SVF-doxygen/html/html/CFLSolver_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/CFLStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/CHG_8cpp.html +1 -1
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +11 -8
- package/SVF-doxygen/html/html/CHG_8h.html +1 -1
- package/SVF-doxygen/html/html/CHG_8h_source.html +9 -7
- package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +7 -7
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +18 -16
- package/SVF-doxygen/html/html/ConsG_8h.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8h_source.html +8 -6
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +15 -13
- package/SVF-doxygen/html/html/DCHG_8h.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8h_source.html +12 -10
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +7 -7
- package/SVF-doxygen/html/html/DOTGraphTraits_8h.html +96 -0
- package/SVF-doxygen/html/html/DOTGraphTraits_8h_source.html +102 -0
- package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +1 -1
- package/SVF-doxygen/html/html/GenericGraph_8h.html +11 -1
- package/SVF-doxygen/html/html/GenericGraph_8h_source.html +127 -114
- package/SVF-doxygen/html/html/GraphPrinter_8h.html +2 -4
- package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +8 -5
- package/SVF-doxygen/html/html/GraphReachSolver_8h_source.html +2 -1
- package/SVF-doxygen/html/html/GraphTraits_8h.html +117 -0
- package/SVF-doxygen/html/html/GraphTraits_8h_source.html +91 -0
- package/SVF-doxygen/html/html/GraphWriter_8cpp.html +81 -0
- package/SVF-doxygen/html/html/GraphWriter_8cpp_source.html +80 -0
- package/SVF-doxygen/html/html/GraphWriter_8h.html +137 -0
- package/SVF-doxygen/html/html/GraphWriter_8h_source.html +129 -0
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +6 -6
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ICFGStat_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +9 -7
- package/SVF-doxygen/html/html/ICFG_8h.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8h_source.html +11 -9
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +8 -5
- package/SVF-doxygen/html/html/IRGraph_8h.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +7 -5
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +4 -3
- package/SVF-doxygen/html/html/LLVMModule_8cpp.html +4 -3
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +31 -31
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +28 -28
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +17 -14
- package/SVF-doxygen/html/html/PTACallGraph_8h.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +15 -13
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SCC_8h_source.html +3 -1
- package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +8 -8
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +10 -9
- package/SVF-doxygen/html/html/SVFG_8h_source.html +11 -10
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +10 -10
- package/SVF-doxygen/html/html/SVFValue_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +7 -7
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SrcSnkSolver_8h_source.html +2 -1
- package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +18 -16
- package/SVF-doxygen/html/html/TCT_8h.html +1 -1
- package/SVF-doxygen/html/html/TCT_8h_source.html +19 -17
- package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +6 -6
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/VFGEdge_8h_source.html +6 -6
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +6 -6
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +10 -8
- package/SVF-doxygen/html/html/VFG_8h.html +1 -1
- package/SVF-doxygen/html/html/VFG_8h_source.html +11 -9
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/WPAFSSolver_8h_source.html +3 -2
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/WPASolver_8h_source.html +3 -1
- package/SVF-doxygen/html/html/annotated.html +55 -42
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1CFLEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraph.html +4 -3
- package/SVF-doxygen/html/html/classSVF_1_1CFLNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1CFLSolver.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CFLStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +10 -9
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +30 -29
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +27 -24
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1GenericGraph.html +44 -44
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +96 -97
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GraphReachSolver.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +16 -15
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +11 -10
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +4 -3
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +103 -103
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SCCDetection.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFType.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1SelectStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkSolver.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +35 -35
- package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +19 -18
- package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver.html +4 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +4 -4
- package/SVF-doxygen/html/html/classes.html +105 -102
- package/SVF-doxygen/html/html/classllvm_1_1GraphPrinter.html +9 -7
- package/SVF-doxygen/html/html/classllvm_1_1GraphWriter-members.html +100 -0
- package/SVF-doxygen/html/html/classllvm_1_1GraphWriter.html +882 -0
- package/SVF-doxygen/html/html/classllvm_1_1iterator__adaptor__base-members.html +112 -0
- package/SVF-doxygen/html/html/classllvm_1_1iterator__adaptor__base.html +633 -0
- package/SVF-doxygen/html/html/classllvm_1_1iterator__adaptor__base.png +0 -0
- package/SVF-doxygen/html/html/classllvm_1_1iterator__facade__base-members.html +102 -0
- package/SVF-doxygen/html/html/classllvm_1_1iterator__facade__base.html +787 -0
- package/SVF-doxygen/html/html/classllvm_1_1iterator__facade__base.png +0 -0
- package/SVF-doxygen/html/html/classllvm_1_1iterator__facade__base_1_1ReferenceProxy-members.html +84 -0
- package/SVF-doxygen/html/html/classllvm_1_1iterator__facade__base_1_1ReferenceProxy.html +229 -0
- package/SVF-doxygen/html/html/classllvm_1_1iterator__range-members.html +87 -0
- package/SVF-doxygen/html/html/classllvm_1_1iterator__range.html +342 -0
- package/SVF-doxygen/html/html/classllvm_1_1mapped__iter-members.html +112 -0
- package/SVF-doxygen/html/html/classllvm_1_1mapped__iter.html +322 -0
- package/SVF-doxygen/html/html/classllvm_1_1mapped__iter.png +0 -0
- package/SVF-doxygen/html/html/classllvm_1_1pointer__iterator-members.html +113 -0
- package/SVF-doxygen/html/html/classllvm_1_1pointer__iterator.html +343 -0
- package/SVF-doxygen/html/html/classllvm_1_1pointer__iterator.png +0 -0
- package/SVF-doxygen/html/html/dir_1870ebf480d659cc38d2dd7ac3aa8993.html +2 -0
- package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +4 -0
- package/SVF-doxygen/html/html/dir_fa02919a30fec2d2c2d591b4d920d648.html +6 -0
- package/SVF-doxygen/html/html/fastcluster__R__dm_8cpp_8inc_source.html +2 -1
- package/SVF-doxygen/html/html/files.html +42 -36
- package/SVF-doxygen/html/html/functions_a.html +11 -8
- package/SVF-doxygen/html/html/functions_b.html +20 -13
- package/SVF-doxygen/html/html/functions_c.html +36 -37
- package/SVF-doxygen/html/html/functions_d.html +16 -4
- package/SVF-doxygen/html/html/functions_e.html +16 -2
- package/SVF-doxygen/html/html/functions_eval_b.html +4 -4
- package/SVF-doxygen/html/html/functions_eval_i.html +6 -0
- package/SVF-doxygen/html/html/functions_f.html +21 -18
- package/SVF-doxygen/html/html/functions_func.html +13 -10
- package/SVF-doxygen/html/html/functions_func_b.html +3 -2
- package/SVF-doxygen/html/html/functions_func_d.html +7 -3
- package/SVF-doxygen/html/html/functions_func_e.html +12 -1
- package/SVF-doxygen/html/html/functions_func_g.html +54 -22
- package/SVF-doxygen/html/html/functions_func_h.html +7 -4
- package/SVF-doxygen/html/html/functions_func_i.html +22 -8
- package/SVF-doxygen/html/html/functions_func_m.html +3 -0
- package/SVF-doxygen/html/html/functions_func_n.html +3 -0
- package/SVF-doxygen/html/html/functions_func_o.html +42 -8
- package/SVF-doxygen/html/html/functions_func_p.html +7 -1
- package/SVF-doxygen/html/html/functions_func_r.html +7 -1
- package/SVF-doxygen/html/html/functions_func_w.html +21 -0
- package/SVF-doxygen/html/html/functions_g.html +60 -21
- package/SVF-doxygen/html/html/functions_h.html +8 -5
- package/SVF-doxygen/html/html/functions_i.html +50 -19
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_m.html +4 -1
- package/SVF-doxygen/html/html/functions_n.html +9 -3
- package/SVF-doxygen/html/html/functions_o.html +53 -20
- package/SVF-doxygen/html/html/functions_p.html +31 -21
- package/SVF-doxygen/html/html/functions_r.html +13 -10
- package/SVF-doxygen/html/html/functions_rela.html +6 -3
- package/SVF-doxygen/html/html/functions_s.html +8 -10
- package/SVF-doxygen/html/html/functions_t.html +9 -9
- package/SVF-doxygen/html/html/functions_type_b.html +3 -0
- package/SVF-doxygen/html/html/functions_type_c.html +4 -3
- package/SVF-doxygen/html/html/functions_type_d.html +6 -1
- package/SVF-doxygen/html/html/functions_type_g.html +2 -1
- package/SVF-doxygen/html/html/functions_type_i.html +2 -1
- package/SVF-doxygen/html/html/functions_type_n.html +6 -3
- package/SVF-doxygen/html/html/functions_type_p.html +2 -1
- package/SVF-doxygen/html/html/functions_type_r.html +2 -1
- package/SVF-doxygen/html/html/functions_type_v.html +2 -1
- package/SVF-doxygen/html/html/functions_v.html +6 -5
- package/SVF-doxygen/html/html/functions_vars_b.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_d.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_e.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_f.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_g.html +6 -0
- package/SVF-doxygen/html/html/functions_vars_i.html +10 -0
- package/SVF-doxygen/html/html/functions_vars_o.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_p.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +30 -9
- package/SVF-doxygen/html/html/hierarchy.html +444 -397
- package/SVF-doxygen/html/html/include_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/iterator_8h.html +123 -0
- package/SVF-doxygen/html/html/iterator_8h_source.html +134 -0
- package/SVF-doxygen/html/html/iterator__range_8h.html +109 -0
- package/SVF-doxygen/html/html/iterator__range_8h_source.html +90 -0
- package/SVF-doxygen/html/html/menudata.js +17 -16
- package/SVF-doxygen/html/html/namespacellvm.html +488 -11
- package/SVF-doxygen/html/html/namespacellvm_1_1DOT.html +107 -0
- package/SVF-doxygen/html/html/namespacellvm_1_1GraphProgram.html +122 -0
- package/SVF-doxygen/html/html/namespacemembers_c.html +9 -0
- package/SVF-doxygen/html/html/namespacemembers_d.html +5 -2
- package/SVF-doxygen/html/html/namespacemembers_e.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_enum.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_eval.html +15 -0
- package/SVF-doxygen/html/html/namespacemembers_f.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_func.html +0 -495
- package/SVF-doxygen/html/html/namespacemembers_func_b.html +88 -0
- package/SVF-doxygen/html/html/namespacemembers_func_c.html +97 -0
- package/SVF-doxygen/html/html/namespacemembers_func_d.html +97 -0
- package/SVF-doxygen/html/html/namespacemembers_func_e.html +82 -0
- package/SVF-doxygen/html/html/namespacemembers_func_f.html +76 -0
- package/SVF-doxygen/html/html/namespacemembers_func_g.html +186 -0
- package/SVF-doxygen/html/html/namespacemembers_func_h.html +76 -0
- package/SVF-doxygen/html/html/namespacemembers_func_i.html +250 -0
- package/SVF-doxygen/html/html/namespacemembers_func_m.html +91 -0
- package/SVF-doxygen/html/html/namespacemembers_func_n.html +76 -0
- package/SVF-doxygen/html/html/namespacemembers_func_o.html +94 -0
- package/SVF-doxygen/html/html/namespacemembers_func_p.html +82 -0
- package/SVF-doxygen/html/html/namespacemembers_func_r.html +79 -0
- package/SVF-doxygen/html/html/namespacemembers_func_s.html +91 -0
- package/SVF-doxygen/html/html/namespacemembers_func_t.html +76 -0
- package/SVF-doxygen/html/html/namespacemembers_func_v.html +85 -0
- package/SVF-doxygen/html/html/namespacemembers_func_w.html +82 -0
- package/SVF-doxygen/html/html/namespacemembers_i.html +8 -2
- package/SVF-doxygen/html/html/namespacemembers_m.html +12 -0
- package/SVF-doxygen/html/html/namespacemembers_n.html +9 -0
- package/SVF-doxygen/html/html/namespacemembers_r.html +4 -1
- package/SVF-doxygen/html/html/namespacemembers_t.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_type_r.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_v.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_w.html +3 -0
- package/SVF-doxygen/html/html/namespaces.html +3 -1
- package/SVF-doxygen/html/html/search/all_1.js +1 -0
- package/SVF-doxygen/html/html/search/all_10.js +13 -10
- package/SVF-doxygen/html/html/search/all_11.js +5 -2
- package/SVF-doxygen/html/html/search/all_12.js +4 -4
- package/SVF-doxygen/html/html/search/all_13.js +7 -6
- package/SVF-doxygen/html/html/search/all_15.js +4 -3
- package/SVF-doxygen/html/html/search/all_16.js +9 -2
- package/SVF-doxygen/html/html/search/all_2.js +6 -4
- package/SVF-doxygen/html/html/search/all_3.js +8 -5
- package/SVF-doxygen/html/html/search/all_4.js +9 -2
- package/SVF-doxygen/html/html/search/all_5.js +7 -2
- package/SVF-doxygen/html/html/search/all_6.js +3 -1
- package/SVF-doxygen/html/html/search/all_7.js +51 -7
- package/SVF-doxygen/html/html/search/all_8.js +1 -0
- package/SVF-doxygen/html/html/search/all_9.js +24 -6
- package/SVF-doxygen/html/html/search/all_c.js +4 -2
- package/SVF-doxygen/html/html/search/all_d.js +6 -1
- package/SVF-doxygen/html/html/search/all_e.js +7 -4
- package/SVF-doxygen/html/html/search/all_f.js +17 -13
- package/SVF-doxygen/html/html/search/classes_3.js +4 -0
- package/SVF-doxygen/html/html/search/classes_6.js +33 -1
- package/SVF-doxygen/html/html/search/classes_8.js +11 -1
- package/SVF-doxygen/html/html/search/classes_a.js +1 -0
- package/SVF-doxygen/html/html/search/classes_d.js +2 -0
- package/SVF-doxygen/html/html/search/classes_e.js +1 -0
- package/SVF-doxygen/html/html/search/enums_8.js +1 -6
- package/SVF-doxygen/html/html/search/enums_9.js +6 -1
- package/SVF-doxygen/html/html/search/enums_a.js +1 -4
- package/SVF-doxygen/html/html/search/enums_b.js +4 -2
- package/SVF-doxygen/html/html/search/enums_c.js +2 -4
- package/SVF-doxygen/html/html/search/enums_d.js +4 -1
- package/SVF-doxygen/html/html/search/enums_e.html +26 -0
- package/SVF-doxygen/html/html/search/enums_e.js +4 -0
- package/SVF-doxygen/html/html/search/enumvalues_1.js +3 -3
- package/SVF-doxygen/html/html/search/enumvalues_10.js +1 -0
- package/SVF-doxygen/html/html/search/enumvalues_2.js +1 -0
- package/SVF-doxygen/html/html/search/enumvalues_3.js +1 -0
- package/SVF-doxygen/html/html/search/enumvalues_5.js +1 -0
- package/SVF-doxygen/html/html/search/enumvalues_8.js +3 -1
- package/SVF-doxygen/html/html/search/enumvalues_b.js +1 -0
- package/SVF-doxygen/html/html/search/files_3.js +1 -0
- package/SVF-doxygen/html/html/search/files_6.js +4 -1
- package/SVF-doxygen/html/html/search/files_7.js +3 -1
- package/SVF-doxygen/html/html/search/functions_0.js +1 -0
- package/SVF-doxygen/html/html/search/functions_1.js +1 -1
- package/SVF-doxygen/html/html/search/functions_10.js +2 -0
- package/SVF-doxygen/html/html/search/functions_14.js +1 -0
- package/SVF-doxygen/html/html/search/functions_15.js +7 -0
- package/SVF-doxygen/html/html/search/functions_2.js +2 -0
- package/SVF-doxygen/html/html/search/functions_3.js +2 -1
- package/SVF-doxygen/html/html/search/functions_4.js +6 -2
- package/SVF-doxygen/html/html/search/functions_6.js +15 -6
- package/SVF-doxygen/html/html/search/functions_7.js +1 -0
- package/SVF-doxygen/html/html/search/functions_8.js +9 -3
- package/SVF-doxygen/html/html/search/functions_c.js +5 -0
- package/SVF-doxygen/html/html/search/functions_d.js +2 -0
- package/SVF-doxygen/html/html/search/functions_e.js +14 -8
- package/SVF-doxygen/html/html/search/functions_f.js +3 -1
- package/SVF-doxygen/html/html/search/namespaces_0.js +2 -0
- package/SVF-doxygen/html/html/search/related_9.js +3 -3
- package/SVF-doxygen/html/html/search/searchdata.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_1.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_13.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_2.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_3.js +2 -1
- package/SVF-doxygen/html/html/search/typedefs_6.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_7.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_c.js +3 -3
- package/SVF-doxygen/html/html/search/typedefs_e.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_f.js +2 -1
- package/SVF-doxygen/html/html/search/variables_10.js +1 -0
- package/SVF-doxygen/html/html/search/variables_13.js +2 -2
- package/SVF-doxygen/html/html/search/variables_2.js +1 -0
- package/SVF-doxygen/html/html/search/variables_3.js +1 -1
- package/SVF-doxygen/html/html/search/variables_4.js +1 -0
- package/SVF-doxygen/html/html/search/variables_5.js +1 -0
- package/SVF-doxygen/html/html/search/variables_6.js +1 -0
- package/SVF-doxygen/html/html/search/variables_7.js +2 -1
- package/SVF-doxygen/html/html/search/variables_9.js +5 -2
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/search/variables_f.js +1 -0
- package/SVF-doxygen/html/html/structSVF_1_1GenericEdge_1_1equalGEdge.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SparseBitVectorElement-members.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SparseBitVectorElement.html +46 -46
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits-members.html +99 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits.html +193 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4-members.html +22 -4
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +67 -10
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4-members.html +21 -3
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +65 -8
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4-members.html +22 -4
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +72 -12
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4-members.html +23 -5
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +70 -10
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4-members.html +23 -5
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +68 -11
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4-members.html +23 -5
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +68 -11
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4-members.html +24 -6
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +76 -15
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4-members.html +22 -4
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.html +67 -10
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01TCT_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4-members.html +24 -6
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +73 -12
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1DefaultDOTGraphTraits-members.html +99 -0
- package/SVF-doxygen/html/html/structllvm_1_1DefaultDOTGraphTraits.html +855 -0
- package/SVF-doxygen/html/html/structllvm_1_1DefaultDOTGraphTraits.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits.html +116 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01Inverse_3_01T_01_4_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01Inverse_3_01T_01_4_01_4_01_4.html +106 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01Inverse_3_01T_01_4_01_4_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CFLNode_01_5_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CFLNode_01_5_01_4_01_4.html +12 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CFLNode_01_5_01_4_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CHNode_01_5_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CHNode_01_5_01_4_01_4.html +12 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1CHNode_01_5_01_4_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ConstraintNode_01_5_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ConstraintNode_01_5_01_4_01_4.html +12 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ConstraintNode_01_5_01_4_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1DCHNode_01_5_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1DCHNode_01_5_01_4_01_4.html +12 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1DCHNode_01_5_01_4_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_4_01_4-members.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_4_01_4.html +33 -31
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ICFGNode_01_5_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ICFGNode_01_5_01_4_01_4.html +12 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ICFGNode_01_5_01_4_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1PTACallGraphNode_01_5_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1PTACallGraphNode_01_5_01_4_01_4.html +12 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1PTACallGraphNode_01_5_01_4_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1SVFVar_01_5_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1SVFVar_01_5_01_4_01_4.html +12 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1SVFVar_01_5_01_4_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1TCTNode_01_5_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1TCTNode_01_5_01_4_01_4.html +12 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1TCTNode_01_5_01_4_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1VFGNode_01_5_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1VFGNode_01_5_01_4_01_4.html +12 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1VFGNode_01_5_01_4_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLGraph_01_5_01_4.html +5 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLGraph_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLNode_01_5_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLNode_01_5_01_4.html +10 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CFLNode_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.html +5 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHGraph_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHNode_01_5_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHNode_01_5_01_4.html +10 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1CHNode_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.html +5 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintGraph_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintNode_01_5_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintNode_01_5_01_4.html +10 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ConstraintNode_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1DCHGraph_01_5_01_4.html +5 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1DCHGraph_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1DCHNode_01_5_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1DCHNode_01_5_01_4.html +10 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1DCHNode_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericGraph_3_01NodeTy_00_01EdgeTy_01_4_01_5_4-members.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericGraph_3_01NodeTy_00_01EdgeTy_01_4_01_5_4.html +46 -44
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_01_4-members.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1GenericNode_3_01NodeTy_00_01EdgeTy_01_4_01_5_01_4.html +38 -34
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFGNode_01_5_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFGNode_01_5_01_4.html +10 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFGNode_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFG_01_5_01_4.html +5 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFG_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1IRGraph_01_5_01_4.html +5 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1IRGraph_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1PTACallGraphNode_01_5_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1PTACallGraphNode_01_5_01_4.html +10 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1PTACallGraphNode_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1PTACallGraph_01_5_01_4.html +5 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1PTACallGraph_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1SVFG_01_5_01_4.html +5 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1SVFG_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1SVFVar_01_5_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1SVFVar_01_5_01_4.html +10 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1SVFVar_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1TCTNode_01_5_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1TCTNode_01_5_01_4.html +10 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1TCTNode_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1TCT_01_5_01_4.html +5 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1TCT_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFGNode_01_5_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFGNode_01_5_01_4.html +10 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFGNode_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFG_01_5_01_4.html +5 -1
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1VFG_01_5_01_4.png +0 -0
- package/SVF-doxygen/html/html/structllvm_1_1Inverse-members.html +82 -0
- package/SVF-doxygen/html/html/structllvm_1_1Inverse.html +154 -0
- package/SVF-doxygen/html/html/structllvm_1_1pointee__iterator-members.html +111 -0
- package/SVF-doxygen/html/html/structllvm_1_1pointee__iterator.html +279 -0
- package/SVF-doxygen/html/html/structllvm_1_1pointee__iterator.png +0 -0
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +8 -8
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/tools_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/include/Graphs/DOTGraphTraits.h +188 -0
- package/include/Graphs/GenericGraph.h +50 -11
- package/include/Graphs/GraphPrinter.h +12 -20
- package/include/Graphs/GraphTraits.h +150 -0
- package/include/Graphs/GraphWriter.h +380 -0
- package/include/Util/iterator.h +407 -0
- package/include/Util/iterator_range.h +76 -0
- package/lib/Graphs/GraphWriter.cpp +53 -0
- package/lib/SVF-LLVM/LLVMModule.cpp +1 -0
- package/package.json +1 -1
|
@@ -66,13 +66,13 @@ $(function() {
|
|
|
66
66
|
<div class="title">VFG.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="VFG_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- VFG.cpp -- Sparse value-flow graph-----------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2018> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * VFG.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: Sep 11, 2018</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <<a class="code" href="SVFGNode_8h.html">Graphs/SVFGNode.h</a>></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="VFG_8h.html">Graphs/VFG.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">SVFIR/SVFModule.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classSVF_1_1VFGNode.html#a0342b5a6f270f4ff0e8e2a9b0082c6c5"> 40</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1VFGNode.html#a0342b5a6f270f4ff0e8e2a9b0082c6c5">VFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword"></span>{</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  rawstr << <span class="stringliteral">"VFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1StmtVFGNode.html#aa5011ff12de490146ab106e90d0b6ad8"> 48</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1StmtVFGNode.html#aa5011ff12de490146ab106e90d0b6ad8">StmtVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword"></span>{</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  rawstr << <span class="stringliteral">"StmtVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1LoadVFGNode.html#ab5f47aacf939e82b154c96451805938c"> 57</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1LoadVFGNode.html#ab5f47aacf939e82b154c96451805938c">LoadVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword"></span>{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getPAGDstNodeID());</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1LoadVFGNode.html#aad3591f38e30c5168d4accb76ac8dc04"> 64</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1LoadVFGNode.html#aad3591f38e30c5168d4accb76ac8dc04">LoadVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword"></span>{</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  rawstr << <span class="stringliteral">"LoadVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classSVF_1_1StoreVFGNode.html#aab00d7dcada369b19f68887d8e886ac4"> 73</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1StoreVFGNode.html#aab00d7dcada369b19f68887d8e886ac4">StoreVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword"></span>{</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> edge: getOutEdges())</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a> *iedge = SVFUtil::dyn_cast<IndirectSVFGEdge>(edge))</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  nb |= iedge->getPointsTo();</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1StoreVFGNode.html#aba7e8b8329caf412a55f5880f68414fe"> 86</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1StoreVFGNode.html#aba7e8b8329caf412a55f5880f68414fe">StoreVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword"></span>{</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  rawstr << <span class="stringliteral">"StoreVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1CopyVFGNode.html#a09a111ff93faf69c775aab41542ddcc3"> 95</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1CopyVFGNode.html#a09a111ff93faf69c775aab41542ddcc3">CopyVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword"></span>{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getPAGDstNodeID());</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1CopyVFGNode.html#ad86bbc5ec4a9ea226364a84e04724b37"> 102</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1CopyVFGNode.html#ad86bbc5ec4a9ea226364a84e04724b37">CopyVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword"></span>{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  rawstr << <span class="stringliteral">"CopyVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1CmpVFGNode.html#adba761312556c9a4cfc1ef9e5f3a7c10"> 111</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1CmpVFGNode.html#adba761312556c9a4cfc1ef9e5f3a7c10">CmpVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keyword"></span>{</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRes()->getId());</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classSVF_1_1CmpVFGNode.html#aa08c4475c47beb0d026acab859d68117"> 118</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1CmpVFGNode.html#aa08c4475c47beb0d026acab859d68117">CmpVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keyword"></span>{</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  rawstr << <span class="stringliteral">"CmpVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = cmp("</span>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">for</span>(CmpVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  it != eit; it++)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  rawstr << <span class="stringliteral">")]\n"</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span>(res->hasValue())</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  rawstr << <span class="stringliteral">" "</span> << res->getValue()->toString();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1BinaryOPVFGNode.html#a868c1523cc717b69f9c5c3e825a7eb18"> 135</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1BinaryOPVFGNode.html#a868c1523cc717b69f9c5c3e825a7eb18">BinaryOPVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keyword"></span>{</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRes()->getId());</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classSVF_1_1BinaryOPVFGNode.html#aa743cf19c5dc91dbb0c7b8981fecc6c4"> 142</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1BinaryOPVFGNode.html#aa743cf19c5dc91dbb0c7b8981fecc6c4">BinaryOPVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keyword"></span>{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  rawstr << <span class="stringliteral">"BinaryOPVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = Binary("</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">for</span>(BinaryOPVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  it != eit; it++)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">if</span>(res->hasValue())</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  rawstr << <span class="stringliteral">" "</span> << res->getValue()->toString();</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div><div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="classSVF_1_1UnaryOPVFGNode.html#a446b7922ec2aa5f9a14216bdaec93807"> 159</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1UnaryOPVFGNode.html#a446b7922ec2aa5f9a14216bdaec93807">UnaryOPVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keyword"></span>{</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRes()->getId());</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1UnaryOPVFGNode.html#ad0b45546c62bdef367149b58f530f89d"> 166</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1UnaryOPVFGNode.html#ad0b45546c62bdef367149b58f530f89d">UnaryOPVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keyword"></span>{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  rawstr << <span class="stringliteral">"UnaryOPVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = Unary("</span>;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">for</span>(UnaryOPVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  it != eit; it++)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">if</span>(res->hasValue())</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  rawstr << <span class="stringliteral">" "</span> << res->getValue()->toString();</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchVFGNode.html#a83e99b58146bd2d80726622feb303d3f"> 183</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1BranchVFGNode.html#a83e99b58146bd2d80726622feb303d3f">BranchVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keyword"></span>{</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a>();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchVFGNode.html#a131fe96308f67b307ea08e645b019e13"> 188</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1BranchVFGNode.html#a131fe96308f67b307ea08e645b019e13">BranchVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keyword"></span>{</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  rawstr << <span class="stringliteral">"BranchVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << brstmt->toString() << <span class="stringliteral">"\t"</span>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="classSVF_1_1GepVFGNode.html#ab1a0ebf945b933e7d92ff5ca5cfb657f"> 197</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1GepVFGNode.html#ab1a0ebf945b933e7d92ff5ca5cfb657f">GepVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keyword"></span>{</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getPAGDstNodeID());</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1GepVFGNode.html#ad27376633c939952878d5d73621ec638"> 204</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1GepVFGNode.html#ad27376633c939952878d5d73621ec638">GepVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keyword"></span>{</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  rawstr << <span class="stringliteral">"GepVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#a600752db995e57d49894c3f89e87cb50"> 213</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1PHIVFGNode.html#a600752db995e57d49894c3f89e87cb50">PHIVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keyword"></span>{</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRes()->getId());</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#a7fb9cbed3718922cd81b18d069c79aea"> 220</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1PHIVFGNode.html#a7fb9cbed3718922cd81b18d069c79aea">PHIVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keyword"></span>{</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  rawstr << <span class="stringliteral">"PHIVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  rawstr << <span class="stringliteral">"PAGNode: ["</span> << res->getId() << <span class="stringliteral">" = PHI("</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">for</span>(PHIVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  it != eit; it++)</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span>(res->hasValue())</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  rawstr << <span class="stringliteral">" "</span> << res->getValue()->toString();</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classSVF_1_1IntraPHIVFGNode.html#a145413d87e9174b5eb70b871b9dfa13e"> 238</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1IntraPHIVFGNode.html#a145413d87e9174b5eb70b871b9dfa13e">IntraPHIVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keyword"></span>{</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  rawstr << <span class="stringliteral">"IntraPHIVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  rawstr << <span class="stringliteral">"PAGNode: ["</span> << res->getId() << <span class="stringliteral">" = PHI("</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">for</span>(PHIVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  it != eit; it++)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">if</span>(res->hasValue())</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  rawstr << <span class="stringliteral">" "</span> << res->getValue()->toString();</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1AddrVFGNode.html#a9811e91aab1b49ca943ae0d382df2c1a"> 255</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1AddrVFGNode.html#a9811e91aab1b49ca943ae0d382df2c1a">AddrVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keyword"></span>{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getPAGDstNodeID());</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classSVF_1_1AddrVFGNode.html#ac26fbce400355f43fdc22ad88a8d9067"> 262</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1AddrVFGNode.html#ac26fbce400355f43fdc22ad88a8d9067">AddrVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keyword"></span>{</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  rawstr << <span class="stringliteral">"AddrVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1ArgumentVFGNode.html#a3c10cd63e18f79ccc66f4687d05cb8c5"> 272</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ArgumentVFGNode.html#a3c10cd63e18f79ccc66f4687d05cb8c5">ArgumentVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keyword"></span>{</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  rawstr << <span class="stringliteral">"ArgumentVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  rawstr << param->toString();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualParmVFGNode.html#ac5bfddb8123fbe57590fcf2dc62c153b"> 281</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1ActualParmVFGNode.html#ac5bfddb8123fbe57590fcf2dc62c153b">ActualParmVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keyword"></span>{</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getParam()->getId());</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualParmVFGNode.html#a60d6ce4c4fe2cf54be45e58b2b93c9f6"> 288</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ActualParmVFGNode.html#a60d6ce4c4fe2cf54be45e58b2b93c9f6">ActualParmVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keyword"></span>{</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  rawstr << <span class="stringliteral">"ActualParmVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  rawstr << <span class="stringliteral">"CS["</span> << getCallSite()->getCallSite()->getSourceLoc() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  rawstr << param->toString();</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalParmVFGNode.html#a84792b8a380dc157487374ddaa24d62a"> 298</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1FormalParmVFGNode.html#a84792b8a380dc157487374ddaa24d62a">FormalParmVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keyword"></span>{</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getParam()->getId());</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalParmVFGNode.html#ac4e695d6ee7bb7c5ed4e273567e7c1cc"> 305</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1FormalParmVFGNode.html#ac4e695d6ee7bb7c5ed4e273567e7c1cc">FormalParmVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keyword"></span>{</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  rawstr << <span class="stringliteral">"FormalParmVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  rawstr << <span class="stringliteral">"Fun["</span> << getFun()->getName() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  rawstr << param->toString();</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualRetVFGNode.html#aa188986fc1aee4a7f2586a1ff479063b"> 315</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1ActualRetVFGNode.html#aa188986fc1aee4a7f2586a1ff479063b">ActualRetVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keyword"></span>{</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRev()->getId());</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualRetVFGNode.html#a4d1e7df32604becd2e2b60fe2e5cfbfa"> 322</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ActualRetVFGNode.html#a4d1e7df32604becd2e2b60fe2e5cfbfa">ActualRetVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keyword"></span>{</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  rawstr << <span class="stringliteral">"ActualRetVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  rawstr << <span class="stringliteral">"CS["</span> << getCallSite()->getCallSite()->getSourceLoc() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  rawstr << param->toString();</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalRetVFGNode.html#ab0962e63ea87752caa136a169fa8f1c8"> 333</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1FormalRetVFGNode.html#ab0962e63ea87752caa136a169fa8f1c8">FormalRetVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keyword"></span>{</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRet()->getId());</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalRetVFGNode.html#ab1ae2339d7408d9156cdfe5ab4559e66"> 340</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1FormalRetVFGNode.html#ab1ae2339d7408d9156cdfe5ab4559e66">FormalRetVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keyword"></span>{</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  rawstr << <span class="stringliteral">"FormalRetVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  rawstr << <span class="stringliteral">"Fun["</span> << getFun()->getName() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  rawstr << param->toString();</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="classSVF_1_1InterPHIVFGNode.html#aff35aebdc8d955df160e51da7b666a7e"> 351</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1InterPHIVFGNode.html#aff35aebdc8d955df160e51da7b666a7e">InterPHIVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keyword"></span>{</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">if</span>(isFormalParmPHI())</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  rawstr << <span class="stringliteral">"FormalParmPHI ID: "</span> << getId() << <span class="stringliteral">" PAGNode ID: "</span> << res->getId() << <span class="stringliteral">"\n"</span> << res->getValue()->toString();</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  rawstr << <span class="stringliteral">"ActualRetPHI ID: "</span> << getId() << <span class="stringliteral">" PAGNode ID: "</span> << res->getId() << <span class="stringliteral">"\n"</span> << res->getValue()->toString();</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="classSVF_1_1NullPtrVFGNode.html#ae54d1078c5b909b9142189b8558f382e"> 362</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1NullPtrVFGNode.html#ae54d1078c5b909b9142189b8558f382e">NullPtrVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keyword"></span>{</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getPAGNode()->getId());</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1NullPtrVFGNode.html#a75c8b89a34bfd89a4af2c699cdb626b9"> 369</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1NullPtrVFGNode.html#a75c8b89a34bfd89a4af2c699cdb626b9">NullPtrVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keyword"></span>{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  rawstr << <span class="stringliteral">"NullPtrVFGNode ID: "</span> << getId();</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  rawstr << <span class="stringliteral">" PAGNode ID: "</span> << node->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="classSVF_1_1VFGEdge.html#a8f4bec008af7cd1a89870715eaa91a7b"> 379</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1VFGEdge.html#a8f4bec008af7cd1a89870715eaa91a7b">VFGEdge::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keyword"></span>{</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  rawstr << <span class="stringliteral">"VFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> }</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div><div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="classSVF_1_1DirectSVFGEdge.html#aa8d70214eb0242c3f2baaa506c12852c"> 387</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1DirectSVFGEdge.html#aa8d70214eb0242c3f2baaa506c12852c">DirectSVFGEdge::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keyword"></span>{</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  rawstr << <span class="stringliteral">"DirectVFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="classSVF_1_1IntraDirSVFGEdge.html#a1c8dc17717409aa42749181aafd155aa"> 395</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html#a1c8dc17717409aa42749181aafd155aa">IntraDirSVFGEdge::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keyword"></span>{</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  rawstr << <span class="stringliteral">"IntraDirSVFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div><div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="classSVF_1_1CallDirSVFGEdge.html#af07decd05375f56baa4a1c4fe70bc3f1"> 403</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1CallDirSVFGEdge.html#af07decd05375f56baa4a1c4fe70bc3f1">CallDirSVFGEdge::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keyword"></span>{</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  rawstr << <span class="stringliteral">"CallDirSVFGEdge CallSite ID: "</span> << getCallSiteId() << <span class="stringliteral">" ["</span>;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  rawstr << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> }</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div><div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="classSVF_1_1RetDirSVFGEdge.html#a6282c2619d843cf90575886a0ef81edf"> 412</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1RetDirSVFGEdge.html#a6282c2619d843cf90575886a0ef81edf">RetDirSVFGEdge::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keyword"></span>{</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  rawstr << <span class="stringliteral">"RetDirSVFGEdge CallSite ID: "</span> << getCallSiteId() << <span class="stringliteral">" ["</span>;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  rawstr << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div><div class="line"><a name="l00423"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalRetVFGNode.html#a732fe0036d307a1dace2631219de38ef"> 423</a></span> <a class="code" href="classSVF_1_1FormalRetVFGNode.html#a0155a71f08dfb1fb43f054084b2380c6">FormalRetVFGNode::FormalRetVFGNode</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* f) :</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="classSVF_1_1ArgumentVFGNode.html">ArgumentVFGNode</a>(id, n, FRet), fun(f)</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> {</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> }</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div><div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#add1ed5dfc7fbb095e2bdb7ff1e2658ef"> 428</a></span> <a class="code" href="classSVF_1_1PHIVFGNode.html#add1ed5dfc7fbb095e2bdb7ff1e2658ef">PHIVFGNode::PHIVFGNode</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* r,<a class="code" href="classSVF_1_1VFGNode.html#a99a54cf322b0eec3a1ef109ce5f2db75">VFGNodeK</a> k): <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>(id, k), res(r)</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div><div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a8ba98bb3d888ec5ff40f511da14b37bc"> 441</a></span> <a class="code" href="classSVF_1_1VFG.html#a8ba98bb3d888ec5ff40f511da14b37bc">VFG::VFG</a>(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* cg, <a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6">VFGK</a> k): totalVFGNode(0), callgraph(cg), pag(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>::getPAG()), kind(k)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCreate VFG Top Level Node\n"</span>));</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <a class="code" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862">addVFGNodes</a>();</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCreate SVFG Direct Edge\n"</span>));</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <a class="code" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0">connectDirectVFGEdges</a>();</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> }</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div><div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#af5005136743913d760d7402bbd308c69"> 454</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#af5005136743913d760d7402bbd308c69">VFG::destroy</a>()</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> {</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div><div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862"> 463</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862">VFG::addVFGNodes</a>()</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="comment">// initialize dummy definition null pointers in order to uniform the construction</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="comment">// to be noted for black hole pointer it has already has address edge connected,</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="comment">// and its definition will be set when processing addr SVFIR edge.</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <a class="code" href="classSVF_1_1VFG.html#a59bc855eb8591d88e0898e14d4f4b607">addNullPtrVFGNode</a>(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>()));</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="comment">// initialize address nodes</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& addrs = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a0a9a0f650e864e89b7cbb3dc8c8aa197">SVFStmt::Addr</a>);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  addrs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <a class="code" href="classSVF_1_1VFG.html#aca2b1493bd712bdc6618de995a81e5af">addAddrVFGNode</a>(SVFUtil::cast<AddrStmt>(*iter));</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="comment">// initialize copy nodes</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& copys = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad3469cdfb64f05163b5310b731b221da">SVFStmt::Copy</a>);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = copys.begin(), eiter =</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  copys.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>* edge = SVFUtil::cast<CopyStmt>(*iter);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  assert(!<a class="code" href="classSVF_1_1VFG.html#a8ddf15d89a1b11a7f7720b671f4f0295">isPhiCopyEdge</a>(edge) && <span class="stringliteral">"Copy edges can not be a PhiNode (or from PhiNode)"</span>);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <a class="code" href="classSVF_1_1VFG.html#a49d35213a281859ca64398760c485a85">addCopyVFGNode</a>(edge);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  }</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="comment">// initialize gep nodes</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& ngeps = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a20d960c19118d1ed319e0dbea94405e8">SVFStmt::Gep</a>);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  ngeps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <a class="code" href="classSVF_1_1VFG.html#a4fb321fb0ff2a06c1065506552b862aa">addGepVFGNode</a>(SVFUtil::cast<GepStmt>(*iter));</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="comment">// initialize load nodes</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& loads = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a62ac8480c43fcc657c631ec0003b15d5">SVFStmt::Load</a>);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  loads.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <a class="code" href="classSVF_1_1VFG.html#a373e7066630719ffb7c62681f2c2a74e">addLoadVFGNode</a>(SVFUtil::cast<LoadStmt>(*iter));</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="comment">// initialize store nodes</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& stores = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">SVFStmt::Store</a>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  stores.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <a class="code" href="classSVF_1_1VFG.html#a13f7caf44741db3b0e8a44b13d8931f5">addStoreVFGNode</a>(SVFUtil::cast<StoreStmt>(*iter));</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& forks = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd">SVFStmt::ThreadFork</a>);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = forks.begin(), eiter =</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  forks.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  {</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* forkedge = SVFUtil::cast<TDForkPE>(*iter);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <a class="code" href="classSVF_1_1VFG.html#a6b373385fa30c83c24844c41c2f05e53">addActualParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>(),forkedge-><a class="code" href="classSVF_1_1CallPE.html#ab548c22dfbfeeaeb8ffe83417b396c09">getCallSite</a>());</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="comment">// initialize actual parameter nodes</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">for</span>(SVFIR::CSToArgsListMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7">getCallSiteArgsMap</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7">getCallSiteArgsMap</a>().end(); it !=eit; ++it)</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="keywordflow">for</span>(SVFIR::SVFVarList::iterator pit = it->second.begin(), epit = it->second.end(); pit!=epit; ++pit)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = *pit;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(pagNode))</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <a class="code" href="classSVF_1_1VFG.html#a6b373385fa30c83c24844c41c2f05e53">addActualParmVFGNode</a>(pagNode,it->first);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  }</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  }</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="comment">// initialize actual return nodes (callsite return)</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">for</span>(SVFIR::CSToRetMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a650b3931af337a92ffcb5dad5ab47b22">getCallSiteRets</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a650b3931af337a92ffcb5dad5ab47b22">getCallSiteRets</a>().end(); it !=eit; ++it)</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  {</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(it->second) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#ab5b63b4f6317bfb5875f2b977bcf26a4">hasDef</a>(it->second))</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <a class="code" href="classSVF_1_1VFG.html#a63994c100593efda25dbd50646dfe0dc">addActualRetVFGNode</a>(it->second,it->first->getCallICFGNode());</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="comment">// initialize formal parameter nodes</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">for</span>(SVFIR::FunToArgsListMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a615c056c876b59d1fd174a2ac9ade27c">getFunArgsMap</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a615c056c876b59d1fd174a2ac9ade27c">getFunArgsMap</a>().end(); it !=eit; ++it)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = it->first;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">for</span>(SVFIR::SVFVarList::iterator pit = it->second.begin(), epit = it->second.end(); pit!=epit; ++pit)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* param = *pit;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(param) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#a88f6468b9b43bbb06ef757d884580a50">hasBlackHoleConstObjAddrAsDef</a>(param))</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <a class="code" href="classSVF_1_1VFG.html#ade3f735b3c7b1a53cab3d67cd9f7b874">CallPESet</a> callPEs;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">if</span> (param-><a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>))</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::const_iterator cit = param-><a class="code" href="classSVF_1_1SVFVar.html#a893890649ae7d8e275dd823e941aa39b">getIncomingEdgesBegin</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>), ecit =</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  param-><a class="code" href="classSVF_1_1SVFVar.html#af1cf24ab50e0d86c9d0f9bd5744b4c10">getIncomingEdgesEnd</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>); cit != ecit; ++cit)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::cast<CallPE>(*cit);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(callPE-><a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>()))</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  callPEs.insert(callPE);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  }</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  }</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <a class="code" href="classSVF_1_1VFG.html#afdb1560eecf692fb646d412dc760088d">addFormalParmVFGNode</a>(param,func,callPEs);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  }</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keywordflow">if</span> (func-><a class="code" href="classSVF_1_1SVFFunction.html#ae578002917b4ccbf28f172dba30d1d58">isVarArg</a>())</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* varParam = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a8b10c318674a47035d617b3ade4f069b">getVarargNode</a>(func));</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(varParam) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#a88f6468b9b43bbb06ef757d884580a50">hasBlackHoleConstObjAddrAsDef</a>(varParam))</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> </div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <a class="code" href="classSVF_1_1VFG.html#ade3f735b3c7b1a53cab3d67cd9f7b874">CallPESet</a> callPEs;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keywordflow">if</span> (varParam-><a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>))</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">for</span>(SVFStmt::SVFStmtSetTy::const_iterator cit = varParam-><a class="code" href="classSVF_1_1SVFVar.html#a893890649ae7d8e275dd823e941aa39b">getIncomingEdgesBegin</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>),</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  ecit = varParam-><a class="code" href="classSVF_1_1SVFVar.html#af1cf24ab50e0d86c9d0f9bd5744b4c10">getIncomingEdgesEnd</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>); cit!=ecit; ++cit)</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  {</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::cast<CallPE>(*cit);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(callPE-><a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>()))</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  callPEs.insert(callPE);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  }</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <a class="code" href="classSVF_1_1VFG.html#afdb1560eecf692fb646d412dc760088d">addFormalParmVFGNode</a>(varParam,func,callPEs);</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  }</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="comment">// initialize formal return nodes (callee return)</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">for</span> (SVFIR::FunToRetMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abd1bb12776dc9a17863a52ce2cd31958">getFunRets</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abd1bb12776dc9a17863a52ce2cd31958">getFunRets</a>().end(); it != eit; ++it)</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = it->first;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* uniqueFunRetNode = it->second;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <a class="code" href="classSVF_1_1VFG.html#abf966182c28f0521dcd161aa299e453d">RetPESet</a> retPEs;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordflow">if</span> (uniqueFunRetNode-><a class="code" href="classSVF_1_1SVFVar.html#a9b00f9b5f8ad2422162f4396e2d8fa42">hasOutgoingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>))</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::const_iterator cit = uniqueFunRetNode-><a class="code" href="classSVF_1_1SVFVar.html#a9e40eafe55a2c1448b830b56ae72e17f">getOutgoingEdgesBegin</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>),</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  ecit = uniqueFunRetNode-><a class="code" href="classSVF_1_1SVFVar.html#aa5176fce9746bc585d43ebb4c8c824e5">getOutgoingEdgesEnd</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  cit != ecit; ++cit)</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = SVFUtil::cast<RetPE>(*cit);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(retPE-><a class="code" href="classSVF_1_1AssignStmt.html#a973a2b79da223275ed6a1831837b89c7">getLHSVar</a>()))</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  retPEs.insert(retPE);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  }</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> </div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(uniqueFunRetNode))</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <a class="code" href="classSVF_1_1VFG.html#aae3bddc73e39d96fcc97d56ea3dec373">addFormalRetVFGNode</a>(uniqueFunRetNode, func, retPEs);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> </div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <span class="comment">// initialize llvm phi nodes (phi of top level pointers)</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& phis = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3cd98eeb47c8475e7ee64480dcdee9">SVFStmt::Phi</a>);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = phis.begin(), eiter =</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  phis.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  {</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>* edge = SVFUtil::cast<PhiStmt>(*iter);</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1MultiOpndStmt.html#a00a14ad8f49912b876fd9d729fea4601">getRes</a>()))</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <a class="code" href="classSVF_1_1VFG.html#afc4268e4abd973aecd29451c99172662">addIntraPHIVFGNode</a>(edge);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="comment">// initialize select statement</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& selects = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad9397ec243a61992dc2b5681bea587fa">SVFStmt::Select</a>);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = selects.begin(), eiter =</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  selects.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MultiOpndStmt.html">MultiOpndStmt</a>* edge = SVFUtil::cast<MultiOpndStmt>(*iter);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1MultiOpndStmt.html#a00a14ad8f49912b876fd9d729fea4601">getRes</a>()))</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <a class="code" href="classSVF_1_1VFG.html#afc4268e4abd973aecd29451c99172662">addIntraPHIVFGNode</a>(edge);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="comment">// initialize llvm binary nodes (binary operators)</span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& binaryops = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad58f5e59c55e1ffd23b83d16224fed13">SVFStmt::BinaryOp</a>);</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = binaryops.begin(), eiter =</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  binaryops.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>* edge = SVFUtil::cast<BinaryOPStmt>(*iter);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1MultiOpndStmt.html#a00a14ad8f49912b876fd9d729fea4601">getRes</a>()))</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <a class="code" href="classSVF_1_1VFG.html#ac79516fc4d9136241d708f9df5c73262">addBinaryOPVFGNode</a>(edge);</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  }</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="comment">// initialize llvm unary nodes (unary operators)</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& unaryops = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad2a5e6fe0f2b5fefb53abb9e91c57688">SVFStmt::UnaryOp</a>);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = unaryops.begin(), eiter =</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  unaryops.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>* edge = SVFUtil::cast<UnaryOPStmt>(*iter);</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1UnaryOPStmt.html#a919db9b8c9287c3802f563840b56c4f1">getRes</a>()))</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <a class="code" href="classSVF_1_1VFG.html#a65c88a6c20380b715ac8b6c31e68afed">addUnaryOPVFGNode</a>(edge);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  }</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="comment">// initialize llvm unary nodes (unary operators)</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& brs = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad52703e3ec09b6a4f565e5d82279b6a3">SVFStmt::Branch</a>);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = brs.begin(), eiter =</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  brs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* edge = SVFUtil::cast<BranchStmt>(*iter);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1BranchStmt.html#a2c6fe09027838f9e0ad9ab8193ce8e9b">getBranchInst</a>()))</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <a class="code" href="classSVF_1_1VFG.html#a18afc4baf33eb700e0510928016019f5">addBranchVFGNode</a>(edge);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="comment">// initialize llvm cmp nodes (comparision)</span></div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& cmps = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a610d6662d1814cffbf23db29e7e620c0">SVFStmt::Cmp</a>);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = cmps.begin(), eiter =</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  cmps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>* edge = SVFUtil::cast<CmpStmt>(*iter);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1MultiOpndStmt.html#a00a14ad8f49912b876fd9d729fea4601">getRes</a>()))</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <a class="code" href="classSVF_1_1VFG.html#a6c2280052b44ff7029cf4b98712c374b">addCmpVFGNode</a>(edge);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div><div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2"> 675</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">VFG::addIntraDirectVFEdge</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> dstId)</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span> {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <a class="code" href="classSVF_1_1VFG.html#a43b0c126c2e32cb3d286a78b14e09a96">checkIntraEdgeParents</a>(srcNode, dstNode);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">hasIntraVFGEdge</a>(srcNode, dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">VFGEdge::IntraDirectVF</a>);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keywordflow">if</span> (edge != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  assert(edge-><a class="code" href="classSVF_1_1VFGEdge.html#a8777555f00696706de250159b920d14b">isDirectVFGEdge</a>() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">if</span>(srcNode!=dstNode)</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  {</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html">IntraDirSVFGEdge</a>* directEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html">IntraDirSVFGEdge</a>(srcNode,dstNode);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(directEdge) ? directEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  }</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> }</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span> </div><div class="line"><a name="l00701"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aa01f63b17acdd52122a7f1ade329ccea"> 701</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#aa01f63b17acdd52122a7f1ade329ccea">VFG::addCallEdge</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> dstId, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span> {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">hasInterVFGEdge</a>(srcNode, dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a8383c27feab3f1acc67cacef9744c04a">VFGEdge::CallDirVF</a>, csId);</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="keywordflow">if</span> (edge != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  {</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  assert(edge-><a class="code" href="classSVF_1_1VFGEdge.html#a92e3da59f7f5a693945b9a93f169da04">isCallDirectVFGEdge</a>() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  {</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>* callEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>(srcNode,dstNode,csId);</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(callEdge) ? callEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> }</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span> </div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2"> 721</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2">VFG::addRetEdge</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> dstId, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span> {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">hasInterVFGEdge</a>(srcNode, dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a8288c583cfcbfdf9aa2ac2103c0e7191">VFGEdge::RetDirVF</a>, csId);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keywordflow">if</span> (edge != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  {</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  assert(edge-><a class="code" href="classSVF_1_1VFGEdge.html#a49cbf2a714c9b965b19452d266cd8bdf">isRetDirectVFGEdge</a>() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  {</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>* retEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>(srcNode,dstNode,csId);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(retEdge) ? retEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  }</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span> }</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span> </div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div><div class="line"><a name="l00742"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0"> 742</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0">VFG::connectDirectVFGEdges</a>()</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span> {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span> </div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; ++it)</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  {</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> nodeId = it->first;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node = it->second;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span> </div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span>(SVFUtil::isa<AddrVFGNode>(stmtNode))</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="keywordflow">if</span> (stmtNode->getPAGSrcNode()->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(stmtNode->getPAGSrcNode()), nodeId);</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span> </div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">if</span>(SVFUtil::isa<StoreVFGNode>(stmtNode) && (stmtNode->getPAGDstNode()->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>))</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(stmtNode->getPAGDstNode()), nodeId);</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  }</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span> </div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  }</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phiNode = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  {</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordflow">for</span> (PHIVFGNode::OPVers::const_iterator it = phiNode->opVerBegin(), eit = phiNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  {</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <span class="keywordflow">if</span> (it->second->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  }</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  }</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* binaryNode = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  {</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">for</span> (BinaryOPVFGNode::OPVers::const_iterator it = binaryNode->opVerBegin(), eit = binaryNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  {</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keywordflow">if</span> (it->second->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  }</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  }</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* unaryNode = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  {</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">for</span> (UnaryOPVFGNode::OPVers::const_iterator it = unaryNode->opVerBegin(), eit = unaryNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  {</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="keywordflow">if</span> (it->second->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  }</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmpNode = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  {</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keywordflow">for</span> (CmpVFGNode::OPVers::const_iterator it = cmpNode->opVerBegin(), eit = cmpNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  {</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="keywordflow">if</span> (it->second->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  }</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  }</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BranchVFGNode.html">BranchVFGNode</a>* branchNode = SVFUtil::dyn_cast<BranchVFGNode>(node))</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  {</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* cond = branchNode->getBranchStmt()->getCondition();</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">if</span> (cond-><a class="code" href="classSVF_1_1SVFVar.html#a091ef22d4fc428985d604b03f287a941">isConstDataOrAggDataButNotNullPtr</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(cond), nodeId);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  }</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* actualParm = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  {</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">if</span> (actualParm->getParam()->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(actualParm->getParam()), nodeId);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  }</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* formalParm = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  {</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <span class="keywordflow">for</span>(CallPESet::const_iterator it = formalParm->callPEBegin(), eit = formalParm->callPEEnd();</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  it!=eit; ++it)</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  {</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = (*it)-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>();</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* acutalParm = <a class="code" href="classSVF_1_1VFG.html#a6bbfe457dcc7104e6928323499ea964e">getActualParmVFGNode</a>((*it)->getRHSVar(),cs);</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <a class="code" href="classSVF_1_1VFG.html#a6fd24c001a6daedf591974ba27140461">addInterEdgeFromAPToFP</a>(acutalParm,formalParm,<a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(cs, formalParm-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  }</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  }</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* calleeRet = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  {</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(calleeRet->getRet()), nodeId);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span> </div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="keywordflow">for</span>(RetPESet::const_iterator it = calleeRet->retPEBegin(), eit = calleeRet->retPEEnd(); it!=eit; ++it)</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  {</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* callsiteRev = <a class="code" href="classSVF_1_1VFG.html#a0b072e8e45899b89da0a466140563c38">getActualRetVFGNode</a>((*it)->getLHSVar());</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* retBlockNode = (*it)-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>();</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#aa41516cdd2be5066adf22798a4fe2213">getCallICFGNode</a>(retBlockNode->getCallSite());</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <a class="code" href="classSVF_1_1VFG.html#abd05b599b383c759455aff99963b7b41">addInterEdgeFromFRToAR</a>(calleeRet,callsiteRev, <a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(callBlockNode, calleeRet-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  }</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  }</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  }</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span> </div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a153d42a480ef1763ad59fd7258ac3ac5">Options::EnableThreadCallGraph</a>)</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  {</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& forks = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd">SVFStmt::ThreadFork</a>);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = forks.begin(), eiter =</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  forks.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* forkedge = SVFUtil::cast<TDForkPE>(*iter);</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* acutalParm = <a class="code" href="classSVF_1_1VFG.html#a6bbfe457dcc7104e6928323499ea964e">getActualParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>(),forkedge-><a class="code" href="classSVF_1_1CallPE.html#ab548c22dfbfeeaeb8ffe83417b396c09">getCallSite</a>());</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* formalParm = <a class="code" href="classSVF_1_1VFG.html#a75eb519e4f89a116db98fccb263af4d6">getFormalParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1AssignStmt.html#a973a2b79da223275ed6a1831837b89c7">getLHSVar</a>());</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <a class="code" href="classSVF_1_1VFG.html#a6fd24c001a6daedf591974ba27140461">addInterEdgeFromAPToFP</a>(acutalParm,formalParm,<a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(forkedge-><a class="code" href="classSVF_1_1CallPE.html#ab548c22dfbfeeaeb8ffe83417b396c09">getCallSite</a>(), formalParm-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  }</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& joins = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a3c3f8883c2d3b50aef6331d5da97ffb0">SVFStmt::ThreadJoin</a>);</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = joins.begin(), eiter =</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  joins.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  {</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* joinedge = SVFUtil::cast<TDJoinPE>(*iter);</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> callsiteRev = <a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(joinedge-><a class="code" href="classSVF_1_1AssignStmt.html#a973a2b79da223275ed6a1831837b89c7">getLHSVar</a>());</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* calleeRet = <a class="code" href="classSVF_1_1VFG.html#ab7ba9d179504165f277d347a7cb9f5d8">getFormalRetVFGNode</a>(joinedge-><a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>());</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <a class="code" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2">addRetEdge</a>(calleeRet->getId(),callsiteRev, <a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(joinedge-><a class="code" href="classSVF_1_1RetPE.html#ab03f10c0375846a733f3257736a84f9d">getCallSite</a>(), calleeRet-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  }</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span> }</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span> </div><div class="line"><a name="l00866"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f"> 866</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">VFG::hasIntraVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span> {</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  {</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  assert(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  }</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span> }</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span> </div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span> </div><div class="line"><a name="l00884"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aead3b463d9aa2fae5845d97896bd18ba"> 884</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#aead3b463d9aa2fae5845d97896bd18ba">VFG::hasThreadVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span> {</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  {</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  assert(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  }</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span> }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span> </div><div class="line"><a name="l00901"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9"> 901</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">VFG::hasInterVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>,<a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span> {</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,<a class="code" href="classSVF_1_1VFGEdge.html#a30c07e8afb0853d4b46cfa722d912650">VFGEdge::makeEdgeFlagWithInvokeID</a>(kind,csId));</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  {</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  assert(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  }</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span> }</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span> </div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span> </div><div class="line"><a name="l00919"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50"> 919</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50">VFG::getIntraVFGEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span> {</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">hasIntraVFGEdge</a>(const_cast<VFGNode*>(src),const_cast<VFGNode*>(dst),kind);</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> }</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span> </div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> </div><div class="line"><a name="l00928"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aee3d0c4ed32bde425f33281f248b7dd2"> 928</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#aee3d0c4ed32bde425f33281f248b7dd2">VFG::dump</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>& file, <span class="keywordtype">bool</span> simple)</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span> {</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <a class="code" href="classllvm_1_1GraphPrinter.html#af6ed328e74882d2b5e2b4039cb836928">GraphPrinter::WriteGraphToFile</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>(), file, <span class="keyword">this</span>, simple);</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span> }</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span> </div><div class="line"><a name="l00936"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ae4350f68e960bfef87f44587628b1929"> 936</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#ae4350f68e960bfef87f44587628b1929">VFG::view</a>()</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span> {</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  llvm::ViewGraph(<span class="keyword">this</span>, <span class="stringliteral">"Value Flow Graph"</span>);</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span> }</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span> </div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span> </div><div class="line"><a name="l00942"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a0c0a7c8f0bd27bc9e88ce54c0809b11b"> 942</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#a0c0a7c8f0bd27bc9e88ce54c0809b11b">VFG::updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span> {</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <a class="code" href="classSVF_1_1VFG.html#a0bdac7337a393ad2e21a33ec1978ca3f">VFGEdgeSetTy</a> vfEdgesAtIndCallSite;</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  PointerAnalysis::CallEdgeMap::const_iterator iter = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>().begin();</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  PointerAnalysis::CallEdgeMap::const_iterator eiter = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>().end();</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <span class="keywordflow">for</span> (; iter != eiter; iter++)</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  {</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* newcs = iter->first;</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  assert(newcs-><a class="code" href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">isIndirectCall</a>() && <span class="stringliteral">"this is not an indirect call?"</span>);</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">PointerAnalysis::FunctionSet</a> & functions = iter->second;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <span class="keywordflow">for</span> (PointerAnalysis::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  {</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = *func_iter;</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  <a class="code" href="classSVF_1_1VFG.html#aa055ce3c4fe1cde5529cd63dd1ef2ed6">connectCallerAndCallee</a>(newcs, func, vfEdgesAtIndCallSite);</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  }</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  }</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span> }</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span> </div><div class="line"><a name="l00964"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aa055ce3c4fe1cde5529cd63dd1ef2ed6"> 964</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#aa055ce3c4fe1cde5529cd63dd1ef2ed6">VFG::connectCallerAndCallee</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee, <a class="code" href="classSVF_1_1VFG.html#a0bdac7337a393ad2e21a33ec1978ca3f">VFGEdgeSetTy</a>& edges)</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span> {</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> * <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a> = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>();</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <a class="code" href="classSVF_1_1ICFG.html">ICFG</a> * icfg = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId = <a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(callBlockNode, callee);</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = icfg-><a class="code" href="classSVF_1_1ICFG.html#a881fe977f3a6fde223bd786121e35fcf">getRetICFGNode</a>(callBlockNode-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="comment">// connect actual and formal param</span></div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1SVFIR.html#a95f77211550ec2374d57779d88cf5138">hasCallSiteArgsMap</a>(callBlockNode) && pag-><a class="code" href="classSVF_1_1SVFIR.html#ac359813747b4f75920c5f395ba74f410">hasFunArgsList</a>(callee))</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  {</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>& csArgList = pag-><a class="code" href="classSVF_1_1SVFIR.html#a2a1e8ce39bf8deace3c344d5f05fe6ac">getCallSiteArgsList</a>(callBlockNode);</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>& funArgList = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa148e3e14ebad8460e32079f2f44413a">getFunArgsList</a>(callee);</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  SVFIR::SVFVarList::const_iterator csArgIt = csArgList.begin(), csArgEit = csArgList.end();</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  SVFIR::SVFVarList::const_iterator funArgIt = funArgList.begin(), funArgEit = funArgList.end();</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <span class="keywordflow">for</span> (; funArgIt != funArgEit && csArgIt != csArgEit; funArgIt++, csArgIt++)</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *cs_arg = *csArgIt;</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *fun_arg = *funArgIt;</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <span class="keywordflow">if</span> (fun_arg-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>() && cs_arg-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <a class="code" href="classSVF_1_1VFG.html#a2c508fbf07bad33d5b56d2acc6e012d3">connectAParamAndFParam</a>(cs_arg, fun_arg, callBlockNode, csId, edges);</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  }</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  assert(funArgIt == funArgEit && <span class="stringliteral">"function has more arguments than call site"</span>);</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordflow">if</span> (callee-><a class="code" href="classSVF_1_1SVFFunction.html#ae578002917b4ccbf28f172dba30d1d58">isVarArg</a>())</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  {</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> varFunArg = pag-><a class="code" href="classSVF_1_1IRGraph.html#a8b10c318674a47035d617b3ade4f069b">getVarargNode</a>(callee);</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* varFunArgNode = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(varFunArg);</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <span class="keywordflow">if</span> (varFunArgNode-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  {</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <span class="keywordflow">for</span> (; csArgIt != csArgEit; csArgIt++)</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  {</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *cs_arg = *csArgIt;</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  <span class="keywordflow">if</span> (cs_arg-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <a class="code" href="classSVF_1_1VFG.html#a2c508fbf07bad33d5b56d2acc6e012d3">connectAParamAndFParam</a>(cs_arg, varFunArgNode, callBlockNode, csId, edges);</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  }</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  }</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  }</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  }</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <span class="comment">// connect actual return and formal return</span></div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1SVFIR.html#afe8274c3b7317fccef5314662a182046">funHasRet</a>(callee) && pag-><a class="code" href="classSVF_1_1SVFIR.html#aa79dba26cb34b40eee682713db299d5f">callsiteHasRet</a>(retBlockNode))</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* cs_return = pag-><a class="code" href="classSVF_1_1SVFIR.html#a3145677c7a3763fc0d6aa7e21b264ab6">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* fun_return = pag-><a class="code" href="classSVF_1_1SVFIR.html#a34e27b8bcfeaafda190dcdb9169a346f">getFunRet</a>(callee);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <span class="keywordflow">if</span> (cs_return-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>() && fun_return-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <a class="code" href="classSVF_1_1VFG.html#ab4e8ab307ad6beb46812a60ebd31ae3b">connectFRetAndARet</a>(fun_return, cs_return, csId, edges);</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  }</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> }</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div><div class="line"><a name="l01014"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a1fff5a365e5aa2d99f07f7f64cc35fac"> 1014</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* <a class="code" href="classSVF_1_1VFG.html#a1fff5a365e5aa2d99f07f7f64cc35fac">VFG::getLHSTopLevPtr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="keyword"></span>{</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> </div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrVFGNode.html">AddrVFGNode</a>* addr = SVFUtil::dyn_cast<AddrVFGNode>(node))</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  <span class="keywordflow">return</span> addr->getPAGDstNode();</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyVFGNode.html">CopyVFGNode</a>* <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast<CopyVFGNode>(node))</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>->getPAGDstNode();</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepVFGNode.html">GepVFGNode</a>* gep = SVFUtil::dyn_cast<GepVFGNode>(node))</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="keywordflow">return</span> gep->getPAGDstNode();</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadVFGNode</a>* load = SVFUtil::dyn_cast<LoadVFGNode>(node))</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <span class="keywordflow">return</span> load->getPAGDstNode();</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordflow">return</span> phi->getRes();</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="keywordflow">return</span> cmp->getRes();</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <span class="keywordflow">return</span> bop->getRes();</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  <span class="keywordflow">return</span> uop->getRes();</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  <span class="keywordflow">return</span> ap->getParam();</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>*fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="keywordflow">return</span> fp->getParam();</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  <span class="keywordflow">return</span> ar->getRev();</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <span class="keywordflow">return</span> fr->getRet();</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1NullPtrVFGNode.html">NullPtrVFGNode</a>* nullVFG = SVFUtil::dyn_cast<NullPtrVFGNode>(node))</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  <span class="keywordflow">return</span> nullVFG->getPAGNode();</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"unexpected node kind!"</span>);</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> }</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> </div><div class="line"><a name="l01051"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a8994194bca2edfd9528880390de795ab"> 1051</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1VFG.html#a8994194bca2edfd9528880390de795ab">VFG::isFunEntryVFGNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="keyword"></span>{</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  {</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordflow">return</span> fp->getFun();</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  }</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1InterPHIVFGNode.html">InterPHIVFGNode</a>* phi = SVFUtil::dyn_cast<InterPHIVFGNode>(node))</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  {</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <span class="keywordflow">if</span>(phi->isFormalParmPHI())</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  <span class="keywordflow">return</span> phi->getFun();</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  }</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> }</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> </div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> </div><div class="line"><a name="l01066"></a><span class="lineno"><a class="line" href="classSVF_1_1StmtVFGNode.html#a8c9af51d2f3425f6b8de70ffe1795292"> 1066</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1StmtVFGNode.html#a8c9af51d2f3425f6b8de70ffe1795292">StmtVFGNode::getValue</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="keyword"></span>{</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <span class="keywordflow">return</span> getPAGEdge()->getValue();</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div><div class="line"><a name="l01071"></a><span class="lineno"><a class="line" href="classSVF_1_1CmpVFGNode.html#a644e48dbbd5a97f54f6d586e7d168297"> 1071</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1CmpVFGNode.html#a644e48dbbd5a97f54f6d586e7d168297">CmpVFGNode::getValue</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="keyword"></span>{</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  <span class="keywordflow">return</span> getRes()->getValue();</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> }</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div><div class="line"><a name="l01076"></a><span class="lineno"><a class="line" href="classSVF_1_1BinaryOPVFGNode.html#a1e0dba35433edfc8f1e57a02209734cc"> 1076</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1BinaryOPVFGNode.html#a1e0dba35433edfc8f1e57a02209734cc">BinaryOPVFGNode::getValue</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="keyword"></span>{</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <span class="keywordflow">return</span> getRes()->getValue();</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> }</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div><div class="line"><a name="l01081"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#aef22470b2a3c18ac99fd912fc906fd00"> 1081</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1PHIVFGNode.html#aef22470b2a3c18ac99fd912fc906fd00">PHIVFGNode::getValue</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="keyword"></span>{</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="keywordflow">return</span> getRes()->getValue();</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> }</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div><div class="line"><a name="l01086"></a><span class="lineno"><a class="line" href="classSVF_1_1ArgumentVFGNode.html#ac142fd44a7a344e24cad0de7a217f93e"> 1086</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1ArgumentVFGNode.html#ac142fd44a7a344e24cad0de7a217f93e">ArgumentVFGNode::getValue</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="keyword"></span>{</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <span class="keywordflow">return</span> param->hasValue() ? param->getValue() : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> }</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> </div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> {</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="keyword">template</span><></div><div class="line"><a name="l01097"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html"> 1097</a></span> <span class="keyword">struct </span>DOTGraphTraits<<a class="code" href="classSVF_1_1VFG.html">VFG</a>*> : <span class="keyword">public</span> DOTGraphTraits<SVFIR*></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> {</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> </div><div class="line"><a name="l01100"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#afd7d2c80916a68b53814e6de593bf520"> 1100</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#afd7d2c80916a68b53814e6de593bf520">NodeType</a>;</div><div class="line"><a name="l01101"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0ae94170a4f95bfc7e89d0149ff67882"> 1101</a></span>  <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0ae94170a4f95bfc7e89d0149ff67882">DOTGraphTraits</a>(<span class="keywordtype">bool</span> isSimple = <span class="keyword">false</span>) :</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  DOTGraphTraits<<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>*>(isSimple)</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  }</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div><div class="line"><a name="l01107"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#aaedec44d41a6e36c9e5db804e4a005dd"> 1107</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#aaedec44d41a6e36c9e5db804e4a005dd">getGraphName</a>(<a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="keywordflow">return</span> <span class="stringliteral">"VFG"</span>;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  }</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div><div class="line"><a name="l01112"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6470ed90c2a601b01715d02cffd90918"> 1112</a></span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6470ed90c2a601b01715d02cffd90918">getNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a> *graph)</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  {</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  <span class="keywordflow">if</span> (isSimple())</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keywordflow">return</span> getSimpleNodeLabel(node, graph);</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  <span class="keywordflow">return</span> getCompleteNodeLabel(node, graph);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div><div class="line"><a name="l01121"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0159404d5c5a7816a4b679c0f35a546e"> 1121</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0159404d5c5a7816a4b679c0f35a546e">getSimpleNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  {</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  {</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  rawstr << stmtNode->toString();</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  }</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* tphi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  {</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  rawstr << tphi->toString();</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  }</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  {</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  rawstr << fp->toString();</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  }</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  {</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  rawstr << ap->toString();</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  {</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  rawstr << ar->toString();</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  }</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  {</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  rawstr << fr->toString();</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  }</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<NullPtrVFGNode>(node))</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  {</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  rawstr << <span class="stringliteral">"NullPtr"</span>;</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  rawstr << bop->toString();</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  }</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  {</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  rawstr << uop->toString();</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  }</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  {</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  rawstr << cmp->toString();;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"what else kinds of nodes do we have??"</span>);</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> </div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  }</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> </div><div class="line"><a name="l01172"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6ced6b5b50d920fb47c4334693fea86c"> 1172</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6ced6b5b50d920fb47c4334693fea86c">getCompleteNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  {</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  {</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  rawstr << stmtNode->toString();</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  }</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  {</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  rawstr << bop->toString();</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  }</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  {</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  rawstr << uop->toString();</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  }</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  {</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  rawstr << cmp->toString();</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  }</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  {</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  rawstr << phi->toString();</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  }</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  {</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  rawstr << fp->toString();</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  }</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  {</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  rawstr << ap->toString();</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  }</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1NullPtrVFGNode.html">NullPtrVFGNode</a>* nptr = SVFUtil::dyn_cast<NullPtrVFGNode>(node))</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  {</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  rawstr << nptr->toString();</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  }</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  {</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  rawstr << ar->toString();</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  }</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  {</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  rawstr << fr->toString();</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a>* mr = SVFUtil::dyn_cast<MRSVFGNode>(node))</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  {</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  rawstr << mr->toString();</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  }</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"what else kinds of nodes do we have??"</span>);</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> </div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  }</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div><div class="line"><a name="l01227"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a57d4a186a0319b73d69752564bf25b2a"> 1227</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a57d4a186a0319b73d69752564bf25b2a">getNodeAttributes</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  {</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> </div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  {</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = stmtNode->getPAGEdge();</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  <span class="keywordflow">if</span> (SVFUtil::isa<AddrStmt>(edge))</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  {</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  rawstr << <span class="stringliteral">"color=green"</span>;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  }</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<CopyStmt>(edge))</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  {</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  rawstr << <span class="stringliteral">"color=black"</span>;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  }</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetPE>(edge))</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  {</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  rawstr << <span class="stringliteral">"color=black,style=dotted"</span>;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  }</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<GepStmt>(edge))</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  {</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  rawstr << <span class="stringliteral">"color=purple"</span>;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  }</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<StoreStmt>(edge))</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  {</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  rawstr << <span class="stringliteral">"color=blue"</span>;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  }</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<LoadStmt>(edge))</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  {</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  rawstr << <span class="stringliteral">"color=red"</span>;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  }</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  {</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  assert(0 && <span class="stringliteral">"No such kind edge!!"</span>);</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  }</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  rawstr << <span class="stringliteral">""</span>;</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  }</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<CmpVFGNode>(node))</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  {</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  }</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<BinaryOPVFGNode>(node))</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  {</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  }</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<UnaryOPVFGNode>(node))</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  {</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  }</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<PHIVFGNode>(node))</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  {</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  rawstr << <span class="stringliteral">"color=black"</span>;</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  }</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<NullPtrVFGNode>(node))</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  {</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  }</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<FormalParmVFGNode>(node))</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  {</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  }</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<ActualParmVFGNode>(node))</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  {</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  }</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<ActualRetVFGNode>(node))</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>  {</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  }</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<FormalRetVFGNode>(node))</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>  {</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>  }</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<MRSVFGNode>(node))</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  {</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  rawstr << <span class="stringliteral">"color=orange,penwidth=2"</span>;</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  }</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"no such kind of node!!"</span>);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> </div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  rawstr << <span class="stringliteral">""</span>;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> </div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  }</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> </div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  <span class="keyword">template</span><<span class="keyword">class</span> EdgeIter></div><div class="line"><a name="l01314"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a646a1023dab5169a73c8ea54e860c78b"> 1314</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a646a1023dab5169a73c8ea54e860c78b">getEdgeAttributes</a>(NodeType*, EdgeIter EI, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  {</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  assert(edge && <span class="stringliteral">"No edge found!!"</span>);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DirectSVFGEdge>(edge))</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  {</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CallDirSVFGEdge>(edge))</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid,color=red"</span>;</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetDirSVFGEdge>(edge))</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid,color=blue"</span>;</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid"</span>;</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>  }</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<IndirectSVFGEdge>(edge))</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  {</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CallIndSVFGEdge>(edge))</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed,color=red"</span>;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetIndSVFGEdge>(edge))</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed,color=blue"</span>;</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed"</span>;</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  }</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  {</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"what else edge we have?"</span>);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  }</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  }</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> </div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  <span class="keyword">template</span><<span class="keyword">class</span> EdgeIter></div><div class="line"><a name="l01344"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#af794115d33a8ea6f7f2e2c7ac5dd4c80"> 1344</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#af794115d33a8ea6f7f2e2c7ac5dd4c80">getEdgeSourceLabel</a>(NodeType*, EdgeIter EI)</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  {</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  assert(edge && <span class="stringliteral">"No edge found!!"</span>);</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> </div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>* dirCall = SVFUtil::dyn_cast<CallDirSVFGEdge>(edge))</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  rawstr << dirCall->getCallSiteId();</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>* dirRet = SVFUtil::dyn_cast<RetDirSVFGEdge>(edge))</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  rawstr << dirRet->getCallSiteId();</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> </div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  }</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> };</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> } <span class="comment">// End namespace llvm</span></div><div class="ttc" id="classSVF_1_1ActualRetVFGNode_html_aa188986fc1aee4a7f2586a1ff479063b"><div class="ttname"><a href="classSVF_1_1ActualRetVFGNode.html#aa188986fc1aee4a7f2586a1ff479063b">SVF::ActualRetVFGNode::getDefSVFVars</a></div><div class="ttdeci">const NodeBS getDefSVFVars() const override</div><div class="ttdoc">Return the left hand side SVF Vars. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00315">VFG.cpp:315</a></div></div>
|
|
70
|
-
<div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
69
|
+
<a href="VFG_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- VFG.cpp -- Sparse value-flow graph-----------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-2018> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * VFG.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: Sep 11, 2018</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> </div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include <<a class="code" href="SVFGNode_8h.html">Graphs/SVFGNode.h</a>></span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="VFG_8h.html">Graphs/VFG.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">SVFIR/SVFModule.h</a>"</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> </div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> </div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="classSVF_1_1VFGNode.html#a0342b5a6f270f4ff0e8e2a9b0082c6c5"> 40</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1VFGNode.html#a0342b5a6f270f4ff0e8e2a9b0082c6c5">VFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keyword"></span>{</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  rawstr << <span class="stringliteral">"VFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> }</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1StmtVFGNode.html#aa5011ff12de490146ab106e90d0b6ad8"> 48</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1StmtVFGNode.html#aa5011ff12de490146ab106e90d0b6ad8">StmtVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="keyword"></span>{</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  rawstr << <span class="stringliteral">"StmtVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1LoadVFGNode.html#ab5f47aacf939e82b154c96451805938c"> 57</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1LoadVFGNode.html#ab5f47aacf939e82b154c96451805938c">LoadVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> <span class="keyword"></span>{</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getPAGDstNodeID());</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1LoadVFGNode.html#aad3591f38e30c5168d4accb76ac8dc04"> 64</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1LoadVFGNode.html#aad3591f38e30c5168d4accb76ac8dc04">LoadVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="keyword"></span>{</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  rawstr << <span class="stringliteral">"LoadVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> }</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classSVF_1_1StoreVFGNode.html#aab00d7dcada369b19f68887d8e886ac4"> 73</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1StoreVFGNode.html#aab00d7dcada369b19f68887d8e886ac4">StoreVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> <span class="keyword"></span>{</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> edge: getOutEdges())</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a> *iedge = SVFUtil::dyn_cast<IndirectSVFGEdge>(edge))</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  {</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  nb |= iedge->getPointsTo();</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span> </div><div class="line"><a name="l00086"></a><span class="lineno"><a class="line" href="classSVF_1_1StoreVFGNode.html#aba7e8b8329caf412a55f5880f68414fe"> 86</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1StoreVFGNode.html#aba7e8b8329caf412a55f5880f68414fe">StoreVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword"></span>{</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  rawstr << <span class="stringliteral">"StoreVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> }</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1CopyVFGNode.html#a09a111ff93faf69c775aab41542ddcc3"> 95</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1CopyVFGNode.html#a09a111ff93faf69c775aab41542ddcc3">CopyVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword"></span>{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getPAGDstNodeID());</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1CopyVFGNode.html#ad86bbc5ec4a9ea226364a84e04724b37"> 102</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1CopyVFGNode.html#ad86bbc5ec4a9ea226364a84e04724b37">CopyVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword"></span>{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  rawstr << <span class="stringliteral">"CopyVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> </div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1CmpVFGNode.html#adba761312556c9a4cfc1ef9e5f3a7c10"> 111</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1CmpVFGNode.html#adba761312556c9a4cfc1ef9e5f3a7c10">CmpVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="keyword"></span>{</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRes()->getId());</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classSVF_1_1CmpVFGNode.html#aa08c4475c47beb0d026acab859d68117"> 118</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1CmpVFGNode.html#aa08c4475c47beb0d026acab859d68117">CmpVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="keyword"></span>{</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  rawstr << <span class="stringliteral">"CmpVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = cmp("</span>;</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">for</span>(CmpVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  it != eit; it++)</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  rawstr << <span class="stringliteral">")]\n"</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">if</span>(res->hasValue())</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  rawstr << <span class="stringliteral">" "</span> << res->getValue()->toString();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1BinaryOPVFGNode.html#a868c1523cc717b69f9c5c3e825a7eb18"> 135</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1BinaryOPVFGNode.html#a868c1523cc717b69f9c5c3e825a7eb18">BinaryOPVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="keyword"></span>{</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRes()->getId());</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> </div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classSVF_1_1BinaryOPVFGNode.html#aa743cf19c5dc91dbb0c7b8981fecc6c4"> 142</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1BinaryOPVFGNode.html#aa743cf19c5dc91dbb0c7b8981fecc6c4">BinaryOPVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="keyword"></span>{</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  rawstr << <span class="stringliteral">"BinaryOPVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = Binary("</span>;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="keywordflow">for</span>(BinaryOPVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  it != eit; it++)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">if</span>(res->hasValue())</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  rawstr << <span class="stringliteral">" "</span> << res->getValue()->toString();</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> </div><div class="line"><a name="l00159"></a><span class="lineno"><a class="line" href="classSVF_1_1UnaryOPVFGNode.html#a446b7922ec2aa5f9a14216bdaec93807"> 159</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1UnaryOPVFGNode.html#a446b7922ec2aa5f9a14216bdaec93807">UnaryOPVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keyword"></span>{</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRes()->getId());</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> }</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1UnaryOPVFGNode.html#ad0b45546c62bdef367149b58f530f89d"> 166</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1UnaryOPVFGNode.html#ad0b45546c62bdef367149b58f530f89d">UnaryOPVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> <span class="keyword"></span>{</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  rawstr << <span class="stringliteral">"UnaryOPVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << res->getId() << <span class="stringliteral">" = Unary("</span>;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">for</span>(UnaryOPVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  it != eit; it++)</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">if</span>(res->hasValue())</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  {</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  rawstr << <span class="stringliteral">" "</span> << res->getValue()->toString();</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span> }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> </div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchVFGNode.html#a83e99b58146bd2d80726622feb303d3f"> 183</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1BranchVFGNode.html#a83e99b58146bd2d80726622feb303d3f">BranchVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> <span class="keyword"></span>{</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#aa7b6a13e52671de8524b130738aeb564">NodeBS</a>();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> }</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span> </div><div class="line"><a name="l00188"></a><span class="lineno"><a class="line" href="classSVF_1_1BranchVFGNode.html#a131fe96308f67b307ea08e645b019e13"> 188</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1BranchVFGNode.html#a131fe96308f67b307ea08e645b019e13">BranchVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span> <span class="keyword"></span>{</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  rawstr << <span class="stringliteral">"BranchVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  rawstr << <span class="stringliteral">"PAGEdge: ["</span> << brstmt->toString() << <span class="stringliteral">"\t"</span>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span> </div><div class="line"><a name="l00197"></a><span class="lineno"><a class="line" href="classSVF_1_1GepVFGNode.html#ab1a0ebf945b933e7d92ff5ca5cfb657f"> 197</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1GepVFGNode.html#ab1a0ebf945b933e7d92ff5ca5cfb657f">GepVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="keyword"></span>{</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getPAGDstNodeID());</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> </div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1GepVFGNode.html#ad27376633c939952878d5d73621ec638"> 204</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1GepVFGNode.html#ad27376633c939952878d5d73621ec638">GepVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="keyword"></span>{</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  rawstr << <span class="stringliteral">"GepVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#a600752db995e57d49894c3f89e87cb50"> 213</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1PHIVFGNode.html#a600752db995e57d49894c3f89e87cb50">PHIVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="keyword"></span>{</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRes()->getId());</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> </div><div class="line"><a name="l00220"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#a7fb9cbed3718922cd81b18d069c79aea"> 220</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1PHIVFGNode.html#a7fb9cbed3718922cd81b18d069c79aea">PHIVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> <span class="keyword"></span>{</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  rawstr << <span class="stringliteral">"PHIVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  rawstr << <span class="stringliteral">"PAGNode: ["</span> << res->getId() << <span class="stringliteral">" = PHI("</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">for</span>(PHIVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  it != eit; it++)</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">if</span>(res->hasValue())</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  {</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  rawstr << <span class="stringliteral">" "</span> << res->getValue()->toString();</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> </div><div class="line"><a name="l00238"></a><span class="lineno"><a class="line" href="classSVF_1_1IntraPHIVFGNode.html#a145413d87e9174b5eb70b871b9dfa13e"> 238</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1IntraPHIVFGNode.html#a145413d87e9174b5eb70b871b9dfa13e">IntraPHIVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="keyword"></span>{</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  rawstr << <span class="stringliteral">"IntraPHIVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  rawstr << <span class="stringliteral">"PAGNode: ["</span> << res->getId() << <span class="stringliteral">" = PHI("</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">for</span>(PHIVFGNode::OPVers::const_iterator it = opVerBegin(), eit = opVerEnd();</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  it != eit; it++)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  rawstr << it->second->getId() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  rawstr << <span class="stringliteral">")]\t"</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keywordflow">if</span>(res->hasValue())</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  rawstr << <span class="stringliteral">" "</span> << res->getValue()->toString();</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1AddrVFGNode.html#a9811e91aab1b49ca943ae0d382df2c1a"> 255</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1AddrVFGNode.html#a9811e91aab1b49ca943ae0d382df2c1a">AddrVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keyword"></span>{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getPAGDstNodeID());</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> </div><div class="line"><a name="l00262"></a><span class="lineno"><a class="line" href="classSVF_1_1AddrVFGNode.html#ac26fbce400355f43fdc22ad88a8d9067"> 262</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1AddrVFGNode.html#ac26fbce400355f43fdc22ad88a8d9067">AddrVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span> <span class="keyword"></span>{</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  rawstr << <span class="stringliteral">"AddrVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  rawstr << getPAGEdge()->toString();</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> </div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1ArgumentVFGNode.html#a3c10cd63e18f79ccc66f4687d05cb8c5"> 272</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ArgumentVFGNode.html#a3c10cd63e18f79ccc66f4687d05cb8c5">ArgumentVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> <span class="keyword"></span>{</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  rawstr << <span class="stringliteral">"ArgumentVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  rawstr << param->toString();</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00281"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualParmVFGNode.html#ac5bfddb8123fbe57590fcf2dc62c153b"> 281</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1ActualParmVFGNode.html#ac5bfddb8123fbe57590fcf2dc62c153b">ActualParmVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span> <span class="keyword"></span>{</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getParam()->getId());</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00288"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualParmVFGNode.html#a60d6ce4c4fe2cf54be45e58b2b93c9f6"> 288</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ActualParmVFGNode.html#a60d6ce4c4fe2cf54be45e58b2b93c9f6">ActualParmVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keyword"></span>{</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  rawstr << <span class="stringliteral">"ActualParmVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  rawstr << <span class="stringliteral">"CS["</span> << getCallSite()->getCallSite()->getSourceLoc() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  rawstr << param->toString();</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> }</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalParmVFGNode.html#a84792b8a380dc157487374ddaa24d62a"> 298</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1FormalParmVFGNode.html#a84792b8a380dc157487374ddaa24d62a">FormalParmVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span> <span class="keyword"></span>{</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getParam()->getId());</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalParmVFGNode.html#ac4e695d6ee7bb7c5ed4e273567e7c1cc"> 305</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1FormalParmVFGNode.html#ac4e695d6ee7bb7c5ed4e273567e7c1cc">FormalParmVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keyword"></span>{</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  rawstr << <span class="stringliteral">"FormalParmVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  rawstr << <span class="stringliteral">"Fun["</span> << getFun()->getName() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  rawstr << param->toString();</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> }</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> </div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualRetVFGNode.html#aa188986fc1aee4a7f2586a1ff479063b"> 315</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1ActualRetVFGNode.html#aa188986fc1aee4a7f2586a1ff479063b">ActualRetVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> <span class="keyword"></span>{</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRev()->getId());</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="classSVF_1_1ActualRetVFGNode.html#a4d1e7df32604becd2e2b60fe2e5cfbfa"> 322</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ActualRetVFGNode.html#a4d1e7df32604becd2e2b60fe2e5cfbfa">ActualRetVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> <span class="keyword"></span>{</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  rawstr << <span class="stringliteral">"ActualRetVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  rawstr << <span class="stringliteral">"CS["</span> << getCallSite()->getCallSite()->getSourceLoc() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  rawstr << param->toString();</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalRetVFGNode.html#ab0962e63ea87752caa136a169fa8f1c8"> 333</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1FormalRetVFGNode.html#ab0962e63ea87752caa136a169fa8f1c8">FormalRetVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keyword"></span>{</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getRet()->getId());</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> }</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span> </div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalRetVFGNode.html#ab1ae2339d7408d9156cdfe5ab4559e66"> 340</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1FormalRetVFGNode.html#ab1ae2339d7408d9156cdfe5ab4559e66">FormalRetVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> <span class="keyword"></span>{</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  rawstr << <span class="stringliteral">"FormalRetVFGNode ID: "</span> << getId() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  rawstr << <span class="stringliteral">"Fun["</span> << getFun()->getName() << <span class="stringliteral">"]"</span>;</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  rawstr << param->toString();</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> }</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="classSVF_1_1InterPHIVFGNode.html#aff35aebdc8d955df160e51da7b666a7e"> 351</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1InterPHIVFGNode.html#aff35aebdc8d955df160e51da7b666a7e">InterPHIVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keyword"></span>{</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keywordflow">if</span>(isFormalParmPHI())</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  rawstr << <span class="stringliteral">"FormalParmPHI ID: "</span> << getId() << <span class="stringliteral">" PAGNode ID: "</span> << res->getId() << <span class="stringliteral">"\n"</span> << res->getValue()->toString();</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  rawstr << <span class="stringliteral">"ActualRetPHI ID: "</span> << getId() << <span class="stringliteral">" PAGNode ID: "</span> << res->getId() << <span class="stringliteral">"\n"</span> << res->getValue()->toString();</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> </div><div class="line"><a name="l00362"></a><span class="lineno"><a class="line" href="classSVF_1_1NullPtrVFGNode.html#ae54d1078c5b909b9142189b8558f382e"> 362</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> <a class="code" href="classSVF_1_1NullPtrVFGNode.html#ae54d1078c5b909b9142189b8558f382e">NullPtrVFGNode::getDefSVFVars</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keyword"></span>{</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> nb;</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  nb.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(getPAGNode()->getId());</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">return</span> nb;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1NullPtrVFGNode.html#a75c8b89a34bfd89a4af2c699cdb626b9"> 369</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1NullPtrVFGNode.html#a75c8b89a34bfd89a4af2c699cdb626b9">NullPtrVFGNode::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keyword"></span>{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  rawstr << <span class="stringliteral">"NullPtrVFGNode ID: "</span> << getId();</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  rawstr << <span class="stringliteral">" PAGNode ID: "</span> << node->getId() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="classSVF_1_1VFGEdge.html#a8f4bec008af7cd1a89870715eaa91a7b"> 379</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1VFGEdge.html#a8f4bec008af7cd1a89870715eaa91a7b">VFGEdge::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keyword"></span>{</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  rawstr << <span class="stringliteral">"VFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> }</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div><div class="line"><a name="l00387"></a><span class="lineno"><a class="line" href="classSVF_1_1DirectSVFGEdge.html#aa8d70214eb0242c3f2baaa506c12852c"> 387</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1DirectSVFGEdge.html#aa8d70214eb0242c3f2baaa506c12852c">DirectSVFGEdge::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="keyword"></span>{</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  rawstr << <span class="stringliteral">"DirectVFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00395"></a><span class="lineno"><a class="line" href="classSVF_1_1IntraDirSVFGEdge.html#a1c8dc17717409aa42749181aafd155aa"> 395</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html#a1c8dc17717409aa42749181aafd155aa">IntraDirSVFGEdge::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="keyword"></span>{</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  rawstr << <span class="stringliteral">"IntraDirSVFGEdge: ["</span> << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div><div class="line"><a name="l00403"></a><span class="lineno"><a class="line" href="classSVF_1_1CallDirSVFGEdge.html#af07decd05375f56baa4a1c4fe70bc3f1"> 403</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1CallDirSVFGEdge.html#af07decd05375f56baa4a1c4fe70bc3f1">CallDirSVFGEdge::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> <span class="keyword"></span>{</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  rawstr << <span class="stringliteral">"CallDirSVFGEdge CallSite ID: "</span> << getCallSiteId() << <span class="stringliteral">" ["</span>;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  rawstr << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> }</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div><div class="line"><a name="l00412"></a><span class="lineno"><a class="line" href="classSVF_1_1RetDirSVFGEdge.html#a6282c2619d843cf90575886a0ef81edf"> 412</a></span> <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1RetDirSVFGEdge.html#a6282c2619d843cf90575886a0ef81edf">RetDirSVFGEdge::toString</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> <span class="keyword"></span>{</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  rawstr << <span class="stringliteral">"RetDirSVFGEdge CallSite ID: "</span> << getCallSiteId() << <span class="stringliteral">" ["</span>;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  rawstr << getDstID() << <span class="stringliteral">"<--"</span> << getSrcID() << <span class="stringliteral">"]\t"</span>;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> }</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> </div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> </div><div class="line"><a name="l00423"></a><span class="lineno"><a class="line" href="classSVF_1_1FormalRetVFGNode.html#a732fe0036d307a1dace2631219de38ef"> 423</a></span> <a class="code" href="classSVF_1_1FormalRetVFGNode.html#a0155a71f08dfb1fb43f054084b2380c6">FormalRetVFGNode::FormalRetVFGNode</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* <a class="code" href="cJSON_8cpp.html#ab6e2ea6dc7bd57d1483413449998230a">n</a>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* f) :</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="classSVF_1_1ArgumentVFGNode.html">ArgumentVFGNode</a>(id, n, FRet), fun(f)</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> {</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> }</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div><div class="line"><a name="l00428"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#add1ed5dfc7fbb095e2bdb7ff1e2658ef"> 428</a></span> <a class="code" href="classSVF_1_1PHIVFGNode.html#add1ed5dfc7fbb095e2bdb7ff1e2658ef">PHIVFGNode::PHIVFGNode</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* r,<a class="code" href="classSVF_1_1VFGNode.html#a99a54cf322b0eec3a1ef109ce5f2db75">VFGNodeK</a> k): <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>(id, k), res(r)</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span> </div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div><div class="line"><a name="l00441"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a8ba98bb3d888ec5ff40f511da14b37bc"> 441</a></span> <a class="code" href="classSVF_1_1VFG.html#a8ba98bb3d888ec5ff40f511da14b37bc">VFG::VFG</a>(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* cg, <a class="code" href="classSVF_1_1VFG.html#ac2e2f555975063da3fa1932ac35802c6">VFGK</a> k): totalVFGNode(0), callgraph(cg), pag(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>::getPAG()), kind(k)</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> {</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCreate VFG Top Level Node\n"</span>));</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <a class="code" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862">addVFGNodes</a>();</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span> </div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCreate SVFG Direct Edge\n"</span>));</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <a class="code" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0">connectDirectVFGEdges</a>();</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span> }</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span> </div><div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#af5005136743913d760d7402bbd308c69"> 454</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#af5005136743913d760d7402bbd308c69">VFG::destroy</a>()</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span> {</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> </div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div><div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862"> 463</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#a3544cc0380964f238c964a0e7b417862">VFG::addVFGNodes</a>()</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="comment">// initialize dummy definition null pointers in order to uniform the construction</span></div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="comment">// to be noted for black hole pointer it has already has address edge connected,</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="comment">// and its definition will be set when processing addr SVFIR edge.</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <a class="code" href="classSVF_1_1VFG.html#a59bc855eb8591d88e0898e14d4f4b607">addNullPtrVFGNode</a>(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>()));</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span> </div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="comment">// initialize address nodes</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& addrs = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a0a9a0f650e864e89b7cbb3dc8c8aa197">SVFStmt::Addr</a>);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  addrs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  <a class="code" href="classSVF_1_1VFG.html#aca2b1493bd712bdc6618de995a81e5af">addAddrVFGNode</a>(SVFUtil::cast<AddrStmt>(*iter));</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="comment">// initialize copy nodes</span></div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& copys = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad3469cdfb64f05163b5310b731b221da">SVFStmt::Copy</a>);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = copys.begin(), eiter =</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  copys.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>* edge = SVFUtil::cast<CopyStmt>(*iter);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  assert(!<a class="code" href="classSVF_1_1VFG.html#a8ddf15d89a1b11a7f7720b671f4f0295">isPhiCopyEdge</a>(edge) && <span class="stringliteral">"Copy edges can not be a PhiNode (or from PhiNode)"</span>);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  <a class="code" href="classSVF_1_1VFG.html#a49d35213a281859ca64398760c485a85">addCopyVFGNode</a>(edge);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  }</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="comment">// initialize gep nodes</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& ngeps = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a20d960c19118d1ed319e0dbea94405e8">SVFStmt::Gep</a>);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  ngeps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  {</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <a class="code" href="classSVF_1_1VFG.html#a4fb321fb0ff2a06c1065506552b862aa">addGepVFGNode</a>(SVFUtil::cast<GepStmt>(*iter));</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="comment">// initialize load nodes</span></div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& loads = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a62ac8480c43fcc657c631ec0003b15d5">SVFStmt::Load</a>);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  loads.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <a class="code" href="classSVF_1_1VFG.html#a373e7066630719ffb7c62681f2c2a74e">addLoadVFGNode</a>(SVFUtil::cast<LoadStmt>(*iter));</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span> </div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="comment">// initialize store nodes</span></div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& stores = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">SVFStmt::Store</a>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  stores.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  {</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <a class="code" href="classSVF_1_1VFG.html#a13f7caf44741db3b0e8a44b13d8931f5">addStoreVFGNode</a>(SVFUtil::cast<StoreStmt>(*iter));</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  }</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> </div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& forks = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd">SVFStmt::ThreadFork</a>);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = forks.begin(), eiter =</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  forks.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  {</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* forkedge = SVFUtil::cast<TDForkPE>(*iter);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <a class="code" href="classSVF_1_1VFG.html#a6b373385fa30c83c24844c41c2f05e53">addActualParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>(),forkedge-><a class="code" href="classSVF_1_1CallPE.html#ab548c22dfbfeeaeb8ffe83417b396c09">getCallSite</a>());</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="comment">// initialize actual parameter nodes</span></div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordflow">for</span>(SVFIR::CSToArgsListMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7">getCallSiteArgsMap</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a346b9300ad16ef65e3ab4e11f88193a7">getCallSiteArgsMap</a>().end(); it !=eit; ++it)</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="keywordflow">for</span>(SVFIR::SVFVarList::iterator pit = it->second.begin(), epit = it->second.end(); pit!=epit; ++pit)</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  {</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* pagNode = *pit;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(pagNode))</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <a class="code" href="classSVF_1_1VFG.html#a6b373385fa30c83c24844c41c2f05e53">addActualParmVFGNode</a>(pagNode,it->first);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  }</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  }</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span> </div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="comment">// initialize actual return nodes (callsite return)</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">for</span>(SVFIR::CSToRetMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a650b3931af337a92ffcb5dad5ab47b22">getCallSiteRets</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a650b3931af337a92ffcb5dad5ab47b22">getCallSiteRets</a>().end(); it !=eit; ++it)</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  {</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(it->second) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#ab5b63b4f6317bfb5875f2b977bcf26a4">hasDef</a>(it->second))</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> </div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  <a class="code" href="classSVF_1_1VFG.html#a63994c100593efda25dbd50646dfe0dc">addActualRetVFGNode</a>(it->second,it->first->getCallICFGNode());</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  }</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> </div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="comment">// initialize formal parameter nodes</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">for</span>(SVFIR::FunToArgsListMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a615c056c876b59d1fd174a2ac9ade27c">getFunArgsMap</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a615c056c876b59d1fd174a2ac9ade27c">getFunArgsMap</a>().end(); it !=eit; ++it)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = it->first;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">for</span>(SVFIR::SVFVarList::iterator pit = it->second.begin(), epit = it->second.end(); pit!=epit; ++pit)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* param = *pit;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(param) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#a88f6468b9b43bbb06ef757d884580a50">hasBlackHoleConstObjAddrAsDef</a>(param))</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <a class="code" href="classSVF_1_1VFG.html#ade3f735b3c7b1a53cab3d67cd9f7b874">CallPESet</a> callPEs;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">if</span> (param-><a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>))</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::const_iterator cit = param-><a class="code" href="classSVF_1_1SVFVar.html#a893890649ae7d8e275dd823e941aa39b">getIncomingEdgesBegin</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>), ecit =</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  param-><a class="code" href="classSVF_1_1SVFVar.html#af1cf24ab50e0d86c9d0f9bd5744b4c10">getIncomingEdgesEnd</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>); cit != ecit; ++cit)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::cast<CallPE>(*cit);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(callPE-><a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>()))</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  callPEs.insert(callPE);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  }</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  }</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <a class="code" href="classSVF_1_1VFG.html#afdb1560eecf692fb646d412dc760088d">addFormalParmVFGNode</a>(param,func,callPEs);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  }</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span> </div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keywordflow">if</span> (func-><a class="code" href="classSVF_1_1SVFFunction.html#ae578002917b4ccbf28f172dba30d1d58">isVarArg</a>())</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* varParam = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a8b10c318674a47035d617b3ade4f069b">getVarargNode</a>(func));</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(varParam) == <span class="keyword">false</span> || <a class="code" href="classSVF_1_1VFG.html#a88f6468b9b43bbb06ef757d884580a50">hasBlackHoleConstObjAddrAsDef</a>(varParam))</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> </div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <a class="code" href="classSVF_1_1VFG.html#ade3f735b3c7b1a53cab3d67cd9f7b874">CallPESet</a> callPEs;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keywordflow">if</span> (varParam-><a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>))</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keywordflow">for</span>(SVFStmt::SVFStmtSetTy::const_iterator cit = varParam-><a class="code" href="classSVF_1_1SVFVar.html#a893890649ae7d8e275dd823e941aa39b">getIncomingEdgesBegin</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>),</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  ecit = varParam-><a class="code" href="classSVF_1_1SVFVar.html#af1cf24ab50e0d86c9d0f9bd5744b4c10">getIncomingEdgesEnd</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>); cit!=ecit; ++cit)</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  {</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::cast<CallPE>(*cit);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(callPE-><a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>()))</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  callPEs.insert(callPE);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  }</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  }</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <a class="code" href="classSVF_1_1VFG.html#afdb1560eecf692fb646d412dc760088d">addFormalParmVFGNode</a>(varParam,func,callPEs);</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  }</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="comment">// initialize formal return nodes (callee return)</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">for</span> (SVFIR::FunToRetMap::iterator it = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abd1bb12776dc9a17863a52ce2cd31958">getFunRets</a>().begin(), eit = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#abd1bb12776dc9a17863a52ce2cd31958">getFunRets</a>().end(); it != eit; ++it)</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  {</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = it->first;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* uniqueFunRetNode = it->second;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <a class="code" href="classSVF_1_1VFG.html#abf966182c28f0521dcd161aa299e453d">RetPESet</a> retPEs;</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <span class="keywordflow">if</span> (uniqueFunRetNode-><a class="code" href="classSVF_1_1SVFVar.html#a9b00f9b5f8ad2422162f4396e2d8fa42">hasOutgoingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>))</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::const_iterator cit = uniqueFunRetNode-><a class="code" href="classSVF_1_1SVFVar.html#a9e40eafe55a2c1448b830b56ae72e17f">getOutgoingEdgesBegin</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>),</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  ecit = uniqueFunRetNode-><a class="code" href="classSVF_1_1SVFVar.html#aa5176fce9746bc585d43ebb4c8c824e5">getOutgoingEdgesEnd</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>);</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  cit != ecit; ++cit)</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = SVFUtil::cast<RetPE>(*cit);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(retPE-><a class="code" href="classSVF_1_1AssignStmt.html#a973a2b79da223275ed6a1831837b89c7">getLHSVar</a>()))</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  retPEs.insert(retPE);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  }</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span> </div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(uniqueFunRetNode))</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <a class="code" href="classSVF_1_1VFG.html#aae3bddc73e39d96fcc97d56ea3dec373">addFormalRetVFGNode</a>(uniqueFunRetNode, func, retPEs);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span> </div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  <span class="comment">// initialize llvm phi nodes (phi of top level pointers)</span></div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& phis = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3cd98eeb47c8475e7ee64480dcdee9">SVFStmt::Phi</a>);</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = phis.begin(), eiter =</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  phis.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  {</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>* edge = SVFUtil::cast<PhiStmt>(*iter);</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1MultiOpndStmt.html#a00a14ad8f49912b876fd9d729fea4601">getRes</a>()))</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <a class="code" href="classSVF_1_1VFG.html#afc4268e4abd973aecd29451c99172662">addIntraPHIVFGNode</a>(edge);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="comment">// initialize select statement</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& selects = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad9397ec243a61992dc2b5681bea587fa">SVFStmt::Select</a>);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = selects.begin(), eiter =</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  selects.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MultiOpndStmt.html">MultiOpndStmt</a>* edge = SVFUtil::cast<MultiOpndStmt>(*iter);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1MultiOpndStmt.html#a00a14ad8f49912b876fd9d729fea4601">getRes</a>()))</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <a class="code" href="classSVF_1_1VFG.html#afc4268e4abd973aecd29451c99172662">addIntraPHIVFGNode</a>(edge);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="comment">// initialize llvm binary nodes (binary operators)</span></div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& binaryops = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad58f5e59c55e1ffd23b83d16224fed13">SVFStmt::BinaryOp</a>);</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = binaryops.begin(), eiter =</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  binaryops.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  {</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>* edge = SVFUtil::cast<BinaryOPStmt>(*iter);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1MultiOpndStmt.html#a00a14ad8f49912b876fd9d729fea4601">getRes</a>()))</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  <a class="code" href="classSVF_1_1VFG.html#ac79516fc4d9136241d708f9df5c73262">addBinaryOPVFGNode</a>(edge);</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  }</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="comment">// initialize llvm unary nodes (unary operators)</span></div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& unaryops = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad2a5e6fe0f2b5fefb53abb9e91c57688">SVFStmt::UnaryOp</a>);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = unaryops.begin(), eiter =</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  unaryops.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>* edge = SVFUtil::cast<UnaryOPStmt>(*iter);</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1UnaryOPStmt.html#a919db9b8c9287c3802f563840b56c4f1">getRes</a>()))</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <a class="code" href="classSVF_1_1VFG.html#a65c88a6c20380b715ac8b6c31e68afed">addUnaryOPVFGNode</a>(edge);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  }</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  <span class="comment">// initialize llvm unary nodes (unary operators)</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& brs = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad52703e3ec09b6a4f565e5d82279b6a3">SVFStmt::Branch</a>);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = brs.begin(), eiter =</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  brs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* edge = SVFUtil::cast<BranchStmt>(*iter);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1BranchStmt.html#a2c6fe09027838f9e0ad9ab8193ce8e9b">getBranchInst</a>()))</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <a class="code" href="classSVF_1_1VFG.html#a18afc4baf33eb700e0510928016019f5">addBranchVFGNode</a>(edge);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  }</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="comment">// initialize llvm cmp nodes (comparision)</span></div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& cmps = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a610d6662d1814cffbf23db29e7e620c0">SVFStmt::Cmp</a>);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = cmps.begin(), eiter =</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  cmps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>* edge = SVFUtil::cast<CmpStmt>(*iter);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1VFG.html#a85360d0242ea7d2ec7da670f2cc17962">isInterestedPAGNode</a>(edge-><a class="code" href="classSVF_1_1MultiOpndStmt.html#a00a14ad8f49912b876fd9d729fea4601">getRes</a>()))</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <a class="code" href="classSVF_1_1VFG.html#a6c2280052b44ff7029cf4b98712c374b">addCmpVFGNode</a>(edge);</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  }</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span> }</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div><div class="line"><a name="l00675"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2"> 675</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">VFG::addIntraDirectVFEdge</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> dstId)</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span> {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <a class="code" href="classSVF_1_1VFG.html#a43b0c126c2e32cb3d286a78b14e09a96">checkIntraEdgeParents</a>(srcNode, dstNode);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">hasIntraVFGEdge</a>(srcNode, dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">VFGEdge::IntraDirectVF</a>);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keywordflow">if</span> (edge != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  assert(edge-><a class="code" href="classSVF_1_1VFGEdge.html#a8777555f00696706de250159b920d14b">isDirectVFGEdge</a>() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">if</span>(srcNode!=dstNode)</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  {</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html">IntraDirSVFGEdge</a>* directEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1IntraDirSVFGEdge.html">IntraDirSVFGEdge</a>(srcNode,dstNode);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(directEdge) ? directEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  }</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> }</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span> </div><div class="line"><a name="l00701"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aa01f63b17acdd52122a7f1ade329ccea"> 701</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#aa01f63b17acdd52122a7f1ade329ccea">VFG::addCallEdge</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> dstId, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span> {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">hasInterVFGEdge</a>(srcNode, dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a8383c27feab3f1acc67cacef9744c04a">VFGEdge::CallDirVF</a>, csId);</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="keywordflow">if</span> (edge != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  {</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  assert(edge-><a class="code" href="classSVF_1_1VFGEdge.html#a92e3da59f7f5a693945b9a93f169da04">isCallDirectVFGEdge</a>() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  }</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  {</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>* callEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>(srcNode,dstNode,csId);</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(callEdge) ? callEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> }</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span> </div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2"> 721</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2">VFG::addRetEdge</a>(<a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> srcId, <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> dstId, <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span> {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* srcNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(srcId);</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dstNode = <a class="code" href="classSVF_1_1VFG.html#a915fa50effaeea10716b86528b15c6dc">getVFGNode</a>(dstId);</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">hasInterVFGEdge</a>(srcNode, dstNode, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a8288c583cfcbfdf9aa2ac2103c0e7191">VFGEdge::RetDirVF</a>, csId);</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keywordflow">if</span> (edge != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  {</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  assert(edge-><a class="code" href="classSVF_1_1VFGEdge.html#a49cbf2a714c9b965b19452d266cd8bdf">isRetDirectVFGEdge</a>() && <span class="stringliteral">"this should be a direct value flow edge!"</span>);</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  {</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>  <a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>* retEdge = <span class="keyword">new</span> <a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>(srcNode,dstNode,csId);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">addVFGEdge</a>(retEdge) ? retEdge : <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  }</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span> }</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span> </div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span> </div><div class="line"><a name="l00742"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0"> 742</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#adedaba0713164e10ce6273b2947535e0">VFG::connectDirectVFGEdges</a>()</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span> {</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span> </div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; ++it)</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  {</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> nodeId = it->first;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node = it->second;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span> </div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  {</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span>(SVFUtil::isa<AddrVFGNode>(stmtNode))</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <span class="keywordflow">if</span> (stmtNode->getPAGSrcNode()->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(stmtNode->getPAGSrcNode()), nodeId);</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span> </div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">if</span>(SVFUtil::isa<StoreVFGNode>(stmtNode) && (stmtNode->getPAGDstNode()->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>))</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(stmtNode->getPAGDstNode()), nodeId);</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  }</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span> </div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  }</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phiNode = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  {</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keywordflow">for</span> (PHIVFGNode::OPVers::const_iterator it = phiNode->opVerBegin(), eit = phiNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  {</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  <span class="keywordflow">if</span> (it->second->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>  }</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>  }</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* binaryNode = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  {</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">for</span> (BinaryOPVFGNode::OPVers::const_iterator it = binaryNode->opVerBegin(), eit = binaryNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  {</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keywordflow">if</span> (it->second->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  }</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  }</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* unaryNode = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  {</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">for</span> (UnaryOPVFGNode::OPVers::const_iterator it = unaryNode->opVerBegin(), eit = unaryNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  {</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <span class="keywordflow">if</span> (it->second->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  }</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  }</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmpNode = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  {</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keywordflow">for</span> (CmpVFGNode::OPVers::const_iterator it = cmpNode->opVerBegin(), eit = cmpNode->opVerEnd(); it != eit; it++)</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  {</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <span class="keywordflow">if</span> (it->second->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(it->second), nodeId);</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  }</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  }</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BranchVFGNode.html">BranchVFGNode</a>* branchNode = SVFUtil::dyn_cast<BranchVFGNode>(node))</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  {</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* cond = branchNode->getBranchStmt()->getCondition();</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">if</span> (cond-><a class="code" href="classSVF_1_1SVFVar.html#a091ef22d4fc428985d604b03f287a941">isConstDataOrAggDataButNotNullPtr</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(cond), nodeId);</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  }</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* actualParm = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  {</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">if</span> (actualParm->getParam()->isConstDataOrAggDataButNotNullPtr() == <span class="keyword">false</span>)</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(actualParm->getParam()), nodeId);</div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  }</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* formalParm = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  {</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <span class="keywordflow">for</span>(CallPESet::const_iterator it = formalParm->callPEBegin(), eit = formalParm->callPEEnd();</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  it!=eit; ++it)</div><div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  {</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = (*it)-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>();</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* acutalParm = <a class="code" href="classSVF_1_1VFG.html#a6bbfe457dcc7104e6928323499ea964e">getActualParmVFGNode</a>((*it)->getRHSVar(),cs);</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  <a class="code" href="classSVF_1_1VFG.html#a6fd24c001a6daedf591974ba27140461">addInterEdgeFromAPToFP</a>(acutalParm,formalParm,<a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(cs, formalParm-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  }</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  }</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* calleeRet = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  {</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <a class="code" href="classSVF_1_1VFG.html#a3c97d77bc0348471d6c098d5655f15b2">addIntraDirectVFEdge</a>(<a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(calleeRet->getRet()), nodeId);</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span> </div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="keywordflow">for</span>(RetPESet::const_iterator it = calleeRet->retPEBegin(), eit = calleeRet->retPEEnd(); it!=eit; ++it)</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  {</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* callsiteRev = <a class="code" href="classSVF_1_1VFG.html#a0b072e8e45899b89da0a466140563c38">getActualRetVFGNode</a>((*it)->getLHSVar());</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* retBlockNode = (*it)-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>();</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#aa41516cdd2be5066adf22798a4fe2213">getCallICFGNode</a>(retBlockNode->getCallSite());</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  <a class="code" href="classSVF_1_1VFG.html#abd05b599b383c759455aff99963b7b41">addInterEdgeFromFRToAR</a>(calleeRet,callsiteRev, <a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(callBlockNode, calleeRet-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  }</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  }</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  }</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span> </div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a153d42a480ef1763ad59fd7258ac3ac5">Options::EnableThreadCallGraph</a>)</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  {</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& forks = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd">SVFStmt::ThreadFork</a>);</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = forks.begin(), eiter =</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  forks.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* forkedge = SVFUtil::cast<TDForkPE>(*iter);</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* acutalParm = <a class="code" href="classSVF_1_1VFG.html#a6bbfe457dcc7104e6928323499ea964e">getActualParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>(),forkedge-><a class="code" href="classSVF_1_1CallPE.html#ab548c22dfbfeeaeb8ffe83417b396c09">getCallSite</a>());</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* formalParm = <a class="code" href="classSVF_1_1VFG.html#a75eb519e4f89a116db98fccb263af4d6">getFormalParmVFGNode</a>(forkedge-><a class="code" href="classSVF_1_1AssignStmt.html#a973a2b79da223275ed6a1831837b89c7">getLHSVar</a>());</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <a class="code" href="classSVF_1_1VFG.html#a6fd24c001a6daedf591974ba27140461">addInterEdgeFromAPToFP</a>(acutalParm,formalParm,<a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(forkedge-><a class="code" href="classSVF_1_1CallPE.html#ab548c22dfbfeeaeb8ffe83417b396c09">getCallSite</a>(), formalParm-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  }</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>& joins = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a3c3f8883c2d3b50aef6331d5da97ffb0">SVFStmt::ThreadJoin</a>);</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = joins.begin(), eiter =</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  joins.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  {</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* joinedge = SVFUtil::cast<TDJoinPE>(*iter);</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> callsiteRev = <a class="code" href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">getDef</a>(joinedge-><a class="code" href="classSVF_1_1AssignStmt.html#a973a2b79da223275ed6a1831837b89c7">getLHSVar</a>());</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* calleeRet = <a class="code" href="classSVF_1_1VFG.html#ab7ba9d179504165f277d347a7cb9f5d8">getFormalRetVFGNode</a>(joinedge-><a class="code" href="classSVF_1_1AssignStmt.html#ad03d28d16754c9049dd4d0ad3b6c1e28">getRHSVar</a>());</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <a class="code" href="classSVF_1_1VFG.html#a27ac8d60de7be75e831b4a28f8f8f1d2">addRetEdge</a>(calleeRet->getId(),callsiteRev, <a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(joinedge-><a class="code" href="classSVF_1_1RetPE.html#ab03f10c0375846a733f3257736a84f9d">getCallSite</a>(), calleeRet-><a class="code" href="classSVF_1_1ICFGNode.html#ae526280cca2d6cbb2868c80461bc16da">getFun</a>()));</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  }</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span> }</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span> </div><div class="line"><a name="l00866"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f"> 866</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">VFG::hasIntraVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span> {</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  {</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  assert(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  }</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span> }</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span> </div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span> </div><div class="line"><a name="l00884"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aead3b463d9aa2fae5845d97896bd18ba"> 884</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#aead3b463d9aa2fae5845d97896bd18ba">VFG::hasThreadVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span> {</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,kind);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  {</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  assert(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  }</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span> }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span> </div><div class="line"><a name="l00901"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9"> 901</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ad86631f70bd702b5635bdbeab7d884b9">VFG::hasInterVFGEdge</a>(<a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>,<a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId)</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span> {</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a> edge(src,dst,<a class="code" href="classSVF_1_1VFGEdge.html#a30c07e8afb0853d4b46cfa722d912650">VFGEdge::makeEdgeFlagWithInvokeID</a>(kind,csId));</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* outEdge = src-><a class="code" href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">hasOutgoingEdge</a>(&edge);</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* inEdge = dst-><a class="code" href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">hasIncomingEdge</a>(&edge);</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">if</span> (outEdge && inEdge)</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  {</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  assert(outEdge == inEdge && <span class="stringliteral">"edges not match"</span>);</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="keywordflow">return</span> outEdge;</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  }</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span> }</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span> </div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span> </div><div class="line"><a name="l00919"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50"> 919</a></span> <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* <a class="code" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50">VFG::getIntraVFGEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* src, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* dst, <a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5">VFGEdge::VFGEdgeK</a> <a class="code" href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">kind</a>)</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span> {</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">hasIntraVFGEdge</a>(const_cast<VFGNode*>(src),const_cast<VFGNode*>(dst),kind);</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> }</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span> </div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span> </div><div class="line"><a name="l00928"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aee3d0c4ed32bde425f33281f248b7dd2"> 928</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#aee3d0c4ed32bde425f33281f248b7dd2">VFG::dump</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>& file, <span class="keywordtype">bool</span> simple)</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span> {</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <a class="code" href="classllvm_1_1GraphPrinter.html#af6ed328e74882d2b5e2b4039cb836928">GraphPrinter::WriteGraphToFile</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>(), file, <span class="keyword">this</span>, simple);</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span> }</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span> </div><div class="line"><a name="l00936"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#ae4350f68e960bfef87f44587628b1929"> 936</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#ae4350f68e960bfef87f44587628b1929">VFG::view</a>()</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span> {</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <a class="code" href="namespacellvm.html#a470c5592e4cd36a22901d15832b9c41b">llvm::ViewGraph</a>(<span class="keyword">this</span>, <span class="stringliteral">"Value Flow Graph"</span>);</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span> }</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span> </div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span> </div><div class="line"><a name="l00942"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a0c0a7c8f0bd27bc9e88ce54c0809b11b"> 942</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#a0c0a7c8f0bd27bc9e88ce54c0809b11b">VFG::updateCallGraph</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>* pta)</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span> {</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  <a class="code" href="classSVF_1_1VFG.html#a0bdac7337a393ad2e21a33ec1978ca3f">VFGEdgeSetTy</a> vfEdgesAtIndCallSite;</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  PointerAnalysis::CallEdgeMap::const_iterator iter = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>().begin();</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  PointerAnalysis::CallEdgeMap::const_iterator eiter = pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#a1ca30dfa42702071b65d363c76d25cbe">getIndCallMap</a>().end();</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <span class="keywordflow">for</span> (; iter != eiter; iter++)</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  {</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* newcs = iter->first;</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  assert(newcs-><a class="code" href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">isIndirectCall</a>() && <span class="stringliteral">"this is not an indirect call?"</span>);</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ac1422cd8b449fdb4a1f7c539364e4c41">PointerAnalysis::FunctionSet</a> & functions = iter->second;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <span class="keywordflow">for</span> (PointerAnalysis::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  {</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* func = *func_iter;</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>  <a class="code" href="classSVF_1_1VFG.html#aa055ce3c4fe1cde5529cd63dd1ef2ed6">connectCallerAndCallee</a>(newcs, func, vfEdgesAtIndCallSite);</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>  }</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>  }</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span> }</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span> </div><div class="line"><a name="l00964"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#aa055ce3c4fe1cde5529cd63dd1ef2ed6"> 964</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1VFG.html#aa055ce3c4fe1cde5529cd63dd1ef2ed6">VFG::connectCallerAndCallee</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee, <a class="code" href="classSVF_1_1VFG.html#a0bdac7337a393ad2e21a33ec1978ca3f">VFGEdgeSetTy</a>& edges)</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span> {</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> * <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a> = <a class="code" href="classSVF_1_1SVFIR.html#a37cfa2aa4e7b98ef9dc8179f581a2362">SVFIR::getPAG</a>();</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <a class="code" href="classSVF_1_1ICFG.html">ICFG</a> * icfg = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>();</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> csId = <a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(callBlockNode, callee);</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = icfg-><a class="code" href="classSVF_1_1ICFG.html#a881fe977f3a6fde223bd786121e35fcf">getRetICFGNode</a>(callBlockNode-><a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>());</div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  <span class="comment">// connect actual and formal param</span></div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1SVFIR.html#a95f77211550ec2374d57779d88cf5138">hasCallSiteArgsMap</a>(callBlockNode) && pag-><a class="code" href="classSVF_1_1SVFIR.html#ac359813747b4f75920c5f395ba74f410">hasFunArgsList</a>(callee))</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  {</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>& csArgList = pag-><a class="code" href="classSVF_1_1SVFIR.html#a2a1e8ce39bf8deace3c344d5f05fe6ac">getCallSiteArgsList</a>(callBlockNode);</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>& funArgList = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa148e3e14ebad8460e32079f2f44413a">getFunArgsList</a>(callee);</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>  SVFIR::SVFVarList::const_iterator csArgIt = csArgList.begin(), csArgEit = csArgList.end();</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>  SVFIR::SVFVarList::const_iterator funArgIt = funArgList.begin(), funArgEit = funArgList.end();</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <span class="keywordflow">for</span> (; funArgIt != funArgEit && csArgIt != csArgEit; funArgIt++, csArgIt++)</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  {</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *cs_arg = *csArgIt;</div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *fun_arg = *funArgIt;</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  <span class="keywordflow">if</span> (fun_arg-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>() && cs_arg-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>  <a class="code" href="classSVF_1_1VFG.html#a2c508fbf07bad33d5b56d2acc6e012d3">connectAParamAndFParam</a>(cs_arg, fun_arg, callBlockNode, csId, edges);</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>  }</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  assert(funArgIt == funArgEit && <span class="stringliteral">"function has more arguments than call site"</span>);</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordflow">if</span> (callee-><a class="code" href="classSVF_1_1SVFFunction.html#ae578002917b4ccbf28f172dba30d1d58">isVarArg</a>())</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  {</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  <a class="code" href="namespaceSVF.html#a350ae9bf8606bdfe23c8679681b969dc">NodeID</a> varFunArg = pag-><a class="code" href="classSVF_1_1IRGraph.html#a8b10c318674a47035d617b3ade4f069b">getVarargNode</a>(callee);</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* varFunArgNode = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(varFunArg);</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>  <span class="keywordflow">if</span> (varFunArgNode-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>  {</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  <span class="keywordflow">for</span> (; csArgIt != csArgEit; csArgIt++)</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  {</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *cs_arg = *csArgIt;</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  <span class="keywordflow">if</span> (cs_arg-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <a class="code" href="classSVF_1_1VFG.html#a2c508fbf07bad33d5b56d2acc6e012d3">connectAParamAndFParam</a>(cs_arg, varFunArgNode, callBlockNode, csId, edges);</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  }</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  }</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  }</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  }</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span> </div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <span class="comment">// connect actual return and formal return</span></div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1SVFIR.html#afe8274c3b7317fccef5314662a182046">funHasRet</a>(callee) && pag-><a class="code" href="classSVF_1_1SVFIR.html#aa79dba26cb34b40eee682713db299d5f">callsiteHasRet</a>(retBlockNode))</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  {</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* cs_return = pag-><a class="code" href="classSVF_1_1SVFIR.html#a3145677c7a3763fc0d6aa7e21b264ab6">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* fun_return = pag-><a class="code" href="classSVF_1_1SVFIR.html#a34e27b8bcfeaafda190dcdb9169a346f">getFunRet</a>(callee);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <span class="keywordflow">if</span> (cs_return-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>() && fun_return-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <a class="code" href="classSVF_1_1VFG.html#ab4e8ab307ad6beb46812a60ebd31ae3b">connectFRetAndARet</a>(fun_return, cs_return, csId, edges);</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  }</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span> }</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span> </div><div class="line"><a name="l01014"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a1fff5a365e5aa2d99f07f7f64cc35fac"> 1014</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* <a class="code" href="classSVF_1_1VFG.html#a1fff5a365e5aa2d99f07f7f64cc35fac">VFG::getLHSTopLevPtr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span> <span class="keyword"></span>{</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span> </div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrVFGNode.html">AddrVFGNode</a>* addr = SVFUtil::dyn_cast<AddrVFGNode>(node))</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  <span class="keywordflow">return</span> addr->getPAGDstNode();</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyVFGNode.html">CopyVFGNode</a>* <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a> = SVFUtil::dyn_cast<CopyVFGNode>(node))</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#a7669ee67a0563250c1efaa24d130e1ac">copy</a>->getPAGDstNode();</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepVFGNode.html">GepVFGNode</a>* gep = SVFUtil::dyn_cast<GepVFGNode>(node))</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <span class="keywordflow">return</span> gep->getPAGDstNode();</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadVFGNode</a>* load = SVFUtil::dyn_cast<LoadVFGNode>(node))</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  <span class="keywordflow">return</span> load->getPAGDstNode();</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordflow">return</span> phi->getRes();</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="keywordflow">return</span> cmp->getRes();</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <span class="keywordflow">return</span> bop->getRes();</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  <span class="keywordflow">return</span> uop->getRes();</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  <span class="keywordflow">return</span> ap->getParam();</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>*fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="keywordflow">return</span> fp->getParam();</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  <span class="keywordflow">return</span> ar->getRev();</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <span class="keywordflow">return</span> fr->getRet();</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1NullPtrVFGNode.html">NullPtrVFGNode</a>* nullVFG = SVFUtil::dyn_cast<NullPtrVFGNode>(node))</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  <span class="keywordflow">return</span> nullVFG->getPAGNode();</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"unexpected node kind!"</span>);</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span> }</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span> </div><div class="line"><a name="l01051"></a><span class="lineno"><a class="line" href="classSVF_1_1VFG.html#a8994194bca2edfd9528880390de795ab"> 1051</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* <a class="code" href="classSVF_1_1VFG.html#a8994194bca2edfd9528880390de795ab">VFG::isFunEntryVFGNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a>* node)<span class="keyword"> const</span></div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span> <span class="keyword"></span>{</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  {</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="keywordflow">return</span> fp->getFun();</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  }</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1InterPHIVFGNode.html">InterPHIVFGNode</a>* phi = SVFUtil::dyn_cast<InterPHIVFGNode>(node))</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  {</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  <span class="keywordflow">if</span>(phi->isFormalParmPHI())</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  <span class="keywordflow">return</span> phi->getFun();</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  }</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span> }</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span> </div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span> </div><div class="line"><a name="l01066"></a><span class="lineno"><a class="line" href="classSVF_1_1StmtVFGNode.html#a8c9af51d2f3425f6b8de70ffe1795292"> 1066</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1StmtVFGNode.html#a8c9af51d2f3425f6b8de70ffe1795292">StmtVFGNode::getValue</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span> <span class="keyword"></span>{</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  <span class="keywordflow">return</span> getPAGEdge()->getValue();</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span> }</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span> </div><div class="line"><a name="l01071"></a><span class="lineno"><a class="line" href="classSVF_1_1CmpVFGNode.html#a644e48dbbd5a97f54f6d586e7d168297"> 1071</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1CmpVFGNode.html#a644e48dbbd5a97f54f6d586e7d168297">CmpVFGNode::getValue</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span> <span class="keyword"></span>{</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  <span class="keywordflow">return</span> getRes()->getValue();</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span> }</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span> </div><div class="line"><a name="l01076"></a><span class="lineno"><a class="line" href="classSVF_1_1BinaryOPVFGNode.html#a1e0dba35433edfc8f1e57a02209734cc"> 1076</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1BinaryOPVFGNode.html#a1e0dba35433edfc8f1e57a02209734cc">BinaryOPVFGNode::getValue</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span> <span class="keyword"></span>{</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  <span class="keywordflow">return</span> getRes()->getValue();</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span> }</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span> </div><div class="line"><a name="l01081"></a><span class="lineno"><a class="line" href="classSVF_1_1PHIVFGNode.html#aef22470b2a3c18ac99fd912fc906fd00"> 1081</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1PHIVFGNode.html#aef22470b2a3c18ac99fd912fc906fd00">PHIVFGNode::getValue</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span> <span class="keyword"></span>{</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="keywordflow">return</span> getRes()->getValue();</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span> }</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span> </div><div class="line"><a name="l01086"></a><span class="lineno"><a class="line" href="classSVF_1_1ArgumentVFGNode.html#ac142fd44a7a344e24cad0de7a217f93e"> 1086</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* <a class="code" href="classSVF_1_1ArgumentVFGNode.html#ac142fd44a7a344e24cad0de7a217f93e">ArgumentVFGNode::getValue</a>()<span class="keyword"> const</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span> <span class="keyword"></span>{</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <span class="keywordflow">return</span> param->hasValue() ? param->getValue() : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span> }</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span> </div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> <span class="keyword">namespace </span><a class="code" href="namespacellvm.html">llvm</a></div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> {</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span> <span class="keyword">template</span><></div><div class="line"><a name="l01097"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html"> 1097</a></span> <span class="keyword">struct </span><a class="code" href="structllvm_1_1DOTGraphTraits.html">DOTGraphTraits</a><<a class="code" href="classSVF_1_1VFG.html">VFG</a>*> : <span class="keyword">public</span> <a class="code" href="structllvm_1_1DOTGraphTraits.html">DOTGraphTraits<SVFIR*></a></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span> {</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span> </div><div class="line"><a name="l01100"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#afd7d2c80916a68b53814e6de593bf520"> 1100</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VFGNode.html">VFGNode</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#afd7d2c80916a68b53814e6de593bf520">NodeType</a>;</div><div class="line"><a name="l01101"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0ae94170a4f95bfc7e89d0149ff67882"> 1101</a></span>  <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0ae94170a4f95bfc7e89d0149ff67882">DOTGraphTraits</a>(<span class="keywordtype">bool</span> isSimple = <span class="keyword">false</span>) :</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  <a class="code" href="structllvm_1_1DOTGraphTraits.html">DOTGraphTraits</a><<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>*>(isSimple)</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  }</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span> </div><div class="line"><a name="l01107"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#aaedec44d41a6e36c9e5db804e4a005dd"> 1107</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#aaedec44d41a6e36c9e5db804e4a005dd">getGraphName</a>(<a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  {</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <span class="keywordflow">return</span> <span class="stringliteral">"VFG"</span>;</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  }</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> </div><div class="line"><a name="l01112"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6470ed90c2a601b01715d02cffd90918"> 1112</a></span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6470ed90c2a601b01715d02cffd90918">getNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a> *graph)</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  {</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>  <span class="keywordflow">if</span> (isSimple())</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>  <span class="keywordflow">return</span> getSimpleNodeLabel(node, graph);</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  <span class="keywordflow">return</span> getCompleteNodeLabel(node, graph);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  }</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span> </div><div class="line"><a name="l01121"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0159404d5c5a7816a4b679c0f35a546e"> 1121</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a0159404d5c5a7816a4b679c0f35a546e">getSimpleNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  {</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  {</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  rawstr << stmtNode->toString();</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  }</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* tphi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  {</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  rawstr << tphi->toString();</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  }</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  {</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  rawstr << fp->toString();</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  }</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  {</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  rawstr << ap->toString();</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  {</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  rawstr << ar->toString();</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  }</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  {</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  rawstr << fr->toString();</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  }</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<NullPtrVFGNode>(node))</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  {</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  rawstr << <span class="stringliteral">"NullPtr"</span>;</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  }</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  {</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  rawstr << bop->toString();</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  }</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  {</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  rawstr << uop->toString();</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  }</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  {</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  rawstr << cmp->toString();;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"what else kinds of nodes do we have??"</span>);</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> </div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  }</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span> </div><div class="line"><a name="l01172"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6ced6b5b50d920fb47c4334693fea86c"> 1172</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6ced6b5b50d920fb47c4334693fea86c">getCompleteNodeLabel</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  {</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span> </div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>  {</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>  rawstr << stmtNode->toString();</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  }</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BinaryOPVFGNode.html">BinaryOPVFGNode</a>* bop = SVFUtil::dyn_cast<BinaryOPVFGNode>(node))</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  {</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  rawstr << bop->toString();</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  }</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1UnaryOPVFGNode.html">UnaryOPVFGNode</a>* uop = SVFUtil::dyn_cast<UnaryOPVFGNode>(node))</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  {</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  rawstr << uop->toString();</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  }</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1CmpVFGNode.html">CmpVFGNode</a>* cmp = SVFUtil::dyn_cast<CmpVFGNode>(node))</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  {</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  rawstr << cmp->toString();</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>  }</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PHIVFGNode.html">PHIVFGNode</a>* phi = SVFUtil::dyn_cast<PHIVFGNode>(node))</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>  {</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>  rawstr << phi->toString();</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>  }</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FormalParmVFGNode.html">FormalParmVFGNode</a>* fp = SVFUtil::dyn_cast<FormalParmVFGNode>(node))</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>  {</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>  rawstr << fp->toString();</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>  }</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmVFGNode>(node))</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>  {</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>  rawstr << ap->toString();</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>  }</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1NullPtrVFGNode.html">NullPtrVFGNode</a>* nptr = SVFUtil::dyn_cast<NullPtrVFGNode>(node))</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>  {</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>  rawstr << nptr->toString();</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>  }</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualRetVFGNode.html">ActualRetVFGNode</a>* ar = SVFUtil::dyn_cast<ActualRetVFGNode>(node))</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  {</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>  rawstr << ar->toString();</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>  }</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetVFGNode</a>* fr = SVFUtil::dyn_cast<FormalRetVFGNode>(node))</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>  {</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>  rawstr << fr->toString();</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>  }</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a>* mr = SVFUtil::dyn_cast<MRSVFGNode>(node))</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>  {</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>  rawstr << mr->toString();</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>  }</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"what else kinds of nodes do we have??"</span>);</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span> </div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>  }</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span> </div><div class="line"><a name="l01227"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a57d4a186a0319b73d69752564bf25b2a"> 1227</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a57d4a186a0319b73d69752564bf25b2a">getNodeAttributes</a>(NodeType *node, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>  {</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span> </div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1StmtVFGNode.html">StmtVFGNode</a>* stmtNode = SVFUtil::dyn_cast<StmtVFGNode>(node))</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>  {</div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = stmtNode->getPAGEdge();</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>  <span class="keywordflow">if</span> (SVFUtil::isa<AddrStmt>(edge))</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>  {</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>  rawstr << <span class="stringliteral">"color=green"</span>;</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>  }</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<CopyStmt>(edge))</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>  {</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>  rawstr << <span class="stringliteral">"color=black"</span>;</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>  }</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetPE>(edge))</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>  {</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>  rawstr << <span class="stringliteral">"color=black,style=dotted"</span>;</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>  }</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<GepStmt>(edge))</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>  {</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>  rawstr << <span class="stringliteral">"color=purple"</span>;</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  }</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<StoreStmt>(edge))</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>  {</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>  rawstr << <span class="stringliteral">"color=blue"</span>;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>  }</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<LoadStmt>(edge))</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>  {</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>  rawstr << <span class="stringliteral">"color=red"</span>;</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>  }</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  {</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>  assert(0 && <span class="stringliteral">"No such kind edge!!"</span>);</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>  }</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>  rawstr << <span class="stringliteral">""</span>;</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>  }</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<CmpVFGNode>(node))</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>  {</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>  }</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<BinaryOPVFGNode>(node))</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>  {</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>  }</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<UnaryOPVFGNode>(node))</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>  {</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>  }</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<PHIVFGNode>(node))</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>  {</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>  rawstr << <span class="stringliteral">"color=black"</span>;</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  }</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<NullPtrVFGNode>(node))</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>  {</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>  rawstr << <span class="stringliteral">"color=grey"</span>;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>  }</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<FormalParmVFGNode>(node))</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>  {</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>  }</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<ActualParmVFGNode>(node))</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  {</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>  }</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<ActualRetVFGNode>(node))</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>  {</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  }</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<FormalRetVFGNode>(node))</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>  {</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>  rawstr << <span class="stringliteral">"color=yellow,penwidth=2"</span>;</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>  }</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<MRSVFGNode>(node))</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>  {</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>  rawstr << <span class="stringliteral">"color=orange,penwidth=2"</span>;</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>  }</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"no such kind of node!!"</span>);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span> </div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>  rawstr << <span class="stringliteral">""</span>;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span> </div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>  }</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span> </div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>  <span class="keyword">template</span><<span class="keyword">class</span> EdgeIter></div><div class="line"><a name="l01314"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a646a1023dab5169a73c8ea54e860c78b"> 1314</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a646a1023dab5169a73c8ea54e860c78b">getEdgeAttributes</a>(NodeType*, EdgeIter EI, <a class="code" href="classSVF_1_1VFG.html">VFG</a>*)</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>  {</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>  assert(edge && <span class="stringliteral">"No edge found!!"</span>);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DirectSVFGEdge>(edge))</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>  {</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CallDirSVFGEdge>(edge))</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid,color=red"</span>;</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetDirSVFGEdge>(edge))</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid,color=blue"</span>;</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=solid"</span>;</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>  }</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<IndirectSVFGEdge>(edge))</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>  {</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CallIndSVFGEdge>(edge))</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed,color=red"</span>;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetIndSVFGEdge>(edge))</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed,color=blue"</span>;</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>  <span class="keywordflow">return</span> <span class="stringliteral">"style=dashed"</span>;</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>  }</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>  {</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"what else edge we have?"</span>);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>  }</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>  }</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span> </div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>  <span class="keyword">template</span><<span class="keyword">class</span> EdgeIter></div><div class="line"><a name="l01344"></a><span class="lineno"><a class="line" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#af794115d33a8ea6f7f2e2c7ac5dd4c80"> 1344</a></span>  <span class="keyword">static</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#af794115d33a8ea6f7f2e2c7ac5dd4c80">getEdgeSourceLabel</a>(NodeType*, EdgeIter EI)</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>  {</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>  <a class="code" href="classSVF_1_1VFGEdge.html">VFGEdge</a>* edge = *(EI.getCurrent());</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>  assert(edge && <span class="stringliteral">"No edge found!!"</span>);</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span> </div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>  <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> str;</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>  std::stringstream rawstr(str);</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallDirSVFGEdge.html">CallDirSVFGEdge</a>* dirCall = SVFUtil::dyn_cast<CallDirSVFGEdge>(edge))</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>  rawstr << dirCall->getCallSiteId();</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetDirSVFGEdge.html">RetDirSVFGEdge</a>* dirRet = SVFUtil::dyn_cast<RetDirSVFGEdge>(edge))</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>  rawstr << dirRet->getCallSiteId();</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span> </div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>  <span class="keywordflow">return</span> rawstr.str();</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>  }</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span> };</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span> } <span class="comment">// End namespace llvm</span></div><div class="ttc" id="classSVF_1_1ActualRetVFGNode_html_aa188986fc1aee4a7f2586a1ff479063b"><div class="ttname"><a href="classSVF_1_1ActualRetVFGNode.html#aa188986fc1aee4a7f2586a1ff479063b">SVF::ActualRetVFGNode::getDefSVFVars</a></div><div class="ttdeci">const NodeBS getDefSVFVars() const override</div><div class="ttdoc">Return the left hand side SVF Vars. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00315">VFG.cpp:315</a></div></div>
|
|
70
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00368">GenericGraph.h:368</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1VFG_html_a84cf5facb15e1d598c2527fba0c7634d"><div class="ttname"><a href="classSVF_1_1VFG.html#a84cf5facb15e1d598c2527fba0c7634d">SVF::VFG::addVFGEdge</a></div><div class="ttdeci">bool addVFGEdge(VFGEdge *edge)</div><div class="ttdoc">Add VFG edge. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00339">VFG.h:339</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a64939d7ecfd8e2cf862782954a56596b"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVF::SVFIR::SVFVarList</a></div><div class="ttdeci">std::vector< const SVFVar * > SVFVarList</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00057">SVFIR.h:57</a></div></div>
|
|
73
73
|
<div class="ttc" id="classSVF_1_1VFG_html"><div class="ttname"><a href="classSVF_1_1VFG.html">SVF::VFG</a></div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00050">VFG.h:50</a></div></div>
|
|
74
74
|
<div class="ttc" id="classSVF_1_1VFGEdge_html_a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">SVF::VFGEdge::IntraDirectVF</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00053">VFGEdge.h:53</a></div></div>
|
|
75
|
-
<div class="ttc" id="classSVF_1_1GenericNode_html_a06a7373b11143e709784de784fa476fe"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">SVF::GenericNode::hasIncomingEdge</a></div><div class="ttdeci">bool hasIncomingEdge() const</div><div class="ttdoc">Has incoming/outgoing edge set. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
75
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_a06a7373b11143e709784de784fa476fe"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a06a7373b11143e709784de784fa476fe">SVF::GenericNode::hasIncomingEdge</a></div><div class="ttdeci">bool hasIncomingEdge() const</div><div class="ttdoc">Has incoming/outgoing edge set. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00195">GenericGraph.h:195</a></div></div>
|
|
76
76
|
<div class="ttc" id="classSVF_1_1CallPE_html_ab548c22dfbfeeaeb8ffe83417b396c09"><div class="ttname"><a href="classSVF_1_1CallPE.html#ab548c22dfbfeeaeb8ffe83417b396c09">SVF::CallPE::getCallSite</a></div><div class="ttdeci">const CallICFGNode * getCallSite() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00528">SVFStatements.h:528</a></div></div>
|
|
77
77
|
<div class="ttc" id="classSVF_1_1BinaryOPVFGNode_html"><div class="ttname"><a href="classSVF_1_1BinaryOPVFGNode.html">SVF::BinaryOPVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00395">VFGNode.h:395</a></div></div>
|
|
78
78
|
<div class="ttc" id="classSVF_1_1ActualParmVFGNode_html"><div class="ttname"><a href="classSVF_1_1ActualParmVFGNode.html">SVF::ActualParmVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00846">VFGNode.h:846</a></div></div>
|
|
@@ -114,7 +114,7 @@ $(function() {
|
|
|
114
114
|
<div class="ttc" id="classSVF_1_1VFG_html_a2e182f7e90a3519a2147a300470a88f1"><div class="ttname"><a href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">SVF::VFG::getPAGEdgeSet</a></div><div class="ttdeci">virtual SVFStmt::SVFStmtSetTy & getPAGEdgeSet(SVFStmt::PEDGEK kind)</div><div class="ttdoc">Get PAGEdge set. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00436">VFG.h:436</a></div></div>
|
|
115
115
|
<div class="ttc" id="classSVF_1_1CopyVFGNode_html"><div class="ttname"><a href="classSVF_1_1CopyVFGNode.html">SVF::CopyVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00281">VFGNode.h:281</a></div></div>
|
|
116
116
|
<div class="ttc" id="SVFType_8h_html_a2c64190a065f342897573a3ef4973adb"><div class="ttname"><a href="SVFType_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a></div><div class="ttdeci">#define DGENERAL</div><div class="ttdoc">General debug flag is for each phase of a pass, it is often in a colorful output format. </div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00424">SVFType.h:424</a></div></div>
|
|
117
|
-
<div class="ttc" id="classSVF_1_1GenericNode_html_a0931220d7a38e03f206cbdc6465d32ad"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">SVF::GenericNode::hasOutgoingEdge</a></div><div class="ttdeci">bool hasOutgoingEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
117
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_a0931220d7a38e03f206cbdc6465d32ad"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a0931220d7a38e03f206cbdc6465d32ad">SVF::GenericNode::hasOutgoingEdge</a></div><div class="ttdeci">bool hasOutgoingEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00199">GenericGraph.h:199</a></div></div>
|
|
118
118
|
<div class="ttc" id="classSVF_1_1PHIVFGNode_html"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html">SVF::PHIVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00635">VFGNode.h:635</a></div></div>
|
|
119
119
|
<div class="ttc" id="classSVF_1_1SVFStmt_html_a8cd7b6c6fd8b030b1421d95a086359f4"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVF::SVFStmt::SVFStmtSetTy</a></div><div class="ttdeci">GenericNode< SVFVar, SVFStmt >::GEdgeSetTy SVFStmtSetTy</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00182">SVFStatements.h:182</a></div></div>
|
|
120
120
|
<div class="ttc" id="classSVF_1_1Options_html_a153d42a480ef1763ad59fd7258ac3ac5"><div class="ttname"><a href="classSVF_1_1Options.html#a153d42a480ef1763ad59fd7258ac3ac5">SVF::Options::EnableThreadCallGraph</a></div><div class="ttdeci">static const llvm::cl::opt< bool > EnableThreadCallGraph</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00142">Options.h:142</a></div></div>
|
|
@@ -165,7 +165,7 @@ $(function() {
|
|
|
165
165
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a091ef22d4fc428985d604b03f287a941"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a091ef22d4fc428985d604b03f287a941">SVF::SVFVar::isConstDataOrAggDataButNotNullPtr</a></div><div class="ttdeci">bool isConstDataOrAggDataButNotNullPtr() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8cpp_source.html#l00204">SVFVariables.cpp:204</a></div></div>
|
|
166
166
|
<div class="ttc" id="classSVF_1_1BranchVFGNode_html"><div class="ttname"><a href="classSVF_1_1BranchVFGNode.html">SVF::BranchVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00539">VFGNode.h:539</a></div></div>
|
|
167
167
|
<div class="ttc" id="classSVF_1_1VFG_html_a0c0a7c8f0bd27bc9e88ce54c0809b11b"><div class="ttname"><a href="classSVF_1_1VFG.html#a0c0a7c8f0bd27bc9e88ce54c0809b11b">SVF::VFG::updateCallGraph</a></div><div class="ttdeci">void updateCallGraph(PointerAnalysis *pta)</div><div class="ttdoc">Update VFG based on pointer analysis results. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00942">VFG.cpp:942</a></div></div>
|
|
168
|
-
<div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
168
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00372">GenericGraph.h:372</a></div></div>
|
|
169
169
|
<div class="ttc" id="classSVF_1_1SVFIR_html_abd1bb12776dc9a17863a52ce2cd31958"><div class="ttname"><a href="classSVF_1_1SVFIR.html#abd1bb12776dc9a17863a52ce2cd31958">SVF::SVFIR::getFunRets</a></div><div class="ttdeci">FunToRetMap & getFunRets()</div><div class="ttdoc">Get function return list. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00286">SVFIR.h:286</a></div></div>
|
|
170
170
|
<div class="ttc" id="classSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9ad52703e3ec09b6a4f565e5d82279b6a3"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad52703e3ec09b6a4f565e5d82279b6a3">SVF::SVFStmt::Branch</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00056">SVFStatements.h:56</a></div></div>
|
|
171
171
|
<div class="ttc" id="classSVF_1_1VFG_html_af5005136743913d760d7402bbd308c69"><div class="ttname"><a href="classSVF_1_1VFG.html#af5005136743913d760d7402bbd308c69">SVF::VFG::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Clean up memory. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00454">VFG.cpp:454</a></div></div>
|
|
@@ -174,7 +174,7 @@ $(function() {
|
|
|
174
174
|
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_aa5011ff12de490146ab106e90d0b6ad8"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#aa5011ff12de490146ab106e90d0b6ad8">SVF::StmtVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00048">VFG.cpp:48</a></div></div>
|
|
175
175
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a2a1e8ce39bf8deace3c344d5f05fe6ac"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2a1e8ce39bf8deace3c344d5f05fe6ac">SVF::SVFIR::getCallSiteArgsList</a></div><div class="ttdeci">const SVFVarList & getCallSiteArgsList(const CallICFGNode *cs) const</div><div class="ttdoc">Get callsite argument list. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00263">SVFIR.h:263</a></div></div>
|
|
176
176
|
<div class="ttc" id="classSVF_1_1PHIVFGNode_html_a7fb9cbed3718922cd81b18d069c79aea"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#a7fb9cbed3718922cd81b18d069c79aea">SVF::PHIVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00220">VFG.cpp:220</a></div></div>
|
|
177
|
-
<div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
177
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00345">GenericGraph.h:345</a></div></div>
|
|
178
178
|
<div class="ttc" id="classSVF_1_1BinaryOPVFGNode_html_a1e0dba35433edfc8f1e57a02209734cc"><div class="ttname"><a href="classSVF_1_1BinaryOPVFGNode.html#a1e0dba35433edfc8f1e57a02209734cc">SVF::BinaryOPVFGNode::getValue</a></div><div class="ttdeci">const SVFValue * getValue() const override</div><div class="ttdoc">Return the corresponding LLVM value, if possible, nullptr otherwise. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l01076">VFG.cpp:1076</a></div></div>
|
|
179
179
|
<div class="ttc" id="classSVF_1_1VFG_html_a8994194bca2edfd9528880390de795ab"><div class="ttname"><a href="classSVF_1_1VFG.html#a8994194bca2edfd9528880390de795ab">SVF::VFG::isFunEntryVFGNode</a></div><div class="ttdeci">const SVFFunction * isFunEntryVFGNode(const VFGNode *node) const</div><div class="ttdoc">Whether a node is function entry VFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l01051">VFG.cpp:1051</a></div></div>
|
|
180
180
|
<div class="ttc" id="classSVF_1_1VFGNode_html_a0342b5a6f270f4ff0e8e2a9b0082c6c5"><div class="ttname"><a href="classSVF_1_1VFGNode.html#a0342b5a6f270f4ff0e8e2a9b0082c6c5">SVF::VFGNode::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00040">VFG.cpp:40</a></div></div>
|
|
@@ -190,7 +190,7 @@ $(function() {
|
|
|
190
190
|
<div class="ttc" id="classSVF_1_1StoreVFGNode_html_aba7e8b8329caf412a55f5880f68414fe"><div class="ttname"><a href="classSVF_1_1StoreVFGNode.html#aba7e8b8329caf412a55f5880f68414fe">SVF::StoreVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00086">VFG.cpp:86</a></div></div>
|
|
191
191
|
<div class="ttc" id="classSVF_1_1VFG_html_ab4e8ab307ad6beb46812a60ebd31ae3b"><div class="ttname"><a href="classSVF_1_1VFG.html#ab4e8ab307ad6beb46812a60ebd31ae3b">SVF::VFG::connectFRetAndARet</a></div><div class="ttdeci">virtual void connectFRetAndARet(const PAGNode *funReturn, const PAGNode *csReturn, CallSiteID csId, VFGEdgeSetTy &edges)</div><div class="ttdoc">Connect formal-ret and actual ret. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00395">VFG.h:395</a></div></div>
|
|
192
192
|
<div class="ttc" id="classSVF_1_1BranchStmt_html"><div class="ttname"><a href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00943">SVFStatements.h:943</a></div></div>
|
|
193
|
-
<div class="ttc" id="classllvm_1_1GraphPrinter_html_af6ed328e74882d2b5e2b4039cb836928"><div class="ttname"><a href="classllvm_1_1GraphPrinter.html#af6ed328e74882d2b5e2b4039cb836928">llvm::GraphPrinter::WriteGraphToFile</a></div><div class="ttdeci">static void WriteGraphToFile(SVF::OutStream &O, const std::string &GraphName, const GraphType &GT, bool simple=false)</div><div class="ttdef"><b>Definition:</b> <a href="GraphPrinter_8h_source.html#
|
|
193
|
+
<div class="ttc" id="classllvm_1_1GraphPrinter_html_af6ed328e74882d2b5e2b4039cb836928"><div class="ttname"><a href="classllvm_1_1GraphPrinter.html#af6ed328e74882d2b5e2b4039cb836928">llvm::GraphPrinter::WriteGraphToFile</a></div><div class="ttdeci">static void WriteGraphToFile(SVF::OutStream &O, const std::string &GraphName, const GraphType &GT, bool simple=false)</div><div class="ttdef"><b>Definition:</b> <a href="GraphPrinter_8h_source.html#l00056">GraphPrinter.h:56</a></div></div>
|
|
194
194
|
<div class="ttc" id="classSVF_1_1VFG_html_a0b072e8e45899b89da0a466140563c38"><div class="ttname"><a href="classSVF_1_1VFG.html#a0b072e8e45899b89da0a466140563c38">SVF::VFG::getActualRetVFGNode</a></div><div class="ttdeci">ActualRetVFGNode * getActualRetVFGNode(const PAGNode *aret) const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00241">VFG.h:241</a></div></div>
|
|
195
195
|
<div class="ttc" id="classSVF_1_1SVFVar_html_aa5176fce9746bc585d43ebb4c8c824e5"><div class="ttname"><a href="classSVF_1_1SVFVar.html#aa5176fce9746bc585d43ebb4c8c824e5">SVF::SVFVar::getOutgoingEdgesEnd</a></div><div class="ttdeci">SVFStmt::SVFStmtSetTy::iterator getOutgoingEdgesEnd(SVFStmt::PEDGEK kind) const</div><div class="ttdoc">Get outgoing SVFStmt iterator. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00195">SVFVariables.h:195</a></div></div>
|
|
196
196
|
<div class="ttc" id="classSVF_1_1PhiStmt_html"><div class="ttname"><a href="classSVF_1_1PhiStmt.html">SVF::PhiStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00681">SVFStatements.h:681</a></div></div>
|
|
@@ -219,6 +219,7 @@ $(function() {
|
|
|
219
219
|
<div class="ttc" id="classSVF_1_1SVFIR_html_aa148e3e14ebad8460e32079f2f44413a"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa148e3e14ebad8460e32079f2f44413a">SVF::SVFIR::getFunArgsList</a></div><div class="ttdeci">const SVFVarList & getFunArgsList(const SVFFunction *func) const</div><div class="ttdoc">Get function arguments list. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00246">SVFIR.h:246</a></div></div>
|
|
220
220
|
<div class="ttc" id="classSVF_1_1NullPtrVFGNode_html_a75c8b89a34bfd89a4af2c699cdb626b9"><div class="ttname"><a href="classSVF_1_1NullPtrVFGNode.html#a75c8b89a34bfd89a4af2c699cdb626b9">SVF::NullPtrVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00369">VFG.cpp:369</a></div></div>
|
|
221
221
|
<div class="ttc" id="classSVF_1_1ArgumentVFGNode_html_a3c10cd63e18f79ccc66f4687d05cb8c5"><div class="ttname"><a href="classSVF_1_1ArgumentVFGNode.html#a3c10cd63e18f79ccc66f4687d05cb8c5">SVF::ArgumentVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00272">VFG.cpp:272</a></div></div>
|
|
222
|
+
<div class="ttc" id="structllvm_1_1DOTGraphTraits_html"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits.html">llvm::DOTGraphTraits</a></div><div class="ttdef"><b>Definition:</b> <a href="DOTGraphTraits_8h_source.html#l00181">DOTGraphTraits.h:181</a></div></div>
|
|
222
223
|
<div class="ttc" id="classSVF_1_1ActualParmVFGNode_html_a60d6ce4c4fe2cf54be45e58b2b93c9f6"><div class="ttname"><a href="classSVF_1_1ActualParmVFGNode.html#a60d6ce4c4fe2cf54be45e58b2b93c9f6">SVF::ActualParmVFGNode::toString</a></div><div class="ttdeci">const std::string toString() const override</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00288">VFG.cpp:288</a></div></div>
|
|
223
224
|
<div class="ttc" id="classSVF_1_1VFG_html_a3867c591a231bad0aa2e6ab7c095a42f"><div class="ttname"><a href="classSVF_1_1VFG.html#a3867c591a231bad0aa2e6ab7c095a42f">SVF::VFG::kind</a></div><div class="ttdeci">VFGK kind</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00105">VFG.h:105</a></div></div>
|
|
224
225
|
<div class="ttc" id="classSVF_1_1VFG_html_a6b373385fa30c83c24844c41c2f05e53"><div class="ttname"><a href="classSVF_1_1VFG.html#a6b373385fa30c83c24844c41c2f05e53">SVF::VFG::addActualParmVFGNode</a></div><div class="ttdeci">void addActualParmVFGNode(const PAGNode *aparm, const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00530">VFG.h:530</a></div></div>
|
|
@@ -262,6 +263,7 @@ $(function() {
|
|
|
262
263
|
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
|
|
263
264
|
<div class="ttc" id="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4_html_a6470ed90c2a601b01715d02cffd90918"><div class="ttname"><a href="structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html#a6470ed90c2a601b01715d02cffd90918">llvm::DOTGraphTraits< VFG * >::getNodeLabel</a></div><div class="ttdeci">std::string getNodeLabel(NodeType *node, VFG *graph)</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l01112">VFG.cpp:1112</a></div></div>
|
|
264
265
|
<div class="ttc" id="classSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">SVF::SVFStmt::Store</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00056">SVFStatements.h:56</a></div></div>
|
|
266
|
+
<div class="ttc" id="namespacellvm_html_a470c5592e4cd36a22901d15832b9c41b"><div class="ttname"><a href="namespacellvm.html#a470c5592e4cd36a22901d15832b9c41b">llvm::ViewGraph</a></div><div class="ttdeci">void ViewGraph(const GraphType &G, const std::string &name, bool ShortNames=false, GraphProgram::Name Program=GraphProgram::DOT)</div><div class="ttdef"><b>Definition:</b> <a href="GraphWriter_8h_source.html#l00371">GraphWriter.h:371</a></div></div>
|
|
265
267
|
<div class="ttc" id="classSVF_1_1IntraDirSVFGEdge_html_a1c8dc17717409aa42749181aafd155aa"><div class="ttname"><a href="classSVF_1_1IntraDirSVFGEdge.html#a1c8dc17717409aa42749181aafd155aa">SVF::IntraDirSVFGEdge::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00395">VFG.cpp:395</a></div></div>
|
|
266
268
|
<div class="ttc" id="classSVF_1_1VFG_html_ac34c4529229404617c346f81cc6c141f"><div class="ttname"><a href="classSVF_1_1VFG.html#ac34c4529229404617c346f81cc6c141f">SVF::VFG::hasIntraVFGEdge</a></div><div class="ttdeci">VFGEdge * hasIntraVFGEdge(VFGNode *src, VFGNode *dst, VFGEdge::VFGEdgeK kind)</div><div class="ttdoc">Whether we has a SVFG edge. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00866">VFG.cpp:866</a></div></div>
|
|
267
269
|
<div class="ttc" id="classSVF_1_1VFG_html_a7343f970332391634f79b2023bba6650"><div class="ttname"><a href="classSVF_1_1VFG.html#a7343f970332391634f79b2023bba6650">SVF::VFG::getDef</a></div><div class="ttdeci">NodeID getDef(const PAGNode *pagNode) const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00420">VFG.h:420</a></div></div>
|
|
@@ -290,7 +292,7 @@ $(function() {
|
|
|
290
292
|
<div class="ttc" id="classSVF_1_1CallDirSVFGEdge_html_af07decd05375f56baa4a1c4fe70bc3f1"><div class="ttname"><a href="classSVF_1_1CallDirSVFGEdge.html#af07decd05375f56baa4a1c4fe70bc3f1">SVF::CallDirSVFGEdge::toString</a></div><div class="ttdeci">virtual const std::string toString() const</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8cpp_source.html#l00403">VFG.cpp:403</a></div></div>
|
|
291
293
|
<div class="ttc" id="classSVF_1_1VFG_html_a43b0c126c2e32cb3d286a78b14e09a96"><div class="ttname"><a href="classSVF_1_1VFG.html#a43b0c126c2e32cb3d286a78b14e09a96">SVF::VFG::checkIntraEdgeParents</a></div><div class="ttdeci">void checkIntraEdgeParents(const VFGNode *srcNode, const VFGNode *dstNode)</div><div class="ttdoc">sanitize Intra edges, verify that both nodes belong to the same function. </div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00351">VFG.h:351</a></div></div>
|
|
292
294
|
<div class="ttc" id="classSVF_1_1VFGEdge_html_a92e3da59f7f5a693945b9a93f169da04"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#a92e3da59f7f5a693945b9a93f169da04">SVF::VFGEdge::isCallDirectVFGEdge</a></div><div class="ttdeci">bool isCallDirectVFGEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00092">VFGEdge.h:92</a></div></div>
|
|
293
|
-
<div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#
|
|
295
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00394">GenericGraph.h:394</a></div></div>
|
|
294
296
|
<div class="ttc" id="classSVF_1_1SVFVar_html_a9e40eafe55a2c1448b830b56ae72e17f"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a9e40eafe55a2c1448b830b56ae72e17f">SVF::SVFVar::getOutgoingEdgesBegin</a></div><div class="ttdeci">SVFStmt::SVFStmtSetTy::iterator getOutgoingEdgesBegin(SVFStmt::PEDGEK kind) const</div><div class="ttdoc">Get outgoing SVFStmt iterator. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00187">SVFVariables.h:187</a></div></div>
|
|
295
297
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a3145677c7a3763fc0d6aa7e21b264ab6"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a3145677c7a3763fc0d6aa7e21b264ab6">SVF::SVFIR::getCallSiteRet</a></div><div class="ttdeci">const SVFVar * getCallSiteRet(const RetICFGNode *cs) const</div><div class="ttdoc">Get callsite return. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00275">SVFIR.h:275</a></div></div>
|
|
296
298
|
<div class="ttc" id="classSVF_1_1VFGEdge_html_a49cbf2a714c9b965b19452d266cd8bdf"><div class="ttname"><a href="classSVF_1_1VFGEdge.html#a49cbf2a714c9b965b19452d266cd8bdf">SVF::VFGEdge::isRetDirectVFGEdge</a></div><div class="ttdeci">bool isRetDirectVFGEdge() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00096">VFGEdge.h:96</a></div></div>
|