svf-tools 1.0.301 → 1.0.305
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/AbstractPointsToDS_8h_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +4 -4
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/AndersenWaveDiffWithType_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +20 -20
- package/SVF-doxygen/html/html/Andersen_8h_source.html +15 -15
- package/SVF-doxygen/html/html/BasicTypes_8h_source.html +6 -6
- package/SVF-doxygen/html/html/CHG_8cpp.html +7 -6
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +42 -41
- package/SVF-doxygen/html/html/CHG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CSC_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CommonCHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Conditions_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Conditions_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CoreBitVector_8h.html +2 -0
- package/SVF-doxygen/html/html/CoreBitVector_8h_source.html +3 -1
- package/SVF-doxygen/html/html/CxtStmt_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DCHG_8h_source.html +4 -4
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/DDAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/DDAStat_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +8 -8
- package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ExternalPAG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ExternalPAG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +4 -4
- package/SVF-doxygen/html/html/GenericGraph_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGStat_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +6 -6
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/MHP_8h_source.html +4 -4
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MTAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/MTA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MemModel_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemPartition_8h_source.html +3 -3
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +4 -4
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +2 -2
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/OfflineConsG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Options_8cpp_source.html +112 -110
- package/SVF-doxygen/html/html/Options_8h.html +1 -0
- package/SVF-doxygen/html/html/Options_8h_source.html +114 -111
- package/SVF-doxygen/html/html/PAGBuilder_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PAGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PAG_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/PAG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +20 -18
- package/SVF-doxygen/html/html/PTAStat_8h_source.html +19 -17
- package/SVF-doxygen/html/html/PTAType_8h_source.html +4 -4
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +4 -4
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +19 -19
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +5 -5
- package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +4 -5
- package/SVF-doxygen/html/html/PointsTo_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SCC_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFBasicTypes_8h.html +32 -26
- package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +52 -49
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/SVFGStat_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFModule_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Steensgaard_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +2 -2
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/TCT_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +2 -2
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +2 -2
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VFG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +10 -8
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp.html +3 -0
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +79 -67
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8h.html +3 -2
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +78 -69
- package/SVF-doxygen/html/html/WPAFSSolver_8h_source.html +8 -8
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/WPASolver_8h_source.html +24 -24
- package/SVF-doxygen/html/html/WPAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/WorkList_8h_source.html +1 -1
- package/SVF-doxygen/html/html/annotated.html +189 -186
- 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_1AddrPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat-members.html +10 -7
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +19 -15
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiffWithType.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchCondManager.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +91 -91
- package/SVF-doxygen/html/html/classSVF_1_1CHNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CmpPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1CopyPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtProc.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThreadProc.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat-members.html +5 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +14 -10
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ExternalPAG.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FIObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +53 -53
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat-members.html +5 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +17 -13
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +13 -13
- 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 +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepValPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat-members.html +5 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +7 -3
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LoadPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +36 -36
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat-members.html +6 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +17 -13
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat-members.html +5 -2
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +12 -8
- package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +102 -100
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +166 -111
- package/SVF-doxygen/html/html/classSVF_1_1PAG.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilder.html +29 -29
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat-members.html +6 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +87 -56
- package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat-members.html +11 -8
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +40 -36
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFInstruction.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1StorePE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1TypeSystem.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ValPN.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepPE.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +161 -162
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +576 -539
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat-members.html +7 -4
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +32 -29
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC-members.html +83 -0
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +297 -0
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +60 -60
- package/SVF-doxygen/html/html/classes.html +96 -95
- package/SVF-doxygen/html/html/functions_b.html +11 -5
- package/SVF-doxygen/html/html/functions_c.html +24 -18
- package/SVF-doxygen/html/html/functions_d.html +13 -4
- package/SVF-doxygen/html/html/functions_e.html +3 -0
- package/SVF-doxygen/html/html/functions_enum.html +3 -0
- package/SVF-doxygen/html/html/functions_eval_c.html +3 -0
- package/SVF-doxygen/html/html/functions_eval_w.html +76 -0
- package/SVF-doxygen/html/html/functions_f.html +14 -14
- package/SVF-doxygen/html/html/functions_func_b.html +6 -0
- package/SVF-doxygen/html/html/functions_func_d.html +7 -4
- package/SVF-doxygen/html/html/functions_func_g.html +15 -9
- package/SVF-doxygen/html/html/functions_func_i.html +11 -11
- package/SVF-doxygen/html/html/functions_func_m.html +0 -3
- package/SVF-doxygen/html/html/functions_func_n.html +1 -4
- package/SVF-doxygen/html/html/functions_func_o.html +6 -4
- package/SVF-doxygen/html/html/functions_func_r.html +4 -1
- package/SVF-doxygen/html/html/functions_func_s.html +1 -1
- package/SVF-doxygen/html/html/functions_func_v.html +2 -1
- package/SVF-doxygen/html/html/functions_g.html +15 -9
- package/SVF-doxygen/html/html/functions_i.html +23 -16
- package/SVF-doxygen/html/html/functions_l.html +12 -15
- package/SVF-doxygen/html/html/functions_m.html +1 -16
- package/SVF-doxygen/html/html/functions_n.html +3 -3
- package/SVF-doxygen/html/html/functions_o.html +17 -16
- package/SVF-doxygen/html/html/functions_p.html +16 -13
- package/SVF-doxygen/html/html/functions_r.html +6 -8
- package/SVF-doxygen/html/html/functions_s.html +14 -16
- package/SVF-doxygen/html/html/functions_t.html +9 -9
- package/SVF-doxygen/html/html/functions_type_l.html +1 -4
- package/SVF-doxygen/html/html/functions_type_m.html +1 -1
- package/SVF-doxygen/html/html/functions_type_n.html +3 -0
- package/SVF-doxygen/html/html/functions_type_o.html +0 -3
- package/SVF-doxygen/html/html/functions_type_v.html +0 -3
- package/SVF-doxygen/html/html/functions_u.html +3 -3
- package/SVF-doxygen/html/html/functions_v.html +8 -10
- package/SVF-doxygen/html/html/functions_vars_c.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_d.html +6 -0
- package/SVF-doxygen/html/html/functions_vars_e.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_i.html +7 -0
- package/SVF-doxygen/html/html/functions_vars_l.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_m.html +0 -12
- package/SVF-doxygen/html/html/functions_vars_o.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_p.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_r.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_y.html +0 -3
- package/SVF-doxygen/html/html/functions_w.html +5 -6
- package/SVF-doxygen/html/html/functions_y.html +0 -3
- package/SVF-doxygen/html/html/globals_f.html +3 -3
- package/SVF-doxygen/html/html/globals_r.html +3 -3
- package/SVF-doxygen/html/html/globals_s.html +6 -6
- package/SVF-doxygen/html/html/hierarchy.html +176 -173
- package/SVF-doxygen/html/html/menudata.js +2 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +68 -30
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +3 -3
- package/SVF-doxygen/html/html/namespacemembers_type_v.html +6 -0
- package/SVF-doxygen/html/html/namespacemembers_v.html +6 -0
- package/SVF-doxygen/html/html/search/all_10.js +4 -3
- package/SVF-doxygen/html/html/search/all_12.js +4 -4
- package/SVF-doxygen/html/html/search/all_13.js +12 -12
- package/SVF-doxygen/html/html/search/all_14.js +6 -6
- package/SVF-doxygen/html/html/search/all_15.js +2 -2
- package/SVF-doxygen/html/html/search/all_16.js +5 -4
- package/SVF-doxygen/html/html/search/all_17.js +2 -1
- package/SVF-doxygen/html/html/search/all_19.js +0 -1
- package/SVF-doxygen/html/html/search/all_2.js +2 -0
- package/SVF-doxygen/html/html/search/all_3.js +2 -1
- package/SVF-doxygen/html/html/search/all_4.js +5 -2
- package/SVF-doxygen/html/html/search/all_5.js +1 -0
- package/SVF-doxygen/html/html/search/all_6.js +6 -6
- package/SVF-doxygen/html/html/search/all_7.js +5 -3
- package/SVF-doxygen/html/html/search/all_8.js +2 -0
- package/SVF-doxygen/html/html/search/all_9.js +5 -3
- package/SVF-doxygen/html/html/search/all_c.js +4 -5
- package/SVF-doxygen/html/html/search/all_d.js +1 -6
- package/SVF-doxygen/html/html/search/all_e.js +5 -5
- package/SVF-doxygen/html/html/search/all_f.js +2 -3
- package/SVF-doxygen/html/html/search/classes_12.js +0 -1
- package/SVF-doxygen/html/html/search/classes_7.js +2 -0
- package/SVF-doxygen/html/html/search/classes_b.js +1 -0
- package/SVF-doxygen/html/html/search/classes_f.js +1 -0
- package/SVF-doxygen/html/html/search/enums_1.js +1 -0
- package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_2.js +1 -0
- package/SVF-doxygen/html/html/search/functions_1.js +2 -0
- package/SVF-doxygen/html/html/search/functions_10.js +2 -2
- package/SVF-doxygen/html/html/search/functions_13.js +1 -1
- package/SVF-doxygen/html/html/search/functions_3.js +3 -2
- package/SVF-doxygen/html/html/search/functions_6.js +5 -3
- package/SVF-doxygen/html/html/search/functions_8.js +2 -2
- package/SVF-doxygen/html/html/search/functions_b.js +0 -1
- package/SVF-doxygen/html/html/search/functions_c.js +0 -1
- package/SVF-doxygen/html/html/search/functions_d.js +1 -1
- package/SVF-doxygen/html/html/search/functions_f.js +1 -0
- package/SVF-doxygen/html/html/search/searchdata.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_14.js +2 -1
- package/SVF-doxygen/html/html/search/typedefs_b.js +1 -2
- package/SVF-doxygen/html/html/search/typedefs_c.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_d.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_e.js +0 -1
- package/SVF-doxygen/html/html/search/variables_10.js +1 -0
- package/SVF-doxygen/html/html/search/variables_12.js +0 -1
- package/SVF-doxygen/html/html/search/variables_14.js +2 -2
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_16.js +1 -1
- package/SVF-doxygen/html/html/search/variables_19.js +0 -1
- package/SVF-doxygen/html/html/search/variables_3.js +1 -1
- package/SVF-doxygen/html/html/search/variables_4.js +2 -0
- package/SVF-doxygen/html/html/search/variables_5.js +1 -0
- package/SVF-doxygen/html/html/search/variables_6.js +1 -1
- package/SVF-doxygen/html/html/search/variables_9.js +3 -1
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/search/variables_d.js +0 -4
- package/SVF-doxygen/html/html/search/variables_e.js +2 -2
- package/SVF-doxygen/html/html/search/variables_f.js +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1Hash_3_01CoreBitVector_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structSVF_1_1Hash_3_01CoreBitVector_01_4.html +126 -0
- package/SVF-doxygen/html/html/structSVF_1_1Hash_3_01NodePair_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1VersionedFlowSensitive_1_1SCC_1_1NodeData-members.html +83 -0
- package/SVF-doxygen/html/html/structSVF_1_1VersionedFlowSensitive_1_1SCC_1_1NodeData.html +145 -0
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01CHGraph_01_5_01_4.html +12 -12
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1NodePair_01_4.html +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SmallVector_3_01T_00_01N_01_4_01_4.html +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01llvm_1_1SparseBitVector_3_01N_01_4_01_4.html +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4.html +129 -0
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +2 -2
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
- package/include/Graphs/SVFGStat.h +10 -10
- package/include/MemoryModel/PTAStat.h +8 -2
- package/include/Util/CoreBitVector.h +8 -0
- package/include/Util/Options.h +6 -0
- package/include/Util/SVFBasicTypes.h +22 -2
- package/include/WPA/VersionedFlowSensitive.h +96 -65
- package/include/WPA/WPASolver.h +1 -2
- package/lib/SABER/SrcSnkDDA.cpp +1 -1
- package/lib/SVF-FE/CHG.cpp +3 -2
- package/lib/Util/Options.cpp +16 -0
- package/lib/Util/PTAStat.cpp +17 -2
- package/lib/WPA/VersionedFlowSensitive.cpp +501 -229
- package/lib/WPA/VersionedFlowSensitiveStat.cpp +23 -38
- package/package.json +1 -1
|
@@ -98,29 +98,20 @@ Inheritance diagram for SVF::VersionedFlowSensitive:</div>
|
|
|
98
98
|
<table class="memberdecls">
|
|
99
99
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
|
|
100
100
|
Classes</h2></td></tr>
|
|
101
|
-
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">
|
|
102
|
-
<tr class="memdesc:"><td class="mdescLeft"> </td><td class="mdescRight">For caching the first step in LocVersionMaps. <a href="structSVF_1_1VersionedFlowSensitive_1_1VersionCache.html#details">More...</a><br /></td></tr>
|
|
101
|
+
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive_1_1SCC.html">SCC</a></td></tr>
|
|
103
102
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
|
104
103
|
</table><table class="memberdecls">
|
|
105
104
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
|
|
106
105
|
Public Types</h2></td></tr>
|
|
107
106
|
<tr class="memitem:af9a43f48b7d99cc6694f3ae3248fd8e0"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#af9a43f48b7d99cc6694f3ae3248fd8e0">ObjToVersionMap</a></td></tr>
|
|
108
107
|
<tr class="separator:af9a43f48b7d99cc6694f3ae3248fd8e0"><td class="memSeparator" colspan="2"> </td></tr>
|
|
109
|
-
<tr class="memitem:a6e36886fac2c276047def0a5acb85c0e"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#ac09fe1e8199f9ac3adb6c489ab608fd8">MeldVersion</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a6e36886fac2c276047def0a5acb85c0e">ObjToMeldVersionMap</a></td></tr>
|
|
110
|
-
<tr class="separator:a6e36886fac2c276047def0a5acb85c0e"><td class="memSeparator" colspan="2"> </td></tr>
|
|
111
108
|
<tr class="memitem:a9ee5add09f2b446c6c6bcb84da0f75b3"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="namespaceSVF.html#a32489632f53dce062ca2e8bff42c65cf">VersionedVar</a>, const <a class="el" href="classSVF_1_1DummyVersionPropSVFGNode.html">DummyVersionPropSVFGNode</a> * > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a9ee5add09f2b446c6c6bcb84da0f75b3">VarToPropNodeMap</a></td></tr>
|
|
112
109
|
<tr class="separator:a9ee5add09f2b446c6c6bcb84da0f75b3"><td class="memSeparator" colspan="2"> </td></tr>
|
|
113
|
-
<tr class="memitem:
|
|
114
|
-
<tr class="separator:
|
|
115
|
-
<tr class="memitem:a31f2c86285f3366d0fc06590eb2a24bd"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a6e36886fac2c276047def0a5acb85c0e">ObjToMeldVersionMap</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a31f2c86285f3366d0fc06590eb2a24bd">LocMeldVersionMap</a></td></tr>
|
|
116
|
-
<tr class="memdesc:a31f2c86285f3366d0fc06590eb2a24bd"><td class="mdescLeft"> </td><td class="mdescRight">Maps locations to all versions it sees (through objects). <a href="#a31f2c86285f3366d0fc06590eb2a24bd">More...</a><br /></td></tr>
|
|
117
|
-
<tr class="separator:a31f2c86285f3366d0fc06590eb2a24bd"><td class="memSeparator" colspan="2"> </td></tr>
|
|
110
|
+
<tr class="memitem:aa689d29ead80303b1ef1e1a91f31c296"><td class="memItemLeft" align="right" valign="top">typedef std::vector< <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#af9a43f48b7d99cc6694f3ae3248fd8e0">ObjToVersionMap</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a></td></tr>
|
|
111
|
+
<tr class="separator:aa689d29ead80303b1ef1e1a91f31c296"><td class="memSeparator" colspan="2"> </td></tr>
|
|
118
112
|
<tr class="memitem:ad8108ee0b034877dea5e927d29ca0534"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a>, std::vector< <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> > > > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#ad8108ee0b034877dea5e927d29ca0534">VersionRelianceMap</a></td></tr>
|
|
119
113
|
<tr class="memdesc:ad8108ee0b034877dea5e927d29ca0534"><td class="mdescLeft"> </td><td class="mdescRight">(o -> (v -> versions with rely on o:v). <a href="#ad8108ee0b034877dea5e927d29ca0534">More...</a><br /></td></tr>
|
|
120
114
|
<tr class="separator:ad8108ee0b034877dea5e927d29ca0534"><td class="memSeparator" colspan="2"> </td></tr>
|
|
121
|
-
<tr class="memitem:a8509e73c41aa3369c0d05fa38c846960"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structSVF_1_1VersionedFlowSensitive_1_1VersionCache.html">SVF::VersionedFlowSensitive::VersionCache</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a8509e73c41aa3369c0d05fa38c846960">VersionCache</a></td></tr>
|
|
122
|
-
<tr class="memdesc:a8509e73c41aa3369c0d05fa38c846960"><td class="mdescLeft"> </td><td class="mdescRight">For caching the first step in LocVersionMaps. <a href="#a8509e73c41aa3369c0d05fa38c846960">More...</a><br /></td></tr>
|
|
123
|
-
<tr class="separator:a8509e73c41aa3369c0d05fa38c846960"><td class="memSeparator" colspan="2"> </td></tr>
|
|
124
115
|
<tr class="inherit_header pub_types_classSVF_1_1FlowSensitive"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classSVF_1_1FlowSensitive')"><img src="closed.png" alt="-"/> Public Types inherited from <a class="el" href="classSVF_1_1FlowSensitive.html">SVF::FlowSensitive</a></td></tr>
|
|
125
116
|
<tr class="memitem:a03a3178d88db4efc0593fedb22938e7d inherit pub_types_classSVF_1_1FlowSensitive"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">BVDataPTAImpl::MutDFPTDataTy</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1FlowSensitive.html#a03a3178d88db4efc0593fedb22938e7d">MutDFPTDataTy</a></td></tr>
|
|
126
117
|
<tr class="separator:a03a3178d88db4efc0593fedb22938e7d inherit pub_types_classSVF_1_1FlowSensitive"><td class="memSeparator" colspan="2"> </td></tr>
|
|
@@ -725,8 +716,8 @@ Protected Member Functions</h2></td></tr>
|
|
|
725
716
|
</table><table class="memberdecls">
|
|
726
717
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-types"></a>
|
|
727
718
|
Private Types</h2></td></tr>
|
|
728
|
-
<tr class="memitem:
|
|
729
|
-
<tr class="separator:
|
|
719
|
+
<tr class="memitem:a630eeca9c3344d24fa196f7de45bce18"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a></td></tr>
|
|
720
|
+
<tr class="separator:a630eeca9c3344d24fa196f7de45bce18"><td class="memSeparator" colspan="2"> </td></tr>
|
|
730
721
|
</table><table class="memberdecls">
|
|
731
722
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
|
|
732
723
|
Private Member Functions</h2></td></tr>
|
|
@@ -736,44 +727,53 @@ Private Member Functions</h2></td></tr>
|
|
|
736
727
|
<tr class="memitem:aaff594c78d93f7ad632d344e5c1c7f6a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aaff594c78d93f7ad632d344e5c1c7f6a">meldLabel</a> (void)</td></tr>
|
|
737
728
|
<tr class="memdesc:aaff594c78d93f7ad632d344e5c1c7f6a"><td class="mdescLeft"> </td><td class="mdescRight">Meld label the prelabeled <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. <a href="#aaff594c78d93f7ad632d344e5c1c7f6a">More...</a><br /></td></tr>
|
|
738
729
|
<tr class="separator:aaff594c78d93f7ad632d344e5c1c7f6a"><td class="memSeparator" colspan="2"> </td></tr>
|
|
739
|
-
<tr class="memitem:
|
|
740
|
-
<tr class="memdesc:
|
|
741
|
-
<tr class="separator:
|
|
742
|
-
<tr class="memitem:a24746dcada35f10cb387c94860930e84"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#ac09fe1e8199f9ac3adb6c489ab608fd8">MeldVersion</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a24746dcada35f10cb387c94860930e84">newMeldVersion</a> (<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o)</td></tr>
|
|
743
|
-
<tr class="memdesc:a24746dcada35f10cb387c94860930e84"><td class="mdescLeft"> </td><td class="mdescRight">Returns a new MeldVersion for o during the prelabeling phase. <a href="#a24746dcada35f10cb387c94860930e84">More...</a><br /></td></tr>
|
|
744
|
-
<tr class="separator:a24746dcada35f10cb387c94860930e84"><td class="memSeparator" colspan="2"> </td></tr>
|
|
745
|
-
<tr class="memitem:a25d9b2fb94c17edca9ccff220c0247b8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a25d9b2fb94c17edca9ccff220c0247b8">determineReliance</a> (void)</td></tr>
|
|
746
|
-
<tr class="separator:a25d9b2fb94c17edca9ccff220c0247b8"><td class="memSeparator" colspan="2"> </td></tr>
|
|
730
|
+
<tr class="memitem:a275095f60640d862034ad173af3371c3"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a275095f60640d862034ad173af3371c3">removeAllIndirectSVFGEdges</a> (void)</td></tr>
|
|
731
|
+
<tr class="memdesc:a275095f60640d862034ad173af3371c3"><td class="mdescLeft"> </td><td class="mdescRight">Removes all indirect edges in the <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. <a href="#a275095f60640d862034ad173af3371c3">More...</a><br /></td></tr>
|
|
732
|
+
<tr class="separator:a275095f60640d862034ad173af3371c3"><td class="memSeparator" colspan="2"> </td></tr>
|
|
747
733
|
<tr class="memitem:a7a98162b69de90f80ce853a6ff43af56"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">propagateVersion</a> (<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v)</td></tr>
|
|
748
734
|
<tr class="separator:a7a98162b69de90f80ce853a6ff43af56"><td class="memSeparator" colspan="2"> </td></tr>
|
|
749
735
|
<tr class="memitem:ad1aa83a71379164d3b7ccf6b61639cb1"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#ad1aa83a71379164d3b7ccf6b61639cb1">propagateVersion</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v, const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> vp, bool time=true)</td></tr>
|
|
750
736
|
<tr class="separator:ad1aa83a71379164d3b7ccf6b61639cb1"><td class="memSeparator" colspan="2"> </td></tr>
|
|
751
|
-
<tr class="memitem:
|
|
752
|
-
<tr class="
|
|
753
|
-
<tr class="
|
|
754
|
-
<tr class="
|
|
755
|
-
<tr class="
|
|
756
|
-
<tr class="
|
|
757
|
-
<tr class="
|
|
758
|
-
<tr class="
|
|
759
|
-
<tr class="
|
|
760
|
-
<tr class="
|
|
761
|
-
<tr class="
|
|
762
|
-
<tr class="
|
|
763
|
-
<tr class="
|
|
764
|
-
<tr class="separator:
|
|
737
|
+
<tr class="memitem:a8da4b9bd9d0c640a6857b4dc4991817c"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a8da4b9bd9d0c640a6857b4dc4991817c">buildIsStoreLoadMaps</a> (void)</td></tr>
|
|
738
|
+
<tr class="memdesc:a8da4b9bd9d0c640a6857b4dc4991817c"><td class="mdescLeft"> </td><td class="mdescRight">Fills in isStoreMap and isLoadMap. <a href="#a8da4b9bd9d0c640a6857b4dc4991817c">More...</a><br /></td></tr>
|
|
739
|
+
<tr class="separator:a8da4b9bd9d0c640a6857b4dc4991817c"><td class="memSeparator" colspan="2"> </td></tr>
|
|
740
|
+
<tr class="memitem:aac920c9a5f13dd147e3c130425e005eb"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l) const</td></tr>
|
|
741
|
+
<tr class="memdesc:aac920c9a5f13dd147e3c130425e005eb"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if l is a store node. <a href="#aac920c9a5f13dd147e3c130425e005eb">More...</a><br /></td></tr>
|
|
742
|
+
<tr class="separator:aac920c9a5f13dd147e3c130425e005eb"><td class="memSeparator" colspan="2"> </td></tr>
|
|
743
|
+
<tr class="memitem:a984a4f929a18f97bfefac0102088a7fd"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a984a4f929a18f97bfefac0102088a7fd">isLoad</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l) const</td></tr>
|
|
744
|
+
<tr class="memdesc:a984a4f929a18f97bfefac0102088a7fd"><td class="mdescLeft"> </td><td class="mdescRight">Returns true if l is a load node. <a href="#a984a4f929a18f97bfefac0102088a7fd">More...</a><br /></td></tr>
|
|
745
|
+
<tr class="separator:a984a4f929a18f97bfefac0102088a7fd"><td class="memSeparator" colspan="2"> </td></tr>
|
|
746
|
+
<tr class="memitem:a3407cc82ef9806e26b79edb677979014"><td class="memItemLeft" align="right" valign="top">virtual void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a3407cc82ef9806e26b79edb677979014">buildDeltaMaps</a> (void)</td></tr>
|
|
747
|
+
<tr class="memdesc:a3407cc82ef9806e26b79edb677979014"><td class="mdescLeft"> </td><td class="mdescRight">Fills in deltaMap and deltaSourceMap for the <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. <a href="#a3407cc82ef9806e26b79edb677979014">More...</a><br /></td></tr>
|
|
748
|
+
<tr class="separator:a3407cc82ef9806e26b79edb677979014"><td class="memSeparator" colspan="2"> </td></tr>
|
|
749
|
+
<tr class="memitem:a9f9b00551c157f42d1d995e8c4efb54b"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">delta</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l) const</td></tr>
|
|
750
|
+
<tr class="separator:a9f9b00551c157f42d1d995e8c4efb54b"><td class="memSeparator" colspan="2"> </td></tr>
|
|
751
|
+
<tr class="memitem:a3fa5afa4f54e0828ec090fde07b1bfa2"><td class="memItemLeft" align="right" valign="top">virtual bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a3fa5afa4f54e0828ec090fde07b1bfa2">deltaSource</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l) const</td></tr>
|
|
752
|
+
<tr class="separator:a3fa5afa4f54e0828ec090fde07b1bfa2"><td class="memSeparator" colspan="2"> </td></tr>
|
|
753
|
+
<tr class="memitem:a6b398d59fc276980dd2d6d48a8675068"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a6b398d59fc276980dd2d6d48a8675068">getVersion</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l, const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, const <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> &lvm) const</td></tr>
|
|
754
|
+
<tr class="memdesc:a6b398d59fc276980dd2d6d48a8675068"><td class="mdescLeft"> </td><td class="mdescRight">Shared code for getConsume and getYield. They wrap this function. <a href="#a6b398d59fc276980dd2d6d48a8675068">More...</a><br /></td></tr>
|
|
755
|
+
<tr class="separator:a6b398d59fc276980dd2d6d48a8675068"><td class="memSeparator" colspan="2"> </td></tr>
|
|
756
|
+
<tr class="memitem:af93e65faae99459621ae45cf9d36005d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#af93e65faae99459621ae45cf9d36005d">getConsume</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l, const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o) const</td></tr>
|
|
757
|
+
<tr class="memdesc:af93e65faae99459621ae45cf9d36005d"><td class="mdescLeft"> </td><td class="mdescRight">Returns the consumed version of o at l. If no such version exists, returns invalidVersion. <a href="#af93e65faae99459621ae45cf9d36005d">More...</a><br /></td></tr>
|
|
758
|
+
<tr class="separator:af93e65faae99459621ae45cf9d36005d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
759
|
+
<tr class="memitem:a01a199e9fdb5759c7f78ee344dbc413c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a01a199e9fdb5759c7f78ee344dbc413c">getYield</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l, const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o) const</td></tr>
|
|
760
|
+
<tr class="memdesc:a01a199e9fdb5759c7f78ee344dbc413c"><td class="mdescLeft"> </td><td class="mdescRight">Returns the yielded version of o at l. If no such version exists, returns invalidVersion. <a href="#a01a199e9fdb5759c7f78ee344dbc413c">More...</a><br /></td></tr>
|
|
761
|
+
<tr class="separator:a01a199e9fdb5759c7f78ee344dbc413c"><td class="memSeparator" colspan="2"> </td></tr>
|
|
762
|
+
<tr class="memitem:adf37ae1f6a07716bca6fbe1603b8a070"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#adf37ae1f6a07716bca6fbe1603b8a070">setVersion</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l, const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v, <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> &lvm)</td></tr>
|
|
763
|
+
<tr class="memdesc:adf37ae1f6a07716bca6fbe1603b8a070"><td class="mdescLeft"> </td><td class="mdescRight">Shared code for setConsume and setYield. They wrap this function. <a href="#adf37ae1f6a07716bca6fbe1603b8a070">More...</a><br /></td></tr>
|
|
764
|
+
<tr class="separator:adf37ae1f6a07716bca6fbe1603b8a070"><td class="memSeparator" colspan="2"> </td></tr>
|
|
765
765
|
<tr class="memitem:aabc0a5a7a31b8d880e019773ba960741"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aabc0a5a7a31b8d880e019773ba960741">setConsume</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l, const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v)</td></tr>
|
|
766
766
|
<tr class="memdesc:aabc0a5a7a31b8d880e019773ba960741"><td class="mdescLeft"> </td><td class="mdescRight">Sets the consumed version of o at l to v. <a href="#aabc0a5a7a31b8d880e019773ba960741">More...</a><br /></td></tr>
|
|
767
767
|
<tr class="separator:aabc0a5a7a31b8d880e019773ba960741"><td class="memSeparator" colspan="2"> </td></tr>
|
|
768
768
|
<tr class="memitem:ac33c7cef2d1d143950820ea48e97e806"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#ac33c7cef2d1d143950820ea48e97e806">setYield</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l, const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v)</td></tr>
|
|
769
769
|
<tr class="memdesc:ac33c7cef2d1d143950820ea48e97e806"><td class="mdescLeft"> </td><td class="mdescRight">Sets the yielded version of o at l to v. <a href="#ac33c7cef2d1d143950820ea48e97e806">More...</a><br /></td></tr>
|
|
770
770
|
<tr class="separator:ac33c7cef2d1d143950820ea48e97e806"><td class="memSeparator" colspan="2"> </td></tr>
|
|
771
|
-
<tr class="memitem:
|
|
772
|
-
<tr class="memdesc:
|
|
773
|
-
<tr class="separator:
|
|
774
|
-
<tr class="memitem:
|
|
775
|
-
<tr class="memdesc:
|
|
776
|
-
<tr class="separator:
|
|
771
|
+
<tr class="memitem:ae83c62a01196991d116ef5c36cb51e31"><td class="memItemLeft" align="right" valign="top">std::vector< <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> > & </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#ae83c62a01196991d116ef5c36cb51e31">getReliantVersions</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v)</td></tr>
|
|
772
|
+
<tr class="memdesc:ae83c62a01196991d116ef5c36cb51e31"><td class="mdescLeft"> </td><td class="mdescRight">Returns the versions of o which rely on o:v. <a href="#ae83c62a01196991d116ef5c36cb51e31">More...</a><br /></td></tr>
|
|
773
|
+
<tr class="separator:ae83c62a01196991d116ef5c36cb51e31"><td class="memSeparator" colspan="2"> </td></tr>
|
|
774
|
+
<tr class="memitem:a3489def8e16e4d7c83d2c909d3287fc0"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> & </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a3489def8e16e4d7c83d2c909d3287fc0">getStmtReliance</a> (const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o, const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v)</td></tr>
|
|
775
|
+
<tr class="memdesc:a3489def8e16e4d7c83d2c909d3287fc0"><td class="mdescLeft"> </td><td class="mdescRight">Returns the statements which rely on o:v. <a href="#a3489def8e16e4d7c83d2c909d3287fc0">More...</a><br /></td></tr>
|
|
776
|
+
<tr class="separator:a3489def8e16e4d7c83d2c909d3287fc0"><td class="memSeparator" colspan="2"> </td></tr>
|
|
777
777
|
<tr class="memitem:a9d5990a41e90558595d0ad0defceb4e8"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a9d5990a41e90558595d0ad0defceb4e8">dumpReliances</a> (void) const</td></tr>
|
|
778
778
|
<tr class="memdesc:a9d5990a41e90558595d0ad0defceb4e8"><td class="mdescLeft"> </td><td class="mdescRight">Dumps versionReliance and stmtReliance. <a href="#a9d5990a41e90558595d0ad0defceb4e8">More...</a><br /></td></tr>
|
|
779
779
|
<tr class="separator:a9d5990a41e90558595d0ad0defceb4e8"><td class="memSeparator" colspan="2"> </td></tr>
|
|
@@ -783,31 +783,20 @@ Private Member Functions</h2></td></tr>
|
|
|
783
783
|
</table><table class="memberdecls">
|
|
784
784
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-static-methods"></a>
|
|
785
785
|
Static Private Member Functions</h2></td></tr>
|
|
786
|
-
<tr class="memitem:a1da960df51570b59161e380949d910c4"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a1da960df51570b59161e380949d910c4">meld</a> (<a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
786
|
+
<tr class="memitem:a1da960df51570b59161e380949d910c4"><td class="memItemLeft" align="right" valign="top">static bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a1da960df51570b59161e380949d910c4">meld</a> (<a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> &mv1, const <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> &mv2)</td></tr>
|
|
787
787
|
<tr class="memdesc:a1da960df51570b59161e380949d910c4"><td class="mdescLeft"> </td><td class="mdescRight">Melds v2 into v1 (in place), returns whether a change occurred. <a href="#a1da960df51570b59161e380949d910c4">More...</a><br /></td></tr>
|
|
788
788
|
<tr class="separator:a1da960df51570b59161e380949d910c4"><td class="memSeparator" colspan="2"> </td></tr>
|
|
789
|
-
<tr class="memitem:a7565989371100f84ae5f9e2efa655fcb"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a7565989371100f84ae5f9e2efa655fcb">dumpMeldVersion</a> (<a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
789
|
+
<tr class="memitem:a7565989371100f84ae5f9e2efa655fcb"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a7565989371100f84ae5f9e2efa655fcb">dumpMeldVersion</a> (<a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> &v)</td></tr>
|
|
790
790
|
<tr class="memdesc:a7565989371100f84ae5f9e2efa655fcb"><td class="mdescLeft"> </td><td class="mdescRight">Dumps a MeldVersion to stdout. <a href="#a7565989371100f84ae5f9e2efa655fcb">More...</a><br /></td></tr>
|
|
791
791
|
<tr class="separator:a7565989371100f84ae5f9e2efa655fcb"><td class="memSeparator" colspan="2"> </td></tr>
|
|
792
792
|
</table><table class="memberdecls">
|
|
793
793
|
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
|
|
794
794
|
Private Attributes</h2></td></tr>
|
|
795
|
-
<tr class="memitem:
|
|
796
|
-
<tr class="separator:a0f3bc278aa733bd637c9905530ff2e6c"><td class="memSeparator" colspan="2"> </td></tr>
|
|
797
|
-
<tr class="memitem:afb0396e095bd461f146b4c5ce957b89e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a31f2c86285f3366d0fc06590eb2a24bd">LocMeldVersionMap</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#afb0396e095bd461f146b4c5ce957b89e">meldYield</a></td></tr>
|
|
798
|
-
<tr class="separator:afb0396e095bd461f146b4c5ce957b89e"><td class="memSeparator" colspan="2"> </td></tr>
|
|
799
|
-
<tr class="memitem:a32b9ff0e47ef632626f1b647c38c26f9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, unsigned > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a32b9ff0e47ef632626f1b647c38c26f9">meldVersions</a></td></tr>
|
|
800
|
-
<tr class="separator:a32b9ff0e47ef632626f1b647c38c26f9"><td class="memSeparator" colspan="2"> </td></tr>
|
|
801
|
-
<tr class="memitem:a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a0ea2cc21f9de287746ca2216b08e22b4">LocVersionMap</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a></td></tr>
|
|
795
|
+
<tr class="memitem:a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a></td></tr>
|
|
802
796
|
<tr class="separator:a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
803
|
-
<tr class="memitem:a16224ee60494bb1fdf1c8a1026fbe7ab"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
797
|
+
<tr class="memitem:a16224ee60494bb1fdf1c8a1026fbe7ab"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a16224ee60494bb1fdf1c8a1026fbe7ab">yield</a></td></tr>
|
|
798
|
+
<tr class="memdesc:a16224ee60494bb1fdf1c8a1026fbe7ab"><td class="mdescLeft"> </td><td class="mdescRight">Actual yield map. Yield analogue to consume. <a href="#a16224ee60494bb1fdf1c8a1026fbe7ab">More...</a><br /></td></tr>
|
|
804
799
|
<tr class="separator:a16224ee60494bb1fdf1c8a1026fbe7ab"><td class="memSeparator" colspan="2"> </td></tr>
|
|
805
|
-
<tr class="memitem:a6da3d01bd4f8b58c3dac952bba4ee958"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structSVF_1_1VersionedFlowSensitive_1_1VersionCache.html">VersionCache</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a6da3d01bd4f8b58c3dac952bba4ee958">consumeCache</a></td></tr>
|
|
806
|
-
<tr class="memdesc:a6da3d01bd4f8b58c3dac952bba4ee958"><td class="mdescLeft"> </td><td class="mdescRight">Cache for the nested map in consume. <a href="#a6da3d01bd4f8b58c3dac952bba4ee958">More...</a><br /></td></tr>
|
|
807
|
-
<tr class="separator:a6da3d01bd4f8b58c3dac952bba4ee958"><td class="memSeparator" colspan="2"> </td></tr>
|
|
808
|
-
<tr class="memitem:a86f03759d0c9e739d70d537ab02d7082"><td class="memItemLeft" align="right" valign="top"><a class="el" href="structSVF_1_1VersionedFlowSensitive_1_1VersionCache.html">VersionCache</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a86f03759d0c9e739d70d537ab02d7082">yieldCache</a></td></tr>
|
|
809
|
-
<tr class="memdesc:a86f03759d0c9e739d70d537ab02d7082"><td class="mdescLeft"> </td><td class="mdescRight">Cache for the nested map in yield. <a href="#a86f03759d0c9e739d70d537ab02d7082">More...</a><br /></td></tr>
|
|
810
|
-
<tr class="separator:a86f03759d0c9e739d70d537ab02d7082"><td class="memSeparator" colspan="2"> </td></tr>
|
|
811
800
|
<tr class="memitem:a1dc6e3d4931b53e7e426c0f76d06aeb3"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#ad8108ee0b034877dea5e927d29ca0534">VersionRelianceMap</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a></td></tr>
|
|
812
801
|
<tr class="memdesc:a1dc6e3d4931b53e7e426c0f76d06aeb3"><td class="mdescLeft"> </td><td class="mdescRight">o -> (version -> versions which rely on it). <a href="#a1dc6e3d4931b53e7e426c0f76d06aeb3">More...</a><br /></td></tr>
|
|
813
802
|
<tr class="separator:a1dc6e3d4931b53e7e426c0f76d06aeb3"><td class="memSeparator" colspan="2"> </td></tr>
|
|
@@ -816,11 +805,25 @@ Private Attributes</h2></td></tr>
|
|
|
816
805
|
<tr class="separator:af0859eb2a5b46c45aa4314e6e54f4438"><td class="memSeparator" colspan="2"> </td></tr>
|
|
817
806
|
<tr class="memitem:af14a4cbc0b990389d31b2f88f50ad8eb"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a9ee5add09f2b446c6c6bcb84da0f75b3">VarToPropNodeMap</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#af14a4cbc0b990389d31b2f88f50ad8eb">versionedVarToPropNode</a></td></tr>
|
|
818
807
|
<tr class="separator:af14a4cbc0b990389d31b2f88f50ad8eb"><td class="memSeparator" colspan="2"> </td></tr>
|
|
808
|
+
<tr class="memitem:a2d451d89f99a4bff828b682723df477f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a>< <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">equivalentObject</a></td></tr>
|
|
809
|
+
<tr class="separator:a2d451d89f99a4bff828b682723df477f"><td class="memSeparator" colspan="2"> </td></tr>
|
|
819
810
|
<tr class="memitem:adfefc0dfa4e7fb4d20fafeaf96a5fa67"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1FIFOWorkList.html">FIFOWorkList</a>< <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a></td></tr>
|
|
820
811
|
<tr class="separator:adfefc0dfa4e7fb4d20fafeaf96a5fa67"><td class="memSeparator" colspan="2"> </td></tr>
|
|
812
|
+
<tr class="memitem:aaae8c6858593ed050dcf2c9220228e3e"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a>< <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aaae8c6858593ed050dcf2c9220228e3e">prelabeledObjects</a></td></tr>
|
|
813
|
+
<tr class="separator:aaae8c6858593ed050dcf2c9220228e3e"><td class="memSeparator" colspan="2"> </td></tr>
|
|
821
814
|
<tr class="memitem:a03f5f16377daa0258166a73de3e21f07"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classSVF_1_1BVDataPTAImpl.html#a8bc5e039958280b18e5a00a56e0bdc94">BVDataPTAImpl::VersionedPTDataTy</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a></td></tr>
|
|
822
815
|
<tr class="memdesc:a03f5f16377daa0258166a73de3e21f07"><td class="mdescLeft"> </td><td class="mdescRight">Points-to DS for working with versions. <a href="#a03f5f16377daa0258166a73de3e21f07">More...</a><br /></td></tr>
|
|
823
816
|
<tr class="separator:a03f5f16377daa0258166a73de3e21f07"><td class="memSeparator" colspan="2"> </td></tr>
|
|
817
|
+
<tr class="memitem:a11ddfa1faebf56e74e6dcc53e16142e1"><td class="memItemLeft" align="right" valign="top">std::vector< bool > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a11ddfa1faebf56e74e6dcc53e16142e1">deltaMap</a></td></tr>
|
|
818
|
+
<tr class="separator:a11ddfa1faebf56e74e6dcc53e16142e1"><td class="memSeparator" colspan="2"> </td></tr>
|
|
819
|
+
<tr class="memitem:aee97e196225aaad29c0bd31d3ccbabf6"><td class="memItemLeft" align="right" valign="top">std::vector< bool > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aee97e196225aaad29c0bd31d3ccbabf6">deltaSourceMap</a></td></tr>
|
|
820
|
+
<tr class="separator:aee97e196225aaad29c0bd31d3ccbabf6"><td class="memSeparator" colspan="2"> </td></tr>
|
|
821
|
+
<tr class="memitem:a18e25c3871d7cc1a6bb0592ceca90f88"><td class="memItemLeft" align="right" valign="top">std::vector< bool > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a18e25c3871d7cc1a6bb0592ceca90f88">isStoreMap</a></td></tr>
|
|
822
|
+
<tr class="memdesc:a18e25c3871d7cc1a6bb0592ceca90f88"><td class="mdescLeft"> </td><td class="mdescRight">isStoreMap[l] means <a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node l is a store node. <a href="#a18e25c3871d7cc1a6bb0592ceca90f88">More...</a><br /></td></tr>
|
|
823
|
+
<tr class="separator:a18e25c3871d7cc1a6bb0592ceca90f88"><td class="memSeparator" colspan="2"> </td></tr>
|
|
824
|
+
<tr class="memitem:a6bb3db072db0b899f306b37f1146f83d"><td class="memItemLeft" align="right" valign="top">std::vector< bool > </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a6bb3db072db0b899f306b37f1146f83d">isLoadMap</a></td></tr>
|
|
825
|
+
<tr class="memdesc:a6bb3db072db0b899f306b37f1146f83d"><td class="mdescLeft"> </td><td class="mdescRight">isLoadMap[l] means <a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node l is a load node. <a href="#a6bb3db072db0b899f306b37f1146f83d">More...</a><br /></td></tr>
|
|
826
|
+
<tr class="separator:a6bb3db072db0b899f306b37f1146f83d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
824
827
|
<tr><td colspan="2"><div class="groupHeader"></div></td></tr>
|
|
825
828
|
<tr class="memitem:a593177519a6bfab63dbb12dbc1ffbc20"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a593177519a6bfab63dbb12dbc1ffbc20">numPrelabeledNodes</a></td></tr>
|
|
826
829
|
<tr class="memdesc:a593177519a6bfab63dbb12dbc1ffbc20"><td class="mdescLeft"> </td><td class="mdescRight">Additional statistics. <a href="#a593177519a6bfab63dbb12dbc1ffbc20">More...</a><br /></td></tr>
|
|
@@ -828,18 +831,12 @@ Private Attributes</h2></td></tr>
|
|
|
828
831
|
<tr class="memitem:a9235db71172dcdf277050f6ca5f344c6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a9235db71172dcdf277050f6ca5f344c6">numPrelabelVersions</a></td></tr>
|
|
829
832
|
<tr class="memdesc:a9235db71172dcdf277050f6ca5f344c6"><td class="mdescLeft"> </td><td class="mdescRight">Number of versions created during prelabeling. <a href="#a9235db71172dcdf277050f6ca5f344c6">More...</a><br /></td></tr>
|
|
830
833
|
<tr class="separator:a9235db71172dcdf277050f6ca5f344c6"><td class="memSeparator" colspan="2"> </td></tr>
|
|
831
|
-
<tr class="memitem:a80535bb813f8bf240a0b54ac6ad4b257"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a80535bb813f8bf240a0b54ac6ad4b257">relianceTime</a></td></tr>
|
|
832
|
-
<tr class="memdesc:a80535bb813f8bf240a0b54ac6ad4b257"><td class="mdescLeft"> </td><td class="mdescRight">Time to determine version and statement reliance. <a href="#a80535bb813f8bf240a0b54ac6ad4b257">More...</a><br /></td></tr>
|
|
833
|
-
<tr class="separator:a80535bb813f8bf240a0b54ac6ad4b257"><td class="memSeparator" colspan="2"> </td></tr>
|
|
834
834
|
<tr class="memitem:a77a5dd9578def9a8e2b48e8b90d9b996"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a77a5dd9578def9a8e2b48e8b90d9b996">prelabelingTime</a></td></tr>
|
|
835
835
|
<tr class="memdesc:a77a5dd9578def9a8e2b48e8b90d9b996"><td class="mdescLeft"> </td><td class="mdescRight">Time to prelabel <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. <a href="#a77a5dd9578def9a8e2b48e8b90d9b996">More...</a><br /></td></tr>
|
|
836
836
|
<tr class="separator:a77a5dd9578def9a8e2b48e8b90d9b996"><td class="memSeparator" colspan="2"> </td></tr>
|
|
837
837
|
<tr class="memitem:a4a594c8d6ccaa27b5328c6388fdb258d"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a4a594c8d6ccaa27b5328c6388fdb258d">meldLabelingTime</a></td></tr>
|
|
838
838
|
<tr class="memdesc:a4a594c8d6ccaa27b5328c6388fdb258d"><td class="mdescLeft"> </td><td class="mdescRight">Time to meld label <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. <a href="#a4a594c8d6ccaa27b5328c6388fdb258d">More...</a><br /></td></tr>
|
|
839
839
|
<tr class="separator:a4a594c8d6ccaa27b5328c6388fdb258d"><td class="memSeparator" colspan="2"> </td></tr>
|
|
840
|
-
<tr class="memitem:a8871031546861343c05346ae1a4550cd"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a8871031546861343c05346ae1a4550cd">meldMappingTime</a></td></tr>
|
|
841
|
-
<tr class="memdesc:a8871031546861343c05346ae1a4550cd"><td class="mdescLeft"> </td><td class="mdescRight">Time to map MeldVersions to Versions. <a href="#a8871031546861343c05346ae1a4550cd">More...</a><br /></td></tr>
|
|
842
|
-
<tr class="separator:a8871031546861343c05346ae1a4550cd"><td class="memSeparator" colspan="2"> </td></tr>
|
|
843
840
|
<tr class="memitem:af15bb6be283fee2fcc4b1fb7d8190451"><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#af15bb6be283fee2fcc4b1fb7d8190451">versionPropTime</a></td></tr>
|
|
844
841
|
<tr class="memdesc:af15bb6be283fee2fcc4b1fb7d8190451"><td class="mdescLeft"> </td><td class="mdescRight">Time to propagate versions to versions which rely on them. <a href="#af15bb6be283fee2fcc4b1fb7d8190451">More...</a><br /></td></tr>
|
|
845
842
|
<tr class="separator:af15bb6be283fee2fcc4b1fb7d8190451"><td class="memSeparator" colspan="2"> </td></tr>
|
|
@@ -1021,42 +1018,24 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1021
1018
|
|
|
1022
1019
|
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00028">28</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
1023
1020
|
</div><h2 class="groupheader">Member Typedef Documentation</h2>
|
|
1024
|
-
<a id="
|
|
1025
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1021
|
+
<a id="aa689d29ead80303b1ef1e1a91f31c296"></a>
|
|
1022
|
+
<h2 class="memtitle"><span class="permalink"><a href="#aa689d29ead80303b1ef1e1a91f31c296">◆ </a></span>LocVersionMap</h2>
|
|
1026
1023
|
|
|
1027
1024
|
<div class="memitem">
|
|
1028
1025
|
<div class="memproto">
|
|
1029
1026
|
<table class="memname">
|
|
1030
1027
|
<tr>
|
|
1031
|
-
<td class="memname">typedef
|
|
1028
|
+
<td class="memname">typedef std::vector<<a class="el" href="classSVF_1_1VersionedFlowSensitive.html#af9a43f48b7d99cc6694f3ae3248fd8e0">ObjToVersionMap</a>> <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">SVF::VersionedFlowSensitive::LocVersionMap</a></td>
|
|
1032
1029
|
</tr>
|
|
1033
1030
|
</table>
|
|
1034
1031
|
</div><div class="memdoc">
|
|
1035
1032
|
|
|
1036
|
-
<p>
|
|
1037
|
-
|
|
1038
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00042">42</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
1039
|
-
|
|
1040
|
-
</div>
|
|
1041
|
-
</div>
|
|
1042
|
-
<a id="a0ea2cc21f9de287746ca2216b08e22b4"></a>
|
|
1043
|
-
<h2 class="memtitle"><span class="permalink"><a href="#a0ea2cc21f9de287746ca2216b08e22b4">◆ </a></span>LocVersionMap</h2>
|
|
1044
|
-
|
|
1045
|
-
<div class="memitem">
|
|
1046
|
-
<div class="memproto">
|
|
1047
|
-
<table class="memname">
|
|
1048
|
-
<tr>
|
|
1049
|
-
<td class="memname">typedef <a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#af9a43f48b7d99cc6694f3ae3248fd8e0">ObjToVersionMap</a>> <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a0ea2cc21f9de287746ca2216b08e22b4">SVF::VersionedFlowSensitive::LocVersionMap</a></td>
|
|
1050
|
-
</tr>
|
|
1051
|
-
</table>
|
|
1052
|
-
</div><div class="memdoc">
|
|
1053
|
-
|
|
1054
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00040">40</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
1033
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00039">39</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
1055
1034
|
|
|
1056
1035
|
</div>
|
|
1057
1036
|
</div>
|
|
1058
|
-
<a id="
|
|
1059
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1037
|
+
<a id="a630eeca9c3344d24fa196f7de45bce18"></a>
|
|
1038
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a630eeca9c3344d24fa196f7de45bce18">◆ </a></span>MeldVersion</h2>
|
|
1060
1039
|
|
|
1061
1040
|
<div class="memitem">
|
|
1062
1041
|
<div class="memproto">
|
|
@@ -1065,7 +1044,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1065
1044
|
<td class="mlabels-left">
|
|
1066
1045
|
<table class="memname">
|
|
1067
1046
|
<tr>
|
|
1068
|
-
<td class="memname">typedef
|
|
1047
|
+
<td class="memname">typedef <a class="el" href="classSVF_1_1CoreBitVector.html">CoreBitVector</a> <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">SVF::VersionedFlowSensitive::MeldVersion</a></td>
|
|
1069
1048
|
</tr>
|
|
1070
1049
|
</table>
|
|
1071
1050
|
</td>
|
|
@@ -1077,22 +1056,6 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1077
1056
|
|
|
1078
1057
|
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00033">33</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
1079
1058
|
|
|
1080
|
-
</div>
|
|
1081
|
-
</div>
|
|
1082
|
-
<a id="a6e36886fac2c276047def0a5acb85c0e"></a>
|
|
1083
|
-
<h2 class="memtitle"><span class="permalink"><a href="#a6e36886fac2c276047def0a5acb85c0e">◆ </a></span>ObjToMeldVersionMap</h2>
|
|
1084
|
-
|
|
1085
|
-
<div class="memitem">
|
|
1086
|
-
<div class="memproto">
|
|
1087
|
-
<table class="memname">
|
|
1088
|
-
<tr>
|
|
1089
|
-
<td class="memname">typedef <a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#ac09fe1e8199f9ac3adb6c489ab608fd8">MeldVersion</a>> <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a6e36886fac2c276047def0a5acb85c0e">SVF::VersionedFlowSensitive::ObjToMeldVersionMap</a></td>
|
|
1090
|
-
</tr>
|
|
1091
|
-
</table>
|
|
1092
|
-
</div><div class="memdoc">
|
|
1093
|
-
|
|
1094
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00037">37</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
1095
|
-
|
|
1096
1059
|
</div>
|
|
1097
1060
|
</div>
|
|
1098
1061
|
<a id="af9a43f48b7d99cc6694f3ae3248fd8e0"></a>
|
|
@@ -1123,23 +1086,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1123
1086
|
</table>
|
|
1124
1087
|
</div><div class="memdoc">
|
|
1125
1088
|
|
|
1126
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
1127
|
-
|
|
1128
|
-
</div>
|
|
1129
|
-
</div>
|
|
1130
|
-
<a id="a8509e73c41aa3369c0d05fa38c846960"></a>
|
|
1131
|
-
<h2 class="memtitle"><span class="permalink"><a href="#a8509e73c41aa3369c0d05fa38c846960">◆ </a></span>VersionCache</h2>
|
|
1132
|
-
|
|
1133
|
-
<div class="memitem">
|
|
1134
|
-
<div class="memproto">
|
|
1135
|
-
<table class="memname">
|
|
1136
|
-
<tr>
|
|
1137
|
-
<td class="memname">typedef struct <a class="el" href="structSVF_1_1VersionedFlowSensitive_1_1VersionCache.html">SVF::VersionedFlowSensitive::VersionCache</a> <a class="el" href="structSVF_1_1VersionedFlowSensitive_1_1VersionCache.html">SVF::VersionedFlowSensitive::VersionCache</a></td>
|
|
1138
|
-
</tr>
|
|
1139
|
-
</table>
|
|
1140
|
-
</div><div class="memdoc">
|
|
1141
|
-
|
|
1142
|
-
<p>For caching the first step in LocVersionMaps. </p>
|
|
1089
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00037">37</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
1143
1090
|
|
|
1144
1091
|
</div>
|
|
1145
1092
|
</div>
|
|
@@ -1157,7 +1104,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1157
1104
|
|
|
1158
1105
|
<p>(o -> (v -> versions with rely on o:v). </p>
|
|
1159
1106
|
|
|
1160
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
1107
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00041">41</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
1161
1108
|
|
|
1162
1109
|
</div>
|
|
1163
1110
|
</div>
|
|
@@ -1190,17 +1137,18 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1190
1137
|
|
|
1191
1138
|
<p>Constructor. </p>
|
|
1192
1139
|
|
|
1193
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1194
|
-
<div class="fragment"><div class="line"><a name="
|
|
1195
|
-
<div class="ttc" id="
|
|
1140
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00030">30</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1141
|
+
<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  : <a class="code" href="classSVF_1_1FlowSensitive.html#aefb9169c4d5c60edf73ccc24d40fa7e8">FlowSensitive</a>(_pag, type)</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> {</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a593177519a6bfab63dbb12dbc1ffbc20">numPrelabeledNodes</a> = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a9235db71172dcdf277050f6ca5f344c6">numPrelabelVersions</a> = 0;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a77a5dd9578def9a8e2b48e8b90d9b996">prelabelingTime</a> = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a4a594c8d6ccaa27b5328c6388fdb258d">meldLabelingTime</a> = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af15bb6be283fee2fcc4b1fb7d8190451">versionPropTime</a> = 0.0;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  <span class="comment">// We'll grab vPtD in initialize.</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="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">PAG::const_iterator</a> it = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  {</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <span class="keywordflow">if</span> (SVFUtil::isa<ObjPN>(it->second)) <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">equivalentObject</a>[it->first] = it->first;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  }</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> }</div><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#l00365">GenericGraph.h:365</a></div></div>
|
|
1142
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a9235db71172dcdf277050f6ca5f344c6"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a9235db71172dcdf277050f6ca5f344c6">SVF::VersionedFlowSensitive::numPrelabelVersions</a></div><div class="ttdeci">Size_t numPrelabelVersions</div><div class="ttdoc">Number of versions created during prelabeling. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00227">VersionedFlowSensitive.h:227</a></div></div>
|
|
1143
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2d451d89f99a4bff828b682723df477f"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">SVF::VersionedFlowSensitive::equivalentObject</a></div><div class="ttdeci">Map< NodeID, NodeID > equivalentObject</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00198">VersionedFlowSensitive.h:198</a></div></div>
|
|
1144
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a4a594c8d6ccaa27b5328c6388fdb258d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a4a594c8d6ccaa27b5328c6388fdb258d">SVF::VersionedFlowSensitive::meldLabelingTime</a></div><div class="ttdeci">double meldLabelingTime</div><div class="ttdoc">Time to meld label SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00230">VersionedFlowSensitive.h:230</a></div></div>
|
|
1145
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a5dfa3f178d4abf37177d0d74ff4c6a97"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a5dfa3f178d4abf37177d0d74ff4c6a97">SVF::GenericGraph< PAGNode, PAGEdge >::const_iterator</a></div><div class="ttdeci">IDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00338">GenericGraph.h:338</a></div></div>
|
|
1196
1146
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aefb9169c4d5c60edf73ccc24d40fa7e8"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aefb9169c4d5c60edf73ccc24d40fa7e8">SVF::FlowSensitive::FlowSensitive</a></div><div class="ttdeci">FlowSensitive(PAG *_pag, PTATY type=FSSPARSE_WPA)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00061">FlowSensitive.h:61</a></div></div>
|
|
1197
|
-
<div class="ttc" id="
|
|
1198
|
-
<div class="ttc" id="
|
|
1199
|
-
<div class="ttc" id="
|
|
1200
|
-
<div class="ttc" id="
|
|
1201
|
-
<div class="ttc" id="
|
|
1202
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a593177519a6bfab63dbb12dbc1ffbc20"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a593177519a6bfab63dbb12dbc1ffbc20">SVF::VersionedFlowSensitive::numPrelabeledNodes</a></div><div class="ttdeci">Size_t numPrelabeledNodes</div><div class="ttdoc">Additional statistics. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00234">VersionedFlowSensitive.h:234</a></div></div>
|
|
1203
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a8871031546861343c05346ae1a4550cd"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a8871031546861343c05346ae1a4550cd">SVF::VersionedFlowSensitive::meldMappingTime</a></div><div class="ttdeci">double meldMappingTime</div><div class="ttdoc">Time to map MeldVersions to Versions. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00240">VersionedFlowSensitive.h:240</a></div></div>
|
|
1147
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af15bb6be283fee2fcc4b1fb7d8190451"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af15bb6be283fee2fcc4b1fb7d8190451">SVF::VersionedFlowSensitive::versionPropTime</a></div><div class="ttdeci">double versionPropTime</div><div class="ttdoc">Time to propagate versions to versions which rely on them. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00231">VersionedFlowSensitive.h:231</a></div></div>
|
|
1148
|
+
<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#l00369">GenericGraph.h:369</a></div></div>
|
|
1149
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a77a5dd9578def9a8e2b48e8b90d9b996"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a77a5dd9578def9a8e2b48e8b90d9b996">SVF::VersionedFlowSensitive::prelabelingTime</a></div><div class="ttdeci">double prelabelingTime</div><div class="ttdoc">Time to prelabel SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00229">VersionedFlowSensitive.h:229</a></div></div>
|
|
1150
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a593177519a6bfab63dbb12dbc1ffbc20"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a593177519a6bfab63dbb12dbc1ffbc20">SVF::VersionedFlowSensitive::numPrelabeledNodes</a></div><div class="ttdeci">Size_t numPrelabeledNodes</div><div class="ttdoc">Additional statistics. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00226">VersionedFlowSensitive.h:226</a></div></div>
|
|
1151
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a8771956f7595b66d825b3dc459d1ae49"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static PAG * pag</div><div class="ttdoc">PAG. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00147">PointerAnalysis.h:147</a></div></div>
|
|
1204
1152
|
</div><!-- fragment -->
|
|
1205
1153
|
</div>
|
|
1206
1154
|
</div>
|
|
@@ -1241,9 +1189,97 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1241
1189
|
|
|
1242
1190
|
<p>Return key into vPtD for address-taken var of a specific version. </p>
|
|
1243
1191
|
|
|
1244
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1245
|
-
<div class="fragment"><div class="line"><a name="
|
|
1246
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
1192
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00024">24</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1193
|
+
<div class="fragment"><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> {</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(version != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> && <span class="stringliteral">"VersionedFlowSensitive::atKey: trying to use an invalid version!"</span>);</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <span class="keywordflow">return</span> std::make_pair(var, version);</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> }</div><div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1194
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00044">VersionedFlowSensitive.h:44</a></div></div>
|
|
1195
|
+
</div><!-- fragment -->
|
|
1196
|
+
</div>
|
|
1197
|
+
</div>
|
|
1198
|
+
<a id="a3407cc82ef9806e26b79edb677979014"></a>
|
|
1199
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a3407cc82ef9806e26b79edb677979014">◆ </a></span>buildDeltaMaps()</h2>
|
|
1200
|
+
|
|
1201
|
+
<div class="memitem">
|
|
1202
|
+
<div class="memproto">
|
|
1203
|
+
<table class="mlabels">
|
|
1204
|
+
<tr>
|
|
1205
|
+
<td class="mlabels-left">
|
|
1206
|
+
<table class="memname">
|
|
1207
|
+
<tr>
|
|
1208
|
+
<td class="memname">void VersionedFlowSensitive::buildDeltaMaps </td>
|
|
1209
|
+
<td>(</td>
|
|
1210
|
+
<td class="paramtype">void </td>
|
|
1211
|
+
<td class="paramname"></td><td>)</td>
|
|
1212
|
+
<td></td>
|
|
1213
|
+
</tr>
|
|
1214
|
+
</table>
|
|
1215
|
+
</td>
|
|
1216
|
+
<td class="mlabels-right">
|
|
1217
|
+
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">virtual</span></span> </td>
|
|
1218
|
+
</tr>
|
|
1219
|
+
</table>
|
|
1220
|
+
</div><div class="memdoc">
|
|
1221
|
+
|
|
1222
|
+
<p>Fills in deltaMap and deltaSourceMap for the <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. </p>
|
|
1223
|
+
<p>use pre-analysis call graph to approximate all potential callsites </p>
|
|
1224
|
+
|
|
1225
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00437">437</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1226
|
+
<div class="fragment"><div class="line"><a name="l00438"></a><span class="lineno"> 438</span> {</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a11ddfa1faebf56e74e6dcc53e16142e1">deltaMap</a>.resize(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="comment">// Call block nodes corresponding to all delta nodes.</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const CallBlockNode *></a> deltaCBNs;</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>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFG.html#a225a91c04afac6a8fe198e9860890a52">SVFG::const_iterator</a> it = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  {</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = it->first;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *s = it->second;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> </div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="comment">// Cases:</span></div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="comment">// * Function entry: can get new incoming indirect edges through ind. callsites.</span></div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="comment">// * Callsite returns: can get new incoming indirect edges if the callsite is indirect.</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="comment">// * Otherwise: static.</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="keywordtype">bool</span> isDelta = <span class="keyword">false</span>;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fn = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#ae2cff3c963136f474fac0a66aa8cff7b">isFunEntrySVFGNode</a>(s))</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_1PTACallGraphEdge.html#aca11d1b778309a72e9d345bd02324459">PTACallGraphEdge::CallInstSet</a> callsites;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-><a class="code" href="classSVF_1_1PTACallGraph.html#a9a4b0c6672288b9201ab254b4c49548d">getIndCallSitesInvokingCallee</a>(fn, callsites);</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  isDelta = !callsites.empty();</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordflow">if</span> (isDelta)</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  {</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="comment">// TODO: could we use deltaCBNs in the call above, avoiding this loop?</span></div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a> *cbn : callsites) deltaCBNs.insert(cbn);</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>  }</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a> *cbn = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#ac75b83bdf3bcfecaae579716ab33dd61">isCallSiteRetSVFGNode</a>(s))</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  isDelta = cbn->isIndirectCall();</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">if</span> (isDelta) deltaCBNs.insert(cbn);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  }</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a11ddfa1faebf56e74e6dcc53e16142e1">deltaMap</a>[l] = isDelta;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  }</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_1VersionedFlowSensitive.html#aee97e196225aaad29c0bd31d3ccbabf6">deltaSourceMap</a>.resize(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>(), <span class="keyword">false</span>);</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>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFG.html#a225a91c04afac6a8fe198e9860890a52">SVFG::const_iterator</a> it = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  {</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = it->first;</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *s = it->second;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a> *cbn = SVFUtil::dyn_cast<CallBlockNode>(s-><a class="code" href="classSVF_1_1VFGNode.html#a0675465e11d1d42ee7e2b7ab3c5de829">getICFGNode</a>()))</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  {</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">if</span> (deltaCBNs.find(cbn) != deltaCBNs.end()) <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aee97e196225aaad29c0bd31d3ccbabf6">deltaSourceMap</a>[l] = <span class="keyword">true</span>;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }</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>  <span class="comment">// TODO: this is an over-approximation but it sound, marking every formal out as</span></div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  <span class="comment">// a delta-source.</span></div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keywordflow">if</span> (SVFUtil::isa<FormalOUTSVFGNode>(s)) <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aee97e196225aaad29c0bd31d3ccbabf6">deltaSourceMap</a>[l] = <span class="keyword">true</span>;</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> }</div><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#l00365">GenericGraph.h:365</a></div></div>
|
|
1227
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a11ddfa1faebf56e74e6dcc53e16142e1"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a11ddfa1faebf56e74e6dcc53e16142e1">SVF::VersionedFlowSensitive::deltaMap</a></div><div class="ttdeci">std::vector< bool > deltaMap</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00211">VersionedFlowSensitive.h:211</a></div></div>
|
|
1228
|
+
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
|
|
1229
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00417">GenericGraph.h:417</a></div></div>
|
|
1230
|
+
<div class="ttc" id="classSVF_1_1VFG_html_a225a91c04afac6a8fe198e9860890a52"><div class="ttname"><a href="classSVF_1_1VFG.html#a225a91c04afac6a8fe198e9860890a52">SVF::VFG::const_iterator</a></div><div class="ttdeci">VFGNodeIDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00080">VFG.h:80</a></div></div>
|
|
1231
|
+
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
1232
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
|
|
1233
|
+
<div class="ttc" id="classSVF_1_1VFGNode_html_a0675465e11d1d42ee7e2b7ab3c5de829"><div class="ttname"><a href="classSVF_1_1VFGNode.html#a0675465e11d1d42ee7e2b7ab3c5de829">SVF::VFGNode::getICFGNode</a></div><div class="ttdeci">virtual const ICFGNode * getICFGNode() const</div><div class="ttdoc">Return corresponding ICFG node. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00073">VFGNode.h:73</a></div></div>
|
|
1234
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aee97e196225aaad29c0bd31d3ccbabf6"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aee97e196225aaad29c0bd31d3ccbabf6">SVF::VersionedFlowSensitive::deltaSourceMap</a></div><div class="ttdeci">std::vector< bool > deltaSourceMap</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00216">VersionedFlowSensitive.h:216</a></div></div>
|
|
1235
|
+
<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#l00369">GenericGraph.h:369</a></div></div>
|
|
1236
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a7c9b7e5fe37ae31ba84d167945ca57df"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">SVF::PointerAnalysis::getPTACallGraph</a></div><div class="ttdeci">PTACallGraph * getPTACallGraph() const</div><div class="ttdoc">Return call graph. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00178">PointerAnalysis.h:178</a></div></div>
|
|
1237
|
+
<div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00095">SVFBasicTypes.h:95</a></div></div>
|
|
1238
|
+
<div class="ttc" id="classSVF_1_1PTACallGraph_html_a9a4b0c6672288b9201ab254b4c49548d"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a9a4b0c6672288b9201ab254b4c49548d">SVF::PTACallGraph::getIndCallSitesInvokingCallee</a></div><div class="ttdeci">void getIndCallSitesInvokingCallee(const SVFFunction *callee, PTACallGraphEdge::CallInstSet &csSet)</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8cpp_source.html#l00246">PTACallGraph.cpp:246</a></div></div>
|
|
1239
|
+
<div class="ttc" id="classSVF_1_1SVFG_html_ac75b83bdf3bcfecaae579716ab33dd61"><div class="ttname"><a href="classSVF_1_1SVFG.html#ac75b83bdf3bcfecaae579716ab33dd61">SVF::SVFG::isCallSiteRetSVFGNode</a></div><div class="ttdeci">const CallBlockNode * isCallSiteRetSVFGNode(const SVFGNode *node) const</div><div class="ttdoc">Whether a node is callsite return SVFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00714">SVFG.cpp:714</a></div></div>
|
|
1240
|
+
<div class="ttc" id="classSVF_1_1SVFG_html_ae2cff3c963136f474fac0a66aa8cff7b"><div class="ttname"><a href="classSVF_1_1SVFG.html#ae2cff3c963136f474fac0a66aa8cff7b">SVF::SVFG::isFunEntrySVFGNode</a></div><div class="ttdeci">const SVFFunction * isFunEntrySVFGNode(const SVFGNode *node) const</div><div class="ttdoc">Whether a node is function entry SVFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00688">SVFG.cpp:688</a></div></div>
|
|
1241
|
+
<div class="ttc" id="classSVF_1_1CallBlockNode_html"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html">SVF::CallBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
|
|
1242
|
+
<div class="ttc" id="classSVF_1_1PTACallGraphEdge_html_aca11d1b778309a72e9d345bd02324459"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html#aca11d1b778309a72e9d345bd02324459">SVF::PTACallGraphEdge::CallInstSet</a></div><div class="ttdeci">Set< const CallBlockNode * > CallInstSet</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00055">PTACallGraph.h:55</a></div></div>
|
|
1243
|
+
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a5cfee013a1a5821ef0c449842dd8690d"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">SVF::FlowSensitive::ander</a></div><div class="ttdeci">AndersenWaveDiff * ander</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00284">FlowSensitive.h:284</a></div></div>
|
|
1244
|
+
<div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00047">VFGNode.h:47</a></div></div>
|
|
1245
|
+
</div><!-- fragment -->
|
|
1246
|
+
</div>
|
|
1247
|
+
</div>
|
|
1248
|
+
<a id="a8da4b9bd9d0c640a6857b4dc4991817c"></a>
|
|
1249
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a8da4b9bd9d0c640a6857b4dc4991817c">◆ </a></span>buildIsStoreLoadMaps()</h2>
|
|
1250
|
+
|
|
1251
|
+
<div class="memitem">
|
|
1252
|
+
<div class="memproto">
|
|
1253
|
+
<table class="mlabels">
|
|
1254
|
+
<tr>
|
|
1255
|
+
<td class="mlabels-left">
|
|
1256
|
+
<table class="memname">
|
|
1257
|
+
<tr>
|
|
1258
|
+
<td class="memname">void VersionedFlowSensitive::buildIsStoreLoadMaps </td>
|
|
1259
|
+
<td>(</td>
|
|
1260
|
+
<td class="paramtype">void </td>
|
|
1261
|
+
<td class="paramname"></td><td>)</td>
|
|
1262
|
+
<td></td>
|
|
1263
|
+
</tr>
|
|
1264
|
+
</table>
|
|
1265
|
+
</td>
|
|
1266
|
+
<td class="mlabels-right">
|
|
1267
|
+
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">virtual</span></span> </td>
|
|
1268
|
+
</tr>
|
|
1269
|
+
</table>
|
|
1270
|
+
</div><div class="memdoc">
|
|
1271
|
+
|
|
1272
|
+
<p>Fills in isStoreMap and isLoadMap. </p>
|
|
1273
|
+
|
|
1274
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00414">414</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1275
|
+
<div class="fragment"><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> {</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a18e25c3871d7cc1a6bb0592ceca90f88">isStoreMap</a>.resize(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6bb3db072db0b899f306b37f1146f83d">isLoadMap</a>.resize(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFG.html#a225a91c04afac6a8fe198e9860890a52">SVFG::const_iterator</a> it = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</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>  <span class="keywordflow">if</span> (SVFUtil::isa<StoreSVFGNode>(it->second)) <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a18e25c3871d7cc1a6bb0592ceca90f88">isStoreMap</a>[it->first] = <span class="keyword">true</span>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">else</span> <a class="code" href="tools_2DDA_2CMakeLists_8txt.html#a7686df215f6da6fdcfa2c20950c96939">if</a> (SVFUtil::isa<LoadSVFGNode>(it->second)) <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6bb3db072db0b899f306b37f1146f83d">isLoadMap</a>[it->first] = <span class="keyword">true</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"> 423</span> }</div><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#l00365">GenericGraph.h:365</a></div></div>
|
|
1276
|
+
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
|
|
1277
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00417">GenericGraph.h:417</a></div></div>
|
|
1278
|
+
<div class="ttc" id="classSVF_1_1VFG_html_a225a91c04afac6a8fe198e9860890a52"><div class="ttname"><a href="classSVF_1_1VFG.html#a225a91c04afac6a8fe198e9860890a52">SVF::VFG::const_iterator</a></div><div class="ttdeci">VFGNodeIDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00080">VFG.h:80</a></div></div>
|
|
1279
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a18e25c3871d7cc1a6bb0592ceca90f88"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a18e25c3871d7cc1a6bb0592ceca90f88">SVF::VersionedFlowSensitive::isStoreMap</a></div><div class="ttdeci">std::vector< bool > isStoreMap</div><div class="ttdoc">isStoreMap[l] means SVFG node l is a store node. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00219">VersionedFlowSensitive.h:219</a></div></div>
|
|
1280
|
+
<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#l00369">GenericGraph.h:369</a></div></div>
|
|
1281
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a6bb3db072db0b899f306b37f1146f83d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a6bb3db072db0b899f306b37f1146f83d">SVF::VersionedFlowSensitive::isLoadMap</a></div><div class="ttdeci">std::vector< bool > isLoadMap</div><div class="ttdoc">isLoadMap[l] means SVFG node l is a load node. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00222">VersionedFlowSensitive.h:222</a></div></div>
|
|
1282
|
+
<div class="ttc" id="tools_2DDA_2CMakeLists_8txt_html_a7686df215f6da6fdcfa2c20950c96939"><div class="ttname"><a href="tools_2DDA_2CMakeLists_8txt.html#a7686df215f6da6fdcfa2c20950c96939">if</a></div><div class="ttdeci">if(DEFINED IN_SOURCE_BUILD) set(LLVM_LINK_COMPONENTS BitWriter Core IPO IrReader InstCombine Instrumentation Target Linker Analysis ScalarOpts Support Svf Cudd) add_llvm_tool(dvf dda.cpp) else() add_executable(dvf dda.cpp) target_link_libraries(dvf Svf Cudd $</div><div class="ttdef"><b>Definition:</b> <a href="tools_2DDA_2CMakeLists_8txt_source.html#l00002">CMakeLists.txt:2</a></div></div>
|
|
1247
1283
|
</div><!-- fragment -->
|
|
1248
1284
|
</div>
|
|
1249
1285
|
</div>
|
|
@@ -1273,8 +1309,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1273
1309
|
|
|
1274
1310
|
<p>Methods to support type inquiry through isa, cast, and dyn_cast. </p>
|
|
1275
1311
|
|
|
1276
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
1277
|
-
<div class="fragment"><div class="line"><a name="
|
|
1312
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00066">66</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
1313
|
+
<div class="fragment"><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  }</div></div><!-- fragment -->
|
|
1278
1314
|
</div>
|
|
1279
1315
|
</div>
|
|
1280
1316
|
<a id="abe1874f12ba05b4f453604c6d91598d6"></a>
|
|
@@ -1301,8 +1337,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1301
1337
|
</table>
|
|
1302
1338
|
</div><div class="memdoc">
|
|
1303
1339
|
|
|
1304
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
1305
|
-
<div class="fragment"><div class="line"><a name="
|
|
1340
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00070">70</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
1341
|
+
<div class="fragment"><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>  <span class="keywordflow">return</span> pta->getAnalysisTy() == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9">VFS_WPA</a>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  }</div><div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a412254a7738029bf3ee96f5c15a6bec9">SVF::PointerAnalysis::VFS_WPA</a></div><div class="ttdoc">Versioned sparse flow-sensitive WPA. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00080">PointerAnalysis.h:80</a></div></div>
|
|
1306
1342
|
</div><!-- fragment -->
|
|
1307
1343
|
</div>
|
|
1308
1344
|
</div>
|
|
@@ -1334,12 +1370,12 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1334
1370
|
|
|
1335
1371
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#a89d3b97b8077027514135c9201c4d02c">SVF::FlowSensitive</a>.</p>
|
|
1336
1372
|
|
|
1337
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1338
|
-
<div class="fragment"><div class="line"><a name="
|
|
1373
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00742">742</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1374
|
+
<div class="fragment"><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>  std::vector<std::pair<unsigned, unsigned>> keys;</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">PAG::iterator</a> pit = <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); pit != <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++pit)</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>  <span class="keywordtype">unsigned</span> occ = 1;</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <span class="keywordtype">unsigned</span> v = pit->first;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#af34d8a738db4f40addc1de930e79654f">Options::PredictPtOcc</a> && <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a2b288fce8efa1b0b1b620efec2c96eb6">getObject</a>(v) != <span class="keyword">nullptr</span>) occ = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>[v].size() + 1;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(occ != 0);</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  keys.push_back(std::make_pair(v, occ));</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  }</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span> </div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> nodeMapping =</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  std::make_shared<std::vector<NodeID>>(<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a33d502a0bd49307cd824e34b73157b9b">NodeIDAllocator::Clusterer::cluster</a>(<a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a>, keys, <a class="code" href="classSVF_1_1FlowSensitive.html#adba7ffe68ae7edce9b3aa896f978da6b">candidateMappings</a>, <span class="stringliteral">"aux-ander"</span>));</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> reverseNodeMapping =</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  std::make_shared<std::vector<NodeID>>(<a class="code" href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a36b25188130f4c21d145c950a70d616f">NodeIDAllocator::Clusterer::getReverseNodeMapping</a>(*nodeMapping));</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span> </div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <a class="code" href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8">PointsTo::setCurrentBestNodeMapping</a>(nodeMapping, reverseNodeMapping);</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span> }</div><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#l00365">GenericGraph.h:365</a></div></div>
|
|
1339
1375
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1340
1376
|
<div class="ttc" id="classSVF_1_1PAG_html_a2b288fce8efa1b0b1b620efec2c96eb6"><div class="ttname"><a href="classSVF_1_1PAG.html#a2b288fce8efa1b0b1b620efec2c96eb6">SVF::PAG::getObject</a></div><div class="ttdeci">const MemObj * getObject(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00589">PAG.h:589</a></div></div>
|
|
1341
|
-
<div class="ttc" id="classSVF_1_1Options_html_af34d8a738db4f40addc1de930e79654f"><div class="ttname"><a href="classSVF_1_1Options.html#af34d8a738db4f40addc1de930e79654f">SVF::Options::PredictPtOcc</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PredictPtOcc</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#
|
|
1342
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af0859eb2a5b46c45aa4314e6e54f4438"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">SVF::VersionedFlowSensitive::stmtReliance</a></div><div class="ttdeci">Map< NodeID, Map< Version, NodeBS > > stmtReliance</div><div class="ttdoc">o x version -> statement nodes which rely on that o/version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
1377
|
+
<div class="ttc" id="classSVF_1_1Options_html_af34d8a738db4f40addc1de930e79654f"><div class="ttname"><a href="classSVF_1_1Options.html#af34d8a738db4f40addc1de930e79654f">SVF::Options::PredictPtOcc</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PredictPtOcc</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00065">Options.h:65</a></div></div>
|
|
1378
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af0859eb2a5b46c45aa4314e6e54f4438"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">SVF::VersionedFlowSensitive::stmtReliance</a></div><div class="ttdeci">Map< NodeID, Map< Version, NodeBS > > stmtReliance</div><div class="ttdoc">o x version -> statement nodes which rely on that o/version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00189">VersionedFlowSensitive.h:189</a></div></div>
|
|
1343
1379
|
<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#l00369">GenericGraph.h:369</a></div></div>
|
|
1344
1380
|
<div class="ttc" id="classSVF_1_1PointsTo_html_a849f670b38cb6f65fc23707a212591c7"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">SVF::PointsTo::MappingPtr</a></div><div class="ttdeci">std::shared_ptr< std::vector< NodeID > > MappingPtr</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00041">PointsTo.h:41</a></div></div>
|
|
1345
1381
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph< PAGNode, PAGEdge >::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#l00337">GenericGraph.h:337</a></div></div>
|
|
@@ -1378,15 +1414,15 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1378
1414
|
|
|
1379
1415
|
<p>Create single instance of versioned flow-sensitive points-to analysis. </p>
|
|
1380
1416
|
|
|
1381
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
1382
|
-
<div class="fragment"><div class="line"><a name="
|
|
1417
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00077">77</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
1418
|
+
<div class="fragment"><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a53b8a881400d7b353133c68295812efb">vfspta</a> == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a53b8a881400d7b353133c68295812efb">vfspta</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af52cafc2bb393823f51ca89a0abacec4">VersionedFlowSensitive</a>(_pag);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a53b8a881400d7b353133c68295812efb">vfspta</a>-><a class="code" href="classSVF_1_1FlowSensitive.html#a267f7198600dde3054feb40def7a6681">analyze</a>();</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  }</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a53b8a881400d7b353133c68295812efb">vfspta</a>;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a53b8a881400d7b353133c68295812efb"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a53b8a881400d7b353133c68295812efb">SVF::VersionedFlowSensitive::vfspta</a></div><div class="ttdeci">static VersionedFlowSensitive * vfspta</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00234">VersionedFlowSensitive.h:234</a></div></div>
|
|
1383
1419
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a267f7198600dde3054feb40def7a6681"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a267f7198600dde3054feb40def7a6681">SVF::FlowSensitive::analyze</a></div><div class="ttdeci">virtual void analyze()</div><div class="ttdoc">Flow sensitive analysis. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00088">FlowSensitive.cpp:88</a></div></div>
|
|
1384
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af52cafc2bb393823f51ca89a0abacec4"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af52cafc2bb393823f51ca89a0abacec4">SVF::VersionedFlowSensitive::VersionedFlowSensitive</a></div><div class="ttdeci">VersionedFlowSensitive(PAG *_pag, PTATY type=VFS_WPA)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#
|
|
1420
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af52cafc2bb393823f51ca89a0abacec4"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af52cafc2bb393823f51ca89a0abacec4">SVF::VersionedFlowSensitive::VersionedFlowSensitive</a></div><div class="ttdeci">VersionedFlowSensitive(PAG *_pag, PTATY type=VFS_WPA)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00030">VersionedFlowSensitive.cpp:30</a></div></div>
|
|
1385
1421
|
</div><!-- fragment -->
|
|
1386
1422
|
</div>
|
|
1387
1423
|
</div>
|
|
1388
|
-
<a id="
|
|
1389
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1424
|
+
<a id="a9f9b00551c157f42d1d995e8c4efb54b"></a>
|
|
1425
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a9f9b00551c157f42d1d995e8c4efb54b">◆ </a></span>delta()</h2>
|
|
1390
1426
|
|
|
1391
1427
|
<div class="memitem">
|
|
1392
1428
|
<div class="memproto">
|
|
@@ -1397,7 +1433,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1397
1433
|
<tr>
|
|
1398
1434
|
<td class="memname">bool VersionedFlowSensitive::delta </td>
|
|
1399
1435
|
<td>(</td>
|
|
1400
|
-
<td class="paramtype"
|
|
1436
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1401
1437
|
<td class="paramname"><em>l</em></td><td>)</td>
|
|
1402
1438
|
<td> const</td>
|
|
1403
1439
|
</tr>
|
|
@@ -1408,27 +1444,16 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1408
1444
|
</tr>
|
|
1409
1445
|
</table>
|
|
1410
1446
|
</div><div class="memdoc">
|
|
1411
|
-
<p>Returns true if l is a delta node, i.e., may
|
|
1412
|
-
<p>use pre-analysis call graph to approximate all potential callsites </p>
|
|
1447
|
+
<p>Returns true if l is a delta node, i.e., may get a new incoming indirect edge due to on-the-fly callgraph construction. </p>
|
|
1413
1448
|
|
|
1414
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1415
|
-
<div class="fragment"><div class="line"><a name="
|
|
1416
|
-
<div class="ttc" id="
|
|
1417
|
-
<div class="ttc" id="classSVF_1_1SVFG_html_a7ace06b6c893b31f7dec2abe54e33e11"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">SVF::SVFG::getSVFGNode</a></div><div class="ttdeci">SVFGNode * getSVFGNode(NodeID id) const</div><div class="ttdoc">Get a SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00150">SVFG.h:150</a></div></div>
|
|
1418
|
-
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00101">SVFBasicTypes.h:101</a></div></div>
|
|
1419
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a7c9b7e5fe37ae31ba84d167945ca57df"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">SVF::PointerAnalysis::getPTACallGraph</a></div><div class="ttdeci">PTACallGraph * getPTACallGraph() const</div><div class="ttdoc">Return call graph. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00178">PointerAnalysis.h:178</a></div></div>
|
|
1420
|
-
<div class="ttc" id="classSVF_1_1PTACallGraph_html_a9a4b0c6672288b9201ab254b4c49548d"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a9a4b0c6672288b9201ab254b4c49548d">SVF::PTACallGraph::getIndCallSitesInvokingCallee</a></div><div class="ttdeci">void getIndCallSitesInvokingCallee(const SVFFunction *callee, PTACallGraphEdge::CallInstSet &csSet)</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8cpp_source.html#l00246">PTACallGraph.cpp:246</a></div></div>
|
|
1421
|
-
<div class="ttc" id="classSVF_1_1SVFG_html_ac75b83bdf3bcfecaae579716ab33dd61"><div class="ttname"><a href="classSVF_1_1SVFG.html#ac75b83bdf3bcfecaae579716ab33dd61">SVF::SVFG::isCallSiteRetSVFGNode</a></div><div class="ttdeci">const CallBlockNode * isCallSiteRetSVFGNode(const SVFGNode *node) const</div><div class="ttdoc">Whether a node is callsite return SVFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00714">SVFG.cpp:714</a></div></div>
|
|
1422
|
-
<div class="ttc" id="classSVF_1_1SVFG_html_ae2cff3c963136f474fac0a66aa8cff7b"><div class="ttname"><a href="classSVF_1_1SVFG.html#ae2cff3c963136f474fac0a66aa8cff7b">SVF::SVFG::isFunEntrySVFGNode</a></div><div class="ttdeci">const SVFFunction * isFunEntrySVFGNode(const SVFGNode *node) const</div><div class="ttdoc">Whether a node is function entry SVFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00688">SVFG.cpp:688</a></div></div>
|
|
1423
|
-
<div class="ttc" id="classSVF_1_1CallBlockNode_html"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html">SVF::CallBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
|
|
1424
|
-
<div class="ttc" id="classSVF_1_1PTACallGraphEdge_html_aca11d1b778309a72e9d345bd02324459"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html#aca11d1b778309a72e9d345bd02324459">SVF::PTACallGraphEdge::CallInstSet</a></div><div class="ttdeci">Set< const CallBlockNode * > CallInstSet</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00055">PTACallGraph.h:55</a></div></div>
|
|
1425
|
-
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a5cfee013a1a5821ef0c449842dd8690d"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">SVF::FlowSensitive::ander</a></div><div class="ttdeci">AndersenWaveDiff * ander</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00284">FlowSensitive.h:284</a></div></div>
|
|
1426
|
-
<div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00047">VFGNode.h:47</a></div></div>
|
|
1449
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00402">402</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1450
|
+
<div class="fragment"><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(l < <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a11ddfa1faebf56e74e6dcc53e16142e1">deltaMap</a>.size() && <span class="stringliteral">"VFS::delta: deltaMap is missing SVFG nodes!"</span>);</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a11ddfa1faebf56e74e6dcc53e16142e1">deltaMap</a>[l];</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a11ddfa1faebf56e74e6dcc53e16142e1"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a11ddfa1faebf56e74e6dcc53e16142e1">SVF::VersionedFlowSensitive::deltaMap</a></div><div class="ttdeci">std::vector< bool > deltaMap</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00211">VersionedFlowSensitive.h:211</a></div></div>
|
|
1451
|
+
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1427
1452
|
</div><!-- fragment -->
|
|
1428
1453
|
</div>
|
|
1429
1454
|
</div>
|
|
1430
|
-
<a id="
|
|
1431
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1455
|
+
<a id="a3fa5afa4f54e0828ec090fde07b1bfa2"></a>
|
|
1456
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a3fa5afa4f54e0828ec090fde07b1bfa2">◆ </a></span>deltaSource()</h2>
|
|
1432
1457
|
|
|
1433
1458
|
<div class="memitem">
|
|
1434
1459
|
<div class="memproto">
|
|
@@ -1437,47 +1462,24 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1437
1462
|
<td class="mlabels-left">
|
|
1438
1463
|
<table class="memname">
|
|
1439
1464
|
<tr>
|
|
1440
|
-
<td class="memname">
|
|
1465
|
+
<td class="memname">bool VersionedFlowSensitive::deltaSource </td>
|
|
1441
1466
|
<td>(</td>
|
|
1442
|
-
<td class="paramtype">
|
|
1443
|
-
<td class="paramname"></td><td>)</td>
|
|
1444
|
-
<td
|
|
1467
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1468
|
+
<td class="paramname"><em>l</em></td><td>)</td>
|
|
1469
|
+
<td> const</td>
|
|
1445
1470
|
</tr>
|
|
1446
1471
|
</table>
|
|
1447
1472
|
</td>
|
|
1448
1473
|
<td class="mlabels-right">
|
|
1449
|
-
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
1474
|
+
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">virtual</span></span> </td>
|
|
1450
1475
|
</tr>
|
|
1451
1476
|
</table>
|
|
1452
1477
|
</div><div class="memdoc">
|
|
1453
|
-
<p>
|
|
1478
|
+
<p>Returns true if l is a delta-source node, i.e., may get a new outgoing indirect edge to a delta node due to on-the-fly callgraph construction. </p>
|
|
1454
1479
|
|
|
1455
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1456
|
-
<div class="fragment"><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> {</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="comment">// Use a set-based version to build, then we'll move things to vectors.</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, Map<Version, Set<Version></a>>> setVersionReliance;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">SVFG::iterator</a> it = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = it->first;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *ln = it->second;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a> *e : ln-><a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>())</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a> *ie = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>>(e);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">if</span> (!ie) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : ie-><a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>())</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>  <span class="comment">// Given l --o--> lp, c(o) at lp relies on y(o) at l.</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> lp = ie-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getId();</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> y = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6ea3f8e2aa85ea588735514c0b6ff255">getYield</a>(l, o);</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span> (y == <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> cp = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#ad8a7b01257f4b425007f3e0054dc6ae9">getConsume</a>(lp, o);</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">if</span> (cp == <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">if</span> (cp != y) setVersionReliance[o][y].insert(cp);</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"> 281</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="comment">// When an object/version points-to set changes, these nodes need to know.</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="keywordflow">if</span> (SVFUtil::isa<LoadSVFGNode>(ln) || SVFUtil::isa<StoreSVFGNode>(ln))</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <span class="keyword">const</span> LocVersionMap::const_iterator lovmIt = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>.find(l);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordflow">if</span> (lovmIt != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>.end())</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> ObjToVersionMap::value_type &ov : lovmIt->second)</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  {</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = ov.first;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = ov.second;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>[o][v].set(l);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  }</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  }</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"> 298</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a>, <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<Version></a>>> &ovvs : setVersionReliance)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  {</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = ovvs.first;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Version, std::vector<Version></a>> &osRelying = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>[o];</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<<a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a>, <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<Version></a>> &vvs : ovvs.second)</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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = vvs.first;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<Version></a> &vs = vvs.second;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  osRelying[v] = std::vector<Version>(vs.begin(), vs.end());</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  }</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  }</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span> </div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a80535bb813f8bf240a0b54ac6ad4b257">relianceTime</a> = (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> }</div><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#l00365">GenericGraph.h:365</a></div></div>
|
|
1457
|
-
<div class="ttc" id="
|
|
1458
|
-
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
1459
|
-
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00101">SVFBasicTypes.h:101</a></div></div>
|
|
1460
|
-
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
1461
|
-
<div class="ttc" id="classSVF_1_1VFGEdge_html"><div class="ttname"><a href="classSVF_1_1VFGEdge.html">SVF::VFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00044">VFGEdge.h:44</a></div></div>
|
|
1462
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af0859eb2a5b46c45aa4314e6e54f4438"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">SVF::VersionedFlowSensitive::stmtReliance</a></div><div class="ttdeci">Map< NodeID, Map< Version, NodeBS > > stmtReliance</div><div class="ttdoc">o x version -> statement nodes which rely on that o/version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00219">VersionedFlowSensitive.h:219</a></div></div>
|
|
1463
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a1dc6e3d4931b53e7e426c0f76d06aeb3"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">SVF::VersionedFlowSensitive::versionReliance</a></div><div class="ttdeci">VersionRelianceMap versionReliance</div><div class="ttdoc">o -> (version -> versions which rely on it). </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00217">VersionedFlowSensitive.h:217</a></div></div>
|
|
1464
|
-
<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#l00369">GenericGraph.h:369</a></div></div>
|
|
1465
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_ad8a7b01257f4b425007f3e0054dc6ae9"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#ad8a7b01257f4b425007f3e0054dc6ae9">SVF::VersionedFlowSensitive::getConsume</a></div><div class="ttdeci">Version getConsume(const NodeID l, const NodeID o)</div><div class="ttdoc">Returns the consumed version of o at l. If no such version exists, returns invalidVersion. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00588">VersionedFlowSensitive.cpp:588</a></div></div>
|
|
1466
|
-
<div class="ttc" id="classSVF_1_1VFG_html_a241d0489bf0315460e2b07db87e7847c"><div class="ttname"><a href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">SVF::VFG::iterator</a></div><div class="ttdeci">VFGNodeIDToNodeMapTy::iterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00079">VFG.h:79</a></div></div>
|
|
1467
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a80535bb813f8bf240a0b54ac6ad4b257"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a80535bb813f8bf240a0b54ac6ad4b257">SVF::VersionedFlowSensitive::relianceTime</a></div><div class="ttdeci">double relianceTime</div><div class="ttdoc">Time to determine version and statement reliance. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00237">VersionedFlowSensitive.h:237</a></div></div>
|
|
1468
|
-
<div class="ttc" id="classSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00089">GenericGraph.h:89</a></div></div>
|
|
1469
|
-
<div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00096">SVFBasicTypes.h:96</a></div></div>
|
|
1470
|
-
<div class="ttc" id="classSVF_1_1GenericNode_html_a2d9cd758d6f8c5189d9b90b74f43e009"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">SVF::GenericNode::getOutEdges</a></div><div class="ttdeci">const GEdgeSetTy & getOutEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00177">GenericGraph.h:177</a></div></div>
|
|
1471
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00205">VersionedFlowSensitive.h:205</a></div></div>
|
|
1472
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
|
|
1473
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00058">VersionedFlowSensitive.h:58</a></div></div>
|
|
1474
|
-
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00171">SVFBasicTypes.h:171</a></div></div>
|
|
1475
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
1476
|
-
<div class="ttc" id="classSVF_1_1IndirectSVFGEdge_html"><div class="ttname"><a href="classSVF_1_1IndirectSVFGEdge.html">SVF::IndirectSVFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGEdge_8h_source.html#l00042">SVFGEdge.h:42</a></div></div>
|
|
1477
|
-
<div class="ttc" id="classSVF_1_1IndirectSVFGEdge_html_a30aca718d25924f1babdf348bb0ace71"><div class="ttname"><a href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">SVF::IndirectSVFGEdge::getPointsTo</a></div><div class="ttdeci">const NodeBS & getPointsTo() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFGEdge_8h_source.html#l00061">SVFGEdge.h:61</a></div></div>
|
|
1478
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a6ea3f8e2aa85ea588735514c0b6ff255"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a6ea3f8e2aa85ea588735514c0b6ff255">SVF::VersionedFlowSensitive::getYield</a></div><div class="ttdeci">Version getYield(const NodeID l, const NodeID o)</div><div class="ttdoc">Returns the yielded version of o at l. If no such version exists, returns invalidVersion. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00593">VersionedFlowSensitive.cpp:593</a></div></div>
|
|
1479
|
-
<div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00047">VFGNode.h:47</a></div></div>
|
|
1480
|
-
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00113">PTAStat.cpp:113</a></div></div>
|
|
1480
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00408">408</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1481
|
+
<div class="fragment"><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> {</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(l < <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aee97e196225aaad29c0bd31d3ccbabf6">deltaSourceMap</a>.size() && <span class="stringliteral">"VFS::delta: deltaSourceMap is missing SVFG nodes!"</span>);</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aee97e196225aaad29c0bd31d3ccbabf6">deltaSourceMap</a>[l];</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> }</div><div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1482
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aee97e196225aaad29c0bd31d3ccbabf6"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aee97e196225aaad29c0bd31d3ccbabf6">SVF::VersionedFlowSensitive::deltaSourceMap</a></div><div class="ttdeci">std::vector< bool > deltaSourceMap</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00216">VersionedFlowSensitive.h:216</a></div></div>
|
|
1481
1483
|
</div><!-- fragment -->
|
|
1482
1484
|
</div>
|
|
1483
1485
|
</div>
|
|
@@ -1507,17 +1509,17 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1507
1509
|
|
|
1508
1510
|
<p>Dumps maps consume and yield. </p>
|
|
1509
1511
|
|
|
1510
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1511
|
-
<div class="fragment"><div class="line"><a name="
|
|
1512
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00869">869</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1513
|
+
<div class="fragment"><div class="line"><a name="l00870"></a><span class="lineno"> 870</span> {</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"# LocVersion Maps\n"</span>;</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">SVFG::iterator</a> it = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  {</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> loc = it->first;</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <span class="keywordtype">bool</span> locPrinted = <span class="keyword">false</span>;</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> *lvm : { &<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>, &<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a16224ee60494bb1fdf1c8a1026fbe7ab">yield</a> })</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  {</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  <span class="keywordflow">if</span> (lvm->at(loc).empty()) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <span class="keywordflow">if</span> (!locPrinted)</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  {</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" "</span> << <span class="stringliteral">"SVFG node "</span> << loc << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  locPrinted = <span class="keyword">true</span>;</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span> </div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" "</span> << (lvm == &<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a> ? <span class="stringliteral">"Consume "</span> : <span class="stringliteral">"Yield "</span>) << <span class="stringliteral">": "</span>;</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> ObjToVersionMap::value_type &ov : lvm->at(loc))</div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  {</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = ov.first;</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = ov.second;</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << (first ? <span class="stringliteral">""</span> : <span class="stringliteral">", "</span>) << <span class="stringliteral">"<"</span> << o << <span class="stringliteral">", "</span> << v << <span class="stringliteral">">"</span>;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  first = <span class="keyword">false</span>;</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>  }</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span> </div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  }</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  }</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span> </div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span> }</div><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#l00365">GenericGraph.h:365</a></div></div>
|
|
1512
1514
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
|
|
1515
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aa689d29ead80303b1ef1e1a91f31c296"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">SVF::VersionedFlowSensitive::LocVersionMap</a></div><div class="ttdeci">std::vector< ObjToVersionMap > LocVersionMap</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00039">VersionedFlowSensitive.h:39</a></div></div>
|
|
1513
1516
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
1514
|
-
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
1517
|
+
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00128">SVFBasicTypes.h:128</a></div></div>
|
|
1515
1518
|
<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#l00369">GenericGraph.h:369</a></div></div>
|
|
1516
1519
|
<div class="ttc" id="classSVF_1_1VFG_html_a241d0489bf0315460e2b07db87e7847c"><div class="ttname"><a href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">SVF::VFG::iterator</a></div><div class="ttdeci">VFGNodeIDToNodeMapTy::iterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00079">VFG.h:79</a></div></div>
|
|
1517
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
1520
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00182">VersionedFlowSensitive.h:182</a></div></div>
|
|
1518
1521
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
1519
|
-
<div class="ttc" id="
|
|
1520
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a16224ee60494bb1fdf1c8a1026fbe7ab"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a16224ee60494bb1fdf1c8a1026fbe7ab">SVF::VersionedFlowSensitive::yield</a></div><div class="ttdeci">LocVersionMap yield</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00209">VersionedFlowSensitive.h:209</a></div></div>
|
|
1522
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a16224ee60494bb1fdf1c8a1026fbe7ab"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a16224ee60494bb1fdf1c8a1026fbe7ab">SVF::VersionedFlowSensitive::yield</a></div><div class="ttdeci">LocVersionMap yield</div><div class="ttdoc">Actual yield map. Yield analogue to consume. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00184">VersionedFlowSensitive.h:184</a></div></div>
|
|
1521
1523
|
</div><!-- fragment -->
|
|
1522
1524
|
</div>
|
|
1523
1525
|
</div>
|
|
@@ -1533,7 +1535,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1533
1535
|
<tr>
|
|
1534
1536
|
<td class="memname">void VersionedFlowSensitive::dumpMeldVersion </td>
|
|
1535
1537
|
<td>(</td>
|
|
1536
|
-
<td class="paramtype"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
1538
|
+
<td class="paramtype"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> & </td>
|
|
1537
1539
|
<td class="paramname"><em>v</em></td><td>)</td>
|
|
1538
1540
|
<td></td>
|
|
1539
1541
|
</tr>
|
|
@@ -1547,8 +1549,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1547
1549
|
|
|
1548
1550
|
<p>Dumps a MeldVersion to stdout. </p>
|
|
1549
1551
|
|
|
1550
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1551
|
-
<div class="fragment"><div class="line"><a name="
|
|
1552
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00902">902</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1553
|
+
<div class="fragment"><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> {</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"[ "</span>;</div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> e : v)</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>  <span class="keywordflow">if</span> (!first)</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  {</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  }</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span> </div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << e;</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  first = <span class="keyword">false</span>;</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  }</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span> </div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" ]"</span>;</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span> }</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
1552
1554
|
</div><!-- fragment -->
|
|
1553
1555
|
</div>
|
|
1554
1556
|
</div>
|
|
@@ -1578,14 +1580,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1578
1580
|
|
|
1579
1581
|
<p>Dumps versionReliance and stmtReliance. </p>
|
|
1580
1582
|
|
|
1581
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1582
|
-
<div class="fragment"><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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"# Version reliances\n"</span>;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a>, std::vector<Version>>>::value_type &ovrv : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>)</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = ovrv.first;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" Object "</span> << o << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a>, std::vector<Version>>::value_type vrv : ovrv.second)</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  {</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = vrv.first;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" Version "</span> << v << <span class="stringliteral">" is a reliance for: "</span>;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> rv : vrv.second)</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="keywordflow">if</span> (!first)</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  {</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  }</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << rv;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  first = <span class="keyword">false</span>;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  }</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  }</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span> </div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"# Statement reliances\n"</span>;</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Version, NodeBS></a>>::value_type &ovss : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>)</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  {</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = ovss.first;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" Object "</span> << o << <span class="stringliteral">"\n"</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>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Version, NodeBS>::value_type</a> &vss : ovss.second)</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = vss.first;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" Version "</span> << v << <span class="stringliteral">" is a reliance for statements: "</span>;</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span> </div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &ss = vss.second;</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> s : ss)</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  {</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">if</span> (!first)</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  {</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << s;</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  first = <span class="keyword">false</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> </div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span> }</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
1583
|
-
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
1584
|
-
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
1585
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af0859eb2a5b46c45aa4314e6e54f4438"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">SVF::VersionedFlowSensitive::stmtReliance</a></div><div class="ttdeci">Map< NodeID, Map< Version, NodeBS > > stmtReliance</div><div class="ttdoc">o x version -> statement nodes which rely on that o/version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
1586
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a1dc6e3d4931b53e7e426c0f76d06aeb3"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">SVF::VersionedFlowSensitive::versionReliance</a></div><div class="ttdeci">VersionRelianceMap versionReliance</div><div class="ttdoc">o -> (version -> versions which rely on it). </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
1583
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00812">812</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1584
|
+
<div class="fragment"><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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"# Version reliances\n"</span>;</div><div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a>, std::vector<Version>>>::value_type &ovrv : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>)</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  {</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = ovrv.first;</div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" Object "</span> << o << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a>, std::vector<Version>>::value_type vrv : ovrv.second)</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  {</div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = vrv.first;</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" Version "</span> << v << <span class="stringliteral">" is a reliance for: "</span>;</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span> </div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> rv : vrv.second)</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>  <span class="keywordflow">if</span> (!first)</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  {</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  }</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << rv;</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  first = <span class="keyword">false</span>;</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  }</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  }</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span> </div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"# Statement reliances\n"</span>;</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Version, NodeBS></a>>::value_type &ovss : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>)</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  {</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = ovss.first;</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" Object "</span> << o << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span> </div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Version, NodeBS>::value_type</a> &vss : ovss.second)</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  {</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = vss.first;</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" Version "</span> << v << <span class="stringliteral">" is a reliance for statements: "</span>;</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span> </div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &ss = vss.second;</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> s : ss)</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>  <span class="keywordflow">if</span> (!first)</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  {</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << s;</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  first = <span class="keyword">false</span>;</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  }</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span> </div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  }</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  }</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span> }</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
1585
|
+
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
|
|
1586
|
+
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00128">SVFBasicTypes.h:128</a></div></div>
|
|
1587
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af0859eb2a5b46c45aa4314e6e54f4438"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">SVF::VersionedFlowSensitive::stmtReliance</a></div><div class="ttdeci">Map< NodeID, Map< Version, NodeBS > > stmtReliance</div><div class="ttdoc">o x version -> statement nodes which rely on that o/version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00189">VersionedFlowSensitive.h:189</a></div></div>
|
|
1588
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a1dc6e3d4931b53e7e426c0f76d06aeb3"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">SVF::VersionedFlowSensitive::versionReliance</a></div><div class="ttdeci">VersionRelianceMap versionReliance</div><div class="ttdoc">o -> (version -> versions which rely on it). </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00187">VersionedFlowSensitive.h:187</a></div></div>
|
|
1587
1589
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
1588
|
-
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
1590
|
+
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00086">SVFBasicTypes.h:86</a></div></div>
|
|
1589
1591
|
</div><!-- fragment -->
|
|
1590
1592
|
</div>
|
|
1591
1593
|
</div>
|
|
@@ -1617,13 +1619,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1617
1619
|
|
|
1618
1620
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3">SVF::FlowSensitive</a>.</p>
|
|
1619
1621
|
|
|
1620
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1621
|
-
<div class="fragment"><div class="line"><a name="
|
|
1622
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00063">63</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1623
|
+
<div class="fragment"><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3">FlowSensitive::finalize</a>();</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="comment">// vPtD->dumpPTData();</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="comment">// dumpReliances();</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// dumpLocVersionMaps();</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> }</div><div class="ttc" id="classSVF_1_1FlowSensitive_html_afed358369102f01f6fe88b1433e704c3"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3">SVF::FlowSensitive::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalize analysis. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00133">FlowSensitive.cpp:133</a></div></div>
|
|
1622
1624
|
</div><!-- fragment -->
|
|
1623
1625
|
</div>
|
|
1624
1626
|
</div>
|
|
1625
|
-
<a id="
|
|
1626
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1627
|
+
<a id="af93e65faae99459621ae45cf9d36005d"></a>
|
|
1628
|
+
<h2 class="memtitle"><span class="permalink"><a href="#af93e65faae99459621ae45cf9d36005d">◆ </a></span>getConsume()</h2>
|
|
1627
1629
|
|
|
1628
1630
|
<div class="memitem">
|
|
1629
1631
|
<div class="memproto">
|
|
@@ -1646,7 +1648,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1646
1648
|
<tr>
|
|
1647
1649
|
<td></td>
|
|
1648
1650
|
<td>)</td>
|
|
1649
|
-
<td></td><td
|
|
1651
|
+
<td></td><td> const</td>
|
|
1650
1652
|
</tr>
|
|
1651
1653
|
</table>
|
|
1652
1654
|
</td>
|
|
@@ -1658,15 +1660,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1658
1660
|
|
|
1659
1661
|
<p>Returns the consumed version of o at l. If no such version exists, returns invalidVersion. </p>
|
|
1660
1662
|
|
|
1661
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1662
|
-
<div class="fragment"><div class="line"><a name="
|
|
1663
|
-
<div class="ttc" id="
|
|
1664
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a08fbc3ede8007689dcde37d56003650e"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a08fbc3ede8007689dcde37d56003650e">SVF::VersionedFlowSensitive::getVersion</a></div><div class="ttdeci">Version getVersion(const NodeID l, const NodeID o, VersionCache &cache, LocVersionMap &lvm)</div><div class="ttdoc">Shared code for getConsume and getYield. They wrap this function. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00566">VersionedFlowSensitive.cpp:566</a></div></div>
|
|
1663
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00772">772</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1664
|
+
<div class="fragment"><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">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6b398d59fc276980dd2d6d48a8675068">getVersion</a>(l, o, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>);</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span> }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00182">VersionedFlowSensitive.h:182</a></div></div>
|
|
1665
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a6b398d59fc276980dd2d6d48a8675068"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a6b398d59fc276980dd2d6d48a8675068">SVF::VersionedFlowSensitive::getVersion</a></div><div class="ttdeci">Version getVersion(const NodeID l, const NodeID o, const LocVersionMap &lvm) const</div><div class="ttdoc">Shared code for getConsume and getYield. They wrap this function. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00762">VersionedFlowSensitive.cpp:762</a></div></div>
|
|
1665
1666
|
</div><!-- fragment -->
|
|
1666
1667
|
</div>
|
|
1667
1668
|
</div>
|
|
1668
|
-
<a id="
|
|
1669
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1669
|
+
<a id="ae83c62a01196991d116ef5c36cb51e31"></a>
|
|
1670
|
+
<h2 class="memtitle"><span class="permalink"><a href="#ae83c62a01196991d116ef5c36cb51e31">◆ </a></span>getReliantVersions()</h2>
|
|
1670
1671
|
|
|
1671
1672
|
<div class="memitem">
|
|
1672
1673
|
<div class="memproto">
|
|
@@ -1675,28 +1676,57 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1675
1676
|
<td class="mlabels-left">
|
|
1676
1677
|
<table class="memname">
|
|
1677
1678
|
<tr>
|
|
1678
|
-
<td class="memname"
|
|
1679
|
+
<td class="memname">std::vector< <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> > & VersionedFlowSensitive::getReliantVersions </td>
|
|
1679
1680
|
<td>(</td>
|
|
1680
1681
|
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1681
|
-
<td class="paramname"><em>
|
|
1682
|
+
<td class="paramname"><em>o</em>, </td>
|
|
1682
1683
|
</tr>
|
|
1683
1684
|
<tr>
|
|
1684
1685
|
<td class="paramkey"></td>
|
|
1685
1686
|
<td></td>
|
|
1686
|
-
<td class="paramtype">const <a class="el" href="namespaceSVF.html#
|
|
1687
|
-
<td class="paramname"><em>
|
|
1687
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> </td>
|
|
1688
|
+
<td class="paramname"><em>v</em> </td>
|
|
1688
1689
|
</tr>
|
|
1689
1690
|
<tr>
|
|
1690
|
-
<td class="paramkey"></td>
|
|
1691
1691
|
<td></td>
|
|
1692
|
-
<td
|
|
1693
|
-
<td
|
|
1692
|
+
<td>)</td>
|
|
1693
|
+
<td></td><td></td>
|
|
1694
|
+
</tr>
|
|
1695
|
+
</table>
|
|
1696
|
+
</td>
|
|
1697
|
+
<td class="mlabels-right">
|
|
1698
|
+
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
1699
|
+
</tr>
|
|
1700
|
+
</table>
|
|
1701
|
+
</div><div class="memdoc">
|
|
1702
|
+
|
|
1703
|
+
<p>Returns the versions of o which rely on o:v. </p>
|
|
1704
|
+
|
|
1705
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00802">802</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1706
|
+
<div class="fragment"><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">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>[o][v];</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a1dc6e3d4931b53e7e426c0f76d06aeb3"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">SVF::VersionedFlowSensitive::versionReliance</a></div><div class="ttdeci">VersionRelianceMap versionReliance</div><div class="ttdoc">o -> (version -> versions which rely on it). </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00187">VersionedFlowSensitive.h:187</a></div></div>
|
|
1707
|
+
</div><!-- fragment -->
|
|
1708
|
+
</div>
|
|
1709
|
+
</div>
|
|
1710
|
+
<a id="a3489def8e16e4d7c83d2c909d3287fc0"></a>
|
|
1711
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a3489def8e16e4d7c83d2c909d3287fc0">◆ </a></span>getStmtReliance()</h2>
|
|
1712
|
+
|
|
1713
|
+
<div class="memitem">
|
|
1714
|
+
<div class="memproto">
|
|
1715
|
+
<table class="mlabels">
|
|
1716
|
+
<tr>
|
|
1717
|
+
<td class="mlabels-left">
|
|
1718
|
+
<table class="memname">
|
|
1719
|
+
<tr>
|
|
1720
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> & VersionedFlowSensitive::getStmtReliance </td>
|
|
1721
|
+
<td>(</td>
|
|
1722
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1723
|
+
<td class="paramname"><em>o</em>, </td>
|
|
1694
1724
|
</tr>
|
|
1695
1725
|
<tr>
|
|
1696
1726
|
<td class="paramkey"></td>
|
|
1697
1727
|
<td></td>
|
|
1698
|
-
<td class="paramtype"
|
|
1699
|
-
<td class="paramname"><em>
|
|
1728
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> </td>
|
|
1729
|
+
<td class="paramname"><em>v</em> </td>
|
|
1700
1730
|
</tr>
|
|
1701
1731
|
<tr>
|
|
1702
1732
|
<td></td>
|
|
@@ -1711,15 +1741,15 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1711
1741
|
</table>
|
|
1712
1742
|
</div><div class="memdoc">
|
|
1713
1743
|
|
|
1714
|
-
<p>
|
|
1744
|
+
<p>Returns the statements which rely on o:v. </p>
|
|
1715
1745
|
|
|
1716
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1717
|
-
<div class="fragment"><div class="line"><a name="
|
|
1746
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00807">807</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1747
|
+
<div class="fragment"><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">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>[o][v];</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span> }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af0859eb2a5b46c45aa4314e6e54f4438"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">SVF::VersionedFlowSensitive::stmtReliance</a></div><div class="ttdeci">Map< NodeID, Map< Version, NodeBS > > stmtReliance</div><div class="ttdoc">o x version -> statement nodes which rely on that o/version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00189">VersionedFlowSensitive.h:189</a></div></div>
|
|
1718
1748
|
</div><!-- fragment -->
|
|
1719
1749
|
</div>
|
|
1720
1750
|
</div>
|
|
1721
|
-
<a id="
|
|
1722
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1751
|
+
<a id="a6b398d59fc276980dd2d6d48a8675068"></a>
|
|
1752
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a6b398d59fc276980dd2d6d48a8675068">◆ </a></span>getVersion()</h2>
|
|
1723
1753
|
|
|
1724
1754
|
<div class="memitem">
|
|
1725
1755
|
<div class="memproto">
|
|
@@ -1728,7 +1758,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1728
1758
|
<td class="mlabels-left">
|
|
1729
1759
|
<table class="memname">
|
|
1730
1760
|
<tr>
|
|
1731
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> VersionedFlowSensitive::
|
|
1761
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> VersionedFlowSensitive::getVersion </td>
|
|
1732
1762
|
<td>(</td>
|
|
1733
1763
|
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1734
1764
|
<td class="paramname"><em>l</em>, </td>
|
|
@@ -1737,12 +1767,18 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1737
1767
|
<td class="paramkey"></td>
|
|
1738
1768
|
<td></td>
|
|
1739
1769
|
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1740
|
-
<td class="paramname"><em>o</em
|
|
1770
|
+
<td class="paramname"><em>o</em>, </td>
|
|
1771
|
+
</tr>
|
|
1772
|
+
<tr>
|
|
1773
|
+
<td class="paramkey"></td>
|
|
1774
|
+
<td></td>
|
|
1775
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> & </td>
|
|
1776
|
+
<td class="paramname"><em>lvm</em> </td>
|
|
1741
1777
|
</tr>
|
|
1742
1778
|
<tr>
|
|
1743
1779
|
<td></td>
|
|
1744
1780
|
<td>)</td>
|
|
1745
|
-
<td></td><td
|
|
1781
|
+
<td></td><td> const</td>
|
|
1746
1782
|
</tr>
|
|
1747
1783
|
</table>
|
|
1748
1784
|
</td>
|
|
@@ -1752,17 +1788,19 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1752
1788
|
</table>
|
|
1753
1789
|
</div><div class="memdoc">
|
|
1754
1790
|
|
|
1755
|
-
<p>
|
|
1791
|
+
<p>Shared code for getConsume and getYield. They wrap this function. </p>
|
|
1756
1792
|
|
|
1757
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1758
|
-
<div class="fragment"><div class="line"><a name="
|
|
1759
|
-
<div class="ttc" id="
|
|
1760
|
-
<div class="ttc" id="
|
|
1793
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00762">762</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1794
|
+
<div class="fragment"><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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, NodeID>::const_iterator</a> canonObjectIt = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">equivalentObject</a>.find(o);</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op = canonObjectIt == <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">equivalentObject</a>.end() ? o : canonObjectIt->second;</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span> </div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af9a43f48b7d99cc6694f3ae3248fd8e0">ObjToVersionMap</a> &ovm = lvm[l];</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>  <span class="keyword">const</span> ObjToVersionMap::const_iterator foundVersion = ovm.find(op);</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>  <span class="keywordflow">return</span> foundVersion == ovm.end() ? <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> : foundVersion->second;</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span> }</div><div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
1795
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2d451d89f99a4bff828b682723df477f"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">SVF::VersionedFlowSensitive::equivalentObject</a></div><div class="ttdeci">Map< NodeID, NodeID > equivalentObject</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00198">VersionedFlowSensitive.h:198</a></div></div>
|
|
1796
|
+
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
|
|
1797
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af9a43f48b7d99cc6694f3ae3248fd8e0"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af9a43f48b7d99cc6694f3ae3248fd8e0">SVF::VersionedFlowSensitive::ObjToVersionMap</a></div><div class="ttdeci">Map< NodeID, Version > ObjToVersionMap</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00036">VersionedFlowSensitive.h:36</a></div></div>
|
|
1798
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00044">VersionedFlowSensitive.h:44</a></div></div>
|
|
1761
1799
|
</div><!-- fragment -->
|
|
1762
1800
|
</div>
|
|
1763
1801
|
</div>
|
|
1764
|
-
<a id="
|
|
1765
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1802
|
+
<a id="a01a199e9fdb5759c7f78ee344dbc413c"></a>
|
|
1803
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a01a199e9fdb5759c7f78ee344dbc413c">◆ </a></span>getYield()</h2>
|
|
1766
1804
|
|
|
1767
1805
|
<div class="memitem">
|
|
1768
1806
|
<div class="memproto">
|
|
@@ -1771,38 +1809,42 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1771
1809
|
<td class="mlabels-left">
|
|
1772
1810
|
<table class="memname">
|
|
1773
1811
|
<tr>
|
|
1774
|
-
<td class="memname">
|
|
1812
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> VersionedFlowSensitive::getYield </td>
|
|
1775
1813
|
<td>(</td>
|
|
1776
|
-
<td class="
|
|
1814
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1815
|
+
<td class="paramname"><em>l</em>, </td>
|
|
1816
|
+
</tr>
|
|
1817
|
+
<tr>
|
|
1818
|
+
<td class="paramkey"></td>
|
|
1777
1819
|
<td></td>
|
|
1820
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1821
|
+
<td class="paramname"><em>o</em> </td>
|
|
1822
|
+
</tr>
|
|
1823
|
+
<tr>
|
|
1824
|
+
<td></td>
|
|
1825
|
+
<td>)</td>
|
|
1826
|
+
<td></td><td> const</td>
|
|
1778
1827
|
</tr>
|
|
1779
1828
|
</table>
|
|
1780
1829
|
</td>
|
|
1781
1830
|
<td class="mlabels-right">
|
|
1782
|
-
<span class="mlabels"><span class="mlabel">
|
|
1831
|
+
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
1783
1832
|
</tr>
|
|
1784
1833
|
</table>
|
|
1785
1834
|
</div><div class="memdoc">
|
|
1786
1835
|
|
|
1787
|
-
<p>
|
|
1788
|
-
|
|
1789
|
-
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">SVF::FlowSensitive</a>.</p>
|
|
1836
|
+
<p>Returns the yielded version of o at l. If no such version exists, returns invalidVersion. </p>
|
|
1790
1837
|
|
|
1791
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1792
|
-
<div class="fragment"><div class="line"><a name="
|
|
1793
|
-
<div class="ttc" id="
|
|
1794
|
-
<div class="ttc" id="
|
|
1795
|
-
<div class="ttc" id="
|
|
1796
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a25d9b2fb94c17edca9ccff220c0247b8"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a25d9b2fb94c17edca9ccff220c0247b8">SVF::VersionedFlowSensitive::determineReliance</a></div><div class="ttdeci">void determineReliance(void)</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00253">VersionedFlowSensitive.cpp:253</a></div></div>
|
|
1797
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a8e836aaeab108002205d2a7631e8559f"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a8e836aaeab108002205d2a7631e8559f">SVF::VersionedFlowSensitive::mapMeldVersions</a></div><div class="ttdeci">void mapMeldVersions()</div><div class="ttdoc">Moves meldConsume/Yield to consume/yield. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00159">VersionedFlowSensitive.cpp:159</a></div></div>
|
|
1798
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a7d86bc18060c0114a783aa1c3a7e9dda"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a7d86bc18060c0114a783aa1c3a7e9dda">SVF::VersionedFlowSensitive::prelabel</a></div><div class="ttdeci">void prelabel(void)</div><div class="ttdoc">Prelabel the SVFG: set y(o) for stores and c(o) for delta nodes to a new version. ...</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00062">VersionedFlowSensitive.cpp:62</a></div></div>
|
|
1799
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
|
|
1800
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aaee58f266762146e9fdc08ecfc326b29"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aaee58f266762146e9fdc08ecfc326b29">SVF::VersionedFlowSensitive::VersionedFlowSensitiveStat</a></div><div class="ttdeci">friend class VersionedFlowSensitiveStat</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00030">VersionedFlowSensitive.h:30</a></div></div>
|
|
1838
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00777">777</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1839
|
+
<div class="fragment"><div class="line"><a name="l00778"></a><span class="lineno"> 778</span> {</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="comment">// Non-store: consume == yield.</span></div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(l)) <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6b398d59fc276980dd2d6d48a8675068">getVersion</a>(l, o, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a16224ee60494bb1fdf1c8a1026fbe7ab">yield</a>);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="keywordflow">else</span> <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6b398d59fc276980dd2d6d48a8675068">getVersion</a>(l, o, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span> }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aac920c9a5f13dd147e3c130425e005eb"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">SVF::VersionedFlowSensitive::isStore</a></div><div class="ttdeci">virtual bool isStore(const NodeID l) const</div><div class="ttdoc">Returns true if l is a store node. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00425">VersionedFlowSensitive.cpp:425</a></div></div>
|
|
1840
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00182">VersionedFlowSensitive.h:182</a></div></div>
|
|
1841
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a6b398d59fc276980dd2d6d48a8675068"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a6b398d59fc276980dd2d6d48a8675068">SVF::VersionedFlowSensitive::getVersion</a></div><div class="ttdeci">Version getVersion(const NodeID l, const NodeID o, const LocVersionMap &lvm) const</div><div class="ttdoc">Shared code for getConsume and getYield. They wrap this function. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00762">VersionedFlowSensitive.cpp:762</a></div></div>
|
|
1842
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a16224ee60494bb1fdf1c8a1026fbe7ab"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a16224ee60494bb1fdf1c8a1026fbe7ab">SVF::VersionedFlowSensitive::yield</a></div><div class="ttdeci">LocVersionMap yield</div><div class="ttdoc">Actual yield map. Yield analogue to consume. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00184">VersionedFlowSensitive.h:184</a></div></div>
|
|
1801
1843
|
</div><!-- fragment -->
|
|
1802
1844
|
</div>
|
|
1803
1845
|
</div>
|
|
1804
|
-
<a id="
|
|
1805
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1846
|
+
<a id="a81d3528fd082018e4345f0b026bf3584"></a>
|
|
1847
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a81d3528fd082018e4345f0b026bf3584">◆ </a></span>initialize()</h2>
|
|
1806
1848
|
|
|
1807
1849
|
<div class="memitem">
|
|
1808
1850
|
<div class="memproto">
|
|
@@ -1811,30 +1853,43 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1811
1853
|
<td class="mlabels-left">
|
|
1812
1854
|
<table class="memname">
|
|
1813
1855
|
<tr>
|
|
1814
|
-
<td class="memname">void VersionedFlowSensitive::
|
|
1856
|
+
<td class="memname">void VersionedFlowSensitive::initialize </td>
|
|
1815
1857
|
<td>(</td>
|
|
1816
|
-
<td class="paramtype">void </td>
|
|
1817
1858
|
<td class="paramname"></td><td>)</td>
|
|
1818
1859
|
<td></td>
|
|
1819
1860
|
</tr>
|
|
1820
1861
|
</table>
|
|
1821
1862
|
</td>
|
|
1822
1863
|
<td class="mlabels-right">
|
|
1823
|
-
<span class="mlabels"><span class="mlabel">
|
|
1864
|
+
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
|
|
1824
1865
|
</tr>
|
|
1825
1866
|
</table>
|
|
1826
1867
|
</div><div class="memdoc">
|
|
1827
1868
|
|
|
1828
|
-
<p>
|
|
1869
|
+
<p>Initialize analysis. </p>
|
|
1870
|
+
|
|
1871
|
+
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">SVF::FlowSensitive</a>.</p>
|
|
1829
1872
|
|
|
1830
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1831
|
-
<div class="fragment"><div class="line"><a name="
|
|
1832
|
-
<div class="ttc" id="
|
|
1873
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00043">43</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1874
|
+
<div class="fragment"><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> {</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">FlowSensitive::initialize</a>();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="comment">// Overwrite the stat FlowSensitive::initialize gave us.</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aaee58f266762146e9fdc08ecfc326b29">VersionedFlowSensitiveStat</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> </div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a> = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a4859864a4c72d5e04c10305e4579e8ee">getVersionedPTDataTy</a>();</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a8da4b9bd9d0c640a6857b4dc4991817c">buildIsStoreLoadMaps</a>();</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3407cc82ef9806e26b79edb677979014">buildDeltaMaps</a>();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>.resize(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>());</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a16224ee60494bb1fdf1c8a1026fbe7ab">yield</a>.resize(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>());</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a7d86bc18060c0114a783aa1c3a7e9dda">prelabel</a>();</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aaff594c78d93f7ad632d344e5c1c7f6a">meldLabel</a>();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> </div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a275095f60640d862034ad173af3371c3">removeAllIndirectSVFGEdges</a>();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aaff594c78d93f7ad632d344e5c1c7f6a"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aaff594c78d93f7ad632d344e5c1c7f6a">SVF::VersionedFlowSensitive::meldLabel</a></div><div class="ttdeci">void meldLabel(void)</div><div class="ttdoc">Meld label the prelabeled SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00118">VersionedFlowSensitive.cpp:118</a></div></div>
|
|
1875
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a8da4b9bd9d0c640a6857b4dc4991817c"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a8da4b9bd9d0c640a6857b4dc4991817c">SVF::VersionedFlowSensitive::buildIsStoreLoadMaps</a></div><div class="ttdeci">virtual void buildIsStoreLoadMaps(void)</div><div class="ttdoc">Fills in isStoreMap and isLoadMap. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00414">VersionedFlowSensitive.cpp:414</a></div></div>
|
|
1876
|
+
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a4859864a4c72d5e04c10305e4579e8ee"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a4859864a4c72d5e04c10305e4579e8ee">SVF::BVDataPTAImpl::getVersionedPTDataTy</a></div><div class="ttdeci">VersionedPTDataTy * getVersionedPTDataTy() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00202">PointerAnalysisImpl.h:202</a></div></div>
|
|
1877
|
+
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
|
|
1878
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00417">GenericGraph.h:417</a></div></div>
|
|
1879
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a03f5f16377daa0258166a73de3e21f07"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">SVF::VersionedFlowSensitive::vPtD</a></div><div class="ttdeci">BVDataPTAImpl::VersionedPTDataTy * vPtD</div><div class="ttdoc">Points-to DS for working with versions. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00207">VersionedFlowSensitive.h:207</a></div></div>
|
|
1880
|
+
<div class="ttc" id="classSVF_1_1FlowSensitive_html_ad6243c1317503bed39411dab47c83da7"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">SVF::FlowSensitive::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialize analysis. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00048">FlowSensitive.cpp:48</a></div></div>
|
|
1881
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3407cc82ef9806e26b79edb677979014"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3407cc82ef9806e26b79edb677979014">SVF::VersionedFlowSensitive::buildDeltaMaps</a></div><div class="ttdeci">virtual void buildDeltaMaps(void)</div><div class="ttdoc">Fills in deltaMap and deltaSourceMap for the SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00437">VersionedFlowSensitive.cpp:437</a></div></div>
|
|
1882
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00182">VersionedFlowSensitive.h:182</a></div></div>
|
|
1883
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a7d86bc18060c0114a783aa1c3a7e9dda"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a7d86bc18060c0114a783aa1c3a7e9dda">SVF::VersionedFlowSensitive::prelabel</a></div><div class="ttdeci">void prelabel(void)</div><div class="ttdoc">Prelabel the SVFG: set y(o) for stores and c(o) for delta nodes to a new version. ...</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00071">VersionedFlowSensitive.cpp:71</a></div></div>
|
|
1884
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
|
|
1885
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aaee58f266762146e9fdc08ecfc326b29"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aaee58f266762146e9fdc08ecfc326b29">SVF::VersionedFlowSensitive::VersionedFlowSensitiveStat</a></div><div class="ttdeci">friend class VersionedFlowSensitiveStat</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00030">VersionedFlowSensitive.h:30</a></div></div>
|
|
1886
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a16224ee60494bb1fdf1c8a1026fbe7ab"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a16224ee60494bb1fdf1c8a1026fbe7ab">SVF::VersionedFlowSensitive::yield</a></div><div class="ttdeci">LocVersionMap yield</div><div class="ttdoc">Actual yield map. Yield analogue to consume. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00184">VersionedFlowSensitive.h:184</a></div></div>
|
|
1887
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a275095f60640d862034ad173af3371c3"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a275095f60640d862034ad173af3371c3">SVF::VersionedFlowSensitive::removeAllIndirectSVFGEdges</a></div><div class="ttdeci">void removeAllIndirectSVFGEdges(void)</div><div class="ttdoc">Removes all indirect edges in the SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00494">VersionedFlowSensitive.cpp:494</a></div></div>
|
|
1833
1888
|
</div><!-- fragment -->
|
|
1834
1889
|
</div>
|
|
1835
1890
|
</div>
|
|
1836
|
-
<a id="
|
|
1837
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1891
|
+
<a id="a984a4f929a18f97bfefac0102088a7fd"></a>
|
|
1892
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a984a4f929a18f97bfefac0102088a7fd">◆ </a></span>isLoad()</h2>
|
|
1838
1893
|
|
|
1839
1894
|
<div class="memitem">
|
|
1840
1895
|
<div class="memproto">
|
|
@@ -1843,30 +1898,30 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1843
1898
|
<td class="mlabels-left">
|
|
1844
1899
|
<table class="memname">
|
|
1845
1900
|
<tr>
|
|
1846
|
-
<td class="memname">
|
|
1901
|
+
<td class="memname">bool VersionedFlowSensitive::isLoad </td>
|
|
1847
1902
|
<td>(</td>
|
|
1848
|
-
<td class="paramtype">
|
|
1849
|
-
<td class="paramname"></td><td>)</td>
|
|
1850
|
-
<td
|
|
1903
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1904
|
+
<td class="paramname"><em>l</em></td><td>)</td>
|
|
1905
|
+
<td> const</td>
|
|
1851
1906
|
</tr>
|
|
1852
1907
|
</table>
|
|
1853
1908
|
</td>
|
|
1854
1909
|
<td class="mlabels-right">
|
|
1855
|
-
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
1910
|
+
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">virtual</span></span> </td>
|
|
1856
1911
|
</tr>
|
|
1857
1912
|
</table>
|
|
1858
1913
|
</div><div class="memdoc">
|
|
1859
1914
|
|
|
1860
|
-
<p>
|
|
1915
|
+
<p>Returns true if l is a load node. </p>
|
|
1861
1916
|
|
|
1862
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1863
|
-
<div class="fragment"><div class="line"><a name="
|
|
1864
|
-
<div class="ttc" id="
|
|
1917
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00431">431</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1918
|
+
<div class="fragment"><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(l < <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6bb3db072db0b899f306b37f1146f83d">isLoadMap</a>.size() && <span class="stringliteral">"VFS::isLoad: isLoadMap is missing SVFG nodes!"</span>);</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6bb3db072db0b899f306b37f1146f83d">isLoadMap</a>[l];</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span> }</div><div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1919
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a6bb3db072db0b899f306b37f1146f83d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a6bb3db072db0b899f306b37f1146f83d">SVF::VersionedFlowSensitive::isLoadMap</a></div><div class="ttdeci">std::vector< bool > isLoadMap</div><div class="ttdoc">isLoadMap[l] means SVFG node l is a load node. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00222">VersionedFlowSensitive.h:222</a></div></div>
|
|
1865
1920
|
</div><!-- fragment -->
|
|
1866
1921
|
</div>
|
|
1867
1922
|
</div>
|
|
1868
|
-
<a id="
|
|
1869
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1923
|
+
<a id="aac920c9a5f13dd147e3c130425e005eb"></a>
|
|
1924
|
+
<h2 class="memtitle"><span class="permalink"><a href="#aac920c9a5f13dd147e3c130425e005eb">◆ </a></span>isStore()</h2>
|
|
1870
1925
|
|
|
1871
1926
|
<div class="memitem">
|
|
1872
1927
|
<div class="memproto">
|
|
@@ -1875,37 +1930,25 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1875
1930
|
<td class="mlabels-left">
|
|
1876
1931
|
<table class="memname">
|
|
1877
1932
|
<tr>
|
|
1878
|
-
<td class="memname">
|
|
1933
|
+
<td class="memname">bool VersionedFlowSensitive::isStore </td>
|
|
1879
1934
|
<td>(</td>
|
|
1880
|
-
<td class="paramtype">
|
|
1881
|
-
<td class="paramname"></td><td>)</td>
|
|
1882
|
-
<td
|
|
1935
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1936
|
+
<td class="paramname"><em>l</em></td><td>)</td>
|
|
1937
|
+
<td> const</td>
|
|
1883
1938
|
</tr>
|
|
1884
1939
|
</table>
|
|
1885
1940
|
</td>
|
|
1886
1941
|
<td class="mlabels-right">
|
|
1887
|
-
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
1942
|
+
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">virtual</span></span> </td>
|
|
1888
1943
|
</tr>
|
|
1889
1944
|
</table>
|
|
1890
1945
|
</div><div class="memdoc">
|
|
1891
1946
|
|
|
1892
|
-
<p>
|
|
1947
|
+
<p>Returns true if l is a store node. </p>
|
|
1893
1948
|
|
|
1894
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1895
|
-
<div class="fragment"><div class="line"><a name="
|
|
1896
|
-
<div class="ttc" id="
|
|
1897
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_ac33c7cef2d1d143950820ea48e97e806"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#ac33c7cef2d1d143950820ea48e97e806">SVF::VersionedFlowSensitive::setYield</a></div><div class="ttdeci">void setYield(const NodeID l, const NodeID o, const Version v)</div><div class="ttdoc">Sets the yielded version of o at l to v. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00622">VersionedFlowSensitive.cpp:622</a></div></div>
|
|
1898
|
-
<div class="ttc" id="classSVF_1_1SVFG_html_a7ace06b6c893b31f7dec2abe54e33e11"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">SVF::SVFG::getSVFGNode</a></div><div class="ttdeci">SVFGNode * getSVFGNode(NodeID id) const</div><div class="ttdoc">Get a SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00150">SVFG.h:150</a></div></div>
|
|
1899
|
-
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00101">SVFBasicTypes.h:101</a></div></div>
|
|
1900
|
-
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00085">SVFBasicTypes.h:85</a></div></div>
|
|
1901
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
|
|
1902
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_afb0396e095bd461f146b4c5ce957b89e"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#afb0396e095bd461f146b4c5ce957b89e">SVF::VersionedFlowSensitive::meldYield</a></div><div class="ttdeci">LocMeldVersionMap meldYield</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00196">VersionedFlowSensitive.h:196</a></div></div>
|
|
1903
|
-
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00171">SVFBasicTypes.h:171</a></div></div>
|
|
1904
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aabc0a5a7a31b8d880e019773ba960741"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aabc0a5a7a31b8d880e019773ba960741">SVF::VersionedFlowSensitive::setConsume</a></div><div class="ttdeci">void setConsume(const NodeID l, const NodeID o, const Version v)</div><div class="ttdoc">Sets the consumed version of o at l to v. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00617">VersionedFlowSensitive.cpp:617</a></div></div>
|
|
1905
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a8871031546861343c05346ae1a4550cd"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a8871031546861343c05346ae1a4550cd">SVF::VersionedFlowSensitive::meldMappingTime</a></div><div class="ttdeci">double meldMappingTime</div><div class="ttdoc">Time to map MeldVersions to Versions. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00240">VersionedFlowSensitive.h:240</a></div></div>
|
|
1906
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a0f3bc278aa733bd637c9905530ff2e6c"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a0f3bc278aa733bd637c9905530ff2e6c">SVF::VersionedFlowSensitive::meldConsume</a></div><div class="ttdeci">LocMeldVersionMap meldConsume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00192">VersionedFlowSensitive.h:192</a></div></div>
|
|
1907
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_ac09fe1e8199f9ac3adb6c489ab608fd8"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#ac09fe1e8199f9ac3adb6c489ab608fd8">SVF::VersionedFlowSensitive::MeldVersion</a></div><div class="ttdeci">llvm::SparseBitVector MeldVersion</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00033">VersionedFlowSensitive.h:33</a></div></div>
|
|
1908
|
-
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00113">PTAStat.cpp:113</a></div></div>
|
|
1949
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00425">425</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1950
|
+
<div class="fragment"><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>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(l < <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a18e25c3871d7cc1a6bb0592ceca90f88">isStoreMap</a>.size() && <span class="stringliteral">"VFS::isStore: isStoreMap is missing SVFG nodes!"</span>);</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a18e25c3871d7cc1a6bb0592ceca90f88">isStoreMap</a>[l];</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span> }</div><div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1951
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a18e25c3871d7cc1a6bb0592ceca90f88"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a18e25c3871d7cc1a6bb0592ceca90f88">SVF::VersionedFlowSensitive::isStoreMap</a></div><div class="ttdeci">std::vector< bool > isStoreMap</div><div class="ttdoc">isStoreMap[l] means SVFG node l is a store node. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00219">VersionedFlowSensitive.h:219</a></div></div>
|
|
1909
1952
|
</div><!-- fragment -->
|
|
1910
1953
|
</div>
|
|
1911
1954
|
</div>
|
|
@@ -1921,13 +1964,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1921
1964
|
<tr>
|
|
1922
1965
|
<td class="memname">bool VersionedFlowSensitive::meld </td>
|
|
1923
1966
|
<td>(</td>
|
|
1924
|
-
<td class="paramtype"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
1967
|
+
<td class="paramtype"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> & </td>
|
|
1925
1968
|
<td class="paramname"><em>mv1</em>, </td>
|
|
1926
1969
|
</tr>
|
|
1927
1970
|
<tr>
|
|
1928
1971
|
<td class="paramkey"></td>
|
|
1929
1972
|
<td></td>
|
|
1930
|
-
<td class="paramtype">const <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
1973
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> & </td>
|
|
1931
1974
|
<td class="paramname"><em>mv2</em> </td>
|
|
1932
1975
|
</tr>
|
|
1933
1976
|
<tr>
|
|
@@ -1945,8 +1988,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1945
1988
|
|
|
1946
1989
|
<p>Melds v2 into v1 (in place), returns whether a change occurred. </p>
|
|
1947
1990
|
|
|
1948
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1949
|
-
<div class="fragment"><div class="line"><a name="
|
|
1991
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00396">396</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1992
|
+
<div class="fragment"><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="comment">// Meld operator is union of bit vectors.</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">return</span> mv1 |= mv2;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> }</div></div><!-- fragment -->
|
|
1950
1993
|
</div>
|
|
1951
1994
|
</div>
|
|
1952
1995
|
<a id="aaff594c78d93f7ad632d344e5c1c7f6a"></a>
|
|
@@ -1975,63 +2018,54 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1975
2018
|
|
|
1976
2019
|
<p>Meld label the prelabeled <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. </p>
|
|
1977
2020
|
|
|
1978
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1979
|
-
<div class="fragment"><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordflow">while</span> (!<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>()) {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *ln = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(l);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span> </div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="comment">// Propagate l's y to lp's c for all l --o--> lp.</span></div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a> *e : ln-><a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>()) {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a> *ie = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>>(e);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">if</span> (!ie) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> lp = ie-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getId();</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="comment">// Delta nodes had c set already and they are permanent.</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#acf23b9ce8d07431adf1799dc64c68271">delta</a>(lp)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> </div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  <span class="keywordtype">bool</span> lpIsStore = SVFUtil::isa<StoreSVFGNode>(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(lp));</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="comment">// Consume and yield are the same at non-stores, so ignore any self-loop</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <span class="comment">// at a non-store.</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">if</span> (l == lp && !lpIsStore) <span class="keywordflow">continue</span>;</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="comment">// At stores yield != consume, otherwise they are the same (so just use meldConsume).</span></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6e36886fac2c276047def0a5acb85c0e">ObjToMeldVersionMap</a> &myl = SVFUtil::isa<StoreSVFGNode>(ln) ? <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#afb0396e095bd461f146b4c5ce957b89e">meldYield</a>[l] : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a0f3bc278aa733bd637c9905530ff2e6c">meldConsume</a>[l];</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6e36886fac2c276047def0a5acb85c0e">ObjToMeldVersionMap</a> &mclp = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a0f3bc278aa733bd637c9905530ff2e6c">meldConsume</a>[lp];</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordtype">bool</span> yieldChanged = <span class="keyword">false</span>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : ie-><a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>()) {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  ObjToMeldVersionMap::const_iterator myloIt = myl.find(o);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">if</span> (myloIt == myl.end()) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="comment">// Yield == consume for non-stores, so when consume is updated, so is yield.</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="comment">// For stores, yield was already set, and it's static.</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  yieldChanged = (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1da960df51570b59161e380949d910c4">meld</a>(mclp[o], myloIt->second) && !lpIsStore) || yieldChanged;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keywordflow">if</span> (yieldChanged) <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(lp);</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  }</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a4a594c8d6ccaa27b5328c6388fdb258d">meldLabelingTime</a> = (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> }</div><div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
|
|
1980
|
-
<div class="ttc" id="
|
|
2021
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00118">118</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2022
|
+
<div class="fragment"><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#adba18ce8f1496fe2e57a934f11c2dfd9">Options::VersioningThreads</a> > 0 && <span class="stringliteral">"VFS::meldLabel: number of versioning threads must be > 0!"</span>);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="comment">// Nodes which have at least one object on them given a prelabel.</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  std::vector<const SVFGNode *> prelabeledNodes;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="comment">// Fast query for the above.</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  std::vector<bool> isPrelabeled(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">while</span> (!<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  prelabeledNodes.push_back(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(n));</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  isPrelabeled[n] = <span class="keyword">true</span>;</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"> 135</span>  <span class="comment">// Delta, delta source, store, and load nodes, which require versions during</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="comment">// solving, unlike other nodes with which we can make do with the reliance map.</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  std::vector<NodeID> nodesWhichNeedVersions;</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFG.html#a225a91c04afac6a8fe198e9860890a52">SVFG::const_iterator</a> it = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  {</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = it->first;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">delta</a>(n) || <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3fa5afa4f54e0828ec090fde07b1bfa2">deltaSource</a>(n) || <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(n) || <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a984a4f929a18f97bfefac0102088a7fd">isLoad</a>(n)) nodesWhichNeedVersions.push_back(n);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  std::mutex *versionMutexes = <span class="keyword">new</span> std::mutex[nodesWhichNeedVersions.size()];</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="comment">// Map of footprints to the canonical object "owning" the footprint.</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<std::vector<const IndirectSVFGEdge *></a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>> footprintOwner;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> </div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  std::queue<NodeID> objectQueue;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aaae8c6858593ed050dcf2c9220228e3e">prelabeledObjects</a>)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="comment">// "Touch" maps with o so we don't need to lock on them.</span></div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>[o];</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>[o];</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  objectQueue.push(o);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  }</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>  std::mutex objectQueueMutex;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  std::mutex footprintOwnerMutex;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> </div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">auto</span> meldVersionWorker = [<span class="keyword">this</span>, &footprintOwner, &objectQueue,</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  &objectQueueMutex, &footprintOwnerMutex, &versionMutexes,</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  &prelabeledNodes, &isPrelabeled, &nodesWhichNeedVersions]</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> thread)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  { std::lock_guard<std::mutex> guard(objectQueueMutex);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <span class="comment">// No more objects? Done.</span></div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">if</span> (objectQueue.empty()) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  o = objectQueue.front();</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  objectQueue.pop();</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="comment">// 1. Compute the SCCs for the nodes on the graph overlay of o.</span></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="comment">// For starting nodes, we only need those which did prelabeling for o specifically.</span></div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="comment">// TODO: maybe we should move this to prelabel with a map (o -> starting nodes).</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  std::vector<const SVFGNode *> osStartingNodes;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *sn : prelabeledNodes)</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>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a> *store = SVFUtil::dyn_cast<StoreSVFGNode>(sn))</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = store->getPAGDstNodeID();</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a>-><a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(p).<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(o)) osStartingNodes.push_back(sn);</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">delta</a>(sn->getId()))</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a> *mr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a>>(sn);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">if</span> (mr != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">if</span> (mr-><a class="code" href="classSVF_1_1MRSVFGNode.html#a28fe266d0e4618aa4448aa218495a332">getPointsTo</a>().test(o)) osStartingNodes.push_back(sn);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  }</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  }</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"> 197</span>  std::vector<int> partOf;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  std::vector<const IndirectSVFGEdge *> footprint;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordtype">unsigned</span> numSCCs = <a class="code" href="classSVF_1_1VersionedFlowSensitive_1_1SCC.html#ad52f6f586168ca4ceaf85cca8dfab825">SCC::detectSCCs</a>(<span class="keyword">this</span>, this-><a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>, o, osStartingNodes, partOf, footprint);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <span class="comment">// 2. Skip any further processing of a footprint we have seen before.</span></div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  { std::lock_guard<std::mutex> guard(footprintOwnerMutex);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<std::vector<const IndirectSVFGEdge *></a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>>::const_iterator canonOwner</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  = footprintOwner.find(footprint);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <span class="keywordflow">if</span> (canonOwner == footprintOwner.end())</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">equivalentObject</a>[o] = o;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  footprintOwner[footprint] = o;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">else</span></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>  this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">equivalentObject</a>[o] = canonOwner->second;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="comment">// Same version and stmt reliance as the canonical. During solving we cannot just reuse</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="comment">// the canonical object's reliance because it may change due to on-the-fly call graph</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="comment">// construction. Something like copy-on-write could be good... probably negligible.</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>.at(o) = this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>.at(canonOwner->second);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>.at(o) = this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>.at(canonOwner->second);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">continue</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"> 220</span>  }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span> </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="comment">// 3. a. Initialise the MeldVersion of prelabeled nodes (SCCs).</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="comment">// b. Initialise a todo list of all the nodes we need to version,</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="comment">// sorted according to topological order.</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="comment">// We will use a map of sccs to meld versions for what is consumed.</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  std::vector<MeldVersion> sccToMeldVersion(numSCCs);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="comment">// At stores, what is consumed is different to what is yielded, so we</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="comment">// maintain that separately.</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, MeldVersion></a> storesYieldedMeldVersion;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="comment">// SVFG nodes of interest -- those part of an SCC from the starting nodes.</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  std::vector<NodeID> todoList;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordtype">unsigned</span> bit = 0;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = 0; n < partOf.size(); ++n)</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">if</span> (partOf[n] == -1) <span class="keywordflow">continue</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>  <span class="keywordflow">if</span> (isPrelabeled[n])</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  {</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(n)) storesYieldedMeldVersion[n].<span class="keyword">set</span>(bit);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">else</span> sccToMeldVersion[partOf[n]].set(bit);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  ++bit;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span> </div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  todoList.push_back(n);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="comment">// Sort topologically so each nodes is only visited once.</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="keyword">auto</span> cmp = [&partOf](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> a, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> b)</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>  <span class="keywordflow">return</span> partOf[a] > partOf[b];</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>  std::sort(todoList.begin(), todoList.end(), cmp);</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>  <span class="comment">// 4. a. Do meld versioning.</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="comment">// b. Determine SCC reliances.</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="comment">// c. Build a footprint for o (all edges which it is found on).</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="comment">// d. Determine which SCCs belong to stores.</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="comment">// sccReliance[x] = { y_1, y_2, ... } if there exists an edge from a node</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="comment">// in SCC x to SCC y_i.</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  std::vector<Set<int>> sccReliance(numSCCs);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="comment">// Maps SCC to the store it corresponds to or -1 if it doesn't. TODO: unsigned vs signed -- nasty.</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  std::vector<int> storeSCC(numSCCs, -1);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < todoList.size(); ++i)</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = todoList[i];</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *sn = this-><a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(n);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keyword">const</span> <span class="keywordtype">bool</span> nIsStore = this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(n);</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>  <span class="keywordtype">int</span> nSCC = partOf[n];</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="keywordflow">if</span> (nIsStore) storeSCC[nSCC] = n;</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="comment">// Given n -> m, the yielded version of n will be melded into m.</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="comment">// For stores, that is in storesYieldedMeldVersion, otherwise, consume == yield and</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="comment">// we can just use sccToMeldVersion.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> &nMV = nIsStore ? storesYieldedMeldVersion[n] : sccToMeldVersion[nSCC];</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a> *e : sn-><a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>())</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a> *ie = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>>(e);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordflow">if</span> (!ie) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> m = ie-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getId();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="comment">// Ignoreedges which don't involve o.</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (!ie-><a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>().test(o)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> </div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  <span class="keywordtype">int</span> mSCC = partOf[m];</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">// There is an edge from the SCC n belongs to to that m belongs to.</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  sccReliance[nSCC].insert(mSCC);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> </div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="comment">// Ignore edges to delta nodes (prelabeled consume).</span></div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="comment">// No point propagating when n's SCC == m's SCC (same meld version there)</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="comment">// except when it is a store, because we are actually propagating n's yielded</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="comment">// into m's consumed. Store nodes are in their own SCCs, so it is a self</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="comment">// loop on a store node.</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">if</span> (!this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">delta</a>(m) && (nSCC != mSCC || nIsStore))</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  sccToMeldVersion[mSCC] |= nMV;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> </div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="comment">// 5. Transform meld versions belonging to SCCs into versions.</span></div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<MeldVersion, Version></a> mvv;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  std::vector<Version> sccToVersion(numSCCs, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a>);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> curVersion = 0;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a> = 0; <a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a> < sccToMeldVersion.size(); ++<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> &mv = sccToMeldVersion[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>];</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<MeldVersion, Version>::const_iterator</a> foundVersion = mvv.find(mv);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = foundVersion == mvv.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>() ? mvv[mv] = ++curVersion : foundVersion->second;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  sccToVersion[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>] = v;</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"> 315</span>  sccToMeldVersion.clear();</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="comment">// Same for storesYieldedMeldVersion.</span></div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, Version></a> storesYieldedVersion;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<NodeID, MeldVersion> &nmv : storesYieldedMeldVersion)</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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = nmv.first;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> &mv = nmv.second;</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> </div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<MeldVersion, Version>::const_iterator</a> foundVersion = mvv.find(mv);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = foundVersion == mvv.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>() ? mvv[mv] = ++curVersion : foundVersion->second;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  storesYieldedVersion[n] = v;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span> </div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  storesYieldedMeldVersion.clear();</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>  mvv.clear();</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="comment">// 6. From SCC reliance, determine version reliances.</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Version, std::vector<Version></a>> &osVersionReliance = this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>.at(o);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> <a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a> = 0; <a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a> < numSCCs; ++<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>)</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  {</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">if</span> (sccReliance[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>].<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>()) <span class="keywordflow">continue</span>;</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>  <span class="comment">// Some consume relies on a yield. When it's a store, we need to pick whether to</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="comment">// use the consume or yield unlike when it is not because they are the same.</span></div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> version</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  = storeSCC[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>] != -1 ? storesYieldedVersion[storeSCC[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>]] : sccToVersion[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>];</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  std::vector<Version> &reliantVersions = osVersionReliance[version];</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> reliantSCC : sccReliance[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>])</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  {</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> reliantVersion = sccToVersion[reliantSCC];</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <span class="keywordflow">if</span> (version != reliantVersion)</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>  <span class="comment">// sccReliance is a set, no need to worry about duplicates.</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  reliantVersions.push_back(reliantVersion);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> </div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="comment">// 7. a. Save versions for nodes which need them.</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="comment">// b. Fill in stmtReliance.</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="comment">// TODO: maybe randomise iteration order for less contention? Needs profiling.</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Version, NodeBS></a> &osStmtReliance = this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>.at(o);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < nodesWhichNeedVersions.size(); ++i)</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  {</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = nodesWhichNeedVersions[i];</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  std::mutex &mutex = versionMutexes[i];</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> scc = partOf[n];</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <span class="keywordflow">if</span> (scc == -1) <span class="keywordflow">continue</span>;</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>  std::lock_guard<std::mutex> guard(mutex);</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> </div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = sccToVersion[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>];</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">if</span> (c != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a>)</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  {</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aabc0a5a7a31b8d880e019773ba960741">setConsume</a>(n, o, c);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(n) || this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a984a4f929a18f97bfefac0102088a7fd">isLoad</a>(n)) osStmtReliance[c].set(n);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  }</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>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(n))</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, Version>::const_iterator</a> yIt = storesYieldedVersion.find(n);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordflow">if</span> (yIt != storesYieldedVersion.end()) this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#ac33c7cef2d1d143950820ea48e97e806">setYield</a>(n, o, yIt->second);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  }</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  };</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>  std::vector<std::thread> workers;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i < <a class="code" href="classSVF_1_1Options.html#adba18ce8f1496fe2e57a934f11c2dfd9">Options::VersioningThreads</a>; ++i) workers.push_back(std::thread(meldVersionWorker, i));</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">for</span> (std::thread &worker : workers) worker.join();</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <span class="keyword">delete</span>[] versionMutexes;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a4a594c8d6ccaa27b5328c6388fdb258d">meldLabelingTime</a> = (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> }</div><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#l00365">GenericGraph.h:365</a></div></div>
|
|
2023
|
+
<div class="ttc" id="classSVF_1_1StoreVFGNode_html"><div class="ttname"><a href="classSVF_1_1StoreVFGNode.html">SVF::StoreVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00236">VFGNode.h:236</a></div></div>
|
|
2024
|
+
<div class="ttc" id="classSVF_1_1Andersen_html_a187285a5bdf9422d9188b2b11b667639"><div class="ttname"><a href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">SVF::Andersen::getPts</a></div><div class="ttdeci">virtual const PointsTo & getPts(NodeID id)</div><div class="ttdoc">Operation of points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00222">Andersen.h:222</a></div></div>
|
|
2025
|
+
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
|
|
2026
|
+
<div class="ttc" id="classSVF_1_1WPASolver_html_a21709a0f33b6238afe735cc9fe49ff70"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">SVF::WPASolver::scc</a></div><div class="ttdeci">SCC * scc</div><div class="ttdoc">SCC. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00199">WPASolver.h:199</a></div></div>
|
|
2027
|
+
<div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00417">GenericGraph.h:417</a></div></div>
|
|
2028
|
+
<div class="ttc" id="classSVF_1_1VFG_html_a225a91c04afac6a8fe198e9860890a52"><div class="ttname"><a href="classSVF_1_1VFG.html#a225a91c04afac6a8fe198e9860890a52">SVF::VFG::const_iterator</a></div><div class="ttdeci">VFGNodeIDToNodeMapTy::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00080">VFG.h:80</a></div></div>
|
|
2029
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_adfefc0dfa4e7fb4d20fafeaf96a5fa67"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">SVF::VersionedFlowSensitive::vWorklist</a></div><div class="ttdeci">FIFOWorkList< NodeID > vWorklist</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00202">VersionedFlowSensitive.h:202</a></div></div>
|
|
1981
2030
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
1982
|
-
<div class="ttc" id="
|
|
2031
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2d451d89f99a4bff828b682723df477f"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">SVF::VersionedFlowSensitive::equivalentObject</a></div><div class="ttdeci">Map< NodeID, NodeID > equivalentObject</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00198">VersionedFlowSensitive.h:198</a></div></div>
|
|
2032
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a4a594c8d6ccaa27b5328c6388fdb258d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a4a594c8d6ccaa27b5328c6388fdb258d">SVF::VersionedFlowSensitive::meldLabelingTime</a></div><div class="ttdeci">double meldLabelingTime</div><div class="ttdoc">Time to meld label SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00230">VersionedFlowSensitive.h:230</a></div></div>
|
|
2033
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_ac33c7cef2d1d143950820ea48e97e806"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#ac33c7cef2d1d143950820ea48e97e806">SVF::VersionedFlowSensitive::setYield</a></div><div class="ttdeci">void setYield(const NodeID l, const NodeID o, const Version v)</div><div class="ttdoc">Sets the yielded version of o at l to v. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00795">VersionedFlowSensitive.cpp:795</a></div></div>
|
|
2034
|
+
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
1983
2035
|
<div class="ttc" id="classSVF_1_1FIFOWorkList_html_a7056704c224dfb4b57287fe90c004aa8"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">SVF::FIFOWorkList::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00146">WorkList.h:146</a></div></div>
|
|
1984
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a6e36886fac2c276047def0a5acb85c0e"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a6e36886fac2c276047def0a5acb85c0e">SVF::VersionedFlowSensitive::ObjToMeldVersionMap</a></div><div class="ttdeci">Map< NodeID, MeldVersion > ObjToMeldVersionMap</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00037">VersionedFlowSensitive.h:37</a></div></div>
|
|
1985
2036
|
<div class="ttc" id="classSVF_1_1SVFG_html_a7ace06b6c893b31f7dec2abe54e33e11"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">SVF::SVFG::getSVFGNode</a></div><div class="ttdeci">SVFGNode * getSVFGNode(NodeID id) const</div><div class="ttdoc">Get a SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00150">SVFG.h:150</a></div></div>
|
|
2037
|
+
<div class="ttc" id="cuddInt_8c_html_a5beb39637a978181c7c17714ac96672e"><div class="ttname"><a href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a></div><div class="ttdeci">static DdNode * empty</div><div class="ttdef"><b>Definition:</b> <a href="cuddInt_8c_source.html#l28567">cuddInt.c:28567</a></div></div>
|
|
2038
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aac920c9a5f13dd147e3c130425e005eb"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">SVF::VersionedFlowSensitive::isStore</a></div><div class="ttdeci">virtual bool isStore(const NodeID l) const</div><div class="ttdoc">Returns true if l is a store node. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00425">VersionedFlowSensitive.cpp:425</a></div></div>
|
|
2039
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a9f9b00551c157f42d1d995e8c4efb54b"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">SVF::VersionedFlowSensitive::delta</a></div><div class="ttdeci">virtual bool delta(const NodeID l) const</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00402">VersionedFlowSensitive.cpp:402</a></div></div>
|
|
2040
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aaae8c6858593ed050dcf2c9220228e3e"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aaae8c6858593ed050dcf2c9220228e3e">SVF::VersionedFlowSensitive::prelabeledObjects</a></div><div class="ttdeci">Set< NodeID > prelabeledObjects</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00204">VersionedFlowSensitive.h:204</a></div></div>
|
|
2041
|
+
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
|
|
2042
|
+
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00128">SVFBasicTypes.h:128</a></div></div>
|
|
2043
|
+
<div class="ttc" id="classSVF_1_1PointsTo_html_af61271fefa574c39f405fdfee59a8b3f"><div class="ttname"><a href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">SVF::PointsTo::test</a></div><div class="ttdeci">bool test(u32_t n) const</div><div class="ttdoc">Returns true if n is in this set. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00125">PointsTo.cpp:125</a></div></div>
|
|
1986
2044
|
<div class="ttc" id="classSVF_1_1VFGEdge_html"><div class="ttname"><a href="classSVF_1_1VFGEdge.html">SVF::VFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00044">VFGEdge.h:44</a></div></div>
|
|
2045
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af0859eb2a5b46c45aa4314e6e54f4438"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">SVF::VersionedFlowSensitive::stmtReliance</a></div><div class="ttdeci">Map< NodeID, Map< Version, NodeBS > > stmtReliance</div><div class="ttdoc">o x version -> statement nodes which rely on that o/version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00189">VersionedFlowSensitive.h:189</a></div></div>
|
|
2046
|
+
<div class="ttc" id="classSVF_1_1MRSVFGNode_html"><div class="ttname"><a href="classSVF_1_1MRSVFGNode.html">SVF::MRSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00042">SVFGNode.h:42</a></div></div>
|
|
2047
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a1dc6e3d4931b53e7e426c0f76d06aeb3"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">SVF::VersionedFlowSensitive::versionReliance</a></div><div class="ttdeci">VersionRelianceMap versionReliance</div><div class="ttdoc">o -> (version -> versions which rely on it). </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00187">VersionedFlowSensitive.h:187</a></div></div>
|
|
2048
|
+
<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#l00369">GenericGraph.h:369</a></div></div>
|
|
1987
2049
|
<div class="ttc" id="classSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00089">GenericGraph.h:89</a></div></div>
|
|
1988
|
-
<div class="ttc" id="classSVF_1_1FIFOWorkList_html_ad4c6a48b60c870d63049fe7272cc7eb8"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">SVF::FIFOWorkList::push</a></div><div class="ttdeci">bool push(Data data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00159">WorkList.h:159</a></div></div>
|
|
1989
2050
|
<div class="ttc" id="classSVF_1_1GenericNode_html_a2d9cd758d6f8c5189d9b90b74f43e009"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">SVF::GenericNode::getOutEdges</a></div><div class="ttdeci">const GEdgeSetTy & getOutEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00177">GenericGraph.h:177</a></div></div>
|
|
2051
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a630eeca9c3344d24fa196f7de45bce18"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">SVF::VersionedFlowSensitive::MeldVersion</a></div><div class="ttdeci">CoreBitVector MeldVersion</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00033">VersionedFlowSensitive.h:33</a></div></div>
|
|
2052
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_1_1SCC_html_ad52f6f586168ca4ceaf85cca8dfab825"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive_1_1SCC.html#ad52f6f586168ca4ceaf85cca8dfab825">SVF::VersionedFlowSensitive::SCC::detectSCCs</a></div><div class="ttdeci">static unsigned detectSCCs(VersionedFlowSensitive *vfs, const SVFG *svfg, const NodeID object, const std::vector< const SVFGNode *> &startingNodes, std::vector< int > &partOf, std::vector< const IndirectSVFGEdge *> &footprint)</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00920">VersionedFlowSensitive.cpp:920</a></div></div>
|
|
1990
2053
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
|
|
1991
|
-
<div class="ttc" id="
|
|
1992
|
-
<div class="ttc" id="
|
|
1993
|
-
<div class="ttc" id="
|
|
1994
|
-
<div class="ttc" id="
|
|
2054
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3fa5afa4f54e0828ec090fde07b1bfa2"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3fa5afa4f54e0828ec090fde07b1bfa2">SVF::VersionedFlowSensitive::deltaSource</a></div><div class="ttdeci">virtual bool deltaSource(const NodeID l) const</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00408">VersionedFlowSensitive.cpp:408</a></div></div>
|
|
2055
|
+
<div class="ttc" id="classSVF_1_1CoreBitVector_html_a93cdd9890522cc9fee2451567e0b1f0d"><div class="ttname"><a href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">SVF::CoreBitVector::end</a></div><div class="ttdeci">const_iterator end(void) const</div><div class="ttdef"><b>Definition:</b> <a href="CoreBitVector_8cpp_source.html#l00308">CoreBitVector.cpp:308</a></div></div>
|
|
2056
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00044">VersionedFlowSensitive.h:44</a></div></div>
|
|
2057
|
+
<div class="ttc" id="classSVF_1_1MRSVFGNode_html_a28fe266d0e4618aa4448aa218495a332"><div class="ttname"><a href="classSVF_1_1MRSVFGNode.html#a28fe266d0e4618aa4448aa218495a332">SVF::MRSVFGNode::getPointsTo</a></div><div class="ttdeci">const NodeBS & getPointsTo() const</div><div class="ttdoc">Return points-to of the MR. </div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00052">SVFGNode.h:52</a></div></div>
|
|
2058
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00174">SVFBasicTypes.h:174</a></div></div>
|
|
2059
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aabc0a5a7a31b8d880e019773ba960741"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aabc0a5a7a31b8d880e019773ba960741">SVF::VersionedFlowSensitive::setConsume</a></div><div class="ttdeci">void setConsume(const NodeID l, const NodeID o, const Version v)</div><div class="ttdoc">Sets the consumed version of o at l to v. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00790">VersionedFlowSensitive.cpp:790</a></div></div>
|
|
1995
2060
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
2061
|
+
<div class="ttc" id="classSVF_1_1Options_html_adba18ce8f1496fe2e57a934f11c2dfd9"><div class="ttname"><a href="classSVF_1_1Options.html#adba18ce8f1496fe2e57a934f11c2dfd9">SVF::Options::VersioningThreads</a></div><div class="ttdeci">static const llvm::cl::opt< unsigned > VersioningThreads</div><div class="ttdoc">Number of threads for the versioning phase. </div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00077">Options.h:77</a></div></div>
|
|
1996
2062
|
<div class="ttc" id="classSVF_1_1IndirectSVFGEdge_html"><div class="ttname"><a href="classSVF_1_1IndirectSVFGEdge.html">SVF::IndirectSVFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGEdge_8h_source.html#l00042">SVFGEdge.h:42</a></div></div>
|
|
1997
|
-
<div class="ttc" id="
|
|
2063
|
+
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a5cfee013a1a5821ef0c449842dd8690d"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">SVF::FlowSensitive::ander</a></div><div class="ttdeci">AndersenWaveDiff * ander</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00284">FlowSensitive.h:284</a></div></div>
|
|
1998
2064
|
<div class="ttc" id="classSVF_1_1FIFOWorkList_html_a8fa72918fce7e9c0b2dc34b683a797c6"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">SVF::FIFOWorkList::pop</a></div><div class="ttdeci">Data pop()</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00174">WorkList.h:174</a></div></div>
|
|
2065
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a984a4f929a18f97bfefac0102088a7fd"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a984a4f929a18f97bfefac0102088a7fd">SVF::VersionedFlowSensitive::isLoad</a></div><div class="ttdeci">virtual bool isLoad(const NodeID l) const</div><div class="ttdoc">Returns true if l is a load node. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00431">VersionedFlowSensitive.cpp:431</a></div></div>
|
|
1999
2066
|
<div class="ttc" id="classSVF_1_1IndirectSVFGEdge_html_a30aca718d25924f1babdf348bb0ace71"><div class="ttname"><a href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">SVF::IndirectSVFGEdge::getPointsTo</a></div><div class="ttdeci">const NodeBS & getPointsTo() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFGEdge_8h_source.html#l00061">SVFGEdge.h:61</a></div></div>
|
|
2000
2067
|
<div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00047">VFGNode.h:47</a></div></div>
|
|
2001
|
-
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#
|
|
2002
|
-
</div><!-- fragment -->
|
|
2003
|
-
</div>
|
|
2004
|
-
</div>
|
|
2005
|
-
<a id="a24746dcada35f10cb387c94860930e84"></a>
|
|
2006
|
-
<h2 class="memtitle"><span class="permalink"><a href="#a24746dcada35f10cb387c94860930e84">◆ </a></span>newMeldVersion()</h2>
|
|
2007
|
-
|
|
2008
|
-
<div class="memitem">
|
|
2009
|
-
<div class="memproto">
|
|
2010
|
-
<table class="mlabels">
|
|
2011
|
-
<tr>
|
|
2012
|
-
<td class="mlabels-left">
|
|
2013
|
-
<table class="memname">
|
|
2014
|
-
<tr>
|
|
2015
|
-
<td class="memname"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#ac09fe1e8199f9ac3adb6c489ab608fd8">VersionedFlowSensitive::MeldVersion</a> VersionedFlowSensitive::newMeldVersion </td>
|
|
2016
|
-
<td>(</td>
|
|
2017
|
-
<td class="paramtype"><a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
2018
|
-
<td class="paramname"><em>o</em></td><td>)</td>
|
|
2019
|
-
<td></td>
|
|
2020
|
-
</tr>
|
|
2021
|
-
</table>
|
|
2022
|
-
</td>
|
|
2023
|
-
<td class="mlabels-right">
|
|
2024
|
-
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
2025
|
-
</tr>
|
|
2026
|
-
</table>
|
|
2027
|
-
</div><div class="memdoc">
|
|
2028
|
-
|
|
2029
|
-
<p>Returns a new MeldVersion for o during the prelabeling phase. </p>
|
|
2030
|
-
|
|
2031
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00245">245</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2032
|
-
<div class="fragment"><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  ++<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a9235db71172dcdf277050f6ca5f344c6">numPrelabelVersions</a>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#ac09fe1e8199f9ac3adb6c489ab608fd8">MeldVersion</a> nv;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  nv.set(++<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a32b9ff0e47ef632626f1b647c38c26f9">meldVersions</a>[o]);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">return</span> nv;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a9235db71172dcdf277050f6ca5f344c6"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a9235db71172dcdf277050f6ca5f344c6">SVF::VersionedFlowSensitive::numPrelabelVersions</a></div><div class="ttdeci">Size_t numPrelabelVersions</div><div class="ttdoc">Number of versions created during prelabeling. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00235">VersionedFlowSensitive.h:235</a></div></div>
|
|
2033
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a32b9ff0e47ef632626f1b647c38c26f9"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a32b9ff0e47ef632626f1b647c38c26f9">SVF::VersionedFlowSensitive::meldVersions</a></div><div class="ttdeci">Map< NodeID, unsigned > meldVersions</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00199">VersionedFlowSensitive.h:199</a></div></div>
|
|
2034
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_ac09fe1e8199f9ac3adb6c489ab608fd8"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#ac09fe1e8199f9ac3adb6c489ab608fd8">SVF::VersionedFlowSensitive::MeldVersion</a></div><div class="ttdeci">llvm::SparseBitVector MeldVersion</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00033">VersionedFlowSensitive.h:33</a></div></div>
|
|
2068
|
+
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00114">PTAStat.cpp:114</a></div></div>
|
|
2035
2069
|
</div><!-- fragment -->
|
|
2036
2070
|
</div>
|
|
2037
2071
|
</div>
|
|
@@ -2061,32 +2095,29 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2061
2095
|
|
|
2062
2096
|
<p>Prelabel the <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>: set y(o) for stores and c(o) for delta nodes to a new version. </p>
|
|
2063
2097
|
|
|
2064
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2065
|
-
<div class="fragment"><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">SVFG::iterator</a> it = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = it->first;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *ln = it->second;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a> *stn = SVFUtil::dyn_cast<StoreSVFGNode>(ln))</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>  <span class="comment">// l: *p = q.</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="comment">// If p points to o (Andersen's), l yields a new version for o.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = stn->getPAGDstNodeID();</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6e36886fac2c276047def0a5acb85c0e">ObjToMeldVersionMap</a> &myl = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#afb0396e095bd461f146b4c5ce957b89e">meldYield</a>[l];</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : <a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a>-><a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(p))</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>  myl[o] = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a24746dcada35f10cb387c94860930e84">newMeldVersion</a>(o);</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> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(l);</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">if</span> (<a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a>-><a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(p).<a class="code" href="classSVF_1_1PointsTo.html#a879783ba6629e500af9aa7dfcda2563d">count</a>() != 0) ++<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a593177519a6bfab63dbb12dbc1ffbc20">numPrelabeledNodes</a>;</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#acf23b9ce8d07431adf1799dc64c68271">delta</a>(l))</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <span class="comment">// The outgoing edges are not only what will later be propagated. SVFGOPT may</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="comment">// move around nodes such that there can be an MRSVFGNode with no incoming or</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="comment">// outgoing edges which will be added at runtime. In essence, we can no</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  <span class="comment">// longer rely on the outgoing edges of a delta node when SVFGOPT is enabled.</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a> *mr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a>>(ln);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">if</span> (mr != <span class="keyword">nullptr</span>)</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>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6e36886fac2c276047def0a5acb85c0e">ObjToMeldVersionMap</a> &mcl = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a0f3bc278aa733bd637c9905530ff2e6c">meldConsume</a>[l];</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : mr-><a class="code" href="classSVF_1_1MRSVFGNode.html#a28fe266d0e4618aa4448aa218495a332">getPointsTo</a>())</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  mcl[o] = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a24746dcada35f10cb387c94860930e84">newMeldVersion</a>(o);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="comment">// Push into worklist because its consume == its yield.</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(l);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">if</span> (mr-><a class="code" href="classSVF_1_1MRSVFGNode.html#a28fe266d0e4618aa4448aa218495a332">getPointsTo</a>().count() != 0) ++<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a593177519a6bfab63dbb12dbc1ffbc20">numPrelabeledNodes</a>;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  }</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  }</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a77a5dd9578def9a8e2b48e8b90d9b996">prelabelingTime</a> = (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span> }</div><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#l00365">GenericGraph.h:365</a></div></div>
|
|
2098
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00071">71</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2099
|
+
<div class="fragment"><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">SVFG::iterator</a> it = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = it->first;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *ln = it->second;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span> </div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a> *stn = SVFUtil::dyn_cast<StoreSVFGNode>(ln))</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="comment">// l: *p = q.</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="comment">// If p points to o (Andersen's), l yields a new version for o.</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = stn->getPAGDstNodeID();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : <a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a>-><a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(p))</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aaae8c6858593ed050dcf2c9220228e3e">prelabeledObjects</a>.insert(o);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(l);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a>-><a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(p).<a class="code" href="classSVF_1_1PointsTo.html#a879783ba6629e500af9aa7dfcda2563d">count</a>() != 0) ++<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a593177519a6bfab63dbb12dbc1ffbc20">numPrelabeledNodes</a>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">delta</a>(l))</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  {</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <span class="comment">// The outgoing edges are not only what will later be propagated. SVFGOPT may</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="comment">// move around nodes such that there can be an MRSVFGNode with no incoming or</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="comment">// outgoing edges which will be added at runtime. In essence, we can no</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// longer rely on the outgoing edges of a delta node when SVFGOPT is enabled.</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a> *mr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a>>(ln);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">if</span> (mr != <span class="keyword">nullptr</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"> 102</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : mr-><a class="code" href="classSVF_1_1MRSVFGNode.html#a28fe266d0e4618aa4448aa218495a332">getPointsTo</a>())</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aaae8c6858593ed050dcf2c9220228e3e">prelabeledObjects</a>.insert(o);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  }</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="comment">// Push into worklist because its consume == its yield.</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(l);</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordflow">if</span> (mr-><a class="code" href="classSVF_1_1MRSVFGNode.html#a28fe266d0e4618aa4448aa218495a332">getPointsTo</a>().count() != 0) ++<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a593177519a6bfab63dbb12dbc1ffbc20">numPrelabeledNodes</a>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a77a5dd9578def9a8e2b48e8b90d9b996">prelabelingTime</a> = (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> }</div><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#l00365">GenericGraph.h:365</a></div></div>
|
|
2066
2100
|
<div class="ttc" id="classSVF_1_1StoreVFGNode_html"><div class="ttname"><a href="classSVF_1_1StoreVFGNode.html">SVF::StoreVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00236">VFGNode.h:236</a></div></div>
|
|
2067
2101
|
<div class="ttc" id="classSVF_1_1Andersen_html_a187285a5bdf9422d9188b2b11b667639"><div class="ttname"><a href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">SVF::Andersen::getPts</a></div><div class="ttdeci">virtual const PointsTo & getPts(NodeID id)</div><div class="ttdoc">Operation of points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00222">Andersen.h:222</a></div></div>
|
|
2068
2102
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
|
|
2069
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_adfefc0dfa4e7fb4d20fafeaf96a5fa67"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">SVF::VersionedFlowSensitive::vWorklist</a></div><div class="ttdeci">FIFOWorkList< NodeID > vWorklist</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
2103
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_adfefc0dfa4e7fb4d20fafeaf96a5fa67"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">SVF::VersionedFlowSensitive::vWorklist</a></div><div class="ttdeci">FIFOWorkList< NodeID > vWorklist</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00202">VersionedFlowSensitive.h:202</a></div></div>
|
|
2070
2104
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
2071
|
-
<div class="ttc" id="
|
|
2105
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a9f9b00551c157f42d1d995e8c4efb54b"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">SVF::VersionedFlowSensitive::delta</a></div><div class="ttdeci">virtual bool delta(const NodeID l) const</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00402">VersionedFlowSensitive.cpp:402</a></div></div>
|
|
2106
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aaae8c6858593ed050dcf2c9220228e3e"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aaae8c6858593ed050dcf2c9220228e3e">SVF::VersionedFlowSensitive::prelabeledObjects</a></div><div class="ttdeci">Set< NodeID > prelabeledObjects</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00204">VersionedFlowSensitive.h:204</a></div></div>
|
|
2072
2107
|
<div class="ttc" id="classSVF_1_1MRSVFGNode_html"><div class="ttname"><a href="classSVF_1_1MRSVFGNode.html">SVF::MRSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00042">SVFGNode.h:42</a></div></div>
|
|
2073
2108
|
<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#l00369">GenericGraph.h:369</a></div></div>
|
|
2074
2109
|
<div class="ttc" id="classSVF_1_1VFG_html_a241d0489bf0315460e2b07db87e7847c"><div class="ttname"><a href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">SVF::VFG::iterator</a></div><div class="ttdeci">VFGNodeIDToNodeMapTy::iterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00079">VFG.h:79</a></div></div>
|
|
2075
2110
|
<div class="ttc" id="classSVF_1_1FIFOWorkList_html_ad4c6a48b60c870d63049fe7272cc7eb8"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">SVF::FIFOWorkList::push</a></div><div class="ttdeci">bool push(Data data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00159">WorkList.h:159</a></div></div>
|
|
2076
2111
|
<div class="ttc" id="classSVF_1_1PointsTo_html_a879783ba6629e500af9aa7dfcda2563d"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a879783ba6629e500af9aa7dfcda2563d">SVF::PointsTo::count</a></div><div class="ttdeci">u32_t count(void) const</div><div class="ttdoc">Returns number of elements. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00106">PointsTo.cpp:106</a></div></div>
|
|
2077
2112
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
|
|
2078
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_afb0396e095bd461f146b4c5ce957b89e"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#afb0396e095bd461f146b4c5ce957b89e">SVF::VersionedFlowSensitive::meldYield</a></div><div class="ttdeci">LocMeldVersionMap meldYield</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00196">VersionedFlowSensitive.h:196</a></div></div>
|
|
2079
2113
|
<div class="ttc" id="classSVF_1_1MRSVFGNode_html_a28fe266d0e4618aa4448aa218495a332"><div class="ttname"><a href="classSVF_1_1MRSVFGNode.html#a28fe266d0e4618aa4448aa218495a332">SVF::MRSVFGNode::getPointsTo</a></div><div class="ttdeci">const NodeBS & getPointsTo() const</div><div class="ttdoc">Return points-to of the MR. </div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00052">SVFGNode.h:52</a></div></div>
|
|
2080
|
-
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
2081
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a77a5dd9578def9a8e2b48e8b90d9b996"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a77a5dd9578def9a8e2b48e8b90d9b996">SVF::VersionedFlowSensitive::prelabelingTime</a></div><div class="ttdeci">double prelabelingTime</div><div class="ttdoc">Time to prelabel SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
2082
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_acf23b9ce8d07431adf1799dc64c68271"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#acf23b9ce8d07431adf1799dc64c68271">SVF::VersionedFlowSensitive::delta</a></div><div class="ttdeci">virtual bool delta(NodeID l) const</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00214">VersionedFlowSensitive.cpp:214</a></div></div>
|
|
2114
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00174">SVFBasicTypes.h:174</a></div></div>
|
|
2115
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a77a5dd9578def9a8e2b48e8b90d9b996"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a77a5dd9578def9a8e2b48e8b90d9b996">SVF::VersionedFlowSensitive::prelabelingTime</a></div><div class="ttdeci">double prelabelingTime</div><div class="ttdoc">Time to prelabel SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00229">VersionedFlowSensitive.h:229</a></div></div>
|
|
2083
2116
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
2084
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a593177519a6bfab63dbb12dbc1ffbc20"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a593177519a6bfab63dbb12dbc1ffbc20">SVF::VersionedFlowSensitive::numPrelabeledNodes</a></div><div class="ttdeci">Size_t numPrelabeledNodes</div><div class="ttdoc">Additional statistics. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
2085
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a0f3bc278aa733bd637c9905530ff2e6c"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a0f3bc278aa733bd637c9905530ff2e6c">SVF::VersionedFlowSensitive::meldConsume</a></div><div class="ttdeci">LocMeldVersionMap meldConsume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00192">VersionedFlowSensitive.h:192</a></div></div>
|
|
2117
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a593177519a6bfab63dbb12dbc1ffbc20"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a593177519a6bfab63dbb12dbc1ffbc20">SVF::VersionedFlowSensitive::numPrelabeledNodes</a></div><div class="ttdeci">Size_t numPrelabeledNodes</div><div class="ttdoc">Additional statistics. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00226">VersionedFlowSensitive.h:226</a></div></div>
|
|
2086
2118
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a5cfee013a1a5821ef0c449842dd8690d"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">SVF::FlowSensitive::ander</a></div><div class="ttdeci">AndersenWaveDiff * ander</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00284">FlowSensitive.h:284</a></div></div>
|
|
2087
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a24746dcada35f10cb387c94860930e84"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a24746dcada35f10cb387c94860930e84">SVF::VersionedFlowSensitive::newMeldVersion</a></div><div class="ttdeci">MeldVersion newMeldVersion(NodeID o)</div><div class="ttdoc">Returns a new MeldVersion for o during the prelabeling phase. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00245">VersionedFlowSensitive.cpp:245</a></div></div>
|
|
2088
2119
|
<div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00047">VFGNode.h:47</a></div></div>
|
|
2089
|
-
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#
|
|
2120
|
+
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00114">PTAStat.cpp:114</a></div></div>
|
|
2090
2121
|
</div><!-- fragment -->
|
|
2091
2122
|
</div>
|
|
2092
2123
|
</div>
|
|
@@ -2120,29 +2151,29 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2120
2151
|
|
|
2121
2152
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#a9968530b3dee876f55e6659530decf27">SVF::FlowSensitive</a>.</p>
|
|
2122
2153
|
|
|
2123
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2124
|
-
<div class="fragment"><div class="line"><a name="
|
|
2154
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00616">616</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2155
|
+
<div class="fragment"><div class="line"><a name="l00617"></a><span class="lineno"> 617</span> {</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> </div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span> </div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="comment">// l: p = *q</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = load-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> q = load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span> </div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& qpt = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(q);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : qpt)</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="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">isConstantObj</a>(o) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a2bd0a705705138be2bbc7e0b6ef3bf0f">isNonPointerObj</a>(o)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span> </div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af93e65faae99459621ae45cf9d36005d">getConsume</a>(l, o);</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <span class="keywordflow">if</span> (c != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> && <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-><a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(p, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, c)))</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  {</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  }</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> </div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& fields = <a class="code" href="classSVF_1_1PointerAnalysis.html#aeec490de5955497af1a2a9cd429f0d5d">getAllFieldsObjNode</a>(o);</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> of : fields)</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  {</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af93e65faae99459621ae45cf9d36005d">getConsume</a>(l, of);</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keywordflow">if</span> (c != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> && <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-><a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(p, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(of, c)))</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>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  }</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>  }</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span> </div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#aab4f70210eb1e6447a24697d3b459067">loadTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span> }</div><div class="ttc" id="classSVF_1_1StmtVFGNode_html_a04986961ad507be9fcf141ab51787da8"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">SVF::StmtVFGNode::getPAGDstNodeID</a></div><div class="ttdeci">NodeID getPAGDstNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00144">VFGNode.h:144</a></div></div>
|
|
2125
2156
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aab4f70210eb1e6447a24697d3b459067"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aab4f70210eb1e6447a24697d3b459067">SVF::FlowSensitive::loadTime</a></div><div class="ttdeci">double loadTime</div><div class="ttdoc">time of load edges </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00315">FlowSensitive.h:315</a></div></div>
|
|
2126
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a59f3dd74ed8c3e2fc48b9353ba2452aa"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">SVF::VersionedFlowSensitive::atKey</a></div><div class="ttdeci">static VersionedVar atKey(NodeID, Version)</div><div class="ttdoc">Return key into vPtD for address-taken var of a specific version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#
|
|
2157
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a59f3dd74ed8c3e2fc48b9353ba2452aa"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">SVF::VersionedFlowSensitive::atKey</a></div><div class="ttdeci">static VersionedVar atKey(NodeID, Version)</div><div class="ttdoc">Return key into vPtD for address-taken var of a specific version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00024">VersionedFlowSensitive.cpp:24</a></div></div>
|
|
2127
2158
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
2128
2159
|
<div class="ttc" id="classSVF_1_1PAG_html_a2bd0a705705138be2bbc7e0b6ef3bf0f"><div class="ttname"><a href="classSVF_1_1PAG.html#a2bd0a705705138be2bbc7e0b6ef3bf0f">SVF::PAG::isNonPointerObj</a></div><div class="ttdeci">bool isNonPointerObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00672">PAG.h:672</a></div></div>
|
|
2129
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a03f5f16377daa0258166a73de3e21f07"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">SVF::VersionedFlowSensitive::vPtD</a></div><div class="ttdeci">BVDataPTAImpl::VersionedPTDataTy * vPtD</div><div class="ttdoc">Points-to DS for working with versions. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
2130
|
-
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
2160
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a03f5f16377daa0258166a73de3e21f07"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">SVF::VersionedFlowSensitive::vPtD</a></div><div class="ttdeci">BVDataPTAImpl::VersionedPTDataTy * vPtD</div><div class="ttdoc">Points-to DS for working with versions. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00207">VersionedFlowSensitive.h:207</a></div></div>
|
|
2161
|
+
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00128">SVFBasicTypes.h:128</a></div></div>
|
|
2131
2162
|
<div class="ttc" id="classSVF_1_1PAG_html_a5382518f3bc9c3bbb3148b9499ae5ae2"><div class="ttname"><a href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">SVF::PAG::isConstantObj</a></div><div class="ttdeci">bool isConstantObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00666">PAG.h:666</a></div></div>
|
|
2132
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_ad8a7b01257f4b425007f3e0054dc6ae9"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#ad8a7b01257f4b425007f3e0054dc6ae9">SVF::VersionedFlowSensitive::getConsume</a></div><div class="ttdeci">Version getConsume(const NodeID l, const NodeID o)</div><div class="ttdoc">Returns the consumed version of o at l. If no such version exists, returns invalidVersion. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00588">VersionedFlowSensitive.cpp:588</a></div></div>
|
|
2133
2163
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo & getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00098">PointerAnalysisImpl.h:98</a></div></div>
|
|
2134
2164
|
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a791a01f5d3528f8a8bf19369b5c61c37"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">SVF::StmtVFGNode::getPAGSrcNodeID</a></div><div class="ttdeci">NodeID getPAGSrcNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00139">VFGNode.h:139</a></div></div>
|
|
2135
2165
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
|
|
2136
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
2137
|
-
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
2166
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00044">VersionedFlowSensitive.h:44</a></div></div>
|
|
2167
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00174">SVFBasicTypes.h:174</a></div></div>
|
|
2138
2168
|
<div class="ttc" id="classSVF_1_1VersionedPTData_html_a8b9d50b5ad1c779b2ff231f07f3002ea"><div class="ttname"><a href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">SVF::VersionedPTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const VersionedKey &dstVar, const VersionedKey &srcVar)=0</div></div>
|
|
2139
2169
|
<div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00164">GenericGraph.h:164</a></div></div>
|
|
2140
|
-
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
2170
|
+
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00086">SVFBasicTypes.h:86</a></div></div>
|
|
2171
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af93e65faae99459621ae45cf9d36005d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af93e65faae99459621ae45cf9d36005d">SVF::VersionedFlowSensitive::getConsume</a></div><div class="ttdeci">Version getConsume(const NodeID l, const NodeID o) const</div><div class="ttdoc">Returns the consumed version of o at l. If no such version exists, returns invalidVersion. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00772">VersionedFlowSensitive.cpp:772</a></div></div>
|
|
2141
2172
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0f71e4cd0948b294c7d33a690bde7dbe"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">SVF::PointerAnalysis::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00370">PointerAnalysis.h:370</a></div></div>
|
|
2142
2173
|
<div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00027">PointsTo.h:27</a></div></div>
|
|
2143
2174
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_aeec490de5955497af1a2a9cd429f0d5d"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#aeec490de5955497af1a2a9cd429f0d5d">SVF::PointerAnalysis::getAllFieldsObjNode</a></div><div class="ttdeci">virtual const NodeBS & getAllFieldsObjNode(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00361">PointerAnalysis.h:361</a></div></div>
|
|
2144
2175
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a8771956f7595b66d825b3dc459d1ae49"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static PAG * pag</div><div class="ttdoc">PAG. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00147">PointerAnalysis.h:147</a></div></div>
|
|
2145
|
-
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#
|
|
2176
|
+
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00114">PTAStat.cpp:114</a></div></div>
|
|
2146
2177
|
</div><!-- fragment -->
|
|
2147
2178
|
</div>
|
|
2148
2179
|
</div>
|
|
@@ -2175,10 +2206,10 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2175
2206
|
|
|
2176
2207
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#a16f594356ea565eb1fed2acea516a16b">SVF::FlowSensitive</a>.</p>
|
|
2177
2208
|
|
|
2178
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2179
|
-
<div class="fragment"><div class="line"><a name="
|
|
2209
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00559">559</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2210
|
+
<div class="fragment"><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> {</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* sn = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(n);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  <span class="comment">// Handle DummyVersPropSVFGNode here so we don't have to override the long</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="comment">// processSVFGNode. We also don't call propagate based on its result.</span></div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1DummyVersionPropSVFGNode.html">DummyVersionPropSVFGNode</a> *dvp = SVFUtil::dyn_cast<DummyVersionPropSVFGNode>(sn))</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  {</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">propagateVersion</a>(dvp->getObject(), dvp->getVersion());</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitive.html#a979f89495966d71f9b470d832384ebd6">processSVFGNode</a>(sn))</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>  <a class="code" href="classSVF_1_1WPASolver.html#a541ef7fda44ce79086c30b07a5f6126c">propagate</a>(&sn);</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span> }</div><div class="ttc" id="classSVF_1_1WPASolver_html_a541ef7fda44ce79086c30b07a5f6126c"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a541ef7fda44ce79086c30b07a5f6126c">SVF::WPASolver::propagate</a></div><div class="ttdeci">virtual void propagate(GNODE *v)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00133">WPASolver.h:133</a></div></div>
|
|
2180
2211
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
|
|
2181
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a7a98162b69de90f80ce853a6ff43af56"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">SVF::VersionedFlowSensitive::propagateVersion</a></div><div class="ttdeci">void propagateVersion(NodeID o, Version v)</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#
|
|
2212
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a7a98162b69de90f80ce853a6ff43af56"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">SVF::VersionedFlowSensitive::propagateVersion</a></div><div class="ttdeci">void propagateVersion(NodeID o, Version v)</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00516">VersionedFlowSensitive.cpp:516</a></div></div>
|
|
2182
2213
|
<div class="ttc" id="classSVF_1_1SVFG_html_a7ace06b6c893b31f7dec2abe54e33e11"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">SVF::SVFG::getSVFGNode</a></div><div class="ttdeci">SVFGNode * getSVFGNode(NodeID id) const</div><div class="ttdoc">Get a SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00150">SVFG.h:150</a></div></div>
|
|
2183
2214
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a979f89495966d71f9b470d832384ebd6"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a979f89495966d71f9b470d832384ebd6">SVF::FlowSensitive::processSVFGNode</a></div><div class="ttdeci">bool processSVFGNode(SVFGNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00203">FlowSensitive.cpp:203</a></div></div>
|
|
2184
2215
|
<div class="ttc" id="classSVF_1_1DummyVersionPropSVFGNode_html"><div class="ttname"><a href="classSVF_1_1DummyVersionPropSVFGNode.html">SVF::DummyVersionPropSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00468">SVFGNode.h:468</a></div></div>
|
|
@@ -2216,35 +2247,35 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2216
2247
|
|
|
2217
2248
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#aa37d591d2d4f65957e840bef4d142a6a">SVF::FlowSensitive</a>.</p>
|
|
2218
2249
|
|
|
2219
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2220
|
-
<div class="fragment"><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> {</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &ppt = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(p);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> </div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">if</span> (ppt.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>()) <span class="keywordflow">return</span> <span class="keyword">false</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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> q = store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &qpt = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(q);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> </div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="comment">// l: *p = q</span></div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span> </div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="comment">// The version for these objects would be y_l(o).</span></div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> changedObjects;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span> </div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">if</span> (!qpt.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</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="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : ppt)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">isConstantObj</a>(o) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a2bd0a705705138be2bbc7e0b6ef3bf0f">isNonPointerObj</a>(o)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> y = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6ea3f8e2aa85ea588735514c0b6ff255">getYield</a>(l, o);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keywordflow">if</span> (y != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> && <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-><a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, y), q))</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  changedObjects.set(o);</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>  }</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span> </div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a82b76087363b26fbe749653935569de7">storeTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span> </div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  <span class="keywordtype">double</span> updateStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> singleton = 0;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="keywordtype">bool</span> isSU = <a class="code" href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2">isStrongUpdate</a>(store, singleton);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">if</span> (isSU) <a class="code" href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">svfgHasSU</a>.set(l);</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">else</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">svfgHasSU</a>.reset(l);</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>  <span class="comment">// For all objects, perform pts(o:y) = pts(o:y) U pts(o:c) at loc,</span></div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="comment">// except when a strong update is taking place.</span></div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keyword">const</span> LocVersionMap::const_iterator lovmIt = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>.find(l);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  <span class="keywordflow">if</span> (lovmIt != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>.end())</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>  {</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> ObjToVersionMap::value_type &oc : lovmIt->second)</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = oc.first;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = oc.second;</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>  <span class="comment">// Strong-updated; don't propagate.</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keywordflow">if</span> (isSU && o == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> </div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> y = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6ea3f8e2aa85ea588735514c0b6ff255">getYield</a>(l, o);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">if</span> (y != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> && <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-><a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, y), <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, c)))</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  changedObjects.set(o);</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>  }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  }</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>  <span class="keywordtype">double</span> updateEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#af5a94d14096ae2bbc47b3b3b9f723226">updateTime</a> += (updateEnd - updateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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="comment">// Changed objects need to be propagated. Time here should be inconsequential</span></div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="comment">// *except* for time taken for propagateVersion, which will time itself.</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keywordflow">if</span> (!changedObjects.empty())</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>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : changedObjects)</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">// Definitely has a yielded version (came from prelabelling) as these are</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="comment">// the changed objects which must've been pointed to in Andersen's too.</span></div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> y = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6ea3f8e2aa85ea588735514c0b6ff255">getYield</a>(l, o);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">propagateVersion</a>(o, y);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="comment">// Some o/v pairs changed: statements need to know.</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> s : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>[o][y]) <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(s);</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  }</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</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>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span> }</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00163">WPASolver.h:163</a></div></div>
|
|
2250
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00659">659</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2251
|
+
<div class="fragment"><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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &ppt = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(p);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span> </div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keywordflow">if</span> (ppt.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> q = store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &qpt = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(q);</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span> </div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="comment">// l: *p = q</span></div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> </div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="comment">// The version for these objects would be y_l(o).</span></div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> changedObjects;</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>  <span class="keywordflow">if</span> (!qpt.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : ppt)</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  {</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">isConstantObj</a>(o) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">pag</a>-><a class="code" href="classSVF_1_1PAG.html#a2bd0a705705138be2bbc7e0b6ef3bf0f">isNonPointerObj</a>(o)) <span class="keywordflow">continue</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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> y = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a01a199e9fdb5759c7f78ee344dbc413c">getYield</a>(l, o);</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  <span class="keywordflow">if</span> (y != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> && <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-><a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, y), q))</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>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  changedObjects.set(o);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  }</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>  }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span> </div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a82b76087363b26fbe749653935569de7">storeTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span> </div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keywordtype">double</span> updateStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> singleton = 0;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <span class="keywordtype">bool</span> isSU = <a class="code" href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2">isStrongUpdate</a>(store, singleton);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">if</span> (isSU) <a class="code" href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">svfgHasSU</a>.set(l);</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="keywordflow">else</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">svfgHasSU</a>.reset(l);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> </div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="comment">// For all objects, perform pts(o:y) = pts(o:y) U pts(o:c) at loc,</span></div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="comment">// except when a strong update is taking place.</span></div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> ObjToVersionMap::value_type &oc : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>[l])</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  {</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = oc.first;</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = oc.second;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span> </div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="comment">// Strong-updated; don't propagate.</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  <span class="keywordflow">if</span> (isSU && o == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span> </div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> y = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a01a199e9fdb5759c7f78ee344dbc413c">getYield</a>(l, o);</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>  <span class="keywordflow">if</span> (y != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> && <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-><a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, y), <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, c)))</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  {</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  changedObjects.set(o);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  }</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  }</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span> </div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <span class="keywordtype">double</span> updateEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#af5a94d14096ae2bbc47b3b3b9f723226">updateTime</a> += (updateEnd - updateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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>  <span class="comment">// Changed objects need to be propagated. Time here should be inconsequential</span></div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="comment">// *except* for time taken for propagateVersion, which will time itself.</span></div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <span class="keywordflow">if</span> (!changedObjects.empty())</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  {</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : changedObjects)</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  {</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="comment">// Definitely has a yielded version (came from prelabelling) as these are</span></div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="comment">// the changed objects which must've been pointed to in Andersen's too.</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> y = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a01a199e9fdb5759c7f78ee344dbc413c">getYield</a>(l, o);</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">propagateVersion</a>(o, y);</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>  <span class="comment">// Some o/v pairs changed: statements need to know.</span></div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> s : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3489def8e16e4d7c83d2c909d3287fc0">getStmtReliance</a>(o, y)) <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(s);</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="l00739"></a><span class="lineno"> 739</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span> }</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00162">WPASolver.h:162</a></div></div>
|
|
2221
2252
|
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a04986961ad507be9fcf141ab51787da8"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">SVF::StmtVFGNode::getPAGDstNodeID</a></div><div class="ttdeci">NodeID getPAGDstNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00144">VFGNode.h:144</a></div></div>
|
|
2222
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a7a98162b69de90f80ce853a6ff43af56"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">SVF::VersionedFlowSensitive::propagateVersion</a></div><div class="ttdeci">void propagateVersion(NodeID o, Version v)</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#
|
|
2223
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a59f3dd74ed8c3e2fc48b9353ba2452aa"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">SVF::VersionedFlowSensitive::atKey</a></div><div class="ttdeci">static VersionedVar atKey(NodeID, Version)</div><div class="ttdoc">Return key into vPtD for address-taken var of a specific version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#
|
|
2253
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a7a98162b69de90f80ce853a6ff43af56"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">SVF::VersionedFlowSensitive::propagateVersion</a></div><div class="ttdeci">void propagateVersion(NodeID o, Version v)</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00516">VersionedFlowSensitive.cpp:516</a></div></div>
|
|
2254
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a59f3dd74ed8c3e2fc48b9353ba2452aa"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">SVF::VersionedFlowSensitive::atKey</a></div><div class="ttdeci">static VersionedVar atKey(NodeID, Version)</div><div class="ttdoc">Return key into vPtD for address-taken var of a specific version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00024">VersionedFlowSensitive.cpp:24</a></div></div>
|
|
2224
2255
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
2225
2256
|
<div class="ttc" id="classSVF_1_1PAG_html_a2bd0a705705138be2bbc7e0b6ef3bf0f"><div class="ttname"><a href="classSVF_1_1PAG.html#a2bd0a705705138be2bbc7e0b6ef3bf0f">SVF::PAG::isNonPointerObj</a></div><div class="ttdeci">bool isNonPointerObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00672">PAG.h:672</a></div></div>
|
|
2226
2257
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a42a7e39e0e15576742f8ba7c32579ea2"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2">SVF::FlowSensitive::isStrongUpdate</a></div><div class="ttdeci">bool isStrongUpdate(const SVFGNode *node, NodeID &singleton)</div><div class="ttdoc">Return TRUE if this is a strong update STORE statement. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00626">FlowSensitive.cpp:626</a></div></div>
|
|
2227
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a03f5f16377daa0258166a73de3e21f07"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">SVF::VersionedFlowSensitive::vPtD</a></div><div class="ttdeci">BVDataPTAImpl::VersionedPTDataTy * vPtD</div><div class="ttdoc">Points-to DS for working with versions. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
2228
|
-
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
2229
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af0859eb2a5b46c45aa4314e6e54f4438"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">SVF::VersionedFlowSensitive::stmtReliance</a></div><div class="ttdeci">Map< NodeID, Map< Version, NodeBS > > stmtReliance</div><div class="ttdoc">o x version -> statement nodes which rely on that o/version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00219">VersionedFlowSensitive.h:219</a></div></div>
|
|
2258
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a03f5f16377daa0258166a73de3e21f07"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">SVF::VersionedFlowSensitive::vPtD</a></div><div class="ttdeci">BVDataPTAImpl::VersionedPTDataTy * vPtD</div><div class="ttdoc">Points-to DS for working with versions. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00207">VersionedFlowSensitive.h:207</a></div></div>
|
|
2259
|
+
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00128">SVFBasicTypes.h:128</a></div></div>
|
|
2230
2260
|
<div class="ttc" id="classSVF_1_1PAG_html_a5382518f3bc9c3bbb3148b9499ae5ae2"><div class="ttname"><a href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">SVF::PAG::isConstantObj</a></div><div class="ttdeci">bool isConstantObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PAG_8h_source.html#l00666">PAG.h:666</a></div></div>
|
|
2261
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a01a199e9fdb5759c7f78ee344dbc413c"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a01a199e9fdb5759c7f78ee344dbc413c">SVF::VersionedFlowSensitive::getYield</a></div><div class="ttdeci">Version getYield(const NodeID l, const NodeID o) const</div><div class="ttdoc">Returns the yielded version of o at l. If no such version exists, returns invalidVersion. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00777">VersionedFlowSensitive.cpp:777</a></div></div>
|
|
2231
2262
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo & getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00098">PointerAnalysisImpl.h:98</a></div></div>
|
|
2232
2263
|
<div class="ttc" id="classSVF_1_1PointsTo_html_ac4688413177b49b37dbbfd3ed188d59b"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty(void) const</div><div class="ttdoc">Returns true if set is empty. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00094">PointsTo.cpp:94</a></div></div>
|
|
2233
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
2264
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00182">VersionedFlowSensitive.h:182</a></div></div>
|
|
2234
2265
|
<div class="ttc" id="classSVF_1_1StmtVFGNode_html_a791a01f5d3528f8a8bf19369b5c61c37"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">SVF::StmtVFGNode::getPAGSrcNodeID</a></div><div class="ttdeci">NodeID getPAGSrcNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00139">VFGNode.h:139</a></div></div>
|
|
2235
2266
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
|
|
2267
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3489def8e16e4d7c83d2c909d3287fc0"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3489def8e16e4d7c83d2c909d3287fc0">SVF::VersionedFlowSensitive::getStmtReliance</a></div><div class="ttdeci">NodeBS & getStmtReliance(const NodeID o, const Version v)</div><div class="ttdoc">Returns the statements which rely on o:v. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00807">VersionedFlowSensitive.cpp:807</a></div></div>
|
|
2236
2268
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a43e8ca2e69e6e8643c9abd1fa231d305"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">SVF::FlowSensitive::svfgHasSU</a></div><div class="ttdeci">NodeBS svfgHasSU</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00320">FlowSensitive.h:320</a></div></div>
|
|
2237
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
2238
|
-
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
2269
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00044">VersionedFlowSensitive.h:44</a></div></div>
|
|
2270
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00174">SVFBasicTypes.h:174</a></div></div>
|
|
2239
2271
|
<div class="ttc" id="classSVF_1_1VersionedPTData_html_a8b9d50b5ad1c779b2ff231f07f3002ea"><div class="ttname"><a href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">SVF::VersionedPTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const VersionedKey &dstVar, const VersionedKey &srcVar)=0</div></div>
|
|
2240
2272
|
<div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00164">GenericGraph.h:164</a></div></div>
|
|
2241
|
-
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
2273
|
+
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00086">SVFBasicTypes.h:86</a></div></div>
|
|
2242
2274
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a82b76087363b26fbe749653935569de7"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a82b76087363b26fbe749653935569de7">SVF::FlowSensitive::storeTime</a></div><div class="ttdeci">double storeTime</div><div class="ttdoc">time of store edges </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00316">FlowSensitive.h:316</a></div></div>
|
|
2243
2275
|
<div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00027">PointsTo.h:27</a></div></div>
|
|
2244
2276
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_af5a94d14096ae2bbc47b3b3b9f723226"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#af5a94d14096ae2bbc47b3b3b9f723226">SVF::FlowSensitive::updateTime</a></div><div class="ttdeci">double updateTime</div><div class="ttdoc">time of strong/weak updates. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00311">FlowSensitive.h:311</a></div></div>
|
|
2245
2277
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a8771956f7595b66d825b3dc459d1ae49"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a8771956f7595b66d825b3dc459d1ae49">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static PAG * pag</div><div class="ttdoc">PAG. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00147">PointerAnalysis.h:147</a></div></div>
|
|
2246
|
-
<div class="ttc" id="
|
|
2247
|
-
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00113">PTAStat.cpp:113</a></div></div>
|
|
2278
|
+
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00114">PTAStat.cpp:114</a></div></div>
|
|
2248
2279
|
</div><!-- fragment -->
|
|
2249
2280
|
</div>
|
|
2250
2281
|
</div>
|
|
@@ -2283,15 +2314,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2283
2314
|
</div><div class="memdoc">
|
|
2284
2315
|
<p>Propagates version v of o to any version of o which relies on v when o/v is changed. Recursively applies to reliant versions till no new changes are made. Adds any statements which rely on any changes made to the worklist. </p>
|
|
2285
2316
|
|
|
2286
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2287
|
-
<div class="fragment"><div class="line"><a name="
|
|
2288
|
-
<div class="ttc" id="
|
|
2289
|
-
<div class="ttc" id="
|
|
2290
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a1dc6e3d4931b53e7e426c0f76d06aeb3"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">SVF::VersionedFlowSensitive::versionReliance</a></div><div class="ttdeci">VersionRelianceMap versionReliance</div><div class="ttdoc">o -> (version -> versions which rely on it). </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00217">VersionedFlowSensitive.h:217</a></div></div>
|
|
2291
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af15bb6be283fee2fcc4b1fb7d8190451"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af15bb6be283fee2fcc4b1fb7d8190451">SVF::VersionedFlowSensitive::versionPropTime</a></div><div class="ttdeci">double versionPropTime</div><div class="ttdoc">Time to propagate versions to versions which rely on them. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00241">VersionedFlowSensitive.h:241</a></div></div>
|
|
2317
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00516">516</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2318
|
+
<div class="fragment"><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</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>  <span class="keyword">const</span> std::vector<Version> &reliantVersions = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#ae83c62a01196991d116ef5c36cb51e31">getReliantVersions</a>(o, v);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> r : reliantVersions)</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  {</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">propagateVersion</a>(o, v, r, <span class="keyword">false</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> </div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af15bb6be283fee2fcc4b1fb7d8190451">versionPropTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a7a98162b69de90f80ce853a6ff43af56"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">SVF::VersionedFlowSensitive::propagateVersion</a></div><div class="ttdeci">void propagateVersion(NodeID o, Version v)</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00516">VersionedFlowSensitive.cpp:516</a></div></div>
|
|
2319
|
+
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00128">SVFBasicTypes.h:128</a></div></div>
|
|
2320
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af15bb6be283fee2fcc4b1fb7d8190451"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af15bb6be283fee2fcc4b1fb7d8190451">SVF::VersionedFlowSensitive::versionPropTime</a></div><div class="ttdeci">double versionPropTime</div><div class="ttdoc">Time to propagate versions to versions which rely on them. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00231">VersionedFlowSensitive.h:231</a></div></div>
|
|
2292
2321
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
|
|
2293
|
-
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
2294
|
-
<div class="ttc" id="
|
|
2322
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00174">SVFBasicTypes.h:174</a></div></div>
|
|
2323
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_ae83c62a01196991d116ef5c36cb51e31"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#ae83c62a01196991d116ef5c36cb51e31">SVF::VersionedFlowSensitive::getReliantVersions</a></div><div class="ttdeci">std::vector< Version > & getReliantVersions(const NodeID o, const Version v)</div><div class="ttdoc">Returns the versions of o which rely on o:v. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00802">VersionedFlowSensitive.cpp:802</a></div></div>
|
|
2324
|
+
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00114">PTAStat.cpp:114</a></div></div>
|
|
2295
2325
|
</div><!-- fragment -->
|
|
2296
2326
|
</div>
|
|
2297
2327
|
</div>
|
|
@@ -2342,24 +2372,24 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2342
2372
|
</div><div class="memdoc">
|
|
2343
2373
|
<p>Propagates version v of o to version vp of o. time indicates whether it should record time taken itself. </p>
|
|
2344
2374
|
|
|
2345
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2346
|
-
<div class="fragment"><div class="line"><a name="
|
|
2375
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00530">530</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2376
|
+
<div class="fragment"><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>  <span class="keywordtype">double</span> start = time ? <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>() : 0.0;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> </div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a32489632f53dce062ca2e8bff42c65cf">VersionedVar</a> srcVar = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, v);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a32489632f53dce062ca2e8bff42c65cf">VersionedVar</a> dstVar = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, vp);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-><a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(dstVar, srcVar))</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  {</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="comment">// o:vp has changed.</span></div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="comment">// Add the dummy propagation node to tell the solver to propagate it later.</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1DummyVersionPropSVFGNode.html">DummyVersionPropSVFGNode</a> *dvp = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  VarToPropNodeMap::const_iterator dvpIt = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af14a4cbc0b990389d31b2f88f50ad8eb">versionedVarToPropNode</a>.find(dstVar);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">if</span> (dvpIt == <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af14a4cbc0b990389d31b2f88f50ad8eb">versionedVarToPropNode</a>.end())</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  dvp = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a8dd513e8e5343beeb5d117c1ff4e45ea">addDummyVersionPropSVFGNode</a>(o, vp);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af14a4cbc0b990389d31b2f88f50ad8eb">versionedVarToPropNode</a>[dstVar] = dvp;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  } <span class="keywordflow">else</span> dvp = dvpIt->second;</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dvp != <span class="keyword">nullptr</span> && <span class="stringliteral">"VFS::propagateVersion: propagation dummy node not found?"</span>);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(dvp-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</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="comment">// Notify nodes which rely on o:vp that it changed.</span></div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> s : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3489def8e16e4d7c83d2c909d3287fc0">getStmtReliance</a>(o, vp)) <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(s);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  }</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> </div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keywordtype">double</span> end = time ? <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>() : 0.0;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  <span class="keywordflow">if</span> (time) <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af15bb6be283fee2fcc4b1fb7d8190451">versionPropTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> }</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00162">WPASolver.h:162</a></div></div>
|
|
2347
2377
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
|
|
2348
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a59f3dd74ed8c3e2fc48b9353ba2452aa"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">SVF::VersionedFlowSensitive::atKey</a></div><div class="ttdeci">static VersionedVar atKey(NodeID, Version)</div><div class="ttdoc">Return key into vPtD for address-taken var of a specific version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#
|
|
2378
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a59f3dd74ed8c3e2fc48b9353ba2452aa"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">SVF::VersionedFlowSensitive::atKey</a></div><div class="ttdeci">static VersionedVar atKey(NodeID, Version)</div><div class="ttdoc">Return key into vPtD for address-taken var of a specific version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00024">VersionedFlowSensitive.cpp:24</a></div></div>
|
|
2349
2379
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
2350
2380
|
<div class="ttc" id="classSVF_1_1SVFG_html_a8dd513e8e5343beeb5d117c1ff4e45ea"><div class="ttname"><a href="classSVF_1_1SVFG.html#a8dd513e8e5343beeb5d117c1ff4e45ea">SVF::SVFG::addDummyVersionPropSVFGNode</a></div><div class="ttdeci">const DummyVersionPropSVFGNode * addDummyVersionPropSVFGNode(const NodeID object, const NodeID version)</div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00261">SVFG.h:261</a></div></div>
|
|
2351
2381
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
2352
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a03f5f16377daa0258166a73de3e21f07"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">SVF::VersionedFlowSensitive::vPtD</a></div><div class="ttdeci">BVDataPTAImpl::VersionedPTDataTy * vPtD</div><div class="ttdoc">Points-to DS for working with versions. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
2353
|
-
<div class="ttc" id="
|
|
2354
|
-
<div class="ttc" id="
|
|
2355
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af14a4cbc0b990389d31b2f88f50ad8eb"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af14a4cbc0b990389d31b2f88f50ad8eb">SVF::VersionedFlowSensitive::versionedVarToPropNode</a></div><div class="ttdeci">VarToPropNodeMap versionedVarToPropNode</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00223">VersionedFlowSensitive.h:223</a></div></div>
|
|
2382
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a03f5f16377daa0258166a73de3e21f07"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">SVF::VersionedFlowSensitive::vPtD</a></div><div class="ttdeci">BVDataPTAImpl::VersionedPTDataTy * vPtD</div><div class="ttdoc">Points-to DS for working with versions. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00207">VersionedFlowSensitive.h:207</a></div></div>
|
|
2383
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af15bb6be283fee2fcc4b1fb7d8190451"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af15bb6be283fee2fcc4b1fb7d8190451">SVF::VersionedFlowSensitive::versionPropTime</a></div><div class="ttdeci">double versionPropTime</div><div class="ttdoc">Time to propagate versions to versions which rely on them. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00231">VersionedFlowSensitive.h:231</a></div></div>
|
|
2384
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af14a4cbc0b990389d31b2f88f50ad8eb"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af14a4cbc0b990389d31b2f88f50ad8eb">SVF::VersionedFlowSensitive::versionedVarToPropNode</a></div><div class="ttdeci">VarToPropNodeMap versionedVarToPropNode</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00193">VersionedFlowSensitive.h:193</a></div></div>
|
|
2356
2385
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
|
|
2357
|
-
<div class="ttc" id="
|
|
2386
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3489def8e16e4d7c83d2c909d3287fc0"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3489def8e16e4d7c83d2c909d3287fc0">SVF::VersionedFlowSensitive::getStmtReliance</a></div><div class="ttdeci">NodeBS & getStmtReliance(const NodeID o, const Version v)</div><div class="ttdoc">Returns the statements which rely on o:v. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00807">VersionedFlowSensitive.cpp:807</a></div></div>
|
|
2387
|
+
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00174">SVFBasicTypes.h:174</a></div></div>
|
|
2358
2388
|
<div class="ttc" id="classSVF_1_1VersionedPTData_html_a8b9d50b5ad1c779b2ff231f07f3002ea"><div class="ttname"><a href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">SVF::VersionedPTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const VersionedKey &dstVar, const VersionedKey &srcVar)=0</div></div>
|
|
2359
2389
|
<div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00164">GenericGraph.h:164</a></div></div>
|
|
2360
|
-
<div class="ttc" id="namespaceSVF_html_a32489632f53dce062ca2e8bff42c65cf"><div class="ttname"><a href="namespaceSVF.html#a32489632f53dce062ca2e8bff42c65cf">SVF::VersionedVar</a></div><div class="ttdeci">std::pair< NodeID, Version > VersionedVar</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
2390
|
+
<div class="ttc" id="namespaceSVF_html_a32489632f53dce062ca2e8bff42c65cf"><div class="ttname"><a href="namespaceSVF.html#a32489632f53dce062ca2e8bff42c65cf">SVF::VersionedVar</a></div><div class="ttdeci">std::pair< NodeID, Version > VersionedVar</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00130">SVFBasicTypes.h:130</a></div></div>
|
|
2361
2391
|
<div class="ttc" id="classSVF_1_1DummyVersionPropSVFGNode_html"><div class="ttname"><a href="classSVF_1_1DummyVersionPropSVFGNode.html">SVF::DummyVersionPropSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00468">SVFGNode.h:468</a></div></div>
|
|
2362
|
-
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#
|
|
2392
|
+
<div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00114">PTAStat.cpp:114</a></div></div>
|
|
2363
2393
|
</div><!-- fragment -->
|
|
2364
2394
|
</div>
|
|
2365
2395
|
</div>
|
|
@@ -2391,8 +2421,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2391
2421
|
|
|
2392
2422
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#aeb1e002519123a67f8d18f78cda04bac">SVF::FlowSensitive</a>.</p>
|
|
2393
2423
|
|
|
2394
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2395
|
-
<div class="fragment"><div class="line"><a name="
|
|
2424
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00102">102</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2425
|
+
<div class="fragment"><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> { <span class="keywordflow">return</span> <span class="keyword">false</span>; }</div></div><!-- fragment -->
|
|
2396
2426
|
</div>
|
|
2397
2427
|
</div>
|
|
2398
2428
|
<a id="a6e4964389f96667bd69354fd4a742720"></a>
|
|
@@ -2422,8 +2452,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2422
2452
|
|
|
2423
2453
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#a4f1a0d533381660055210be1e2d7d72a">SVF::FlowSensitive</a>.</p>
|
|
2424
2454
|
|
|
2425
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2426
|
-
<div class="fragment"><div class="line"><a name="
|
|
2455
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00059">59</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2456
|
+
<div class="fragment"><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordflow">return</span> <span class="stringliteral">"VersionedFlowSensitive"</span>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div></div><!-- fragment -->
|
|
2427
2457
|
</div>
|
|
2428
2458
|
</div>
|
|
2429
2459
|
<a id="a754c77fff88e8f415dc7a2096d1bffe2"></a>
|
|
@@ -2451,8 +2481,48 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2451
2481
|
|
|
2452
2482
|
<p>Release flow-sensitive pointer analysis. </p>
|
|
2453
2483
|
|
|
2454
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2455
|
-
<div class="fragment"><div class="line"><a name="
|
|
2484
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00089">89</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2485
|
+
<div class="fragment"><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a53b8a881400d7b353133c68295812efb">vfspta</a>) <span class="keyword">delete</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a53b8a881400d7b353133c68295812efb">vfspta</a>;</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a53b8a881400d7b353133c68295812efb">vfspta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a53b8a881400d7b353133c68295812efb"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a53b8a881400d7b353133c68295812efb">SVF::VersionedFlowSensitive::vfspta</a></div><div class="ttdeci">static VersionedFlowSensitive * vfspta</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00234">VersionedFlowSensitive.h:234</a></div></div>
|
|
2486
|
+
</div><!-- fragment -->
|
|
2487
|
+
</div>
|
|
2488
|
+
</div>
|
|
2489
|
+
<a id="a275095f60640d862034ad173af3371c3"></a>
|
|
2490
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a275095f60640d862034ad173af3371c3">◆ </a></span>removeAllIndirectSVFGEdges()</h2>
|
|
2491
|
+
|
|
2492
|
+
<div class="memitem">
|
|
2493
|
+
<div class="memproto">
|
|
2494
|
+
<table class="mlabels">
|
|
2495
|
+
<tr>
|
|
2496
|
+
<td class="mlabels-left">
|
|
2497
|
+
<table class="memname">
|
|
2498
|
+
<tr>
|
|
2499
|
+
<td class="memname">void VersionedFlowSensitive::removeAllIndirectSVFGEdges </td>
|
|
2500
|
+
<td>(</td>
|
|
2501
|
+
<td class="paramtype">void </td>
|
|
2502
|
+
<td class="paramname"></td><td>)</td>
|
|
2503
|
+
<td></td>
|
|
2504
|
+
</tr>
|
|
2505
|
+
</table>
|
|
2506
|
+
</td>
|
|
2507
|
+
<td class="mlabels-right">
|
|
2508
|
+
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
2509
|
+
</tr>
|
|
2510
|
+
</table>
|
|
2511
|
+
</div><div class="memdoc">
|
|
2512
|
+
|
|
2513
|
+
<p>Removes all indirect edges in the <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. </p>
|
|
2514
|
+
|
|
2515
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00494">494</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2516
|
+
<div class="fragment"><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>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">SVFG::iterator</a> nodeIt = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nodeIt != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nodeIt)</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  {</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *sn = nodeIt->second;</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span> </div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVFGEdgeSetTy</a> &inEdges = sn-><a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>();</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  std::vector<SVFGEdge *> toDeleteFromIn;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a> *e : inEdges)</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>  <span class="keywordflow">if</span> (SVFUtil::isa<IndirectSVFGEdge>(e)) toDeleteFromIn.push_back(e);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a> *e : toDeleteFromIn) <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1SVFG.html#a931d8b82e10a54d68c68cf6bd80264be">removeSVFGEdge</a>(e);</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span> </div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="comment">// Only need to iterate over incoming edges for each node because edges</span></div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="comment">// will be deleted from in/out through removeSVFGEdge.</span></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_1WPASolver.html#aa04deb39cd024c051f30ac43d1d62b34">setGraph</a>(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span> }</div><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#l00365">GenericGraph.h:365</a></div></div>
|
|
2517
|
+
<div class="ttc" id="classSVF_1_1SVFG_html_a931d8b82e10a54d68c68cf6bd80264be"><div class="ttname"><a href="classSVF_1_1SVFG.html#a931d8b82e10a54d68c68cf6bd80264be">SVF::SVFG::removeSVFGEdge</a></div><div class="ttdeci">void removeSVFGEdge(SVFGEdge *edge)</div><div class="ttdoc">Remove a SVFG edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00237">SVFG.h:237</a></div></div>
|
|
2518
|
+
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
|
|
2519
|
+
<div class="ttc" id="classSVF_1_1GenericNode_html_afc8b5f86d7795b6a0dfc0687d942d79b"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">SVF::GenericNode::getInEdges</a></div><div class="ttdeci">const GEdgeSetTy & getInEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00181">GenericGraph.h:181</a></div></div>
|
|
2520
|
+
<div class="ttc" id="classSVF_1_1VFGEdge_html"><div class="ttname"><a href="classSVF_1_1VFGEdge.html">SVF::VFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00044">VFGEdge.h:44</a></div></div>
|
|
2521
|
+
<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#l00369">GenericGraph.h:369</a></div></div>
|
|
2522
|
+
<div class="ttc" id="classSVF_1_1VFG_html_a241d0489bf0315460e2b07db87e7847c"><div class="ttname"><a href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">SVF::VFG::iterator</a></div><div class="ttdeci">VFGNodeIDToNodeMapTy::iterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="VFG_8h_source.html#l00079">VFG.h:79</a></div></div>
|
|
2523
|
+
<div class="ttc" id="classSVF_1_1WPASolver_html_aa04deb39cd024c051f30ac43d1d62b34"><div class="ttname"><a href="classSVF_1_1WPASolver.html#aa04deb39cd024c051f30ac43d1d62b34">SVF::WPASolver::setGraph</a></div><div class="ttdeci">void setGraph(GraphType g)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00082">WPASolver.h:82</a></div></div>
|
|
2524
|
+
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a69289c48fa91f850da90de080b9d26e5"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a69289c48fa91f850da90de080b9d26e5">SVF::FlowSensitive::SVFGEdgeSetTy</a></div><div class="ttdeci">SVFG::SVFGEdgeSetTy SVFGEdgeSetTy</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00053">FlowSensitive.h:53</a></div></div>
|
|
2525
|
+
<div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00047">VFGNode.h:47</a></div></div>
|
|
2456
2526
|
</div><!-- fragment -->
|
|
2457
2527
|
</div>
|
|
2458
2528
|
</div>
|
|
@@ -2498,15 +2568,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2498
2568
|
|
|
2499
2569
|
<p>Sets the consumed version of o at l to v. </p>
|
|
2500
2570
|
|
|
2501
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2502
|
-
<div class="fragment"><div class="line"><a name="
|
|
2503
|
-
<div class="ttc" id="
|
|
2504
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00205">VersionedFlowSensitive.h:205</a></div></div>
|
|
2571
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00790">790</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2572
|
+
<div class="fragment"><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>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adf37ae1f6a07716bca6fbe1603b8a070">setVersion</a>(l, o, v, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>);</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00182">VersionedFlowSensitive.h:182</a></div></div>
|
|
2573
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_adf37ae1f6a07716bca6fbe1603b8a070"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#adf37ae1f6a07716bca6fbe1603b8a070">SVF::VersionedFlowSensitive::setVersion</a></div><div class="ttdeci">void setVersion(const NodeID l, const NodeID o, const Version v, LocVersionMap &lvm)</div><div class="ttdoc">Shared code for setConsume and setYield. They wrap this function. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00784">VersionedFlowSensitive.cpp:784</a></div></div>
|
|
2505
2574
|
</div><!-- fragment -->
|
|
2506
2575
|
</div>
|
|
2507
2576
|
</div>
|
|
2508
|
-
<a id="
|
|
2509
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2577
|
+
<a id="adf37ae1f6a07716bca6fbe1603b8a070"></a>
|
|
2578
|
+
<h2 class="memtitle"><span class="permalink"><a href="#adf37ae1f6a07716bca6fbe1603b8a070">◆ </a></span>setVersion()</h2>
|
|
2510
2579
|
|
|
2511
2580
|
<div class="memitem">
|
|
2512
2581
|
<div class="memproto">
|
|
@@ -2535,13 +2604,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2535
2604
|
<tr>
|
|
2536
2605
|
<td class="paramkey"></td>
|
|
2537
2606
|
<td></td>
|
|
2538
|
-
<td class="paramtype"><a class="el" href="
|
|
2539
|
-
<td class="paramname"><em>cache</em>, </td>
|
|
2540
|
-
</tr>
|
|
2541
|
-
<tr>
|
|
2542
|
-
<td class="paramkey"></td>
|
|
2543
|
-
<td></td>
|
|
2544
|
-
<td class="paramtype"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a0ea2cc21f9de287746ca2216b08e22b4">LocVersionMap</a> & </td>
|
|
2607
|
+
<td class="paramtype"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> & </td>
|
|
2545
2608
|
<td class="paramname"><em>lvm</em> </td>
|
|
2546
2609
|
</tr>
|
|
2547
2610
|
<tr>
|
|
@@ -2559,8 +2622,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2559
2622
|
|
|
2560
2623
|
<p>Shared code for setConsume and setYield. They wrap this function. </p>
|
|
2561
2624
|
|
|
2562
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2563
|
-
<div class="fragment"><div class="line"><a name="
|
|
2625
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00784">784</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2626
|
+
<div class="fragment"><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>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af9a43f48b7d99cc6694f3ae3248fd8e0">ObjToVersionMap</a> &ovm = lvm[l];</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  ovm[o] = v;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span> }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af9a43f48b7d99cc6694f3ae3248fd8e0"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af9a43f48b7d99cc6694f3ae3248fd8e0">SVF::VersionedFlowSensitive::ObjToVersionMap</a></div><div class="ttdeci">Map< NodeID, Version > ObjToVersionMap</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00036">VersionedFlowSensitive.h:36</a></div></div>
|
|
2564
2627
|
</div><!-- fragment -->
|
|
2565
2628
|
</div>
|
|
2566
2629
|
</div>
|
|
@@ -2606,10 +2669,11 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2606
2669
|
|
|
2607
2670
|
<p>Sets the yielded version of o at l to v. </p>
|
|
2608
2671
|
|
|
2609
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2610
|
-
<div class="fragment"><div class="line"><a name="
|
|
2611
|
-
<div class="ttc" id="
|
|
2612
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a16224ee60494bb1fdf1c8a1026fbe7ab"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a16224ee60494bb1fdf1c8a1026fbe7ab">SVF::VersionedFlowSensitive::yield</a></div><div class="ttdeci">LocVersionMap yield</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
2672
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00795">795</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2673
|
+
<div class="fragment"><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>  <span class="comment">// Non-store: consume == yield.</span></div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(l)) <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adf37ae1f6a07716bca6fbe1603b8a070">setVersion</a>(l, o, v, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a16224ee60494bb1fdf1c8a1026fbe7ab">yield</a>);</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <span class="keywordflow">else</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adf37ae1f6a07716bca6fbe1603b8a070">setVersion</a>(l, o, v, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>);</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span> }</div><div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_aac920c9a5f13dd147e3c130425e005eb"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">SVF::VersionedFlowSensitive::isStore</a></div><div class="ttdeci">virtual bool isStore(const NodeID l) const</div><div class="ttdoc">Returns true if l is a store node. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00425">VersionedFlowSensitive.cpp:425</a></div></div>
|
|
2674
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00182">VersionedFlowSensitive.h:182</a></div></div>
|
|
2675
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a16224ee60494bb1fdf1c8a1026fbe7ab"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a16224ee60494bb1fdf1c8a1026fbe7ab">SVF::VersionedFlowSensitive::yield</a></div><div class="ttdeci">LocVersionMap yield</div><div class="ttdoc">Actual yield map. Yield analogue to consume. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00184">VersionedFlowSensitive.h:184</a></div></div>
|
|
2676
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_adf37ae1f6a07716bca6fbe1603b8a070"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#adf37ae1f6a07716bca6fbe1603b8a070">SVF::VersionedFlowSensitive::setVersion</a></div><div class="ttdeci">void setVersion(const NodeID l, const NodeID o, const Version v, LocVersionMap &lvm)</div><div class="ttdoc">Shared code for setConsume and setYield. They wrap this function. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00784">VersionedFlowSensitive.cpp:784</a></div></div>
|
|
2613
2677
|
</div><!-- fragment -->
|
|
2614
2678
|
</div>
|
|
2615
2679
|
</div>
|
|
@@ -2645,23 +2709,24 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2645
2709
|
|
|
2646
2710
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#a1886b4964efa92cfff761493d12768b8">SVF::FlowSensitive</a>.</p>
|
|
2647
2711
|
|
|
2648
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2649
|
-
<div class="fragment"><div class="line"><a name="
|
|
2650
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a7a98162b69de90f80ce853a6ff43af56"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">SVF::VersionedFlowSensitive::propagateVersion</a></div><div class="ttdeci">void propagateVersion(NodeID o, Version v)</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#
|
|
2712
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00574">574</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2713
|
+
<div class="fragment"><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a> *e : newEdges)</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  {</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *dstNode = e->getDstNode();</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = e->getSrcNode()-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = dstNode-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> </div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">if</span> (SVFUtil::isa<PHISVFGNode>(dstNode)</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  || SVFUtil::isa<FormalParmSVFGNode>(dstNode)</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  || SVFUtil::isa<ActualRetSVFGNode>(dstNode))</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  {</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(dst);</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>  <span class="keywordflow">else</span></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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a> *ie = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>>(e);</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(ie != <span class="keyword">nullptr</span> && <span class="stringliteral">"VFS::updateConnectedNodes: given direct edge?"</span>);</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span> </div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">delta</a>(dst) && <span class="stringliteral">"VFS::updateConnectedNodes: new edges should be to delta nodes!"</span>);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3fa5afa4f54e0828ec090fde07b1bfa2">deltaSource</a>(src) && <span class="stringliteral">"VFS::updateConnectedNodes: new indirect edges should be from delta source nodes!"</span>);</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &ept = ie-><a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="comment">// For every o, such that src --o--> dst, we need to set up reliance (and propagate).</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : ept)</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  {</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> srcY = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a01a199e9fdb5759c7f78ee344dbc413c">getYield</a>(src, o);</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">if</span> (srcY == <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> dstC = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af93e65faae99459621ae45cf9d36005d">getConsume</a>(dst, o);</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">if</span> (dstC == <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a>) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> </div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  std::vector<Version> &versionsRelyingOnSrcY = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#ae83c62a01196991d116ef5c36cb51e31">getReliantVersions</a>(o, srcY);</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keywordflow">if</span> (std::find(versionsRelyingOnSrcY.begin(), versionsRelyingOnSrcY.end(), dstC) == versionsRelyingOnSrcY.end())</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  versionsRelyingOnSrcY.push_back(dstC);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">propagateVersion</a>(o, srcY, dstC);</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>  }</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  }</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span> }</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00162">WPASolver.h:162</a></div></div>
|
|
2714
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a7a98162b69de90f80ce853a6ff43af56"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">SVF::VersionedFlowSensitive::propagateVersion</a></div><div class="ttdeci">void propagateVersion(NodeID o, Version v)</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00516">VersionedFlowSensitive.cpp:516</a></div></div>
|
|
2651
2715
|
<div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
|
|
2652
2716
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
2653
|
-
<div class="ttc" id="
|
|
2717
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a9f9b00551c157f42d1d995e8c4efb54b"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">SVF::VersionedFlowSensitive::delta</a></div><div class="ttdeci">virtual bool delta(const NodeID l) const</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00402">VersionedFlowSensitive.cpp:402</a></div></div>
|
|
2718
|
+
<div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00128">SVFBasicTypes.h:128</a></div></div>
|
|
2654
2719
|
<div class="ttc" id="classSVF_1_1VFGEdge_html"><div class="ttname"><a href="classSVF_1_1VFGEdge.html">SVF::VFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGEdge_8h_source.html#l00044">VFGEdge.h:44</a></div></div>
|
|
2655
|
-
<div class="ttc" id="
|
|
2656
|
-
<div class="ttc" id="
|
|
2657
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#
|
|
2658
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_acf23b9ce8d07431adf1799dc64c68271"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#acf23b9ce8d07431adf1799dc64c68271">SVF::VersionedFlowSensitive::delta</a></div><div class="ttdeci">virtual bool delta(NodeID l) const</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00214">VersionedFlowSensitive.cpp:214</a></div></div>
|
|
2720
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a01a199e9fdb5759c7f78ee344dbc413c"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a01a199e9fdb5759c7f78ee344dbc413c">SVF::VersionedFlowSensitive::getYield</a></div><div class="ttdeci">Version getYield(const NodeID l, const NodeID o) const</div><div class="ttdoc">Returns the yielded version of o at l. If no such version exists, returns invalidVersion. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00777">VersionedFlowSensitive.cpp:777</a></div></div>
|
|
2721
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3fa5afa4f54e0828ec090fde07b1bfa2"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3fa5afa4f54e0828ec090fde07b1bfa2">SVF::VersionedFlowSensitive::deltaSource</a></div><div class="ttdeci">virtual bool deltaSource(const NodeID l) const</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00408">VersionedFlowSensitive.cpp:408</a></div></div>
|
|
2722
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00044">VersionedFlowSensitive.h:44</a></div></div>
|
|
2659
2723
|
<div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00164">GenericGraph.h:164</a></div></div>
|
|
2660
|
-
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
2724
|
+
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00086">SVFBasicTypes.h:86</a></div></div>
|
|
2725
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_af93e65faae99459621ae45cf9d36005d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#af93e65faae99459621ae45cf9d36005d">SVF::VersionedFlowSensitive::getConsume</a></div><div class="ttdeci">Version getConsume(const NodeID l, const NodeID o) const</div><div class="ttdoc">Returns the consumed version of o at l. If no such version exists, returns invalidVersion. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00772">VersionedFlowSensitive.cpp:772</a></div></div>
|
|
2661
2726
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
2662
2727
|
<div class="ttc" id="classSVF_1_1IndirectSVFGEdge_html"><div class="ttname"><a href="classSVF_1_1IndirectSVFGEdge.html">SVF::IndirectSVFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGEdge_8h_source.html#l00042">SVFGEdge.h:42</a></div></div>
|
|
2728
|
+
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_ae83c62a01196991d116ef5c36cb51e31"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#ae83c62a01196991d116ef5c36cb51e31">SVF::VersionedFlowSensitive::getReliantVersions</a></div><div class="ttdeci">std::vector< Version > & getReliantVersions(const NodeID o, const Version v)</div><div class="ttdoc">Returns the versions of o which rely on o:v. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00802">VersionedFlowSensitive.cpp:802</a></div></div>
|
|
2663
2729
|
<div class="ttc" id="classSVF_1_1IndirectSVFGEdge_html_a30aca718d25924f1babdf348bb0ace71"><div class="ttname"><a href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">SVF::IndirectSVFGEdge::getPointsTo</a></div><div class="ttdeci">const NodeBS & getPointsTo() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFGEdge_8h_source.html#l00061">SVFGEdge.h:61</a></div></div>
|
|
2664
|
-
<div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a6ea3f8e2aa85ea588735514c0b6ff255"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a6ea3f8e2aa85ea588735514c0b6ff255">SVF::VersionedFlowSensitive::getYield</a></div><div class="ttdeci">Version getYield(const NodeID l, const NodeID o)</div><div class="ttdoc">Returns the yielded version of o at l. If no such version exists, returns invalidVersion. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00593">VersionedFlowSensitive.cpp:593</a></div></div>
|
|
2665
2730
|
<div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00047">VFGNode.h:47</a></div></div>
|
|
2666
2731
|
</div><!-- fragment -->
|
|
2667
2732
|
</div>
|
|
@@ -2702,7 +2767,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2702
2767
|
<td class="mlabels-left">
|
|
2703
2768
|
<table class="memname">
|
|
2704
2769
|
<tr>
|
|
2705
|
-
<td class="memname"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
2770
|
+
<td class="memname"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> SVF::VersionedFlowSensitive::consume</td>
|
|
2706
2771
|
</tr>
|
|
2707
2772
|
</table>
|
|
2708
2773
|
</td>
|
|
@@ -2711,14 +2776,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2711
2776
|
</tr>
|
|
2712
2777
|
</table>
|
|
2713
2778
|
</div><div class="memdoc">
|
|
2714
|
-
<p>
|
|
2779
|
+
<p>Maps locations to objects to a version. The object version is what is consumed at that location. </p>
|
|
2715
2780
|
|
|
2716
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2781
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00182">182</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2717
2782
|
|
|
2718
2783
|
</div>
|
|
2719
2784
|
</div>
|
|
2720
|
-
<a id="
|
|
2721
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2785
|
+
<a id="a11ddfa1faebf56e74e6dcc53e16142e1"></a>
|
|
2786
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a11ddfa1faebf56e74e6dcc53e16142e1">◆ </a></span>deltaMap</h2>
|
|
2722
2787
|
|
|
2723
2788
|
<div class="memitem">
|
|
2724
2789
|
<div class="memproto">
|
|
@@ -2727,7 +2792,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2727
2792
|
<td class="mlabels-left">
|
|
2728
2793
|
<table class="memname">
|
|
2729
2794
|
<tr>
|
|
2730
|
-
<td class="memname"
|
|
2795
|
+
<td class="memname">std::vector<bool> SVF::VersionedFlowSensitive::deltaMap</td>
|
|
2731
2796
|
</tr>
|
|
2732
2797
|
</table>
|
|
2733
2798
|
</td>
|
|
@@ -2736,15 +2801,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2736
2801
|
</tr>
|
|
2737
2802
|
</table>
|
|
2738
2803
|
</div><div class="memdoc">
|
|
2804
|
+
<p>deltaMap[l] means <a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node l is a delta node, i.e., may get new incoming edges due to OTF callgraph construction. </p>
|
|
2739
2805
|
|
|
2740
|
-
<p>
|
|
2741
|
-
|
|
2742
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00212">212</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2806
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00211">211</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2743
2807
|
|
|
2744
2808
|
</div>
|
|
2745
2809
|
</div>
|
|
2746
|
-
<a id="
|
|
2747
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2810
|
+
<a id="aee97e196225aaad29c0bd31d3ccbabf6"></a>
|
|
2811
|
+
<h2 class="memtitle"><span class="permalink"><a href="#aee97e196225aaad29c0bd31d3ccbabf6">◆ </a></span>deltaSourceMap</h2>
|
|
2748
2812
|
|
|
2749
2813
|
<div class="memitem">
|
|
2750
2814
|
<div class="memproto">
|
|
@@ -2753,24 +2817,23 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2753
2817
|
<td class="mlabels-left">
|
|
2754
2818
|
<table class="memname">
|
|
2755
2819
|
<tr>
|
|
2756
|
-
<td class="memname">
|
|
2820
|
+
<td class="memname">std::vector<bool> SVF::VersionedFlowSensitive::deltaSourceMap</td>
|
|
2757
2821
|
</tr>
|
|
2758
2822
|
</table>
|
|
2759
2823
|
</td>
|
|
2760
2824
|
<td class="mlabels-right">
|
|
2761
|
-
<span class="mlabels"><span class="mlabel">
|
|
2825
|
+
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
2762
2826
|
</tr>
|
|
2763
2827
|
</table>
|
|
2764
2828
|
</div><div class="memdoc">
|
|
2829
|
+
<p>deltaSourceMap[l] means <a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node l <em>may</em> be a source to a delta node through an dge added as a result of on-the-fly callgraph construction. </p>
|
|
2765
2830
|
|
|
2766
|
-
<p>
|
|
2767
|
-
|
|
2768
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00058">58</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2831
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00216">216</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2769
2832
|
|
|
2770
2833
|
</div>
|
|
2771
2834
|
</div>
|
|
2772
|
-
<a id="
|
|
2773
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2835
|
+
<a id="a2d451d89f99a4bff828b682723df477f"></a>
|
|
2836
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a2d451d89f99a4bff828b682723df477f">◆ </a></span>equivalentObject</h2>
|
|
2774
2837
|
|
|
2775
2838
|
<div class="memitem">
|
|
2776
2839
|
<div class="memproto">
|
|
@@ -2779,7 +2842,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2779
2842
|
<td class="mlabels-left">
|
|
2780
2843
|
<table class="memname">
|
|
2781
2844
|
<tr>
|
|
2782
|
-
<td class="memname"><a class="el" href="
|
|
2845
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map</a><<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>, <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>> SVF::VersionedFlowSensitive::equivalentObject</td>
|
|
2783
2846
|
</tr>
|
|
2784
2847
|
</table>
|
|
2785
2848
|
</td>
|
|
@@ -2788,14 +2851,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2788
2851
|
</tr>
|
|
2789
2852
|
</table>
|
|
2790
2853
|
</div><div class="memdoc">
|
|
2791
|
-
<p><a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node (label) x object -> version to consume. Used during meld labeling. We use MeldVersions and Versions for performance. MeldVersions are currently SparseBitVectors which are necessary for the meld operator, but when meld labeling is complete, we don't want to carry around SBVs and use them; integers are better. </p>
|
|
2792
2854
|
|
|
2793
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2855
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00198">198</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2794
2856
|
|
|
2795
2857
|
</div>
|
|
2796
2858
|
</div>
|
|
2797
|
-
<a id="
|
|
2798
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2859
|
+
<a id="a3d44a343a2e3f5d276fd1b069c92e112"></a>
|
|
2860
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a3d44a343a2e3f5d276fd1b069c92e112">◆ </a></span>invalidVersion</h2>
|
|
2799
2861
|
|
|
2800
2862
|
<div class="memitem">
|
|
2801
2863
|
<div class="memproto">
|
|
@@ -2804,24 +2866,24 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2804
2866
|
<td class="mlabels-left">
|
|
2805
2867
|
<table class="memname">
|
|
2806
2868
|
<tr>
|
|
2807
|
-
<td class="memname">
|
|
2869
|
+
<td class="memname">const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> VersionedFlowSensitive::invalidVersion = 0</td>
|
|
2808
2870
|
</tr>
|
|
2809
2871
|
</table>
|
|
2810
2872
|
</td>
|
|
2811
2873
|
<td class="mlabels-right">
|
|
2812
|
-
<span class="mlabels"><span class="mlabel">
|
|
2874
|
+
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
|
2813
2875
|
</tr>
|
|
2814
2876
|
</table>
|
|
2815
2877
|
</div><div class="memdoc">
|
|
2816
2878
|
|
|
2817
|
-
<p>
|
|
2879
|
+
<p>If this version appears, there has been an error. </p>
|
|
2818
2880
|
|
|
2819
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2881
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00044">44</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2820
2882
|
|
|
2821
2883
|
</div>
|
|
2822
2884
|
</div>
|
|
2823
|
-
<a id="
|
|
2824
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2885
|
+
<a id="a6bb3db072db0b899f306b37f1146f83d"></a>
|
|
2886
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a6bb3db072db0b899f306b37f1146f83d">◆ </a></span>isLoadMap</h2>
|
|
2825
2887
|
|
|
2826
2888
|
<div class="memitem">
|
|
2827
2889
|
<div class="memproto">
|
|
@@ -2830,7 +2892,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2830
2892
|
<td class="mlabels-left">
|
|
2831
2893
|
<table class="memname">
|
|
2832
2894
|
<tr>
|
|
2833
|
-
<td class="memname">
|
|
2895
|
+
<td class="memname">std::vector<bool> SVF::VersionedFlowSensitive::isLoadMap</td>
|
|
2834
2896
|
</tr>
|
|
2835
2897
|
</table>
|
|
2836
2898
|
</td>
|
|
@@ -2840,14 +2902,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2840
2902
|
</table>
|
|
2841
2903
|
</div><div class="memdoc">
|
|
2842
2904
|
|
|
2843
|
-
<p>
|
|
2905
|
+
<p>isLoadMap[l] means <a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node l is a load node. </p>
|
|
2844
2906
|
|
|
2845
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2907
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00222">222</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2846
2908
|
|
|
2847
2909
|
</div>
|
|
2848
2910
|
</div>
|
|
2849
|
-
<a id="
|
|
2850
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2911
|
+
<a id="a18e25c3871d7cc1a6bb0592ceca90f88"></a>
|
|
2912
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a18e25c3871d7cc1a6bb0592ceca90f88">◆ </a></span>isStoreMap</h2>
|
|
2851
2913
|
|
|
2852
2914
|
<div class="memitem">
|
|
2853
2915
|
<div class="memproto">
|
|
@@ -2856,7 +2918,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2856
2918
|
<td class="mlabels-left">
|
|
2857
2919
|
<table class="memname">
|
|
2858
2920
|
<tr>
|
|
2859
|
-
<td class="memname"
|
|
2921
|
+
<td class="memname">std::vector<bool> SVF::VersionedFlowSensitive::isStoreMap</td>
|
|
2860
2922
|
</tr>
|
|
2861
2923
|
</table>
|
|
2862
2924
|
</td>
|
|
@@ -2865,14 +2927,15 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2865
2927
|
</tr>
|
|
2866
2928
|
</table>
|
|
2867
2929
|
</div><div class="memdoc">
|
|
2868
|
-
<p>Object -> MeldVersion counter. Used in the prelabeling phase to generate a new MeldVersion. </p>
|
|
2869
2930
|
|
|
2870
|
-
<p
|
|
2931
|
+
<p>isStoreMap[l] means <a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node l is a store node. </p>
|
|
2932
|
+
|
|
2933
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00219">219</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2871
2934
|
|
|
2872
2935
|
</div>
|
|
2873
2936
|
</div>
|
|
2874
|
-
<a id="
|
|
2875
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2937
|
+
<a id="a4a594c8d6ccaa27b5328c6388fdb258d"></a>
|
|
2938
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a4a594c8d6ccaa27b5328c6388fdb258d">◆ </a></span>meldLabelingTime</h2>
|
|
2876
2939
|
|
|
2877
2940
|
<div class="memitem">
|
|
2878
2941
|
<div class="memproto">
|
|
@@ -2881,7 +2944,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2881
2944
|
<td class="mlabels-left">
|
|
2882
2945
|
<table class="memname">
|
|
2883
2946
|
<tr>
|
|
2884
|
-
<td class="memname"
|
|
2947
|
+
<td class="memname">double SVF::VersionedFlowSensitive::meldLabelingTime</td>
|
|
2885
2948
|
</tr>
|
|
2886
2949
|
</table>
|
|
2887
2950
|
</td>
|
|
@@ -2890,9 +2953,10 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2890
2953
|
</tr>
|
|
2891
2954
|
</table>
|
|
2892
2955
|
</div><div class="memdoc">
|
|
2893
|
-
<p><a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node (label) x object -> version to yield. Used during meld labeling. For non-stores, yield == consume, so meldYield only has entries for stores. </p>
|
|
2894
2956
|
|
|
2895
|
-
<p
|
|
2957
|
+
<p>Time to meld label <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. </p>
|
|
2958
|
+
|
|
2959
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00230">230</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2896
2960
|
|
|
2897
2961
|
</div>
|
|
2898
2962
|
</div>
|
|
@@ -2919,7 +2983,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2919
2983
|
<p>Additional statistics. </p>
|
|
2920
2984
|
<p>Number of prelabeled nodes. </p>
|
|
2921
2985
|
|
|
2922
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2986
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00226">226</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2923
2987
|
|
|
2924
2988
|
</div>
|
|
2925
2989
|
</div>
|
|
@@ -2945,12 +3009,12 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2945
3009
|
|
|
2946
3010
|
<p>Number of versions created during prelabeling. </p>
|
|
2947
3011
|
|
|
2948
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3012
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00227">227</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2949
3013
|
|
|
2950
3014
|
</div>
|
|
2951
3015
|
</div>
|
|
2952
|
-
<a id="
|
|
2953
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
3016
|
+
<a id="aaae8c6858593ed050dcf2c9220228e3e"></a>
|
|
3017
|
+
<h2 class="memtitle"><span class="permalink"><a href="#aaae8c6858593ed050dcf2c9220228e3e">◆ </a></span>prelabeledObjects</h2>
|
|
2954
3018
|
|
|
2955
3019
|
<div class="memitem">
|
|
2956
3020
|
<div class="memproto">
|
|
@@ -2959,7 +3023,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2959
3023
|
<td class="mlabels-left">
|
|
2960
3024
|
<table class="memname">
|
|
2961
3025
|
<tr>
|
|
2962
|
-
<td class="memname">
|
|
3026
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a><<a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>> SVF::VersionedFlowSensitive::prelabeledObjects</td>
|
|
2963
3027
|
</tr>
|
|
2964
3028
|
</table>
|
|
2965
3029
|
</td>
|
|
@@ -2969,14 +3033,12 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2969
3033
|
</table>
|
|
2970
3034
|
</div><div class="memdoc">
|
|
2971
3035
|
|
|
2972
|
-
<p>
|
|
2973
|
-
|
|
2974
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00238">238</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
3036
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00204">204</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
2975
3037
|
|
|
2976
3038
|
</div>
|
|
2977
3039
|
</div>
|
|
2978
|
-
<a id="
|
|
2979
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
3040
|
+
<a id="a77a5dd9578def9a8e2b48e8b90d9b996"></a>
|
|
3041
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a77a5dd9578def9a8e2b48e8b90d9b996">◆ </a></span>prelabelingTime</h2>
|
|
2980
3042
|
|
|
2981
3043
|
<div class="memitem">
|
|
2982
3044
|
<div class="memproto">
|
|
@@ -2985,7 +3047,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2985
3047
|
<td class="mlabels-left">
|
|
2986
3048
|
<table class="memname">
|
|
2987
3049
|
<tr>
|
|
2988
|
-
<td class="memname">double SVF::VersionedFlowSensitive::
|
|
3050
|
+
<td class="memname">double SVF::VersionedFlowSensitive::prelabelingTime</td>
|
|
2989
3051
|
</tr>
|
|
2990
3052
|
</table>
|
|
2991
3053
|
</td>
|
|
@@ -2995,9 +3057,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2995
3057
|
</table>
|
|
2996
3058
|
</div><div class="memdoc">
|
|
2997
3059
|
|
|
2998
|
-
<p>Time to
|
|
3060
|
+
<p>Time to prelabel <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. </p>
|
|
2999
3061
|
|
|
3000
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3062
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00229">229</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
3001
3063
|
|
|
3002
3064
|
</div>
|
|
3003
3065
|
</div>
|
|
@@ -3023,7 +3085,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3023
3085
|
|
|
3024
3086
|
<p>o x version -> statement nodes which rely on that o/version. </p>
|
|
3025
3087
|
|
|
3026
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3088
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00189">189</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
3027
3089
|
|
|
3028
3090
|
</div>
|
|
3029
3091
|
</div>
|
|
@@ -3048,7 +3110,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3048
3110
|
</div><div class="memdoc">
|
|
3049
3111
|
<p>Maps an <object, version> pair to the <a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node indicating that pair needs to be propagated. </p>
|
|
3050
3112
|
|
|
3051
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3113
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00193">193</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
3052
3114
|
|
|
3053
3115
|
</div>
|
|
3054
3116
|
</div>
|
|
@@ -3074,7 +3136,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3074
3136
|
|
|
3075
3137
|
<p>Time to propagate versions to versions which rely on them. </p>
|
|
3076
3138
|
|
|
3077
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3139
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00231">231</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
3078
3140
|
|
|
3079
3141
|
</div>
|
|
3080
3142
|
</div>
|
|
@@ -3100,7 +3162,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3100
3162
|
|
|
3101
3163
|
<p>o -> (version -> versions which rely on it). </p>
|
|
3102
3164
|
|
|
3103
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3165
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00187">187</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
3104
3166
|
|
|
3105
3167
|
</div>
|
|
3106
3168
|
</div>
|
|
@@ -3124,7 +3186,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3124
3186
|
</table>
|
|
3125
3187
|
</div><div class="memdoc">
|
|
3126
3188
|
|
|
3127
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3189
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00234">234</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
3128
3190
|
|
|
3129
3191
|
</div>
|
|
3130
3192
|
</div>
|
|
@@ -3150,7 +3212,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3150
3212
|
|
|
3151
3213
|
<p>Points-to DS for working with versions. </p>
|
|
3152
3214
|
|
|
3153
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3215
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00207">207</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
3154
3216
|
|
|
3155
3217
|
</div>
|
|
3156
3218
|
</div>
|
|
@@ -3175,7 +3237,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3175
3237
|
</div><div class="memdoc">
|
|
3176
3238
|
<p>Worklist for performing meld labeling, takes <a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node l. Nodes are added when the version they yield is changed. </p>
|
|
3177
3239
|
|
|
3178
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3240
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00202">202</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
3179
3241
|
|
|
3180
3242
|
</div>
|
|
3181
3243
|
</div>
|
|
@@ -3189,32 +3251,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3189
3251
|
<td class="mlabels-left">
|
|
3190
3252
|
<table class="memname">
|
|
3191
3253
|
<tr>
|
|
3192
|
-
<td class="memname"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
3193
|
-
</tr>
|
|
3194
|
-
</table>
|
|
3195
|
-
</td>
|
|
3196
|
-
<td class="mlabels-right">
|
|
3197
|
-
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
3198
|
-
</tr>
|
|
3199
|
-
</table>
|
|
3200
|
-
</div><div class="memdoc">
|
|
3201
|
-
<p>Actual yield map. Yield analogue to consume. When modifying yield itself (not a value) outside of setYield, invalidateYieldCache should be called. </p>
|
|
3202
|
-
|
|
3203
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00209">209</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
3204
|
-
|
|
3205
|
-
</div>
|
|
3206
|
-
</div>
|
|
3207
|
-
<a id="a86f03759d0c9e739d70d537ab02d7082"></a>
|
|
3208
|
-
<h2 class="memtitle"><span class="permalink"><a href="#a86f03759d0c9e739d70d537ab02d7082">◆ </a></span>yieldCache</h2>
|
|
3209
|
-
|
|
3210
|
-
<div class="memitem">
|
|
3211
|
-
<div class="memproto">
|
|
3212
|
-
<table class="mlabels">
|
|
3213
|
-
<tr>
|
|
3214
|
-
<td class="mlabels-left">
|
|
3215
|
-
<table class="memname">
|
|
3216
|
-
<tr>
|
|
3217
|
-
<td class="memname"><a class="el" href="structSVF_1_1VersionedFlowSensitive_1_1VersionCache.html">VersionCache</a> SVF::VersionedFlowSensitive::yieldCache</td>
|
|
3254
|
+
<td class="memname"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> SVF::VersionedFlowSensitive::yield</td>
|
|
3218
3255
|
</tr>
|
|
3219
3256
|
</table>
|
|
3220
3257
|
</td>
|
|
@@ -3224,9 +3261,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3224
3261
|
</table>
|
|
3225
3262
|
</div><div class="memdoc">
|
|
3226
3263
|
|
|
3227
|
-
<p>
|
|
3264
|
+
<p>Actual yield map. Yield analogue to consume. </p>
|
|
3228
3265
|
|
|
3229
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3266
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#l00184">184</a> of file <a class="el" href="VersionedFlowSensitive_8h_source.html">VersionedFlowSensitive.h</a>.</p>
|
|
3230
3267
|
|
|
3231
3268
|
</div>
|
|
3232
3269
|
</div>
|