svf-tools 1.0.302 → 1.0.306
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 +7 -7
- 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 +80 -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 +12 -12
- 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 +578 -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/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 +503 -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,20 @@ 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="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<a class="code" href="classSVF_1_1Options.html#a7704ff30e6fc5043313adf5c655bcd4a">Options::OPTSVFG</a> && <span class="stringliteral">"VFS: -opt-svfg not currently supported with VFS."</span>);</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</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="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>
|
|
1146
|
+
<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
1147
|
<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="
|
|
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>
|
|
1148
|
+
<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>
|
|
1149
|
+
<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>
|
|
1150
|
+
<div class="ttc" id="classSVF_1_1Options_html_a7704ff30e6fc5043313adf5c655bcd4a"><div class="ttname"><a href="classSVF_1_1Options.html#a7704ff30e6fc5043313adf5c655bcd4a">SVF::Options::OPTSVFG</a></div><div class="ttdeci">static llvm::cl::opt< bool > OPTSVFG</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00159">Options.h:159</a></div></div>
|
|
1151
|
+
<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>
|
|
1152
|
+
<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>
|
|
1153
|
+
<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
1154
|
</div><!-- fragment -->
|
|
1205
1155
|
</div>
|
|
1206
1156
|
</div>
|
|
@@ -1241,9 +1191,97 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1241
1191
|
|
|
1242
1192
|
<p>Return key into vPtD for address-taken var of a specific version. </p>
|
|
1243
1193
|
|
|
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#
|
|
1194
|
+
<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>
|
|
1195
|
+
<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>
|
|
1196
|
+
<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>
|
|
1197
|
+
</div><!-- fragment -->
|
|
1198
|
+
</div>
|
|
1199
|
+
</div>
|
|
1200
|
+
<a id="a3407cc82ef9806e26b79edb677979014"></a>
|
|
1201
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a3407cc82ef9806e26b79edb677979014">◆ </a></span>buildDeltaMaps()</h2>
|
|
1202
|
+
|
|
1203
|
+
<div class="memitem">
|
|
1204
|
+
<div class="memproto">
|
|
1205
|
+
<table class="mlabels">
|
|
1206
|
+
<tr>
|
|
1207
|
+
<td class="mlabels-left">
|
|
1208
|
+
<table class="memname">
|
|
1209
|
+
<tr>
|
|
1210
|
+
<td class="memname">void VersionedFlowSensitive::buildDeltaMaps </td>
|
|
1211
|
+
<td>(</td>
|
|
1212
|
+
<td class="paramtype">void </td>
|
|
1213
|
+
<td class="paramname"></td><td>)</td>
|
|
1214
|
+
<td></td>
|
|
1215
|
+
</tr>
|
|
1216
|
+
</table>
|
|
1217
|
+
</td>
|
|
1218
|
+
<td class="mlabels-right">
|
|
1219
|
+
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">virtual</span></span> </td>
|
|
1220
|
+
</tr>
|
|
1221
|
+
</table>
|
|
1222
|
+
</div><div class="memdoc">
|
|
1223
|
+
|
|
1224
|
+
<p>Fills in deltaMap and deltaSourceMap for the <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. </p>
|
|
1225
|
+
<p>use pre-analysis call graph to approximate all potential callsites </p>
|
|
1226
|
+
|
|
1227
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00439">439</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1228
|
+
<div class="fragment"><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>  <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="l00442"></a><span class="lineno"> 442</span> </div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="comment">// Call block nodes corresponding to all delta nodes.</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<const CallBlockNode *></a> deltaCBNs;</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="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="l00447"></a><span class="lineno"> 447</span>  {</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = it->first;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</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="l00450"></a><span class="lineno"> 450</span> </div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="comment">// Cases:</span></div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="comment">// * Function entry: can get new incoming indirect edges through ind. callsites.</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <span class="comment">// * Callsite returns: can get new incoming indirect edges if the callsite is indirect.</span></div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="comment">// * Otherwise: static.</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordtype">bool</span> isDelta = <span class="keyword">false</span>;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</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="l00457"></a><span class="lineno"> 457</span>  {</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <a class="code" href="classSVF_1_1PTACallGraphEdge.html#aca11d1b778309a72e9d345bd02324459">PTACallGraphEdge::CallInstSet</a> callsites;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</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="l00461"></a><span class="lineno"> 461</span>  isDelta = !callsites.empty();</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="keywordflow">if</span> (isDelta)</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  <span class="comment">// TODO: could we use deltaCBNs in the call above, avoiding this loop?</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</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="l00467"></a><span class="lineno"> 467</span>  }</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>  <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="l00470"></a><span class="lineno"> 470</span>  {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  isDelta = cbn->isIndirectCall();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <span class="keywordflow">if</span> (isDelta) deltaCBNs.insert(cbn);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  }</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>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a11ddfa1faebf56e74e6dcc53e16142e1">deltaMap</a>[l] = isDelta;</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> </div><div class="line"><a name="l00478"></a><span class="lineno"> 478</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="l00479"></a><span class="lineno"> 479</span> </div><div class="line"><a name="l00480"></a><span class="lineno"> 480</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="l00481"></a><span class="lineno"> 481</span>  {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = it->first;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</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="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> (<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="l00486"></a><span class="lineno"> 486</span>  {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</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="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>  <span class="comment">// TODO: this is an over-approximation but it sound, marking every formal out as</span></div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="comment">// a delta-source.</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</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="l00493"></a><span class="lineno"> 493</span>  }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</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>
|
|
1229
|
+
<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>
|
|
1230
|
+
<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>
|
|
1231
|
+
<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>
|
|
1232
|
+
<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>
|
|
1233
|
+
<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>
|
|
1234
|
+
<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>
|
|
1235
|
+
<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>
|
|
1236
|
+
<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>
|
|
1237
|
+
<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>
|
|
1238
|
+
<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>
|
|
1239
|
+
<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>
|
|
1240
|
+
<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>
|
|
1241
|
+
<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>
|
|
1242
|
+
<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>
|
|
1243
|
+
<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>
|
|
1244
|
+
<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>
|
|
1245
|
+
<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>
|
|
1246
|
+
<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>
|
|
1247
|
+
</div><!-- fragment -->
|
|
1248
|
+
</div>
|
|
1249
|
+
</div>
|
|
1250
|
+
<a id="a8da4b9bd9d0c640a6857b4dc4991817c"></a>
|
|
1251
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a8da4b9bd9d0c640a6857b4dc4991817c">◆ </a></span>buildIsStoreLoadMaps()</h2>
|
|
1252
|
+
|
|
1253
|
+
<div class="memitem">
|
|
1254
|
+
<div class="memproto">
|
|
1255
|
+
<table class="mlabels">
|
|
1256
|
+
<tr>
|
|
1257
|
+
<td class="mlabels-left">
|
|
1258
|
+
<table class="memname">
|
|
1259
|
+
<tr>
|
|
1260
|
+
<td class="memname">void VersionedFlowSensitive::buildIsStoreLoadMaps </td>
|
|
1261
|
+
<td>(</td>
|
|
1262
|
+
<td class="paramtype">void </td>
|
|
1263
|
+
<td class="paramname"></td><td>)</td>
|
|
1264
|
+
<td></td>
|
|
1265
|
+
</tr>
|
|
1266
|
+
</table>
|
|
1267
|
+
</td>
|
|
1268
|
+
<td class="mlabels-right">
|
|
1269
|
+
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">virtual</span></span> </td>
|
|
1270
|
+
</tr>
|
|
1271
|
+
</table>
|
|
1272
|
+
</div><div class="memdoc">
|
|
1273
|
+
|
|
1274
|
+
<p>Fills in isStoreMap and isLoadMap. </p>
|
|
1275
|
+
|
|
1276
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00416">416</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1277
|
+
<div class="fragment"><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> {</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</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="l00419"></a><span class="lineno"> 419</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="l00420"></a><span class="lineno"> 420</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="l00421"></a><span class="lineno"> 421</span>  {</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</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="l00423"></a><span class="lineno"> 423</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="l00424"></a><span class="lineno"> 424</span>  }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</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>
|
|
1278
|
+
<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>
|
|
1279
|
+
<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>
|
|
1280
|
+
<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>
|
|
1281
|
+
<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>
|
|
1282
|
+
<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>
|
|
1283
|
+
<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>
|
|
1284
|
+
<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
1285
|
</div><!-- fragment -->
|
|
1248
1286
|
</div>
|
|
1249
1287
|
</div>
|
|
@@ -1273,8 +1311,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1273
1311
|
|
|
1274
1312
|
<p>Methods to support type inquiry through isa, cast, and dyn_cast. </p>
|
|
1275
1313
|
|
|
1276
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
1277
|
-
<div class="fragment"><div class="line"><a name="
|
|
1314
|
+
<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>
|
|
1315
|
+
<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
1316
|
</div>
|
|
1279
1317
|
</div>
|
|
1280
1318
|
<a id="abe1874f12ba05b4f453604c6d91598d6"></a>
|
|
@@ -1301,8 +1339,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1301
1339
|
</table>
|
|
1302
1340
|
</div><div class="memdoc">
|
|
1303
1341
|
|
|
1304
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
1305
|
-
<div class="fragment"><div class="line"><a name="
|
|
1342
|
+
<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>
|
|
1343
|
+
<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
1344
|
</div><!-- fragment -->
|
|
1307
1345
|
</div>
|
|
1308
1346
|
</div>
|
|
@@ -1334,12 +1372,12 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1334
1372
|
|
|
1335
1373
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#a89d3b97b8077027514135c9201c4d02c">SVF::FlowSensitive</a>.</p>
|
|
1336
1374
|
|
|
1337
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1338
|
-
<div class="fragment"><div class="line"><a name="
|
|
1375
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00744">744</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1376
|
+
<div class="fragment"><div class="line"><a name="l00745"></a><span class="lineno"> 745</span> {</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  std::vector<std::pair<unsigned, unsigned>> keys;</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</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="l00748"></a><span class="lineno"> 748</span>  {</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <span class="keywordtype">unsigned</span> occ = 1;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <span class="keywordtype">unsigned</span> v = pit->first;</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</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="l00752"></a><span class="lineno"> 752</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(occ != 0);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  keys.push_back(std::make_pair(v, occ));</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  }</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</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> nodeMapping =</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#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="l00758"></a><span class="lineno"> 758</span>  <a class="code" href="classSVF_1_1PointsTo.html#a849f670b38cb6f65fc23707a212591c7">PointsTo::MappingPtr</a> reverseNodeMapping =</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</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="l00760"></a><span class="lineno"> 760</span> </div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <a class="code" href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8">PointsTo::setCurrentBestNodeMapping</a>(nodeMapping, reverseNodeMapping);</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</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
1377
|
<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
1378
|
<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#
|
|
1379
|
+
<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>
|
|
1380
|
+
<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
1381
|
<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
1382
|
<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
1383
|
<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 +1416,15 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1378
1416
|
|
|
1379
1417
|
<p>Create single instance of versioned flow-sensitive points-to analysis. </p>
|
|
1380
1418
|
|
|
1381
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
1382
|
-
<div class="fragment"><div class="line"><a name="
|
|
1419
|
+
<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>
|
|
1420
|
+
<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
1421
|
<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#
|
|
1422
|
+
<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
1423
|
</div><!-- fragment -->
|
|
1386
1424
|
</div>
|
|
1387
1425
|
</div>
|
|
1388
|
-
<a id="
|
|
1389
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1426
|
+
<a id="a9f9b00551c157f42d1d995e8c4efb54b"></a>
|
|
1427
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a9f9b00551c157f42d1d995e8c4efb54b">◆ </a></span>delta()</h2>
|
|
1390
1428
|
|
|
1391
1429
|
<div class="memitem">
|
|
1392
1430
|
<div class="memproto">
|
|
@@ -1397,7 +1435,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1397
1435
|
<tr>
|
|
1398
1436
|
<td class="memname">bool VersionedFlowSensitive::delta </td>
|
|
1399
1437
|
<td>(</td>
|
|
1400
|
-
<td class="paramtype"
|
|
1438
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1401
1439
|
<td class="paramname"><em>l</em></td><td>)</td>
|
|
1402
1440
|
<td> const</td>
|
|
1403
1441
|
</tr>
|
|
@@ -1408,27 +1446,16 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1408
1446
|
</tr>
|
|
1409
1447
|
</table>
|
|
1410
1448
|
</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>
|
|
1449
|
+
<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
1450
|
|
|
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>
|
|
1451
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00404">404</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1452
|
+
<div class="fragment"><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</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="l00407"></a><span class="lineno"> 407</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a11ddfa1faebf56e74e6dcc53e16142e1">deltaMap</a>[l];</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</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>
|
|
1453
|
+
<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
1454
|
</div><!-- fragment -->
|
|
1428
1455
|
</div>
|
|
1429
1456
|
</div>
|
|
1430
|
-
<a id="
|
|
1431
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1457
|
+
<a id="a3fa5afa4f54e0828ec090fde07b1bfa2"></a>
|
|
1458
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a3fa5afa4f54e0828ec090fde07b1bfa2">◆ </a></span>deltaSource()</h2>
|
|
1432
1459
|
|
|
1433
1460
|
<div class="memitem">
|
|
1434
1461
|
<div class="memproto">
|
|
@@ -1437,47 +1464,24 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1437
1464
|
<td class="mlabels-left">
|
|
1438
1465
|
<table class="memname">
|
|
1439
1466
|
<tr>
|
|
1440
|
-
<td class="memname">
|
|
1467
|
+
<td class="memname">bool VersionedFlowSensitive::deltaSource </td>
|
|
1441
1468
|
<td>(</td>
|
|
1442
|
-
<td class="paramtype">
|
|
1443
|
-
<td class="paramname"></td><td>)</td>
|
|
1444
|
-
<td
|
|
1469
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1470
|
+
<td class="paramname"><em>l</em></td><td>)</td>
|
|
1471
|
+
<td> const</td>
|
|
1445
1472
|
</tr>
|
|
1446
1473
|
</table>
|
|
1447
1474
|
</td>
|
|
1448
1475
|
<td class="mlabels-right">
|
|
1449
|
-
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
1476
|
+
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">virtual</span></span> </td>
|
|
1450
1477
|
</tr>
|
|
1451
1478
|
</table>
|
|
1452
1479
|
</div><div class="memdoc">
|
|
1453
|
-
<p>
|
|
1480
|
+
<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
1481
|
|
|
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>
|
|
1482
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00410">410</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1483
|
+
<div class="fragment"><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> {</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</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="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aee97e196225aaad29c0bd31d3ccbabf6">deltaSourceMap</a>[l];</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</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>
|
|
1484
|
+
<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
1485
|
</div><!-- fragment -->
|
|
1482
1486
|
</div>
|
|
1483
1487
|
</div>
|
|
@@ -1507,17 +1511,17 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1507
1511
|
|
|
1508
1512
|
<p>Dumps maps consume and yield. </p>
|
|
1509
1513
|
|
|
1510
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1511
|
-
<div class="fragment"><div class="line"><a name="
|
|
1514
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00871">871</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1515
|
+
<div class="fragment"><div class="line"><a name="l00872"></a><span class="lineno"> 872</span> {</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <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="l00874"></a><span class="lineno"> 874</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="l00875"></a><span class="lineno"> 875</span>  {</div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> loc = it->first;</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordtype">bool</span> locPrinted = <span class="keyword">false</span>;</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</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="l00879"></a><span class="lineno"> 879</span>  {</div><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  <span class="keywordflow">if</span> (lvm->at(loc).empty()) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  <span class="keywordflow">if</span> (!locPrinted)</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  {</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</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="l00884"></a><span class="lineno"> 884</span>  locPrinted = <span class="keyword">true</span>;</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  }</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span> </div><div class="line"><a name="l00887"></a><span class="lineno"> 887</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="l00888"></a><span class="lineno"> 888</span> </div><div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> ObjToVersionMap::value_type &ov : lvm->at(loc))</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  {</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = ov.first;</div><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = ov.second;</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</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="l00895"></a><span class="lineno"> 895</span>  first = <span class="keyword">false</span>;</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  }</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span> </div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"\n"</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="line"><a name="l00901"></a><span class="lineno"> 901</span> </div><div class="line"><a name="l00902"></a><span class="lineno"> 902</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
1516
|
<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>
|
|
1517
|
+
<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
1518
|
<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#
|
|
1519
|
+
<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
1520
|
<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
1521
|
<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#
|
|
1522
|
+
<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
1523
|
<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>
|
|
1524
|
+
<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
1525
|
</div><!-- fragment -->
|
|
1522
1526
|
</div>
|
|
1523
1527
|
</div>
|
|
@@ -1533,7 +1537,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1533
1537
|
<tr>
|
|
1534
1538
|
<td class="memname">void VersionedFlowSensitive::dumpMeldVersion </td>
|
|
1535
1539
|
<td>(</td>
|
|
1536
|
-
<td class="paramtype"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
1540
|
+
<td class="paramtype"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> & </td>
|
|
1537
1541
|
<td class="paramname"><em>v</em></td><td>)</td>
|
|
1538
1542
|
<td></td>
|
|
1539
1543
|
</tr>
|
|
@@ -1547,8 +1551,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1547
1551
|
|
|
1548
1552
|
<p>Dumps a MeldVersion to stdout. </p>
|
|
1549
1553
|
|
|
1550
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1551
|
-
<div class="fragment"><div class="line"><a name="
|
|
1554
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00904">904</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1555
|
+
<div class="fragment"><div class="line"><a name="l00905"></a><span class="lineno"> 905</span> {</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"[ "</span>;</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> e : v)</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>  <span class="keywordflow">if</span> (!first)</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  }</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span> </div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << e;</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  first = <span class="keyword">false</span>;</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  }</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span> </div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">" ]"</span>;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</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
1556
|
</div><!-- fragment -->
|
|
1553
1557
|
</div>
|
|
1554
1558
|
</div>
|
|
@@ -1578,14 +1582,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1578
1582
|
|
|
1579
1583
|
<p>Dumps versionReliance and stmtReliance. </p>
|
|
1580
1584
|
|
|
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#
|
|
1585
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00814">814</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1586
|
+
<div class="fragment"><div class="line"><a name="l00815"></a><span class="lineno"> 815</span> {</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</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="l00817"></a><span class="lineno"> 817</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="l00818"></a><span class="lineno"> 818</span>  {</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = ovrv.first;</div><div class="line"><a name="l00820"></a><span class="lineno"> 820</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="l00821"></a><span class="lineno"> 821</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="l00822"></a><span class="lineno"> 822</span>  {</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = vrv.first;</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</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="l00825"></a><span class="lineno"> 825</span> </div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> rv : vrv.second)</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>  <span class="keywordflow">if</span> (!first)</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  }</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span> </div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << rv;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  first = <span class="keyword">false</span>;</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"\n"</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>  }</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span> </div><div class="line"><a name="l00842"></a><span class="lineno"> 842</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="l00843"></a><span class="lineno"> 843</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="l00844"></a><span class="lineno"> 844</span>  {</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = ovss.first;</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</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="l00847"></a><span class="lineno"> 847</span> </div><div class="line"><a name="l00848"></a><span class="lineno"> 848</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="l00849"></a><span class="lineno"> 849</span>  {</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = vss.first;</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</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="l00852"></a><span class="lineno"> 852</span> </div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &ss = vss.second;</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>  <span class="keywordtype">bool</span> first = <span class="keyword">true</span>;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> s : ss)</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>  <span class="keywordflow">if</span> (!first)</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">", "</span>;</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  }</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span> </div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << s;</div><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  first = <span class="keyword">false</span>;</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  }</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  }</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</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>
|
|
1587
|
+
<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>
|
|
1588
|
+
<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>
|
|
1589
|
+
<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>
|
|
1590
|
+
<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
1591
|
<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#
|
|
1592
|
+
<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
1593
|
</div><!-- fragment -->
|
|
1590
1594
|
</div>
|
|
1591
1595
|
</div>
|
|
@@ -1617,13 +1621,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1617
1621
|
|
|
1618
1622
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3">SVF::FlowSensitive</a>.</p>
|
|
1619
1623
|
|
|
1620
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1621
|
-
<div class="fragment"><div class="line"><a name="
|
|
1624
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00065">65</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1625
|
+
<div class="fragment"><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="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3">FlowSensitive::finalize</a>();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="comment">// vPtD->dumpPTData();</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="comment">// dumpReliances();</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="comment">// dumpLocVersionMaps();</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</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
1626
|
</div><!-- fragment -->
|
|
1623
1627
|
</div>
|
|
1624
1628
|
</div>
|
|
1625
|
-
<a id="
|
|
1626
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1629
|
+
<a id="af93e65faae99459621ae45cf9d36005d"></a>
|
|
1630
|
+
<h2 class="memtitle"><span class="permalink"><a href="#af93e65faae99459621ae45cf9d36005d">◆ </a></span>getConsume()</h2>
|
|
1627
1631
|
|
|
1628
1632
|
<div class="memitem">
|
|
1629
1633
|
<div class="memproto">
|
|
@@ -1646,7 +1650,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1646
1650
|
<tr>
|
|
1647
1651
|
<td></td>
|
|
1648
1652
|
<td>)</td>
|
|
1649
|
-
<td></td><td
|
|
1653
|
+
<td></td><td> const</td>
|
|
1650
1654
|
</tr>
|
|
1651
1655
|
</table>
|
|
1652
1656
|
</td>
|
|
@@ -1658,15 +1662,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1658
1662
|
|
|
1659
1663
|
<p>Returns the consumed version of o at l. If no such version exists, returns invalidVersion. </p>
|
|
1660
1664
|
|
|
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>
|
|
1665
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00774">774</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1666
|
+
<div class="fragment"><div class="line"><a name="l00775"></a><span class="lineno"> 775</span> {</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">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="l00777"></a><span class="lineno"> 777</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>
|
|
1667
|
+
<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#l00764">VersionedFlowSensitive.cpp:764</a></div></div>
|
|
1665
1668
|
</div><!-- fragment -->
|
|
1666
1669
|
</div>
|
|
1667
1670
|
</div>
|
|
1668
|
-
<a id="
|
|
1669
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1671
|
+
<a id="ae83c62a01196991d116ef5c36cb51e31"></a>
|
|
1672
|
+
<h2 class="memtitle"><span class="permalink"><a href="#ae83c62a01196991d116ef5c36cb51e31">◆ </a></span>getReliantVersions()</h2>
|
|
1670
1673
|
|
|
1671
1674
|
<div class="memitem">
|
|
1672
1675
|
<div class="memproto">
|
|
@@ -1675,28 +1678,57 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1675
1678
|
<td class="mlabels-left">
|
|
1676
1679
|
<table class="memname">
|
|
1677
1680
|
<tr>
|
|
1678
|
-
<td class="memname"
|
|
1681
|
+
<td class="memname">std::vector< <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> > & VersionedFlowSensitive::getReliantVersions </td>
|
|
1679
1682
|
<td>(</td>
|
|
1680
1683
|
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1681
|
-
<td class="paramname"><em>
|
|
1684
|
+
<td class="paramname"><em>o</em>, </td>
|
|
1682
1685
|
</tr>
|
|
1683
1686
|
<tr>
|
|
1684
1687
|
<td class="paramkey"></td>
|
|
1685
1688
|
<td></td>
|
|
1686
|
-
<td class="paramtype">const <a class="el" href="namespaceSVF.html#
|
|
1687
|
-
<td class="paramname"><em>
|
|
1689
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> </td>
|
|
1690
|
+
<td class="paramname"><em>v</em> </td>
|
|
1688
1691
|
</tr>
|
|
1689
1692
|
<tr>
|
|
1690
|
-
<td class="paramkey"></td>
|
|
1691
1693
|
<td></td>
|
|
1692
|
-
<td
|
|
1693
|
-
<td
|
|
1694
|
+
<td>)</td>
|
|
1695
|
+
<td></td><td></td>
|
|
1696
|
+
</tr>
|
|
1697
|
+
</table>
|
|
1698
|
+
</td>
|
|
1699
|
+
<td class="mlabels-right">
|
|
1700
|
+
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
1701
|
+
</tr>
|
|
1702
|
+
</table>
|
|
1703
|
+
</div><div class="memdoc">
|
|
1704
|
+
|
|
1705
|
+
<p>Returns the versions of o which rely on o:v. </p>
|
|
1706
|
+
|
|
1707
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00804">804</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1708
|
+
<div class="fragment"><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> {</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>[o][v];</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</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>
|
|
1709
|
+
</div><!-- fragment -->
|
|
1710
|
+
</div>
|
|
1711
|
+
</div>
|
|
1712
|
+
<a id="a3489def8e16e4d7c83d2c909d3287fc0"></a>
|
|
1713
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a3489def8e16e4d7c83d2c909d3287fc0">◆ </a></span>getStmtReliance()</h2>
|
|
1714
|
+
|
|
1715
|
+
<div class="memitem">
|
|
1716
|
+
<div class="memproto">
|
|
1717
|
+
<table class="mlabels">
|
|
1718
|
+
<tr>
|
|
1719
|
+
<td class="mlabels-left">
|
|
1720
|
+
<table class="memname">
|
|
1721
|
+
<tr>
|
|
1722
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> & VersionedFlowSensitive::getStmtReliance </td>
|
|
1723
|
+
<td>(</td>
|
|
1724
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1725
|
+
<td class="paramname"><em>o</em>, </td>
|
|
1694
1726
|
</tr>
|
|
1695
1727
|
<tr>
|
|
1696
1728
|
<td class="paramkey"></td>
|
|
1697
1729
|
<td></td>
|
|
1698
|
-
<td class="paramtype"
|
|
1699
|
-
<td class="paramname"><em>
|
|
1730
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> </td>
|
|
1731
|
+
<td class="paramname"><em>v</em> </td>
|
|
1700
1732
|
</tr>
|
|
1701
1733
|
<tr>
|
|
1702
1734
|
<td></td>
|
|
@@ -1711,15 +1743,15 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1711
1743
|
</table>
|
|
1712
1744
|
</div><div class="memdoc">
|
|
1713
1745
|
|
|
1714
|
-
<p>
|
|
1746
|
+
<p>Returns the statements which rely on o:v. </p>
|
|
1715
1747
|
|
|
1716
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1717
|
-
<div class="fragment"><div class="line"><a name="
|
|
1748
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00809">809</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1749
|
+
<div class="fragment"><div class="line"><a name="l00810"></a><span class="lineno"> 810</span> {</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>[o][v];</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</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
1750
|
</div><!-- fragment -->
|
|
1719
1751
|
</div>
|
|
1720
1752
|
</div>
|
|
1721
|
-
<a id="
|
|
1722
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1753
|
+
<a id="a6b398d59fc276980dd2d6d48a8675068"></a>
|
|
1754
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a6b398d59fc276980dd2d6d48a8675068">◆ </a></span>getVersion()</h2>
|
|
1723
1755
|
|
|
1724
1756
|
<div class="memitem">
|
|
1725
1757
|
<div class="memproto">
|
|
@@ -1728,7 +1760,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1728
1760
|
<td class="mlabels-left">
|
|
1729
1761
|
<table class="memname">
|
|
1730
1762
|
<tr>
|
|
1731
|
-
<td class="memname"><a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> VersionedFlowSensitive::
|
|
1763
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> VersionedFlowSensitive::getVersion </td>
|
|
1732
1764
|
<td>(</td>
|
|
1733
1765
|
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1734
1766
|
<td class="paramname"><em>l</em>, </td>
|
|
@@ -1737,12 +1769,18 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1737
1769
|
<td class="paramkey"></td>
|
|
1738
1770
|
<td></td>
|
|
1739
1771
|
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1740
|
-
<td class="paramname"><em>o</em
|
|
1772
|
+
<td class="paramname"><em>o</em>, </td>
|
|
1773
|
+
</tr>
|
|
1774
|
+
<tr>
|
|
1775
|
+
<td class="paramkey"></td>
|
|
1776
|
+
<td></td>
|
|
1777
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> & </td>
|
|
1778
|
+
<td class="paramname"><em>lvm</em> </td>
|
|
1741
1779
|
</tr>
|
|
1742
1780
|
<tr>
|
|
1743
1781
|
<td></td>
|
|
1744
1782
|
<td>)</td>
|
|
1745
|
-
<td></td><td
|
|
1783
|
+
<td></td><td> const</td>
|
|
1746
1784
|
</tr>
|
|
1747
1785
|
</table>
|
|
1748
1786
|
</td>
|
|
@@ -1752,17 +1790,19 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1752
1790
|
</table>
|
|
1753
1791
|
</div><div class="memdoc">
|
|
1754
1792
|
|
|
1755
|
-
<p>
|
|
1793
|
+
<p>Shared code for getConsume and getYield. They wrap this function. </p>
|
|
1756
1794
|
|
|
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="
|
|
1795
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00764">764</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1796
|
+
<div class="fragment"><div class="line"><a name="l00765"></a><span class="lineno"> 765</span> {</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="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="l00767"></a><span class="lineno"> 767</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="l00768"></a><span class="lineno"> 768</span> </div><div class="line"><a name="l00769"></a><span class="lineno"> 769</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="l00770"></a><span class="lineno"> 770</span>  <span class="keyword">const</span> ObjToVersionMap::const_iterator foundVersion = ovm.find(op);</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</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="l00772"></a><span class="lineno"> 772</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>
|
|
1797
|
+
<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>
|
|
1798
|
+
<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>
|
|
1799
|
+
<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>
|
|
1800
|
+
<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
1801
|
</div><!-- fragment -->
|
|
1762
1802
|
</div>
|
|
1763
1803
|
</div>
|
|
1764
|
-
<a id="
|
|
1765
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1804
|
+
<a id="a01a199e9fdb5759c7f78ee344dbc413c"></a>
|
|
1805
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a01a199e9fdb5759c7f78ee344dbc413c">◆ </a></span>getYield()</h2>
|
|
1766
1806
|
|
|
1767
1807
|
<div class="memitem">
|
|
1768
1808
|
<div class="memproto">
|
|
@@ -1771,38 +1811,42 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1771
1811
|
<td class="mlabels-left">
|
|
1772
1812
|
<table class="memname">
|
|
1773
1813
|
<tr>
|
|
1774
|
-
<td class="memname">
|
|
1814
|
+
<td class="memname"><a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> VersionedFlowSensitive::getYield </td>
|
|
1775
1815
|
<td>(</td>
|
|
1776
|
-
<td class="
|
|
1816
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1817
|
+
<td class="paramname"><em>l</em>, </td>
|
|
1818
|
+
</tr>
|
|
1819
|
+
<tr>
|
|
1820
|
+
<td class="paramkey"></td>
|
|
1777
1821
|
<td></td>
|
|
1822
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1823
|
+
<td class="paramname"><em>o</em> </td>
|
|
1824
|
+
</tr>
|
|
1825
|
+
<tr>
|
|
1826
|
+
<td></td>
|
|
1827
|
+
<td>)</td>
|
|
1828
|
+
<td></td><td> const</td>
|
|
1778
1829
|
</tr>
|
|
1779
1830
|
</table>
|
|
1780
1831
|
</td>
|
|
1781
1832
|
<td class="mlabels-right">
|
|
1782
|
-
<span class="mlabels"><span class="mlabel">
|
|
1833
|
+
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
1783
1834
|
</tr>
|
|
1784
1835
|
</table>
|
|
1785
1836
|
</div><div class="memdoc">
|
|
1786
1837
|
|
|
1787
|
-
<p>
|
|
1788
|
-
|
|
1789
|
-
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">SVF::FlowSensitive</a>.</p>
|
|
1838
|
+
<p>Returns the yielded version of o at l. If no such version exists, returns invalidVersion. </p>
|
|
1790
1839
|
|
|
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>
|
|
1840
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00779">779</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1841
|
+
<div class="fragment"><div class="line"><a name="l00780"></a><span class="lineno"> 780</span> {</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="comment">// Non-store: consume == yield.</span></div><div class="line"><a name="l00782"></a><span class="lineno"> 782</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="l00783"></a><span class="lineno"> 783</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="l00784"></a><span class="lineno"> 784</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#l00427">VersionedFlowSensitive.cpp:427</a></div></div>
|
|
1842
|
+
<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>
|
|
1843
|
+
<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#l00764">VersionedFlowSensitive.cpp:764</a></div></div>
|
|
1844
|
+
<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
1845
|
</div><!-- fragment -->
|
|
1802
1846
|
</div>
|
|
1803
1847
|
</div>
|
|
1804
|
-
<a id="
|
|
1805
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1848
|
+
<a id="a81d3528fd082018e4345f0b026bf3584"></a>
|
|
1849
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a81d3528fd082018e4345f0b026bf3584">◆ </a></span>initialize()</h2>
|
|
1806
1850
|
|
|
1807
1851
|
<div class="memitem">
|
|
1808
1852
|
<div class="memproto">
|
|
@@ -1811,30 +1855,43 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1811
1855
|
<td class="mlabels-left">
|
|
1812
1856
|
<table class="memname">
|
|
1813
1857
|
<tr>
|
|
1814
|
-
<td class="memname">void VersionedFlowSensitive::
|
|
1858
|
+
<td class="memname">void VersionedFlowSensitive::initialize </td>
|
|
1815
1859
|
<td>(</td>
|
|
1816
|
-
<td class="paramtype">void </td>
|
|
1817
1860
|
<td class="paramname"></td><td>)</td>
|
|
1818
1861
|
<td></td>
|
|
1819
1862
|
</tr>
|
|
1820
1863
|
</table>
|
|
1821
1864
|
</td>
|
|
1822
1865
|
<td class="mlabels-right">
|
|
1823
|
-
<span class="mlabels"><span class="mlabel">
|
|
1866
|
+
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span> </td>
|
|
1824
1867
|
</tr>
|
|
1825
1868
|
</table>
|
|
1826
1869
|
</div><div class="memdoc">
|
|
1827
1870
|
|
|
1828
|
-
<p>
|
|
1871
|
+
<p>Initialize analysis. </p>
|
|
1872
|
+
|
|
1873
|
+
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">SVF::FlowSensitive</a>.</p>
|
|
1829
1874
|
|
|
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="
|
|
1875
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00045">45</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1876
|
+
<div class="fragment"><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> {</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#ad6243c1317503bed39411dab47c83da7">FlowSensitive::initialize</a>();</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// Overwrite the stat FlowSensitive::initialize gave us.</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</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="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#a03f5f16377daa0258166a73de3e21f07">vPtD</a> = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a4859864a4c72d5e04c10305e4579e8ee">getVersionedPTDataTy</a>();</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> </div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a8da4b9bd9d0c640a6857b4dc4991817c">buildIsStoreLoadMaps</a>();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3407cc82ef9806e26b79edb677979014">buildDeltaMaps</a>();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</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="l00057"></a><span class="lineno"> 57</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="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a7d86bc18060c0114a783aa1c3a7e9dda">prelabel</a>();</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aaff594c78d93f7ad632d344e5c1c7f6a">meldLabel</a>();</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a275095f60640d862034ad173af3371c3">removeAllIndirectSVFGEdges</a>();</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</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#l00120">VersionedFlowSensitive.cpp:120</a></div></div>
|
|
1877
|
+
<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#l00416">VersionedFlowSensitive.cpp:416</a></div></div>
|
|
1878
|
+
<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>
|
|
1879
|
+
<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>
|
|
1880
|
+
<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>
|
|
1881
|
+
<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>
|
|
1882
|
+
<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>
|
|
1883
|
+
<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#l00439">VersionedFlowSensitive.cpp:439</a></div></div>
|
|
1884
|
+
<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>
|
|
1885
|
+
<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#l00073">VersionedFlowSensitive.cpp:73</a></div></div>
|
|
1886
|
+
<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>
|
|
1887
|
+
<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>
|
|
1888
|
+
<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>
|
|
1889
|
+
<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#l00496">VersionedFlowSensitive.cpp:496</a></div></div>
|
|
1833
1890
|
</div><!-- fragment -->
|
|
1834
1891
|
</div>
|
|
1835
1892
|
</div>
|
|
1836
|
-
<a id="
|
|
1837
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1893
|
+
<a id="a984a4f929a18f97bfefac0102088a7fd"></a>
|
|
1894
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a984a4f929a18f97bfefac0102088a7fd">◆ </a></span>isLoad()</h2>
|
|
1838
1895
|
|
|
1839
1896
|
<div class="memitem">
|
|
1840
1897
|
<div class="memproto">
|
|
@@ -1843,30 +1900,30 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1843
1900
|
<td class="mlabels-left">
|
|
1844
1901
|
<table class="memname">
|
|
1845
1902
|
<tr>
|
|
1846
|
-
<td class="memname">
|
|
1903
|
+
<td class="memname">bool VersionedFlowSensitive::isLoad </td>
|
|
1847
1904
|
<td>(</td>
|
|
1848
|
-
<td class="paramtype">
|
|
1849
|
-
<td class="paramname"></td><td>)</td>
|
|
1850
|
-
<td
|
|
1905
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1906
|
+
<td class="paramname"><em>l</em></td><td>)</td>
|
|
1907
|
+
<td> const</td>
|
|
1851
1908
|
</tr>
|
|
1852
1909
|
</table>
|
|
1853
1910
|
</td>
|
|
1854
1911
|
<td class="mlabels-right">
|
|
1855
|
-
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
1912
|
+
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">virtual</span></span> </td>
|
|
1856
1913
|
</tr>
|
|
1857
1914
|
</table>
|
|
1858
1915
|
</div><div class="memdoc">
|
|
1859
1916
|
|
|
1860
|
-
<p>
|
|
1917
|
+
<p>Returns true if l is a load node. </p>
|
|
1861
1918
|
|
|
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="
|
|
1919
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00433">433</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1920
|
+
<div class="fragment"><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</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="l00436"></a><span class="lineno"> 436</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a6bb3db072db0b899f306b37f1146f83d">isLoadMap</a>[l];</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</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>
|
|
1921
|
+
<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
1922
|
</div><!-- fragment -->
|
|
1866
1923
|
</div>
|
|
1867
1924
|
</div>
|
|
1868
|
-
<a id="
|
|
1869
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
1925
|
+
<a id="aac920c9a5f13dd147e3c130425e005eb"></a>
|
|
1926
|
+
<h2 class="memtitle"><span class="permalink"><a href="#aac920c9a5f13dd147e3c130425e005eb">◆ </a></span>isStore()</h2>
|
|
1870
1927
|
|
|
1871
1928
|
<div class="memitem">
|
|
1872
1929
|
<div class="memproto">
|
|
@@ -1875,37 +1932,25 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1875
1932
|
<td class="mlabels-left">
|
|
1876
1933
|
<table class="memname">
|
|
1877
1934
|
<tr>
|
|
1878
|
-
<td class="memname">
|
|
1935
|
+
<td class="memname">bool VersionedFlowSensitive::isStore </td>
|
|
1879
1936
|
<td>(</td>
|
|
1880
|
-
<td class="paramtype">
|
|
1881
|
-
<td class="paramname"></td><td>)</td>
|
|
1882
|
-
<td
|
|
1937
|
+
<td class="paramtype">const <a class="el" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> </td>
|
|
1938
|
+
<td class="paramname"><em>l</em></td><td>)</td>
|
|
1939
|
+
<td> const</td>
|
|
1883
1940
|
</tr>
|
|
1884
1941
|
</table>
|
|
1885
1942
|
</td>
|
|
1886
1943
|
<td class="mlabels-right">
|
|
1887
|
-
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
1944
|
+
<span class="mlabels"><span class="mlabel">private</span><span class="mlabel">virtual</span></span> </td>
|
|
1888
1945
|
</tr>
|
|
1889
1946
|
</table>
|
|
1890
1947
|
</div><div class="memdoc">
|
|
1891
1948
|
|
|
1892
|
-
<p>
|
|
1949
|
+
<p>Returns true if l is a store node. </p>
|
|
1893
1950
|
|
|
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>
|
|
1951
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00427">427</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1952
|
+
<div class="fragment"><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> {</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</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="l00430"></a><span class="lineno"> 430</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a18e25c3871d7cc1a6bb0592ceca90f88">isStoreMap</a>[l];</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</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>
|
|
1953
|
+
<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
1954
|
</div><!-- fragment -->
|
|
1910
1955
|
</div>
|
|
1911
1956
|
</div>
|
|
@@ -1921,13 +1966,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1921
1966
|
<tr>
|
|
1922
1967
|
<td class="memname">bool VersionedFlowSensitive::meld </td>
|
|
1923
1968
|
<td>(</td>
|
|
1924
|
-
<td class="paramtype"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
1969
|
+
<td class="paramtype"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> & </td>
|
|
1925
1970
|
<td class="paramname"><em>mv1</em>, </td>
|
|
1926
1971
|
</tr>
|
|
1927
1972
|
<tr>
|
|
1928
1973
|
<td class="paramkey"></td>
|
|
1929
1974
|
<td></td>
|
|
1930
|
-
<td class="paramtype">const <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
1975
|
+
<td class="paramtype">const <a class="el" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> & </td>
|
|
1931
1976
|
<td class="paramname"><em>mv2</em> </td>
|
|
1932
1977
|
</tr>
|
|
1933
1978
|
<tr>
|
|
@@ -1945,8 +1990,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1945
1990
|
|
|
1946
1991
|
<p>Melds v2 into v1 (in place), returns whether a change occurred. </p>
|
|
1947
1992
|
|
|
1948
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
1949
|
-
<div class="fragment"><div class="line"><a name="
|
|
1993
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00398">398</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
1994
|
+
<div class="fragment"><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="comment">// Meld operator is union of bit vectors.</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">return</span> mv1 |= mv2;</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> }</div></div><!-- fragment -->
|
|
1950
1995
|
</div>
|
|
1951
1996
|
</div>
|
|
1952
1997
|
<a id="aaff594c78d93f7ad632d344e5c1c7f6a"></a>
|
|
@@ -1975,63 +2020,54 @@ Additional Inherited Members</h2></td></tr>
|
|
|
1975
2020
|
|
|
1976
2021
|
<p>Meld label the prelabeled <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. </p>
|
|
1977
2022
|
|
|
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="
|
|
2023
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00120">120</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2024
|
+
<div class="fragment"><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>  <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="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"> 124</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="l00125"></a><span class="lineno"> 125</span> </div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="comment">// Nodes which have at least one object on them given a prelabel.</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  std::vector<const SVFGNode *> prelabeledNodes;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="comment">// Fast query for the above.</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</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="l00130"></a><span class="lineno"> 130</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="l00131"></a><span class="lineno"> 131</span>  {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</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="l00133"></a><span class="lineno"> 133</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="l00134"></a><span class="lineno"> 134</span>  isPrelabeled[n] = <span class="keyword">true</span>;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span> </div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="comment">// Delta, delta source, store, and load nodes, which require versions during</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</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="l00139"></a><span class="lineno"> 139</span>  std::vector<NodeID> nodesWhichNeedVersions;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</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="l00141"></a><span class="lineno"> 141</span>  {</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = it->first;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</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="l00144"></a><span class="lineno"> 144</span>  }</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>  std::mutex *versionMutexes = <span class="keyword">new</span> std::mutex[nodesWhichNeedVersions.size()];</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>  <span class="comment">// Map of footprints to the canonical object "owning" the footprint.</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</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="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  std::queue<NodeID> objectQueue;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</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="l00153"></a><span class="lineno"> 153</span>  {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="comment">// "Touch" maps with o so we don't need to lock on them.</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>[o];</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>[o];</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  objectQueue.push(o);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  std::mutex objectQueueMutex;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  std::mutex footprintOwnerMutex;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span> </div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keyword">auto</span> meldVersionWorker = [<span class="keyword">this</span>, &footprintOwner, &objectQueue,</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  &objectQueueMutex, &footprintOwnerMutex, &versionMutexes,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  &prelabeledNodes, &isPrelabeled, &nodesWhichNeedVersions]</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> thread)</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>  <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  { std::lock_guard<std::mutex> guard(objectQueueMutex);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="comment">// No more objects? Done.</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">if</span> (objectQueue.empty()) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  o = objectQueue.front();</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  objectQueue.pop();</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="comment">// 1. Compute the SCCs for the nodes on the graph overlay of o.</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="comment">// For starting nodes, we only need those which did prelabeling for o specifically.</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</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="l00181"></a><span class="lineno"> 181</span>  std::vector<const SVFGNode *> osStartingNodes;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</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="l00183"></a><span class="lineno"> 183</span>  {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</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="l00185"></a><span class="lineno"> 185</span>  {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = store->getPAGDstNodeID();</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</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="l00188"></a><span class="lineno"> 188</span>  }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</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="l00190"></a><span class="lineno"> 190</span>  {</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</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="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">if</span> (mr != <span class="keyword">nullptr</span>)</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>  <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="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>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  std::vector<int> partOf;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  std::vector<const IndirectSVFGEdge *> footprint;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</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="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="comment">// 2. Skip any further processing of a footprint we have seen before.</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  { std::lock_guard<std::mutex> guard(footprintOwnerMutex);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</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="l00206"></a><span class="lineno"> 206</span>  = footprintOwner.find(footprint);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">if</span> (canonOwner == footprintOwner.end())</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">equivalentObject</a>[o] = o;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  footprintOwner[footprint] = o;</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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">equivalentObject</a>[o] = canonOwner->second;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</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="l00216"></a><span class="lineno"> 216</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="l00217"></a><span class="lineno"> 217</span>  <span class="comment">// construction. Something like copy-on-write could be good... probably negligible.</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</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="l00219"></a><span class="lineno"> 219</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="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">continue</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>  }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="comment">// 3. a. Initialise the MeldVersion of prelabeled nodes (SCCs).</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="comment">// b. Initialise a todo list of all the nodes we need to version,</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="comment">// sorted according to topological order.</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</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="l00228"></a><span class="lineno"> 228</span>  std::vector<MeldVersion> sccToMeldVersion(numSCCs);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="comment">// At stores, what is consumed is different to what is yielded, so we</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="comment">// maintain that separately.</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, MeldVersion></a> storesYieldedMeldVersion;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="comment">// SVFG nodes of interest -- those part of an SCC from the starting nodes.</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  std::vector<NodeID> todoList;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordtype">unsigned</span> bit = 0;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</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="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> (partOf[n] == -1) <span class="keywordflow">continue</span>;</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> (isPrelabeled[n])</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</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="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">else</span> sccToMeldVersion[partOf[n]].set(bit);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  ++bit;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  }</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>  todoList.push_back(n);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> </div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="comment">// Sort topologically so each nodes is only visited once.</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</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="l00251"></a><span class="lineno"> 251</span>  {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">return</span> partOf[a] > partOf[b];</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>  std::sort(todoList.begin(), todoList.end(), cmp);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> </div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="comment">// 4. a. Do meld versioning.</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="comment">// b. Determine SCC reliances.</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="comment">// c. Build a footprint for o (all edges which it is found on).</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  <span class="comment">// d. Determine which SCCs belong to stores.</span></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>  <span class="comment">// sccReliance[x] = { y_1, y_2, ... } if there exists an edge from a node</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="comment">// in SCC x to SCC y_i.</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  std::vector<Set<int>> sccReliance(numSCCs);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</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="l00265"></a><span class="lineno"> 265</span>  std::vector<int> storeSCC(numSCCs, -1);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < todoList.size(); ++i)</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="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = todoList[i];</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</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="l00270"></a><span class="lineno"> 270</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="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordtype">int</span> nSCC = partOf[n];</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">if</span> (nIsStore) storeSCC[nSCC] = n;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <span class="comment">// Given n -> m, the yielded version of n will be melded into m.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="comment">// For stores, that is in storesYieldedMeldVersion, otherwise, consume == yield and</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="comment">// we can just use sccToMeldVersion.</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</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="l00279"></a><span class="lineno"> 279</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="l00280"></a><span class="lineno"> 280</span>  {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</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="l00282"></a><span class="lineno"> 282</span>  <span class="keywordflow">if</span> (!ie) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</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="l00285"></a><span class="lineno"> 285</span>  <span class="comment">// Ignoreedges which don't involve o.</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</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="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordtype">int</span> mSCC = partOf[m];</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="comment">// There is an edge from the SCC n belongs to to that m belongs to.</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  sccReliance[nSCC].insert(mSCC);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="comment">// Ignore edges to delta nodes (prelabeled consume).</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</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="l00295"></a><span class="lineno"> 295</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="l00296"></a><span class="lineno"> 296</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="l00297"></a><span class="lineno"> 297</span>  <span class="comment">// loop on a store node.</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</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="l00299"></a><span class="lineno"> 299</span>  {</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  sccToMeldVersion[mSCC] |= nMV;</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>  }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  <span class="comment">// 5. Transform meld versions belonging to SCCs into versions.</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<MeldVersion, Version></a> mvv;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  std::vector<Version> sccToVersion(numSCCs, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> curVersion = 0;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</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="l00310"></a><span class="lineno"> 310</span>  {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</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="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<MeldVersion, Version>::const_iterator</a> foundVersion = mvv.find(mv);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</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="l00314"></a><span class="lineno"> 314</span>  sccToVersion[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>] = v;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</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>  sccToMeldVersion.clear();</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="comment">// Same for storesYieldedMeldVersion.</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, Version></a> storesYieldedVersion;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> std::pair<NodeID, MeldVersion> &nmv : storesYieldedMeldVersion)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = nmv.first;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</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="l00325"></a><span class="lineno"> 325</span> </div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<MeldVersion, Version>::const_iterator</a> foundVersion = mvv.find(mv);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</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="l00328"></a><span class="lineno"> 328</span>  storesYieldedVersion[n] = v;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</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>  storesYieldedMeldVersion.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>  mvv.clear();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="comment">// 6. From SCC reliance, determine version reliances.</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</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="l00337"></a><span class="lineno"> 337</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="l00338"></a><span class="lineno"> 338</span>  {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</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="l00340"></a><span class="lineno"> 340</span> </div><div class="line"><a name="l00341"></a><span class="lineno"> 341</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="l00342"></a><span class="lineno"> 342</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="l00343"></a><span class="lineno"> 343</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> version</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</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="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  std::vector<Version> &reliantVersions = osVersionReliance[version];</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</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="l00348"></a><span class="lineno"> 348</span>  {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> reliantVersion = sccToVersion[reliantSCC];</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  <span class="keywordflow">if</span> (version != reliantVersion)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="comment">// sccReliance is a set, no need to worry about duplicates.</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  reliantVersions.push_back(reliantVersion);</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>  }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> </div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="comment">// 7. a. Save versions for nodes which need them.</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="comment">// b. Fill in stmtReliance.</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="comment">// TODO: maybe randomise iteration order for less contention? Needs profiling.</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</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="l00362"></a><span class="lineno"> 362</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < nodesWhichNeedVersions.size(); ++i)</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  {</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = nodesWhichNeedVersions[i];</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  std::mutex &mutex = versionMutexes[i];</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keyword">const</span> <span class="keywordtype">int</span> scc = partOf[n];</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keywordflow">if</span> (scc == -1) <span class="keywordflow">continue</span>;</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>  std::lock_guard<std::mutex> guard(mutex);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div><div class="line"><a name="l00372"></a><span class="lineno"> 372</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="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">if</span> (c != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a>)</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  {</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  this-><a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aabc0a5a7a31b8d880e019773ba960741">setConsume</a>(n, o, c);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</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="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"> 379</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="l00380"></a><span class="lineno"> 380</span>  {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</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="l00382"></a><span class="lineno"> 382</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="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>  };</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  std::vector<std::thread> workers;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</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="l00390"></a><span class="lineno"> 390</span>  <span class="keywordflow">for</span> (std::thread &worker : workers) worker.join();</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="keyword">delete</span>[] versionMutexes;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <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="l00395"></a><span class="lineno"> 395</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="l00396"></a><span class="lineno"> 396</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>
|
|
2025
|
+
<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>
|
|
2026
|
+
<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>
|
|
2027
|
+
<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>
|
|
2028
|
+
<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>
|
|
2029
|
+
<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>
|
|
2030
|
+
<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>
|
|
2031
|
+
<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
2032
|
<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="
|
|
2033
|
+
<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>
|
|
2034
|
+
<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>
|
|
2035
|
+
<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#l00797">VersionedFlowSensitive.cpp:797</a></div></div>
|
|
2036
|
+
<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
2037
|
<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
2038
|
<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>
|
|
2039
|
+
<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>
|
|
2040
|
+
<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#l00427">VersionedFlowSensitive.cpp:427</a></div></div>
|
|
2041
|
+
<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#l00404">VersionedFlowSensitive.cpp:404</a></div></div>
|
|
2042
|
+
<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>
|
|
2043
|
+
<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>
|
|
2044
|
+
<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>
|
|
2045
|
+
<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
2046
|
<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>
|
|
2047
|
+
<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>
|
|
2048
|
+
<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>
|
|
2049
|
+
<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>
|
|
2050
|
+
<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
2051
|
<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
2052
|
<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>
|
|
2053
|
+
<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>
|
|
2054
|
+
<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#l00922">VersionedFlowSensitive.cpp:922</a></div></div>
|
|
1990
2055
|
<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="
|
|
2056
|
+
<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#l00410">VersionedFlowSensitive.cpp:410</a></div></div>
|
|
2057
|
+
<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>
|
|
2058
|
+
<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>
|
|
2059
|
+
<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>
|
|
2060
|
+
<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>
|
|
2061
|
+
<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#l00792">VersionedFlowSensitive.cpp:792</a></div></div>
|
|
1995
2062
|
<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>
|
|
2063
|
+
<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
2064
|
<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="
|
|
2065
|
+
<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
2066
|
<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>
|
|
2067
|
+
<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#l00433">VersionedFlowSensitive.cpp:433</a></div></div>
|
|
1999
2068
|
<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
2069
|
<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>
|
|
2070
|
+
<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
2071
|
</div><!-- fragment -->
|
|
2036
2072
|
</div>
|
|
2037
2073
|
</div>
|
|
@@ -2061,32 +2097,29 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2061
2097
|
|
|
2062
2098
|
<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
2099
|
|
|
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>
|
|
2100
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00073">73</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2101
|
+
<div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</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="l00076"></a><span class="lineno"> 76</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="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = it->first;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</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="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00081"></a><span class="lineno"> 81</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="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <span class="comment">// l: *p = q.</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</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="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = stn->getPAGDstNodeID();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</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="l00087"></a><span class="lineno"> 87</span>  {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aaae8c6858593ed050dcf2c9220228e3e">prelabeledObjects</a>.insert(o);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</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>  <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="l00092"></a><span class="lineno"> 92</span> </div><div class="line"><a name="l00093"></a><span class="lineno"> 93</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="l00094"></a><span class="lineno"> 94</span>  }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</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="l00096"></a><span class="lineno"> 96</span>  {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <span class="comment">// The outgoing edges are not only what will later be propagated. SVFGOPT may</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</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="l00099"></a><span class="lineno"> 99</span>  <span class="comment">// outgoing edges which will be added at runtime. In essence, we can no</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</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="l00101"></a><span class="lineno"> 101</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="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">if</span> (mr != <span class="keyword">nullptr</span>)</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>  <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="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aaae8c6858593ed050dcf2c9220228e3e">prelabeledObjects</a>.insert(o);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="comment">// Push into worklist because its consume == its yield.</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</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="l00111"></a><span class="lineno"> 111</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="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>  }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> </div><div class="line"><a name="l00116"></a><span class="lineno"> 116</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="l00117"></a><span class="lineno"> 117</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="l00118"></a><span class="lineno"> 118</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
2102
|
<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
2103
|
<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
2104
|
<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#
|
|
2105
|
+
<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
2106
|
<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="
|
|
2107
|
+
<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#l00404">VersionedFlowSensitive.cpp:404</a></div></div>
|
|
2108
|
+
<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
2109
|
<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
2110
|
<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
2111
|
<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
2112
|
<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
2113
|
<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
2114
|
<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
2115
|
<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>
|
|
2116
|
+
<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>
|
|
2117
|
+
<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
2118
|
<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>
|
|
2119
|
+
<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
2120
|
<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
2121
|
<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#
|
|
2122
|
+
<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
2123
|
</div><!-- fragment -->
|
|
2091
2124
|
</div>
|
|
2092
2125
|
</div>
|
|
@@ -2120,29 +2153,29 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2120
2153
|
|
|
2121
2154
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#a9968530b3dee876f55e6659530decf27">SVF::FlowSensitive</a>.</p>
|
|
2122
2155
|
|
|
2123
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2124
|
-
<div class="fragment"><div class="line"><a name="
|
|
2156
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00618">618</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2157
|
+
<div class="fragment"><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">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="l00621"></a><span class="lineno"> 621</span> </div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span> </div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="comment">// l: p = *q</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</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="l00626"></a><span class="lineno"> 626</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="l00627"></a><span class="lineno"> 627</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="l00628"></a><span class="lineno"> 628</span> </div><div class="line"><a name="l00629"></a><span class="lineno"> 629</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="l00630"></a><span class="lineno"> 630</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : qpt)</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="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="l00633"></a><span class="lineno"> 633</span> </div><div class="line"><a name="l00634"></a><span class="lineno"> 634</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="l00635"></a><span class="lineno"> 635</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="l00636"></a><span class="lineno"> 636</span>  {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  }</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> </div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</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="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> of : fields)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</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="l00648"></a><span class="lineno"> 648</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="l00649"></a><span class="lineno"> 649</span>  {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  changed = <span class="keyword">true</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>  }</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>  <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="l00657"></a><span class="lineno"> 657</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="l00658"></a><span class="lineno"> 658</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</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
2158
|
<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#
|
|
2159
|
+
<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
2160
|
<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
2161
|
<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#
|
|
2162
|
+
<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>
|
|
2163
|
+
<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
2164
|
<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
2165
|
<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
2166
|
<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
2167
|
<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#
|
|
2168
|
+
<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>
|
|
2169
|
+
<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
2170
|
<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
2171
|
<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#
|
|
2172
|
+
<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>
|
|
2173
|
+
<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#l00774">VersionedFlowSensitive.cpp:774</a></div></div>
|
|
2141
2174
|
<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
2175
|
<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
2176
|
<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
2177
|
<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#
|
|
2178
|
+
<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
2179
|
</div><!-- fragment -->
|
|
2147
2180
|
</div>
|
|
2148
2181
|
</div>
|
|
@@ -2175,10 +2208,10 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2175
2208
|
|
|
2176
2209
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#a16f594356ea565eb1fed2acea516a16b">SVF::FlowSensitive</a>.</p>
|
|
2177
2210
|
|
|
2178
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2179
|
-
<div class="fragment"><div class="line"><a name="
|
|
2211
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00561">561</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2212
|
+
<div class="fragment"><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <a class="code" href="classSVF_1_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="l00564"></a><span class="lineno"> 564</span>  <span class="comment">// Handle DummyVersPropSVFGNode here so we don't have to override the long</span></div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="comment">// processSVFGNode. We also don't call propagate based on its result.</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</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="l00567"></a><span class="lineno"> 567</span>  {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">propagateVersion</a>(dvp->getObject(), dvp->getVersion());</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>  <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="l00571"></a><span class="lineno"> 571</span>  {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <a class="code" href="classSVF_1_1WPASolver.html#a541ef7fda44ce79086c30b07a5f6126c">propagate</a>(&sn);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  }</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</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
2213
|
<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#
|
|
2214
|
+
<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#l00518">VersionedFlowSensitive.cpp:518</a></div></div>
|
|
2182
2215
|
<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
2216
|
<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
2217
|
<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 +2249,35 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2216
2249
|
|
|
2217
2250
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#aa37d591d2d4f65957e840bef4d142a6a">SVF::FlowSensitive</a>.</p>
|
|
2218
2251
|
|
|
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>
|
|
2252
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00661">661</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2253
|
+
<div class="fragment"><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>  <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="l00664"></a><span class="lineno"> 664</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="l00665"></a><span class="lineno"> 665</span> </div><div class="line"><a name="l00666"></a><span class="lineno"> 666</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="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> q = store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</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="l00670"></a><span class="lineno"> 670</span> </div><div class="line"><a name="l00671"></a><span class="lineno"> 671</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="l00672"></a><span class="lineno"> 672</span>  <span class="comment">// l: *p = q</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span> </div><div class="line"><a name="l00674"></a><span class="lineno"> 674</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="l00675"></a><span class="lineno"> 675</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="comment">// The version for these objects would be y_l(o).</span></div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> changedObjects;</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">if</span> (!qpt.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</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">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : ppt)</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="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="l00684"></a><span class="lineno"> 684</span> </div><div class="line"><a name="l00685"></a><span class="lineno"> 685</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="l00686"></a><span class="lineno"> 686</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="l00687"></a><span class="lineno"> 687</span>  {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  changedObjects.set(o);</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="line"><a name="l00693"></a><span class="lineno"> 693</span> </div><div class="line"><a name="l00694"></a><span class="lineno"> 694</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="l00695"></a><span class="lineno"> 695</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="l00696"></a><span class="lineno"> 696</span> </div><div class="line"><a name="l00697"></a><span class="lineno"> 697</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="l00698"></a><span class="lineno"> 698</span> </div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> singleton = 0;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</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="l00701"></a><span class="lineno"> 701</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="l00702"></a><span class="lineno"> 702</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="l00703"></a><span class="lineno"> 703</span> </div><div class="line"><a name="l00704"></a><span class="lineno"> 704</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="l00705"></a><span class="lineno"> 705</span>  <span class="comment">// except when a strong update is taking place.</span></div><div class="line"><a name="l00706"></a><span class="lineno"> 706</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="l00707"></a><span class="lineno"> 707</span>  {</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = oc.first;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = oc.second;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span> </div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="comment">// Strong-updated; don't propagate.</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  <span class="keywordflow">if</span> (isSU && o == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> </div><div class="line"><a name="l00714"></a><span class="lineno"> 714</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="l00715"></a><span class="lineno"> 715</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="l00716"></a><span class="lineno"> 716</span>  {</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  changedObjects.set(o);</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>  }</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span> </div><div class="line"><a name="l00722"></a><span class="lineno"> 722</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="l00723"></a><span class="lineno"> 723</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="l00724"></a><span class="lineno"> 724</span> </div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <span class="comment">// Changed objects need to be propagated. Time here should be inconsequential</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="comment">// *except* for time taken for propagateVersion, which will time itself.</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">if</span> (!changedObjects.empty())</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="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="l00730"></a><span class="lineno"> 730</span>  {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="comment">// Definitely has a yielded version (came from prelabelling) as these are</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>  <span class="comment">// the changed objects which must've been pointed to in Andersen's too.</span></div><div class="line"><a name="l00733"></a><span class="lineno"> 733</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="l00734"></a><span class="lineno"> 734</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">propagateVersion</a>(o, y);</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="comment">// Some o/v pairs changed: statements need to know.</span></div><div class="line"><a name="l00737"></a><span class="lineno"> 737</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="l00738"></a><span class="lineno"> 738</span>  }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  }</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span> </div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</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
2254
|
<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#
|
|
2255
|
+
<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#l00518">VersionedFlowSensitive.cpp:518</a></div></div>
|
|
2256
|
+
<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
2257
|
<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
2258
|
<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
2259
|
<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>
|
|
2260
|
+
<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>
|
|
2261
|
+
<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
2262
|
<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>
|
|
2263
|
+
<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#l00779">VersionedFlowSensitive.cpp:779</a></div></div>
|
|
2231
2264
|
<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
2265
|
<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#
|
|
2266
|
+
<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
2267
|
<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
2268
|
<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>
|
|
2269
|
+
<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#l00809">VersionedFlowSensitive.cpp:809</a></div></div>
|
|
2236
2270
|
<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#
|
|
2271
|
+
<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>
|
|
2272
|
+
<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
2273
|
<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
2274
|
<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#
|
|
2275
|
+
<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
2276
|
<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
2277
|
<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
2278
|
<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
2279
|
<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>
|
|
2280
|
+
<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
2281
|
</div><!-- fragment -->
|
|
2249
2282
|
</div>
|
|
2250
2283
|
</div>
|
|
@@ -2283,15 +2316,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2283
2316
|
</div><div class="memdoc">
|
|
2284
2317
|
<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
2318
|
|
|
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>
|
|
2319
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00518">518</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2320
|
+
<div class="fragment"><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="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="l00521"></a><span class="lineno"> 521</span> </div><div class="line"><a name="l00522"></a><span class="lineno"> 522</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="l00523"></a><span class="lineno"> 523</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> r : reliantVersions)</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>  <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="l00526"></a><span class="lineno"> 526</span>  }</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span> </div><div class="line"><a name="l00528"></a><span class="lineno"> 528</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="l00529"></a><span class="lineno"> 529</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="l00530"></a><span class="lineno"> 530</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#l00518">VersionedFlowSensitive.cpp:518</a></div></div>
|
|
2321
|
+
<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>
|
|
2322
|
+
<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
2323
|
<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="
|
|
2324
|
+
<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>
|
|
2325
|
+
<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#l00804">VersionedFlowSensitive.cpp:804</a></div></div>
|
|
2326
|
+
<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
2327
|
</div><!-- fragment -->
|
|
2296
2328
|
</div>
|
|
2297
2329
|
</div>
|
|
@@ -2342,24 +2374,24 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2342
2374
|
</div><div class="memdoc">
|
|
2343
2375
|
<p>Propagates version v of o to version vp of o. time indicates whether it should record time taken itself. </p>
|
|
2344
2376
|
|
|
2345
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2346
|
-
<div class="fragment"><div class="line"><a name="
|
|
2377
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00532">532</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2378
|
+
<div class="fragment"><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="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="l00535"></a><span class="lineno"> 535</span> </div><div class="line"><a name="l00536"></a><span class="lineno"> 536</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="l00537"></a><span class="lineno"> 537</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="l00538"></a><span class="lineno"> 538</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="l00539"></a><span class="lineno"> 539</span>  {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="comment">// o:vp has changed.</span></div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  <span class="comment">// Add the dummy propagation node to tell the solver to propagate it later.</span></div><div class="line"><a name="l00542"></a><span class="lineno"> 542</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="l00543"></a><span class="lineno"> 543</span>  VarToPropNodeMap::const_iterator dvpIt = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af14a4cbc0b990389d31b2f88f50ad8eb">versionedVarToPropNode</a>.find(dstVar);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</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="l00545"></a><span class="lineno"> 545</span>  {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</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="l00547"></a><span class="lineno"> 547</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af14a4cbc0b990389d31b2f88f50ad8eb">versionedVarToPropNode</a>[dstVar] = dvp;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  } <span class="keywordflow">else</span> dvp = dvpIt->second;</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> </div><div class="line"><a name="l00550"></a><span class="lineno"> 550</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="l00551"></a><span class="lineno"> 551</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="l00552"></a><span class="lineno"> 552</span> </div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="comment">// Notify nodes which rely on o:vp that it changed.</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</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="l00555"></a><span class="lineno"> 555</span>  }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <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="l00558"></a><span class="lineno"> 558</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="l00559"></a><span class="lineno"> 559</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
2379
|
<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#
|
|
2380
|
+
<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
2381
|
<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
2382
|
<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
2383
|
<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>
|
|
2384
|
+
<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>
|
|
2385
|
+
<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>
|
|
2386
|
+
<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
2387
|
<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="
|
|
2388
|
+
<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#l00809">VersionedFlowSensitive.cpp:809</a></div></div>
|
|
2389
|
+
<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
2390
|
<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
2391
|
<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#
|
|
2392
|
+
<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
2393
|
<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#
|
|
2394
|
+
<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
2395
|
</div><!-- fragment -->
|
|
2364
2396
|
</div>
|
|
2365
2397
|
</div>
|
|
@@ -2391,8 +2423,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2391
2423
|
|
|
2392
2424
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#aeb1e002519123a67f8d18f78cda04bac">SVF::FlowSensitive</a>.</p>
|
|
2393
2425
|
|
|
2394
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2395
|
-
<div class="fragment"><div class="line"><a name="
|
|
2426
|
+
<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>
|
|
2427
|
+
<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
2428
|
</div>
|
|
2397
2429
|
</div>
|
|
2398
2430
|
<a id="a6e4964389f96667bd69354fd4a742720"></a>
|
|
@@ -2422,8 +2454,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2422
2454
|
|
|
2423
2455
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#a4f1a0d533381660055210be1e2d7d72a">SVF::FlowSensitive</a>.</p>
|
|
2424
2456
|
|
|
2425
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2426
|
-
<div class="fragment"><div class="line"><a name="
|
|
2457
|
+
<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>
|
|
2458
|
+
<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
2459
|
</div>
|
|
2428
2460
|
</div>
|
|
2429
2461
|
<a id="a754c77fff88e8f415dc7a2096d1bffe2"></a>
|
|
@@ -2451,8 +2483,48 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2451
2483
|
|
|
2452
2484
|
<p>Release flow-sensitive pointer analysis. </p>
|
|
2453
2485
|
|
|
2454
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2455
|
-
<div class="fragment"><div class="line"><a name="
|
|
2486
|
+
<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>
|
|
2487
|
+
<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>
|
|
2488
|
+
</div><!-- fragment -->
|
|
2489
|
+
</div>
|
|
2490
|
+
</div>
|
|
2491
|
+
<a id="a275095f60640d862034ad173af3371c3"></a>
|
|
2492
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a275095f60640d862034ad173af3371c3">◆ </a></span>removeAllIndirectSVFGEdges()</h2>
|
|
2493
|
+
|
|
2494
|
+
<div class="memitem">
|
|
2495
|
+
<div class="memproto">
|
|
2496
|
+
<table class="mlabels">
|
|
2497
|
+
<tr>
|
|
2498
|
+
<td class="mlabels-left">
|
|
2499
|
+
<table class="memname">
|
|
2500
|
+
<tr>
|
|
2501
|
+
<td class="memname">void VersionedFlowSensitive::removeAllIndirectSVFGEdges </td>
|
|
2502
|
+
<td>(</td>
|
|
2503
|
+
<td class="paramtype">void </td>
|
|
2504
|
+
<td class="paramname"></td><td>)</td>
|
|
2505
|
+
<td></td>
|
|
2506
|
+
</tr>
|
|
2507
|
+
</table>
|
|
2508
|
+
</td>
|
|
2509
|
+
<td class="mlabels-right">
|
|
2510
|
+
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
2511
|
+
</tr>
|
|
2512
|
+
</table>
|
|
2513
|
+
</div><div class="memdoc">
|
|
2514
|
+
|
|
2515
|
+
<p>Removes all indirect edges in the <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. </p>
|
|
2516
|
+
|
|
2517
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00496">496</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2518
|
+
<div class="fragment"><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>  <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="l00499"></a><span class="lineno"> 499</span>  {</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *sn = nodeIt->second;</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="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="l00503"></a><span class="lineno"> 503</span>  std::vector<SVFGEdge *> toDeleteFromIn;</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a> *e : inEdges)</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>  <span class="keywordflow">if</span> (SVFUtil::isa<IndirectSVFGEdge>(e)) toDeleteFromIn.push_back(e);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>  }</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="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="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="comment">// Only need to iterate over incoming edges for each node because edges</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="comment">// will be deleted from in/out through removeSVFGEdge.</span></div><div class="line"><a name="l00513"></a><span class="lineno"> 513</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>  <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="l00516"></a><span class="lineno"> 516</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>
|
|
2519
|
+
<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>
|
|
2520
|
+
<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>
|
|
2521
|
+
<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>
|
|
2522
|
+
<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>
|
|
2523
|
+
<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>
|
|
2524
|
+
<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>
|
|
2525
|
+
<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>
|
|
2526
|
+
<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>
|
|
2527
|
+
<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
2528
|
</div><!-- fragment -->
|
|
2457
2529
|
</div>
|
|
2458
2530
|
</div>
|
|
@@ -2498,15 +2570,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2498
2570
|
|
|
2499
2571
|
<p>Sets the consumed version of o at l to v. </p>
|
|
2500
2572
|
|
|
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>
|
|
2573
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00792">792</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2574
|
+
<div class="fragment"><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> {</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>  <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="l00795"></a><span class="lineno"> 795</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>
|
|
2575
|
+
<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#l00786">VersionedFlowSensitive.cpp:786</a></div></div>
|
|
2505
2576
|
</div><!-- fragment -->
|
|
2506
2577
|
</div>
|
|
2507
2578
|
</div>
|
|
2508
|
-
<a id="
|
|
2509
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2579
|
+
<a id="adf37ae1f6a07716bca6fbe1603b8a070"></a>
|
|
2580
|
+
<h2 class="memtitle"><span class="permalink"><a href="#adf37ae1f6a07716bca6fbe1603b8a070">◆ </a></span>setVersion()</h2>
|
|
2510
2581
|
|
|
2511
2582
|
<div class="memitem">
|
|
2512
2583
|
<div class="memproto">
|
|
@@ -2535,13 +2606,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2535
2606
|
<tr>
|
|
2536
2607
|
<td class="paramkey"></td>
|
|
2537
2608
|
<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>
|
|
2609
|
+
<td class="paramtype"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> & </td>
|
|
2545
2610
|
<td class="paramname"><em>lvm</em> </td>
|
|
2546
2611
|
</tr>
|
|
2547
2612
|
<tr>
|
|
@@ -2559,8 +2624,8 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2559
2624
|
|
|
2560
2625
|
<p>Shared code for setConsume and setYield. They wrap this function. </p>
|
|
2561
2626
|
|
|
2562
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#
|
|
2563
|
-
<div class="fragment"><div class="line"><a name="
|
|
2627
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00786">786</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2628
|
+
<div class="fragment"><div class="line"><a name="l00787"></a><span class="lineno"> 787</span> {</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af9a43f48b7d99cc6694f3ae3248fd8e0">ObjToVersionMap</a> &ovm = lvm[l];</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  ovm[o] = v;</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</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
2629
|
</div><!-- fragment -->
|
|
2565
2630
|
</div>
|
|
2566
2631
|
</div>
|
|
@@ -2606,10 +2671,11 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2606
2671
|
|
|
2607
2672
|
<p>Sets the yielded version of o at l to v. </p>
|
|
2608
2673
|
|
|
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#
|
|
2674
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00797">797</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2675
|
+
<div class="fragment"><div class="line"><a name="l00798"></a><span class="lineno"> 798</span> {</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  <span class="comment">// Non-store: consume == yield.</span></div><div class="line"><a name="l00800"></a><span class="lineno"> 800</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="l00801"></a><span class="lineno"> 801</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="l00802"></a><span class="lineno"> 802</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#l00427">VersionedFlowSensitive.cpp:427</a></div></div>
|
|
2676
|
+
<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>
|
|
2677
|
+
<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>
|
|
2678
|
+
<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#l00786">VersionedFlowSensitive.cpp:786</a></div></div>
|
|
2613
2679
|
</div><!-- fragment -->
|
|
2614
2680
|
</div>
|
|
2615
2681
|
</div>
|
|
@@ -2645,23 +2711,24 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2645
2711
|
|
|
2646
2712
|
<p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#a1886b4964efa92cfff761493d12768b8">SVF::FlowSensitive</a>.</p>
|
|
2647
2713
|
|
|
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#
|
|
2714
|
+
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00576">576</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
|
|
2715
|
+
<div class="fragment"><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>  <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="l00579"></a><span class="lineno"> 579</span>  {</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *dstNode = e->getDstNode();</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</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="l00582"></a><span class="lineno"> 582</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="l00583"></a><span class="lineno"> 583</span> </div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">if</span> (SVFUtil::isa<PHISVFGNode>(dstNode)</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  || SVFUtil::isa<FormalParmSVFGNode>(dstNode)</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  || SVFUtil::isa<ActualRetSVFGNode>(dstNode))</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(dst);</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="keywordflow">else</span></div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  {</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="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="l00593"></a><span class="lineno"> 593</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="l00594"></a><span class="lineno"> 594</span> </div><div class="line"><a name="l00595"></a><span class="lineno"> 595</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="l00596"></a><span class="lineno"> 596</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="l00597"></a><span class="lineno"> 597</span> </div><div class="line"><a name="l00598"></a><span class="lineno"> 598</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="l00599"></a><span class="lineno"> 599</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="l00600"></a><span class="lineno"> 600</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="l00601"></a><span class="lineno"> 601</span>  {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</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="l00603"></a><span class="lineno"> 603</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="l00604"></a><span class="lineno"> 604</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="l00605"></a><span class="lineno"> 605</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="l00606"></a><span class="lineno"> 606</span> </div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  std::vector<Version> &versionsRelyingOnSrcY = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#ae83c62a01196991d116ef5c36cb51e31">getReliantVersions</a>(o, srcY);</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="keywordflow">if</span> (std::find(versionsRelyingOnSrcY.begin(), versionsRelyingOnSrcY.end(), dstC) == versionsRelyingOnSrcY.end())</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  versionsRelyingOnSrcY.push_back(dstC);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">propagateVersion</a>(o, srcY, dstC);</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="line"><a name="l00615"></a><span class="lineno"> 615</span>  }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</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>
|
|
2716
|
+
<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#l00518">VersionedFlowSensitive.cpp:518</a></div></div>
|
|
2651
2717
|
<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
2718
|
<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="
|
|
2719
|
+
<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#l00404">VersionedFlowSensitive.cpp:404</a></div></div>
|
|
2720
|
+
<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
2721
|
<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>
|
|
2722
|
+
<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#l00779">VersionedFlowSensitive.cpp:779</a></div></div>
|
|
2723
|
+
<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#l00410">VersionedFlowSensitive.cpp:410</a></div></div>
|
|
2724
|
+
<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
2725
|
<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#
|
|
2726
|
+
<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>
|
|
2727
|
+
<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#l00774">VersionedFlowSensitive.cpp:774</a></div></div>
|
|
2661
2728
|
<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
2729
|
<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>
|
|
2730
|
+
<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#l00804">VersionedFlowSensitive.cpp:804</a></div></div>
|
|
2663
2731
|
<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
2732
|
<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
2733
|
</div><!-- fragment -->
|
|
2667
2734
|
</div>
|
|
@@ -2702,7 +2769,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2702
2769
|
<td class="mlabels-left">
|
|
2703
2770
|
<table class="memname">
|
|
2704
2771
|
<tr>
|
|
2705
|
-
<td class="memname"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#
|
|
2772
|
+
<td class="memname"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> SVF::VersionedFlowSensitive::consume</td>
|
|
2706
2773
|
</tr>
|
|
2707
2774
|
</table>
|
|
2708
2775
|
</td>
|
|
@@ -2711,14 +2778,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2711
2778
|
</tr>
|
|
2712
2779
|
</table>
|
|
2713
2780
|
</div><div class="memdoc">
|
|
2714
|
-
<p>
|
|
2781
|
+
<p>Maps locations to objects to a version. The object version is what is consumed at that location. </p>
|
|
2715
2782
|
|
|
2716
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2783
|
+
<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
2784
|
|
|
2718
2785
|
</div>
|
|
2719
2786
|
</div>
|
|
2720
|
-
<a id="
|
|
2721
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2787
|
+
<a id="a11ddfa1faebf56e74e6dcc53e16142e1"></a>
|
|
2788
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a11ddfa1faebf56e74e6dcc53e16142e1">◆ </a></span>deltaMap</h2>
|
|
2722
2789
|
|
|
2723
2790
|
<div class="memitem">
|
|
2724
2791
|
<div class="memproto">
|
|
@@ -2727,7 +2794,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2727
2794
|
<td class="mlabels-left">
|
|
2728
2795
|
<table class="memname">
|
|
2729
2796
|
<tr>
|
|
2730
|
-
<td class="memname"
|
|
2797
|
+
<td class="memname">std::vector<bool> SVF::VersionedFlowSensitive::deltaMap</td>
|
|
2731
2798
|
</tr>
|
|
2732
2799
|
</table>
|
|
2733
2800
|
</td>
|
|
@@ -2736,15 +2803,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2736
2803
|
</tr>
|
|
2737
2804
|
</table>
|
|
2738
2805
|
</div><div class="memdoc">
|
|
2806
|
+
<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
2807
|
|
|
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>
|
|
2808
|
+
<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
2809
|
|
|
2744
2810
|
</div>
|
|
2745
2811
|
</div>
|
|
2746
|
-
<a id="
|
|
2747
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2812
|
+
<a id="aee97e196225aaad29c0bd31d3ccbabf6"></a>
|
|
2813
|
+
<h2 class="memtitle"><span class="permalink"><a href="#aee97e196225aaad29c0bd31d3ccbabf6">◆ </a></span>deltaSourceMap</h2>
|
|
2748
2814
|
|
|
2749
2815
|
<div class="memitem">
|
|
2750
2816
|
<div class="memproto">
|
|
@@ -2753,24 +2819,23 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2753
2819
|
<td class="mlabels-left">
|
|
2754
2820
|
<table class="memname">
|
|
2755
2821
|
<tr>
|
|
2756
|
-
<td class="memname">
|
|
2822
|
+
<td class="memname">std::vector<bool> SVF::VersionedFlowSensitive::deltaSourceMap</td>
|
|
2757
2823
|
</tr>
|
|
2758
2824
|
</table>
|
|
2759
2825
|
</td>
|
|
2760
2826
|
<td class="mlabels-right">
|
|
2761
|
-
<span class="mlabels"><span class="mlabel">
|
|
2827
|
+
<span class="mlabels"><span class="mlabel">private</span></span> </td>
|
|
2762
2828
|
</tr>
|
|
2763
2829
|
</table>
|
|
2764
2830
|
</div><div class="memdoc">
|
|
2831
|
+
<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
2832
|
|
|
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>
|
|
2833
|
+
<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
2834
|
|
|
2770
2835
|
</div>
|
|
2771
2836
|
</div>
|
|
2772
|
-
<a id="
|
|
2773
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2837
|
+
<a id="a2d451d89f99a4bff828b682723df477f"></a>
|
|
2838
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a2d451d89f99a4bff828b682723df477f">◆ </a></span>equivalentObject</h2>
|
|
2774
2839
|
|
|
2775
2840
|
<div class="memitem">
|
|
2776
2841
|
<div class="memproto">
|
|
@@ -2779,7 +2844,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2779
2844
|
<td class="mlabels-left">
|
|
2780
2845
|
<table class="memname">
|
|
2781
2846
|
<tr>
|
|
2782
|
-
<td class="memname"><a class="el" href="
|
|
2847
|
+
<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
2848
|
</tr>
|
|
2784
2849
|
</table>
|
|
2785
2850
|
</td>
|
|
@@ -2788,14 +2853,13 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2788
2853
|
</tr>
|
|
2789
2854
|
</table>
|
|
2790
2855
|
</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
2856
|
|
|
2793
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2857
|
+
<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
2858
|
|
|
2795
2859
|
</div>
|
|
2796
2860
|
</div>
|
|
2797
|
-
<a id="
|
|
2798
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2861
|
+
<a id="a3d44a343a2e3f5d276fd1b069c92e112"></a>
|
|
2862
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a3d44a343a2e3f5d276fd1b069c92e112">◆ </a></span>invalidVersion</h2>
|
|
2799
2863
|
|
|
2800
2864
|
<div class="memitem">
|
|
2801
2865
|
<div class="memproto">
|
|
@@ -2804,24 +2868,24 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2804
2868
|
<td class="mlabels-left">
|
|
2805
2869
|
<table class="memname">
|
|
2806
2870
|
<tr>
|
|
2807
|
-
<td class="memname">
|
|
2871
|
+
<td class="memname">const <a class="el" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> VersionedFlowSensitive::invalidVersion = 0</td>
|
|
2808
2872
|
</tr>
|
|
2809
2873
|
</table>
|
|
2810
2874
|
</td>
|
|
2811
2875
|
<td class="mlabels-right">
|
|
2812
|
-
<span class="mlabels"><span class="mlabel">
|
|
2876
|
+
<span class="mlabels"><span class="mlabel">static</span></span> </td>
|
|
2813
2877
|
</tr>
|
|
2814
2878
|
</table>
|
|
2815
2879
|
</div><div class="memdoc">
|
|
2816
2880
|
|
|
2817
|
-
<p>
|
|
2881
|
+
<p>If this version appears, there has been an error. </p>
|
|
2818
2882
|
|
|
2819
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2883
|
+
<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
2884
|
|
|
2821
2885
|
</div>
|
|
2822
2886
|
</div>
|
|
2823
|
-
<a id="
|
|
2824
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2887
|
+
<a id="a6bb3db072db0b899f306b37f1146f83d"></a>
|
|
2888
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a6bb3db072db0b899f306b37f1146f83d">◆ </a></span>isLoadMap</h2>
|
|
2825
2889
|
|
|
2826
2890
|
<div class="memitem">
|
|
2827
2891
|
<div class="memproto">
|
|
@@ -2830,7 +2894,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2830
2894
|
<td class="mlabels-left">
|
|
2831
2895
|
<table class="memname">
|
|
2832
2896
|
<tr>
|
|
2833
|
-
<td class="memname">
|
|
2897
|
+
<td class="memname">std::vector<bool> SVF::VersionedFlowSensitive::isLoadMap</td>
|
|
2834
2898
|
</tr>
|
|
2835
2899
|
</table>
|
|
2836
2900
|
</td>
|
|
@@ -2840,14 +2904,14 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2840
2904
|
</table>
|
|
2841
2905
|
</div><div class="memdoc">
|
|
2842
2906
|
|
|
2843
|
-
<p>
|
|
2907
|
+
<p>isLoadMap[l] means <a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node l is a load node. </p>
|
|
2844
2908
|
|
|
2845
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2909
|
+
<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
2910
|
|
|
2847
2911
|
</div>
|
|
2848
2912
|
</div>
|
|
2849
|
-
<a id="
|
|
2850
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2913
|
+
<a id="a18e25c3871d7cc1a6bb0592ceca90f88"></a>
|
|
2914
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a18e25c3871d7cc1a6bb0592ceca90f88">◆ </a></span>isStoreMap</h2>
|
|
2851
2915
|
|
|
2852
2916
|
<div class="memitem">
|
|
2853
2917
|
<div class="memproto">
|
|
@@ -2856,7 +2920,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2856
2920
|
<td class="mlabels-left">
|
|
2857
2921
|
<table class="memname">
|
|
2858
2922
|
<tr>
|
|
2859
|
-
<td class="memname"
|
|
2923
|
+
<td class="memname">std::vector<bool> SVF::VersionedFlowSensitive::isStoreMap</td>
|
|
2860
2924
|
</tr>
|
|
2861
2925
|
</table>
|
|
2862
2926
|
</td>
|
|
@@ -2865,14 +2929,15 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2865
2929
|
</tr>
|
|
2866
2930
|
</table>
|
|
2867
2931
|
</div><div class="memdoc">
|
|
2868
|
-
<p>Object -> MeldVersion counter. Used in the prelabeling phase to generate a new MeldVersion. </p>
|
|
2869
2932
|
|
|
2870
|
-
<p
|
|
2933
|
+
<p>isStoreMap[l] means <a class="el" href="classSVF_1_1SVFG.html">SVFG</a> node l is a store node. </p>
|
|
2934
|
+
|
|
2935
|
+
<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
2936
|
|
|
2872
2937
|
</div>
|
|
2873
2938
|
</div>
|
|
2874
|
-
<a id="
|
|
2875
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
2939
|
+
<a id="a4a594c8d6ccaa27b5328c6388fdb258d"></a>
|
|
2940
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a4a594c8d6ccaa27b5328c6388fdb258d">◆ </a></span>meldLabelingTime</h2>
|
|
2876
2941
|
|
|
2877
2942
|
<div class="memitem">
|
|
2878
2943
|
<div class="memproto">
|
|
@@ -2881,7 +2946,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2881
2946
|
<td class="mlabels-left">
|
|
2882
2947
|
<table class="memname">
|
|
2883
2948
|
<tr>
|
|
2884
|
-
<td class="memname"
|
|
2949
|
+
<td class="memname">double SVF::VersionedFlowSensitive::meldLabelingTime</td>
|
|
2885
2950
|
</tr>
|
|
2886
2951
|
</table>
|
|
2887
2952
|
</td>
|
|
@@ -2890,9 +2955,10 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2890
2955
|
</tr>
|
|
2891
2956
|
</table>
|
|
2892
2957
|
</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
2958
|
|
|
2895
|
-
<p
|
|
2959
|
+
<p>Time to meld label <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. </p>
|
|
2960
|
+
|
|
2961
|
+
<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
2962
|
|
|
2897
2963
|
</div>
|
|
2898
2964
|
</div>
|
|
@@ -2919,7 +2985,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2919
2985
|
<p>Additional statistics. </p>
|
|
2920
2986
|
<p>Number of prelabeled nodes. </p>
|
|
2921
2987
|
|
|
2922
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
2988
|
+
<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
2989
|
|
|
2924
2990
|
</div>
|
|
2925
2991
|
</div>
|
|
@@ -2945,12 +3011,12 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2945
3011
|
|
|
2946
3012
|
<p>Number of versions created during prelabeling. </p>
|
|
2947
3013
|
|
|
2948
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3014
|
+
<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
3015
|
|
|
2950
3016
|
</div>
|
|
2951
3017
|
</div>
|
|
2952
|
-
<a id="
|
|
2953
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
3018
|
+
<a id="aaae8c6858593ed050dcf2c9220228e3e"></a>
|
|
3019
|
+
<h2 class="memtitle"><span class="permalink"><a href="#aaae8c6858593ed050dcf2c9220228e3e">◆ </a></span>prelabeledObjects</h2>
|
|
2954
3020
|
|
|
2955
3021
|
<div class="memitem">
|
|
2956
3022
|
<div class="memproto">
|
|
@@ -2959,7 +3025,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2959
3025
|
<td class="mlabels-left">
|
|
2960
3026
|
<table class="memname">
|
|
2961
3027
|
<tr>
|
|
2962
|
-
<td class="memname">
|
|
3028
|
+
<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
3029
|
</tr>
|
|
2964
3030
|
</table>
|
|
2965
3031
|
</td>
|
|
@@ -2969,14 +3035,12 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2969
3035
|
</table>
|
|
2970
3036
|
</div><div class="memdoc">
|
|
2971
3037
|
|
|
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>
|
|
3038
|
+
<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
3039
|
|
|
2976
3040
|
</div>
|
|
2977
3041
|
</div>
|
|
2978
|
-
<a id="
|
|
2979
|
-
<h2 class="memtitle"><span class="permalink"><a href="#
|
|
3042
|
+
<a id="a77a5dd9578def9a8e2b48e8b90d9b996"></a>
|
|
3043
|
+
<h2 class="memtitle"><span class="permalink"><a href="#a77a5dd9578def9a8e2b48e8b90d9b996">◆ </a></span>prelabelingTime</h2>
|
|
2980
3044
|
|
|
2981
3045
|
<div class="memitem">
|
|
2982
3046
|
<div class="memproto">
|
|
@@ -2985,7 +3049,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2985
3049
|
<td class="mlabels-left">
|
|
2986
3050
|
<table class="memname">
|
|
2987
3051
|
<tr>
|
|
2988
|
-
<td class="memname">double SVF::VersionedFlowSensitive::
|
|
3052
|
+
<td class="memname">double SVF::VersionedFlowSensitive::prelabelingTime</td>
|
|
2989
3053
|
</tr>
|
|
2990
3054
|
</table>
|
|
2991
3055
|
</td>
|
|
@@ -2995,9 +3059,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
2995
3059
|
</table>
|
|
2996
3060
|
</div><div class="memdoc">
|
|
2997
3061
|
|
|
2998
|
-
<p>Time to
|
|
3062
|
+
<p>Time to prelabel <a class="el" href="classSVF_1_1SVFG.html">SVFG</a>. </p>
|
|
2999
3063
|
|
|
3000
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3064
|
+
<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
3065
|
|
|
3002
3066
|
</div>
|
|
3003
3067
|
</div>
|
|
@@ -3023,7 +3087,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3023
3087
|
|
|
3024
3088
|
<p>o x version -> statement nodes which rely on that o/version. </p>
|
|
3025
3089
|
|
|
3026
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3090
|
+
<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
3091
|
|
|
3028
3092
|
</div>
|
|
3029
3093
|
</div>
|
|
@@ -3048,7 +3112,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3048
3112
|
</div><div class="memdoc">
|
|
3049
3113
|
<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
3114
|
|
|
3051
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3115
|
+
<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
3116
|
|
|
3053
3117
|
</div>
|
|
3054
3118
|
</div>
|
|
@@ -3074,7 +3138,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3074
3138
|
|
|
3075
3139
|
<p>Time to propagate versions to versions which rely on them. </p>
|
|
3076
3140
|
|
|
3077
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3141
|
+
<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
3142
|
|
|
3079
3143
|
</div>
|
|
3080
3144
|
</div>
|
|
@@ -3100,7 +3164,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3100
3164
|
|
|
3101
3165
|
<p>o -> (version -> versions which rely on it). </p>
|
|
3102
3166
|
|
|
3103
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3167
|
+
<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
3168
|
|
|
3105
3169
|
</div>
|
|
3106
3170
|
</div>
|
|
@@ -3124,7 +3188,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3124
3188
|
</table>
|
|
3125
3189
|
</div><div class="memdoc">
|
|
3126
3190
|
|
|
3127
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3191
|
+
<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
3192
|
|
|
3129
3193
|
</div>
|
|
3130
3194
|
</div>
|
|
@@ -3150,7 +3214,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3150
3214
|
|
|
3151
3215
|
<p>Points-to DS for working with versions. </p>
|
|
3152
3216
|
|
|
3153
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3217
|
+
<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
3218
|
|
|
3155
3219
|
</div>
|
|
3156
3220
|
</div>
|
|
@@ -3175,7 +3239,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3175
3239
|
</div><div class="memdoc">
|
|
3176
3240
|
<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
3241
|
|
|
3178
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3242
|
+
<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
3243
|
|
|
3180
3244
|
</div>
|
|
3181
3245
|
</div>
|
|
@@ -3189,32 +3253,7 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3189
3253
|
<td class="mlabels-left">
|
|
3190
3254
|
<table class="memname">
|
|
3191
3255
|
<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>
|
|
3256
|
+
<td class="memname"><a class="el" href="classSVF_1_1VersionedFlowSensitive.html#aa689d29ead80303b1ef1e1a91f31c296">LocVersionMap</a> SVF::VersionedFlowSensitive::yield</td>
|
|
3218
3257
|
</tr>
|
|
3219
3258
|
</table>
|
|
3220
3259
|
</td>
|
|
@@ -3224,9 +3263,9 @@ Additional Inherited Members</h2></td></tr>
|
|
|
3224
3263
|
</table>
|
|
3225
3264
|
</div><div class="memdoc">
|
|
3226
3265
|
|
|
3227
|
-
<p>
|
|
3266
|
+
<p>Actual yield map. Yield analogue to consume. </p>
|
|
3228
3267
|
|
|
3229
|
-
<p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8h_source.html#
|
|
3268
|
+
<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
3269
|
|
|
3231
3270
|
</div>
|
|
3232
3271
|
</div>
|