svf-tools 1.0.613 → 1.0.614
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/CMakeLists.txt +13 -0
- package/SVF-doxygen/html/html/AndersenPWC_8h_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +7 -6
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +22 -22
- package/SVF-doxygen/html/html/Andersen_8h_source.html +16 -16
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +7 -7
- package/SVF-doxygen/html/html/CFLBase_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/CFLGrammar_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGrammar_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/CFLGraph_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/CFLGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CFLVF_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/CHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +14 -14
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ConsG_8h_source.html +9 -9
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +9 -9
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +4 -6
- package/SVF-doxygen/html/html/DDAPass_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/DDAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +22 -22
- package/SVF-doxygen/html/html/DoubleFreeChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DoubleFreeChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +21 -21
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +7 -7
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +27 -28
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +65 -65
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ICFG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +23 -28
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +8 -8
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/MHP_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +12 -17
- package/SVF-doxygen/html/html/MTA_8h_source.html +3 -4
- package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/MemPartition_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +34 -34
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +7 -7
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +16 -15
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +53 -52
- package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +7 -8
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/Options_8cpp_source.html +52 -53
- package/SVF-doxygen/html/html/Options_8h_source.html +53 -54
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PTAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +33 -33
- package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +91 -95
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +31 -39
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +85 -92
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +20 -20
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +16 -16
- package/SVF-doxygen/html/html/PointsTo_8cpp.html +1 -0
- package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +51 -51
- package/SVF-doxygen/html/html/PointsTo_8h_source.html +38 -38
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SCC_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +11 -22
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +14 -17
- package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +21 -19
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +49 -62
- package/SVF-doxygen/html/html/SVFG_8h_source.html +45 -45
- package/SVF-doxygen/html/html/SVFIR2ItvExeState_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +10 -16
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +83 -83
- package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +19 -19
- package/SVF-doxygen/html/html/SVFType_8h.html +22 -22
- package/SVF-doxygen/html/html/SVFType_8h_source.html +76 -77
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +11 -11
- package/SVF-doxygen/html/html/SVFValue_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFValue_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SaberCondAllocator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +2 -3
- package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +69 -71
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +39 -39
- package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +49 -51
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +13 -13
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/TCT_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +17 -17
- package/SVF-doxygen/html/html/VFG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +33 -33
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +4 -4
- package/SVF-doxygen/html/html/WPAFSSolver_8h_source.html +11 -11
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +2 -2
- package/SVF-doxygen/html/html/WPASolver_8h_source.html +25 -25
- package/SVF-doxygen/html/html/Z3Expr_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/cfl_8cpp.html +1 -5
- package/SVF-doxygen/html/html/cfl_8cpp_source.html +1 -5
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +187 -188
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +104 -107
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +163 -164
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +47 -50
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +194 -195
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +45 -48
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +204 -205
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +35 -38
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +191 -192
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +29 -32
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +122 -123
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +158 -219
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias-members.html +137 -138
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +57 -49
- package/SVF-doxygen/html/html/classSVF_1_1CFLBase-members.html +138 -139
- package/SVF-doxygen/html/html/classSVF_1_1CFLBase.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraph.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CFLVF-members.html +140 -141
- package/SVF-doxygen/html/html/classSVF_1_1CFLVF.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +114 -114
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +17 -31
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +40 -40
- package/SVF-doxygen/html/html/classSVF_1_1DFPTData.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1DiffPTData.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +228 -229
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +62 -65
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +194 -195
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +55 -55
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +219 -220
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +335 -342
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +57 -57
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +20 -14
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +106 -92
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +36 -36
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +87 -87
- package/SVF-doxygen/html/html/classSVF_1_1MTA-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +27 -33
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder-members.html +41 -43
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +57 -80
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +54 -54
- package/SVF-doxygen/html/html/classSVF_1_1MemRegion.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +4 -3
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +170 -143
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MutableDiffPTData-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MutableDiffPTData.html +13 -15
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +17 -18
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +53 -79
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PTData.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData-members.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +174 -177
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData-members.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +99 -102
- package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData-members.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData.html +125 -127
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData-members.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +83 -86
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +122 -122
- package/SVF-doxygen/html/html/classSVF_1_1PersistentVersionedPTData-members.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1PersistentVersionedPTData.html +137 -140
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +56 -56
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo-members.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +183 -178
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator-members.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator.html +87 -65
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SCCDetection.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SCCDetection_1_1GNodeSCCInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFArgument-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFArgument.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFArrayType.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +13 -16
- package/SVF-doxygen/html/html/classSVF_1_1SVFBlackHoleValue-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFBlackHoleValue.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFCallInst-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFCallInst.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstant-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstant.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantData-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantData.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantFP-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantFP.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantInt-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantInt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantNullPtr-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFConstantNullPtr.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +5 -7
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunctionType.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +211 -236
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder-members.html +7 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +50 -138
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +82 -82
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobalValue-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobalValue.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +203 -215
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR2ItvExeState.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +79 -79
- package/SVF-doxygen/html/html/classSVF_1_1SVFInstruction-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFInstruction.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFIntergerType.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFMetadataAsValue-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFMetadataAsValue.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +0 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFOtherType.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFOtherValue-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFOtherValue.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFPointerType.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1SVFStructType.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFType.html +38 -38
- package/SVF-doxygen/html/html/classSVF_1_1SVFValue-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +4 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFVirtualCallInst-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFVirtualCallInst.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SaberCondAllocator.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +12 -14
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +42 -68
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector.html +108 -109
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html +50 -50
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +146 -146
- package/SVF-doxygen/html/html/classSVF_1_1StInfo-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +48 -61
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +178 -179
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +35 -38
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +42 -46
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +169 -170
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +29 -32
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +263 -264
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +112 -115
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +41 -41
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedPTData.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +76 -81
- package/SVF-doxygen/html/html/classSVF_1_1Z3Expr.html +2 -2
- package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
- package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/functions.html +1 -1
- package/SVF-doxygen/html/html/functions_0x7e.html +16 -16
- package/SVF-doxygen/html/html/functions_a.html +7 -7
- package/SVF-doxygen/html/html/functions_b.html +6 -6
- package/SVF-doxygen/html/html/functions_c.html +27 -27
- package/SVF-doxygen/html/html/functions_d.html +10 -11
- package/SVF-doxygen/html/html/functions_e.html +2 -2
- package/SVF-doxygen/html/html/functions_f.html +6 -6
- package/SVF-doxygen/html/html/functions_func.html +6 -6
- package/SVF-doxygen/html/html/functions_func_0x7e.html +16 -16
- package/SVF-doxygen/html/html/functions_func_b.html +6 -6
- package/SVF-doxygen/html/html/functions_func_c.html +27 -27
- package/SVF-doxygen/html/html/functions_func_d.html +10 -11
- package/SVF-doxygen/html/html/functions_func_e.html +2 -2
- package/SVF-doxygen/html/html/functions_func_f.html +5 -5
- package/SVF-doxygen/html/html/functions_func_g.html +22 -22
- package/SVF-doxygen/html/html/functions_func_h.html +3 -3
- package/SVF-doxygen/html/html/functions_func_i.html +2 -2
- package/SVF-doxygen/html/html/functions_func_o.html +3 -3
- package/SVF-doxygen/html/html/functions_func_p.html +5 -5
- package/SVF-doxygen/html/html/functions_func_r.html +5 -8
- package/SVF-doxygen/html/html/functions_func_s.html +5 -5
- package/SVF-doxygen/html/html/functions_func_t.html +1 -1
- package/SVF-doxygen/html/html/functions_func_u.html +23 -23
- package/SVF-doxygen/html/html/functions_g.html +25 -28
- package/SVF-doxygen/html/html/functions_h.html +3 -3
- package/SVF-doxygen/html/html/functions_i.html +5 -5
- package/SVF-doxygen/html/html/functions_m.html +1 -1
- package/SVF-doxygen/html/html/functions_o.html +13 -13
- package/SVF-doxygen/html/html/functions_p.html +19 -19
- package/SVF-doxygen/html/html/functions_r.html +11 -12
- package/SVF-doxygen/html/html/functions_s.html +32 -35
- package/SVF-doxygen/html/html/functions_t.html +12 -12
- package/SVF-doxygen/html/html/functions_type_t.html +1 -1
- package/SVF-doxygen/html/html/functions_u.html +26 -23
- package/SVF-doxygen/html/html/functions_v.html +6 -6
- package/SVF-doxygen/html/html/functions_vars.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_g.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_i.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_m.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_p.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_s.html +5 -8
- package/SVF-doxygen/html/html/functions_vars_t.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_u.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +3 -7
- package/SVF-doxygen/html/html/include_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/mta_8cpp.html +1 -1
- package/SVF-doxygen/html/html/mta_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +35 -35
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +2 -2
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +4 -4
- package/SVF-doxygen/html/html/saber_8cpp.html +1 -5
- package/SVF-doxygen/html/html/saber_8cpp_source.html +1 -5
- package/SVF-doxygen/html/html/search/all_0.js +1 -1
- package/SVF-doxygen/html/html/search/all_1.js +4 -4
- package/SVF-doxygen/html/html/search/all_10.js +15 -15
- package/SVF-doxygen/html/html/search/all_11.js +1 -2
- package/SVF-doxygen/html/html/search/all_12.js +19 -20
- package/SVF-doxygen/html/html/search/all_13.js +8 -8
- package/SVF-doxygen/html/html/search/all_14.js +13 -12
- package/SVF-doxygen/html/html/search/all_15.js +4 -4
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_19.js +16 -16
- package/SVF-doxygen/html/html/search/all_2.js +6 -6
- package/SVF-doxygen/html/html/search/all_3.js +14 -14
- package/SVF-doxygen/html/html/search/all_4.js +5 -5
- package/SVF-doxygen/html/html/search/all_5.js +2 -2
- package/SVF-doxygen/html/html/search/all_6.js +5 -5
- package/SVF-doxygen/html/html/search/all_7.js +11 -12
- package/SVF-doxygen/html/html/search/all_8.js +3 -3
- package/SVF-doxygen/html/html/search/all_9.js +3 -3
- package/SVF-doxygen/html/html/search/all_b.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +3 -3
- package/SVF-doxygen/html/html/search/all_d.js +3 -3
- package/SVF-doxygen/html/html/search/all_e.js +2 -2
- package/SVF-doxygen/html/html/search/all_f.js +5 -5
- package/SVF-doxygen/html/html/search/functions_0.js +4 -4
- package/SVF-doxygen/html/html/search/functions_1.js +6 -6
- package/SVF-doxygen/html/html/search/functions_10.js +1 -2
- package/SVF-doxygen/html/html/search/functions_11.js +10 -10
- package/SVF-doxygen/html/html/search/functions_12.js +1 -1
- package/SVF-doxygen/html/html/search/functions_13.js +12 -12
- package/SVF-doxygen/html/html/search/functions_17.js +16 -16
- package/SVF-doxygen/html/html/search/functions_2.js +14 -14
- package/SVF-doxygen/html/html/search/functions_3.js +5 -5
- package/SVF-doxygen/html/html/search/functions_4.js +2 -2
- package/SVF-doxygen/html/html/search/functions_5.js +4 -4
- package/SVF-doxygen/html/html/search/functions_6.js +11 -11
- package/SVF-doxygen/html/html/search/functions_7.js +3 -3
- package/SVF-doxygen/html/html/search/functions_8.js +2 -2
- package/SVF-doxygen/html/html/search/functions_d.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +3 -3
- package/SVF-doxygen/html/html/search/functions_f.js +5 -5
- package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
- package/SVF-doxygen/html/html/search/variables_0.js +1 -1
- package/SVF-doxygen/html/html/search/variables_10.js +2 -2
- package/SVF-doxygen/html/html/search/variables_12.js +5 -6
- package/SVF-doxygen/html/html/search/variables_13.js +3 -3
- package/SVF-doxygen/html/html/search/variables_14.js +1 -0
- package/SVF-doxygen/html/html/search/variables_6.js +1 -1
- package/SVF-doxygen/html/html/search/variables_7.js +0 -1
- package/SVF-doxygen/html/html/search/variables_9.js +1 -1
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01CFLGraph_01_5_01_4.html +14 -14
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1GenericGraphTraits_3_01SVF_1_1SVFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1Hash_3_01NodePair_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SparseBitVectorElement-members.html +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SparseBitVectorElement.html +47 -57
- 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_1PointsTo_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SparseBitVector_3_01N_01_4_01_4.html +5 -5
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01std_1_1vector_3_01T_01_4_01_4.html +3 -3
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +6 -7
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/tools_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp.html +1 -1
- package/SVF-doxygen/html/html/wpa_8cpp_source.html +1 -1
- package/build.sh +2 -2
- package/include/DDA/DDAPass.h +1 -1
- package/include/DDA/FlowDDA.h +1 -1
- package/include/Graphs/ICFG.h +1 -1
- package/include/Graphs/SVFG.h +3 -4
- package/include/Graphs/SVFGOPT.h +7 -7
- package/include/MSSA/MemSSA.h +2 -0
- package/include/MSSA/SVFGBuilder.h +5 -14
- package/include/MTA/MTA.h +2 -2
- package/include/MemoryModel/MutablePointsToDS.h +3 -3
- package/include/MemoryModel/PersistentPointsToCache.h +7 -8
- package/include/MemoryModel/PersistentPointsToDS.h +93 -93
- package/include/MemoryModel/PointerAnalysisImpl.h +17 -28
- package/include/MemoryModel/PointsTo.h +24 -24
- package/include/SABER/SrcSnkDDA.h +10 -13
- package/include/SVF-LLVM/LLVMLoopAnalysis.h +2 -1
- package/include/SVF-LLVM/LLVMModule.h +6 -6
- package/include/SVFIR/SVFIR.h +3 -5
- package/include/SVFIR/SVFType.h +6 -8
- package/include/SVFIR/SVFValue.h +3 -3
- package/include/Util/Options.h +0 -1
- package/include/Util/SparseBitVector.h +6 -14
- package/include/WPA/FlowSensitive.h +13 -20
- package/include/WPA/WPASolver.h +5 -9
- package/lib/DDA/DDAPass.cpp +4 -4
- package/lib/Graphs/CFLGraph.cpp +3 -0
- package/lib/Graphs/SVFG.cpp +1 -1
- package/lib/MSSA/MemSSA.cpp +5 -3
- package/lib/MSSA/SVFGBuilder.cpp +9 -27
- package/lib/MTA/MTA.cpp +4 -4
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +10 -10
- package/lib/MemoryModel/PointsTo.cpp +23 -19
- package/lib/SVF-LLVM/LLVMLoopAnalysis.cpp +3 -4
- package/lib/SVF-LLVM/LLVMModule.cpp +32 -21
- package/lib/SVFIR/SVFIR.cpp +1 -1
- package/lib/SVFIR/SymbolTableInfo.cpp +4 -15
- package/lib/Util/Options.cpp +0 -6
- package/lib/WPA/AndersenSFR.cpp +1 -1
- package/lib/WPA/FlowSensitive.cpp +1 -1
- package/package.json +1 -1
- package/tools/CFL/cfl.cpp +5 -4
- package/tools/DDA/dda.cpp +3 -2
- package/tools/Example/svf-ex.cpp +3 -2
- package/tools/MTA/mta.cpp +6 -4
- package/tools/SABER/saber.cpp +7 -5
- package/tools/WPA/wpa.cpp +3 -2
|
@@ -66,198 +66,194 @@ $(function() {
|
|
|
66
66
|
<div class="title">PersistentPointsToDS.h</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="PersistentPointsToDS_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">/*</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * PersistentPointsToDS.h</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * Authors: Mohamad Barbar</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * The implementation is based on</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Mohamad Barbar and Yulei Sui. Hash Consed Points-To Sets.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * 28th Static Analysis Symposium (SAS'21)</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> */</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#ifndef PERSISTENT_POINTSTO_H_</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#define PERSISTENT_POINTSTO_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "<a class="code" href="AbstractPointsToDS_8h.html">MemoryModel/AbstractPointsToDS.h</a>"</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "<a class="code" href="PersistentPointsToCache_8h.html">MemoryModel/PersistentPointsToCache.h</a>"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>"</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html"> 26</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html"> 28</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet, <span class="keyword">typename</span> VersionedKey, <span class="keyword">typename</span> VersionedKeySet></div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html"> 30</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html"> 34</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTData.html">PTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> K, <span class="keyword">typename</span> KS, <span class="keyword">typename</span> D, <span class="keyword">typename</span> DS, <span class="keyword">typename</span> VK, <span class="keyword">typename</span> VKS></div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a5a0dfa2e5e989bcb30b913f37e561c35"> 37</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aea8bb6da9d6d5a4ed65168aceee2f85a"> 38</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a><Key, KeySet, Data, DataSet>;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a8386ddd5a45bd490860685ca18543287"> 39</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a><Key, KeySet, Data, DataSet>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a6ca39340bb502c933c3dd6c1ab8f79c1"> 41</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentPTData.html#a6ca39340bb502c933c3dd6c1ab8f79c1">BasePTData</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a64864dcc7ec8a26244cdfbe8c25886a2"> 42</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentPTData.html#a64864dcc7ec8a26244cdfbe8c25886a2">PTDataTy</a>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f"> 44</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Key, PointsToID></a> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">KeyToIDMap</a>;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8"> 45</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Data, KeySet></a> <a class="code" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8">RevPtsMap</a>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a5b24a6efc462014ed8002cefee3c0e6e"> 48</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a5b24a6efc462014ed8002cefee3c0e6e">PersistentPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersBase)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  : BasePTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache) { }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a66a9367f0b965d18be8bb1247e1c2548"> 51</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a66a9367f0b965d18be8bb1247e1c2548">~PersistentPTData</a>() { }</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#abf836f1b063b869215c7e9b53b013d3f"> 53</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#abf836f1b063b869215c7e9b53b013d3f">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>.clear();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>.clear();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a34f8226202e1654d4e67916b21ec4d99"> 59</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet& <a class="code" href="classSVF_1_1PersistentPTData.html#a34f8226202e1654d4e67916b21ec4d99">getPts</a>(<span class="keyword">const</span> Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a916017f2cc924b10e72120d1d87afd34"> 65</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentPTData.html#a916017f2cc924b10e72120d1d87afd34">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[data];</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> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a8d53322eadc657ed88a8b724647070b2"> 71</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a8d53322eadc657ed88a8b724647070b2">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  DataSet srcPts;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  srcPts.set(element);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(srcPts);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</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> </div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a236c780af73ab909a66a922bc8645ea4"> 79</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a236c780af73ab909a66a922bc8645ea4">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[srcKey];</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</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"><a class="line" href="classSVF_1_1PersistentPTData.html#a9414aeb024e2c367b9777522aadd5d83"> 85</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a9414aeb024e2c367b9777522aadd5d83">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> DataSet& srcData)<span class="keyword"> override</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(srcData);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</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"><a class="line" href="classSVF_1_1PersistentPTData.html#afb2dd005d3d2ad01bdad4b7a1af5477d"> 91</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#afb2dd005d3d2ad01bdad4b7a1af5477d">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword"> </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> </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a10221452ea6ffed4ae51a9c6f9dc1e93"> 95</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a10221452ea6ffed4ae51a9c6f9dc1e93">clearPts</a>(<span class="keyword">const</span> Key &var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  DataSet toRemoveData;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  toRemoveData.set(element);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> toRemoveId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(toRemoveData);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> varId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var];</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> complementId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a86bf6959fb5587e350015d58d529af14">complementPts</a>(varId, toRemoveId);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">if</span> (varId != complementId)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var] = complementId;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[element], var);</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>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aff3437089686869faa772c44bca753b6"> 109</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aff3437089686869faa772c44bca753b6">clearFullPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0">clearRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a34f8226202e1654d4e67916b21ec4d99">getPts</a>(var), var);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var] = <a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">PersistentPointsToCache<DataSet>::emptyPointsToId</a>();</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"><a class="line" href="classSVF_1_1PersistentPTData.html#af8084d77fb666933fd0efe0df983074d"> 115</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#af8084d77fb666933fd0efe0df983074d">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aadba2724dfe3cb745d9e9d73b8c3de67"> 120</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentPTData.html#aadba2724dfe3cb745d9e9d73b8c3de67">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span> (liveOnly)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>)</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>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">else</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>  allPts = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab84d0806e87c982bf81ae309f28751e3">getAllPts</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> allPts;</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> </div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a174c3cac13c839863171621ea25e609f"> 140</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a174c3cac13c839863171621ea25e609f">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> *)</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="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a4e896ec87d07e5b75401de4367d67458"> 145</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a4e896ec87d07e5b75401de4367d67458">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</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>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersBase;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</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> <span class="keyword">private</span>:</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8"> 154</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(<span class="keyword">const</span> Key &dstKey, <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> dstId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[dstKey];</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> newDstId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a178b49cca2c22e874ff9e772cc4df72b">unionPts</a>(dstId, srcId);</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>  <span class="keywordtype">bool</span> changed = newDstId != dstId;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">if</span> (changed)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[dstKey] = newDstId;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="comment">// Reverse points-to only needs to be handled when dst's</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">// points-to set has changed (i.e., do it the first time only).</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</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="keyword">const</span> DataSet &srcPts = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(srcId);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Data &d : srcPts) <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(dstKey, <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[d]);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c"> 176</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(KeySet &revSet, <span class="keyword">const</span> Key &k)</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="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aee74719d33695e4da6fee5fc83f745d9">SVFUtil::removeKey</a>(k, revSet);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0"> 184</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0">clearRevPts</a>(<span class="keyword">const</span> DataSet &pts, <span class="keyword">const</span> Key &k)</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="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Data &d : pts) <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[d], k);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</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> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f"> 193</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>;</div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e"> 194</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>;</div><div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563"> 195</a></span>  RevPtsMap <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>;</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="l00199"></a><span class="lineno"> 199</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html"> 200</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDiffPTData.html">PersistentDiffPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1DiffPTData.html">DiffPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa110fddf7d0cedfb66fcd37bae2c962c"> 203</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa110fddf7d0cedfb66fcd37bae2c962c">BasePTData</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a3a2cf38f220a831c4334614b835b57c6"> 204</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DiffPTData.html">DiffPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a3a2cf38f220a831c4334614b835b57c6">BaseDiffPTData</a>;</div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa55e1c39fb0918c4f7f080a521f504f5"> 205</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa55e1c39fb0918c4f7f080a521f504f5">BasePersPTData</a>;</div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a778e8374e15bba331f1be99594970812"> 206</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a778e8374e15bba331f1be99594970812">PTDataTy</a>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a4e706309fe4bb40b4424251888363215"> 208</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">BasePersPTData::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a4e706309fe4bb40b4424251888363215">KeyToIDMap</a>;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac008ee5f7e4d286f9e76d85989358305"> 209</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8">BasePersPTData::RevPtsMap</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac008ee5f7e4d286f9e76d85989358305">RevPtsMap</a>;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a18f90b2f4e54b47c4d6f2d50886a4411"> 212</a></span>  <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a18f90b2f4e54b47c4d6f2d50886a4411">PersistentDiffPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersDiff)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  : BaseDiffPTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache), persPTData(cache, reversePT) { }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a311ada9c9a0376c71dae24841cc60b7a"> 215</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a311ada9c9a0376c71dae24841cc60b7a">~PersistentDiffPTData</a>() { }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a10504f854b1b390818f8ee12182d857c"> 217</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a10504f854b1b390818f8ee12182d857c">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  persPTData.clear();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  diffPtsMap.clear();</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  propaPtsMap.clear();</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"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a9982ecf42416756a0729a28e8713cfed"> 224</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#a9982ecf42416756a0729a28e8713cfed">getPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">return</span> persPTData.getPts(var);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a7a12f89c0de40dbcb5fe48219a7c121b"> 229</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a7a12f89c0de40dbcb5fe48219a7c121b">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentDiffPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">return</span> persPTData.getRevPts(data);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a9f748619f67f3ff9c4c4a429e6614989"> 235</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a9f748619f67f3ff9c4c4a429e6614989">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">return</span> persPTData.addPts(dstKey, element);</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> </div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a9cc43f58ea3be1b7fbc7df7cfe965c3c"> 240</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a9cc43f58ea3be1b7fbc7df7cfe965c3c">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcKey);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa9aac7ff120abf87e7edfe233691f00f"> 245</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa9aac7ff120abf87e7edfe233691f00f">unionPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcDataSet);</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> </div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ab01a663b665d629c15f3531f18b5abc2"> 250</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ab01a663b665d629c15f3531f18b5abc2">clearPts</a>(<span class="keyword">const</span> Key &var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">return</span> persPTData.clearPts(var, element);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ae4b558e119c7e3fae25a0b4509422c87"> 255</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ae4b558e119c7e3fae25a0b4509422c87">clearFullPts</a>(<span class="keyword">const</span> Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordflow">return</span> persPTData.clearFullPts(var);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#add8c649853678b6c7acfa4217f1b7ee0"> 260</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#add8c649853678b6c7acfa4217f1b7ee0">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac7caee8468f12e87a70837a8f2e9685c"> 265</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac7caee8468f12e87a70837a8f2e9685c">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="comment">// TODO.</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a76ae2ef87bc32c2f6466e7bc2dfad726"> 270</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#a76ae2ef87bc32c2f6466e7bc2dfad726">getDiffPts</a>(Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = diffPtsMap[var];</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</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> </div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ae42379dbabbd66dfd91e305673788ed3"> 276</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ae42379dbabbd66dfd91e305673788ed3">computeDiffPts</a>(Key &var, <span class="keyword">const</span> DataSet &all)<span class="keyword"> override</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> propaId = propaPtsMap[var];</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> allId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(all);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="comment">// Diff is made up of the entire points-to set minus what has been propagated.</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> diffId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a86bf6959fb5587e350015d58d529af14">complementPts</a>(allId, propaId);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  diffPtsMap[var] = diffId;</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="comment">// We've now propagated the entire thing.</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  propaPtsMap[var] = allId;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// Whether diff is empty or not; just need to check against the ID since it</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">// is the only empty set.</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> diffId != <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">emptyPointsToId</a>();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#adb2c450f2c93fbf630d91b8c2697fa06"> 292</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#adb2c450f2c93fbf630d91b8c2697fa06">updatePropaPtsMap</a>(Key &src, Key &dst)<span class="keyword"> override</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> dstId = propaPtsMap[dst];</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = propaPtsMap[src];</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  propaPtsMap[dst] = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a17d33558208c19019e541ee167009494">intersectPts</a>(dstId, srcId);</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> </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa00e0bfaf2d46f2aa83a37c7c9514edb"> 299</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa00e0bfaf2d46f2aa83a37c7c9514edb">clearPropaPts</a>(Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  propaPtsMap[var] = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">emptyPointsToId</a>();</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"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a3bad0126e25b0a7134e8ef25869bd40e"> 304</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a3bad0126e25b0a7134e8ef25869bd40e">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> persPTData.getAllPts(liveOnly);</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="l00311"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#afb53f0b47cdad94379c3a4895980be9c"> 311</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#afb53f0b47cdad94379c3a4895980be9c">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html">PersistentDiffPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a4f4b1869210228e9d1b4f3900b41bb88"> 316</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a4f4b1869210228e9d1b4f3900b41bb88">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersDiff;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a444bc59754b4c365327b7ef44baadcd2"> 323</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#a444bc59754b4c365327b7ef44baadcd2">ptCache</a>;</div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a0d6620a7078bd60d16256ac48af58db9"> 325</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a0d6620a7078bd60d16256ac48af58db9">persPTData</a>;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac54339952e2734a6affdaa543fb3ed22"> 327</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac54339952e2734a6affdaa543fb3ed22">diffPtsMap</a>;</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#abffb5c9cfe1e306ce524ef1dc5ff18ad"> 329</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentDiffPTData.html#abffb5c9cfe1e306ce524ef1dc5ff18ad">propaPtsMap</a>;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> };</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a54c206686c17101a0233fbbd3836c05c"> 337</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a54c206686c17101a0233fbbd3836c05c">BasePTData</a>;</div><div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#abb11d9bd24cb587bba6f762ab49b07c8"> 338</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#abb11d9bd24cb587bba6f762ab49b07c8">PTDataTy</a>;</div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af9facbe8f694b8447bb6ebe48b95ad17"> 339</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#af9facbe8f694b8447bb6ebe48b95ad17">BaseDFPTData</a>;</div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#afccad3b3163f25cc058334083f90041d"> 340</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#afccad3b3163f25cc058334083f90041d">BasePersPTData</a>;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a76d8a4f907269e9980f39c531806e96b"> 342</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1DFPTData.html#a298a5ef6cfffbe10b9d05af0ad12e786">BaseDFPTData::LocID</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a76d8a4f907269e9980f39c531806e96b">LocID</a>;</div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aee8871b4895d38bccb9078ad540f9f0f"> 343</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">BasePersPTData::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#aee8871b4895d38bccb9078ad540f9f0f">KeyToIDMap</a>;</div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a0d0318fa192eac88a4307112e30e9d90"> 344</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<LocID, KeyToIDMap></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a0d0318fa192eac88a4307112e30e9d90">DFKeyToIDMap</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"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a85e0aec789ea945bd4cfa9e29189d1b4"> 346</a></span>  <a class="code" href="classSVF_1_1PersistentDFPTData.html#a85e0aec789ea945bd4cfa9e29189d1b4">PersistentDFPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersDataFlow)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  : BaseDFPTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache), persPTData(cache, reversePT) { }</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div><div class="line"><a name="l00349"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad9ccba048d0c749d1c2cafc517f78181"> 349</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad9ccba048d0c749d1c2cafc517f78181">~PersistentDFPTData</a>() { }</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab070b1baa6a01800edac36dc075107fd"> 351</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ab070b1baa6a01800edac36dc075107fd">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  dfInPtsMap.clear();</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  dfOutPtsMap.clear();</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  persPTData.clear();</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"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a5f6a01d0bb40a718bc14f2cc1bb98a13"> 358</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#a5f6a01d0bb40a718bc14f2cc1bb98a13">getPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">return</span> persPTData.getPts(var);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a50c3d871edb13ac5b3f0d625deb6449a"> 363</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentDFPTData.html#a50c3d871edb13ac5b3f0d625deb6449a">getRevPts</a>(<span class="keyword">const</span> Data&)<span class="keyword"> override</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"PersistentDFPTData::getRevPts: not supported yet!"</span>);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  abort();</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a0b757b12ace04b7b7d1e081ad1b742cf"> 369</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a0b757b12ace04b7b7d1e081ad1b742cf">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcKey);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a780dc63003f8a0a4c66c1548138fdd86"> 374</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a780dc63003f8a0a4c66c1548138fdd86">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcDataSet);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a95df7d565ba8e990b61b1c932c8d4273"> 379</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a95df7d565ba8e990b61b1c932c8d4273">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">return</span> persPTData.addPts(dstKey, element);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af64c6a2c0a1b2044fac56a69e9db7cff"> 384</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#af64c6a2c0a1b2044fac56a69e9db7cff">clearPts</a>(<span class="keyword">const</span> Key& var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  persPTData.clearPts(var, element);</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> </div><div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#afa828c0db9c030584e379e86cf0a25a9"> 389</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#afa828c0db9c030584e379e86cf0a25a9">clearFullPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  persPTData.clearFullPts(var);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aac817d88beae87fcc961a2df7904e61c"> 394</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#aac817d88beae87fcc961a2df7904e61c">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a1d168145358e0f69eca023dd9b4363ea"> 399</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a1d168145358e0f69eca023dd9b4363ea">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  persPTData.dumpPTData();</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a6e7d072fd2d420870bb959b68c200137"> 404</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a6e7d072fd2d420870bb959b68c200137">hasDFInSet</a>(LocID loc)<span class="keyword"> const override</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">return</span> dfInPtsMap.find(loc) != dfInPtsMap.end();</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a67c4dec1150bdd8458046696578e5069"> 409</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a67c4dec1150bdd8458046696578e5069">hasDFOutSet</a>(LocID loc)<span class="keyword"> const override</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">return</span> dfOutPtsMap.find(loc) != dfOutPtsMap.end();</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  }</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab490fd81739f2bd6dddabd5ce5beac3b"> 414</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ab490fd81739f2bd6dddabd5ce5beac3b">hasDFInSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> const override</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keyword">typename</span> DFKeyToIDMap::const_iterator foundInKeyToId = dfInPtsMap.find(loc);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">if</span> (foundInKeyToId == dfInPtsMap.end()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keyword">const</span> KeyToIDMap &inKeyToId = foundInKeyToId->second;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> (inKeyToId.find(var) != inKeyToId.end());</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ace47d00f778bc4a714fc4f9d0cbd063c"> 422</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ace47d00f778bc4a714fc4f9d0cbd063c">hasDFOutSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> const override</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keyword">typename</span> DFKeyToIDMap::const_iterator foundOutKeyToId = dfOutPtsMap.find(loc);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">if</span> (foundOutKeyToId == dfOutPtsMap.end()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keyword">const</span> KeyToIDMap &outKeyToId = foundOutKeyToId->second;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> (outKeyToId.find(var) != outKeyToId.end());</div><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> </div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a26ca6565c4766e3d6ea6bf435ae910a3"> 430</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#a26ca6565c4766e3d6ea6bf435ae910a3">getDFInPtsSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = dfInPtsMap[loc][var];</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><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> </div><div class="line"><a name="l00436"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aea89a705aed7e02ddbf73f861506536e"> 436</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#aea89a705aed7e02ddbf73f861506536e">getDFOutPtsSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = dfOutPtsMap[loc][var];</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a9b61c0557c6b1460af2328709011b32e"> 442</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a9b61c0557c6b1460af2328709011b32e">updateDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFInPtIdRef(dstLoc, dstVar), getDFInPtIdRef(srcLoc, srcVar));</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> </div><div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a9e2dcff79d55b92bc84ec2bb42d851ac"> 447</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a9e2dcff79d55b92bc84ec2bb42d851ac">updateAllDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">return</span> updateDFInFromIn(srcLoc, srcVar, dstLoc, dstVar);</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> </div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#abfacbe37d9e0b5f05eabec66c60c2e2b"> 452</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#abfacbe37d9e0b5f05eabec66c60c2e2b">updateDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFInPtIdRef(dstLoc, dstVar), getDFOutPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a67a72d34b62884dee72e0b48b07a7e9f"> 457</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a67a72d34b62884dee72e0b48b07a7e9f">updateAllDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">return</span> updateDFInFromOut(srcLoc, srcVar, dstLoc, dstVar);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a81e6d2d313d7f23fcc2a3d0f5344317f"> 462</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a81e6d2d313d7f23fcc2a3d0f5344317f">updateDFOutFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFOutPtIdRef(dstLoc, dstVar), getDFInPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad341c691c11bbdeaa13cfe23919ed070"> 467</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad341c691c11bbdeaa13cfe23919ed070">updateAllDFOutFromIn</a>(LocID loc, <span class="keyword">const</span> Key &singleton, <span class="keywordtype">bool</span> strongUpdates)<span class="keyword"> override</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">if</span> (this->hasDFInSet(loc))</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="keyword">const</span> KeyToIDMap &inKeyToId = dfInPtsMap[loc];</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : inKeyToId)</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>  <span class="keyword">const</span> Key var = ki.first;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">if</span> (strongUpdates && var == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordflow">if</span> (updateDFOutFromIn(loc, var, loc, var)) changed = <span class="keyword">true</span>;</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>  }</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">return</span> changed;</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> </div><div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad7a4b3c68c4b8b70268ee7c919c624d5"> 486</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad7a4b3c68c4b8b70268ee7c919c624d5">clearAllDFOutUpdatedVar</a>(LocID)<span class="keyword"> override</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keyword"> </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="l00491"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aa9d13ece84d5f519031b4f3cdb429d61"> 491</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#aa9d13ece84d5f519031b4f3cdb429d61">updateTLVPts</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">return</span> unionPtsThroughIds(persPTData.ptsMap[dstVar], getDFInPtIdRef(srcLoc, srcVar));</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> </div><div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a6761733754abf061e92125988a684fa3"> 496</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a6761733754abf061e92125988a684fa3">updateATVPts</a>(<span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFOutPtIdRef(dstLoc, dstVar), persPTData.ptsMap[srcVar]);</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> </div><div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a98f84bffeba6bd7dc140f1d5b63ff368"> 501</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a98f84bffeba6bd7dc140f1d5b63ff368">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts = persPTData.getAllPts(liveOnly);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> DFKeyToIDMap::value_type &lki : dfInPtsMap)</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">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : lki.second)</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>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  }</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="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> DFKeyToIDMap::value_type &lki : dfOutPtsMap)</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>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : lki.second)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</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>  }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="keywordflow">if</span> (!liveOnly)</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="comment">// Subtract 1 from each counted points-to set because the live points-to</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="comment">// sets have already been inserted and accounted for how often they occur.</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="comment">// They will each occur one more time in the cache.</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">// In essence, we want the ptCache.getAllPts() to just add the unused, non-GC'd</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="comment">// points-to sets to allPts.</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned>::value_type</a> pto : allPts) pto.second -= 1;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab84d0806e87c982bf81ae309f28751e3">getAllPts</a>());</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  }</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">return</span> allPts;</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> </div><div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad374e8e6ddd5c397bd5ab6cf9b259968"> 536</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad374e8e6ddd5c397bd5ab6cf9b259968">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData<Key, KeySet, Data, DataSet></a> *)</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="keywordflow">return</span> <span class="keyword">true</span>;</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> </div><div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a575a441ddbe233d34937792b66d2b39c"> 541</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a575a441ddbe233d34937792b66d2b39c">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> *ptd)</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> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersDataFlow</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  || ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersIncDataFlow;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a2cb37d0403e1b34316c9c24a0d6ab66c"> 549</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a2cb37d0403e1b34316c9c24a0d6ab66c">unionPtsThroughIds</a>(<a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &dst, <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &src)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> oldDst = dst;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  dst = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a178b49cca2c22e874ff9e772cc4df72b">unionPts</a>(dst, src);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordflow">return</span> oldDst != dst;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#afc28b40eea7bad5276bbab30749d598b"> 556</a></span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#afc28b40eea7bad5276bbab30749d598b">getDFInPtIdRef</a>(LocID loc, <span class="keyword">const</span> Key &var)</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">return</span> dfInPtsMap[loc][var];</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab13b3a484a5ac22c47391f1b2eaa58a1"> 561</a></span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#ab13b3a484a5ac22c47391f1b2eaa58a1">getDFOutPtIdRef</a>(LocID loc, <span class="keyword">const</span> Key &var)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keywordflow">return</span> dfOutPtsMap[loc][var];</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00567"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af86313e37c5177e45456f813b9b46a4f"> 567</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#af86313e37c5177e45456f813b9b46a4f">ptCache</a>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div><div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a349c231f59ea554059a1891f1a530820"> 570</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a349c231f59ea554059a1891f1a530820">persPTData</a>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div><div class="line"><a name="l00573"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a6b892b707524127928e269f0f0bbe868"> 573</a></span>  DFKeyToIDMap <a class="code" href="classSVF_1_1PersistentDFPTData.html#a6b892b707524127928e269f0f0bbe868">dfInPtsMap</a>;</div><div class="line"><a name="l00575"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad77d7ccad393c995813f8c433c249dfc"> 575</a></span>  DFKeyToIDMap <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad77d7ccad393c995813f8c433c249dfc">dfOutPtsMap</a>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> };</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00583"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a7751d9831519f8021626630dce499b1a"> 583</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a7751d9831519f8021626630dce499b1a">BasePTData</a>;</div><div class="line"><a name="l00584"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#acea7eb9ee0c1ee36906d50bce584b56a"> 584</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#acea7eb9ee0c1ee36906d50bce584b56a">BasePersPTData</a>;</div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ae56633d34e5fb4499c82d422646a91f0"> 585</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ae56633d34e5fb4499c82d422646a91f0">BaseDFPTData</a>;</div><div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#abce6fa91fed789ef25146440ee10872b"> 586</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#abce6fa91fed789ef25146440ee10872b">BasePersDFPTData</a>;</div><div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a440e0e1e1e449d5514dbc3f8a0da90d7"> 587</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a440e0e1e1e449d5514dbc3f8a0da90d7">PTDataTy</a>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div><div class="line"><a name="l00589"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a77bdc80a999296bcfa8d9f1f92c933d1"> 589</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1DFPTData.html#a298a5ef6cfffbe10b9d05af0ad12e786">BaseDFPTData::LocID</a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a77bdc80a999296bcfa8d9f1f92c933d1">LocID</a>;</div><div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#abad78c2ef84371b693dca206ebbb63ab"> 590</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<LocID, KeySet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#abad78c2ef84371b693dca206ebbb63ab">UpdatedVarMap</a>;</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">public</span>:</div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a495fede1f68c53956df3c033ef349940"> 594</a></span>  <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a495fede1f68c53956df3c033ef349940">PersistentIncDFPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848a3f0b959f73825d56c2aebcb699f3a08a">BasePTData::PersIncDataFlow</a>)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  : BasePersDFPTData(cache, reversePT, ty) { }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div><div class="line"><a name="l00597"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aea074e213475c4dc632f8d21e8388868"> 597</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aea074e213475c4dc632f8d21e8388868">~PersistentIncDFPTData</a>() { }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a5b015e6801e4320e45e7942f9db82a42"> 599</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a5b015e6801e4320e45e7942f9db82a42">updateDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar)</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  && this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  {</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">return</span> <span class="keyword">true</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> </div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div><div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a9191992b978b643f2d51633b2e330ec6"> 611</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a9191992b978b643f2d51633b2e330ec6">updateDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">if</span> (varHasNewDFOutPts(srcLoc, srcVar)</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  && this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFOutPtIdRef(srcLoc, srcVar)))</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>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  }</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> </div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  }</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div><div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a6a26ddacfd726c7078ae560a6b50ad6b"> 623</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a6a26ddacfd726c7078ae560a6b50ad6b">updateDFOutFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar))</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  removeVarFromDFInUpdatedSet(srcLoc, srcVar);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFOutPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  setVarDFOutSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</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> </div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  }</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> </div><div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a218ebd39a42b5de8910b98bef9d04f7d"> 638</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a218ebd39a42b5de8910b98bef9d04f7d">updateAllDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFOutPtIdRef(srcLoc, srcVar)))</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>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  }</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span> </div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  }</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a2259da9defa195350b3f70cd16c3f2ec"> 649</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a2259da9defa195350b3f70cd16c3f2ec">updateAllDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</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>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">return</span> <span class="keyword">true</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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</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"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a6a59e2297b72cc30553db5e45da70f46"> 660</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a6a59e2297b72cc30553db5e45da70f46">updateAllDFOutFromIn</a>(LocID loc, <span class="keyword">const</span> Key& singleton, <span class="keywordtype">bool</span> strongUpdates)<span class="keyword"> override</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">if</span> (this->hasDFInSet(loc))</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keyword">const</span> KeySet vars = getDFInUpdatedVar(loc);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Key &var : vars)</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  {</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">if</span> (strongUpdates && var == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordflow">if</span> (updateDFOutFromIn(loc, var, loc, var)) changed = <span class="keyword">true</span>;</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>  }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div><div class="line"><a name="l00678"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ae4732dd1897883fafa98454b46134bfb"> 678</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ae4732dd1897883fafa98454b46134bfb">updateTLVPts</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar))</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>  removeVarFromDFInUpdatedSet(srcLoc, srcVar);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">return</span> this->unionPtsThroughIds(this->persPTData.ptsMap[dstVar], this->getDFInPtIdRef(srcLoc, srcVar));</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> </div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">return</span> <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"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a002e6d234d0ad0c74a0976046e440f71"> 689</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a002e6d234d0ad0c74a0976046e440f71">updateATVPts</a>(<span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFOutPtIdRef(dstLoc, dstVar), this->persPTData.ptsMap[srcVar]))</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>  setVarDFOutSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> </div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</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> </div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a815a7c54c1533f16c3efd0796044afc2"> 700</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a815a7c54c1533f16c3efd0796044afc2">clearAllDFOutUpdatedVar</a>(LocID loc)<span class="keyword"> override</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordflow">if</span> (this->hasDFOutSet(loc))</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="keyword">const</span> KeySet vars = getDFOutUpdatedVar(loc);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Key &var : vars)</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  {</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  removeVarFromDFOutUpdatedSet(loc, var);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  }</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> </div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a5e8036d18088ed272ab052b5cd6ef1ce"> 712</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a5e8036d18088ed272ab052b5cd6ef1ce">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  outUpdatedVarMap.clear();</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  inUpdatedVarMap.clear();</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  BasePersDFPTData::clear();</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  }</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a656434f7b67aabf25f6dba400d95f2bb"> 721</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a656434f7b67aabf25f6dba400d95f2bb">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</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> </div><div class="line"><a name="l00726"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a47c2fbf8b959aae3166b9757b12880a7"> 726</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a47c2fbf8b959aae3166b9757b12880a7">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> *ptd)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  {</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848a3f0b959f73825d56c2aebcb699f3a08a">BasePTData::PersIncDataFlow</a>;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> setVarDFInSetUpdated(LocID loc, <span class="keyword">const</span> Key& var)</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(var, inUpdatedVarMap[loc]);</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> </div><div class="line"><a name="l00743"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ad449df82589efb4c40affb5fdc46f479"> 743</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ad449df82589efb4c40affb5fdc46f479">removeVarFromDFInUpdatedSet</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = inUpdatedVarMap.find(loc);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">if</span> (it != inUpdatedVarMap.end()) it->second.erase(var);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  }</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div><div class="line"><a name="l00750"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a56764f78042a2a9229d3b76861b54952"> 750</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a56764f78042a2a9229d3b76861b54952">varHasNewDFInPts</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  {</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = inUpdatedVarMap.find(loc);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span> (it != inUpdatedVarMap.end()) <span class="keywordflow">return</span> it->second.find(var) != it->second.end();</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="keywordflow">return</span> <span class="keyword">false</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> </div><div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a1bd459f50c328974294930698fc61b8e"> 758</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a1bd459f50c328974294930698fc61b8e">getDFInUpdatedVar</a>(LocID loc)</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  {</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">return</span> inUpdatedVarMap[loc];</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  }</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span> </div><div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aa9f6b38595cabbb583c52217188457e8"> 767</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aa9f6b38595cabbb583c52217188457e8">setVarDFOutSetUpdated</a>(LocID loc, <span class="keyword">const</span> Key& var)</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(var, outUpdatedVarMap[loc]);</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  }</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span> </div><div class="line"><a name="l00773"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ad1a2cd17519912b1d7571eeddcdc0060"> 773</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ad1a2cd17519912b1d7571eeddcdc0060">removeVarFromDFOutUpdatedSet</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = outUpdatedVarMap.find(loc);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">if</span> (it != outUpdatedVarMap.end()) it->second.erase(var);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  }</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span> </div><div class="line"><a name="l00780"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ae44f71f2ff837fbdf9b6e77f609c0c53"> 780</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ae44f71f2ff837fbdf9b6e77f609c0c53">varHasNewDFOutPts</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  {</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = outUpdatedVarMap.find(loc);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">if</span> (it != outUpdatedVarMap.end()) <span class="keywordflow">return</span> it->second.find(var) != it->second.end();</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  }</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div><div class="line"><a name="l00788"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aa50d20f82143fd56cbe468b29bf9e11e"> 788</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aa50d20f82143fd56cbe468b29bf9e11e">getDFOutUpdatedVar</a>(LocID loc)</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="keywordflow">return</span> outUpdatedVarMap[loc];</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  }</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> </div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span> </div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00796"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0"> 796</a></span>  UpdatedVarMap <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0">outUpdatedVarMap</a>;</div><div class="line"><a name="l00797"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a106391cd8eefab1740b54cd9bbacccad"> 797</a></span>  UpdatedVarMap <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a106391cd8eefab1740b54cd9bbacccad">inUpdatedVarMap</a>;</div><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> </div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet, <span class="keyword">typename</span> VersionedKey, <span class="keyword">typename</span> VersionedKeySet></div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1VersionedPTData.html">VersionedPTData</a><Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span> {</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00808"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ad4586331863d67e78c54d919694b58db"> 808</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ad4586331863d67e78c54d919694b58db">BasePTData</a>;</div><div class="line"><a name="l00809"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ab71b82478d74f1a20ce3de479f2d8d5c"> 809</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VersionedPTData.html">VersionedPTData<Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ab71b82478d74f1a20ce3de479f2d8d5c">BaseVersionedPTData</a>;</div><div class="line"><a name="l00810"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a6051aa255081543388a8f9077012834c"> 810</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a6051aa255081543388a8f9077012834c">PTDataTy</a>;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> </div><div class="line"><a name="l00812"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a1927ccf9bb74b698f540f683e7f0d0f2"> 812</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">PersistentPTData<Key, KeySet, Data, DataSet>::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a1927ccf9bb74b698f540f683e7f0d0f2">KeyToIDMap</a>;</div><div class="line"><a name="l00813"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a2ee473a1654b7d134a602268a2b70248"> 813</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<VersionedKey, VersionedKeySet, Data, DataSet>::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a2ee473a1654b7d134a602268a2b70248">VersionedKeyToIDMap</a>;</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div><div class="line"><a name="l00815"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a5cecb78af456e2241ff8554441b48d61"> 815</a></span>  <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a5cecb78af456e2241ff8554441b48d61">PersistentVersionedPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersVersioned)</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  : BaseVersionedPTData(reversePT, ty), tlPTData(cache, reversePT), atPTData(cache, reversePT) { }</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span> </div><div class="line"><a name="l00818"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a2252fcbc06243787b6854d826373da1d"> 818</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a2252fcbc06243787b6854d826373da1d">~PersistentVersionedPTData</a>() { }</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span> </div><div class="line"><a name="l00820"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ac563829c0d6d091c905bfe16580ceb47"> 820</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ac563829c0d6d091c905bfe16580ceb47">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  tlPTData.clear();</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  atPTData.clear();</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</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"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#afe80884fa8227e50f28631e20aa6fdf6"> 826</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentVersionedPTData.html#afe80884fa8227e50f28631e20aa6fdf6">getPts</a>(<span class="keyword">const</span> Key& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keywordflow">return</span> tlPTData.getPts(vk);</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  }</div><div class="line"><a name="l00830"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a9b81d20e54d08e36edbff43549b1e820"> 830</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a9b81d20e54d08e36edbff43549b1e820">getPts</a>(<span class="keyword">const</span> VersionedKey& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">return</span> atPTData.getPts(vk);</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> </div><div class="line"><a name="l00835"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#aafa09ff01060e43f08278963179eec30"> 835</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#aafa09ff01060e43f08278963179eec30">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentVersionedPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">return</span> tlPTData.getRevPts(data);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  }</div><div class="line"><a name="l00840"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a2adcebb6cf561eb00e3e05d486c86a9c"> 840</a></span>  <span class="keyword">virtual</span> <span class="keyword">const</span> VersionedKeySet& <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a2adcebb6cf561eb00e3e05d486c86a9c">getVersionedKeyRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentVersionedPTData::getVersionedKeyRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">return</span> atPTData.getRevPts(data);</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> </div><div class="line"><a name="l00846"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a7f3730473af9218bea520ec0498fb4ac"> 846</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a7f3730473af9218bea520ec0498fb4ac">addPts</a>(<span class="keyword">const</span> Key& k, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="keywordflow">return</span> tlPTData.addPts(k, element);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  }</div><div class="line"><a name="l00850"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ae4877cf4db5b1da5e7d05fe65ae8ed32"> 850</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ae4877cf4db5b1da5e7d05fe65ae8ed32">addPts</a>(<span class="keyword">const</span> VersionedKey& vk, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">return</span> atPTData.addPts(vk, element);</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  }</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span> </div><div class="line"><a name="l00855"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#afe1f57d265c0910ec26567ce850b8421"> 855</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#afe1f57d265c0910ec26567ce850b8421">unionPts</a>(<span class="keyword">const</span> Key& dstVar, <span class="keyword">const</span> Key& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">return</span> tlPTData.unionPts(dstVar, srcVar);</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</div><div class="line"><a name="l00859"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ab0299bcfee10af8b6ea59444c4d0299d"> 859</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ab0299bcfee10af8b6ea59444c4d0299d">unionPts</a>(<span class="keyword">const</span> VersionedKey& dstVar, <span class="keyword">const</span> VersionedKey& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="keywordflow">return</span> atPTData.unionPts(dstVar, srcVar);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  }</div><div class="line"><a name="l00863"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a8ba8e547bf572cd7403cb4fe52c19908"> 863</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a8ba8e547bf572cd7403cb4fe52c19908">unionPts</a>(<span class="keyword">const</span> VersionedKey& dstVar, <span class="keyword">const</span> Key& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keywordflow">return</span> atPTData.unionPtsFromId(dstVar, tlPTData.ptsMap[srcVar]);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  }</div><div class="line"><a name="l00867"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a83b7e86c11b03889d70b4dff46138987"> 867</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a83b7e86c11b03889d70b4dff46138987">unionPts</a>(<span class="keyword">const</span> Key& dstVar, <span class="keyword">const</span> VersionedKey& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordflow">return</span> tlPTData.unionPtsFromId(dstVar, atPTData.ptsMap[srcVar]);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  }</div><div class="line"><a name="l00871"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a00151507a86b71f99e43fa87b59d65bb"> 871</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a00151507a86b71f99e43fa87b59d65bb">unionPts</a>(<span class="keyword">const</span> Key &dstVar, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keywordflow">return</span> tlPTData.unionPts(dstVar, srcDataSet);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  }</div><div class="line"><a name="l00875"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ac4b8dc40514b50a77565a385b9a13ca5"> 875</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ac4b8dc40514b50a77565a385b9a13ca5">unionPts</a>(<span class="keyword">const</span> VersionedKey &dstVar, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">return</span> atPTData.unionPts(dstVar, srcDataSet);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  }</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span> </div><div class="line"><a name="l00880"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a9f5bb9d2020973660268c4e5ac98cb61"> 880</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a9f5bb9d2020973660268c4e5ac98cb61">clearPts</a>(<span class="keyword">const</span> Key& k, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  tlPTData.clearPts(k, element);</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div><div class="line"><a name="l00884"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#afe724603022a8fed7469f9ecd633febc"> 884</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#afe724603022a8fed7469f9ecd633febc">clearPts</a>(<span class="keyword">const</span> VersionedKey& vk, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  atPTData.clearPts(vk, element);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</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"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a5c31a5faad444bd19005d06ba28d0185"> 889</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a5c31a5faad444bd19005d06ba28d0185">clearFullPts</a>(<span class="keyword">const</span> Key& k)<span class="keyword"> override</span></div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  tlPTData.clearFullPts(k);</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  }</div><div class="line"><a name="l00893"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a78f2b0ee440ed5b358928ee775e95564"> 893</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a78f2b0ee440ed5b358928ee775e95564">clearFullPts</a>(<span class="keyword">const</span> VersionedKey& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  atPTData.clearFullPts(vk);</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"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a0b4feff5bc406088216d9e45941fe3ef"> 898</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a0b4feff5bc406088216d9e45941fe3ef">remapAllPts</a>(<span class="keywordtype">void</span>)<span class="keyword"> override</span></div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="comment">// tlPTData and atPTData use the same cache.</span></div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  tlPTData.remapAllPts();</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  }</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> </div><div class="line"><a name="l00904"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a6c9ad3635f73b805289cc1f14cdcf09a"> 904</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a6c9ad3635f73b805289cc1f14cdcf09a">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="comment">// Explicitly pass in true because if we call it with false,</span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="comment">// we will double up on the cache, since it is shared with atPTData.</span></div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="comment">// if liveOnly == false, we will handle it in the if below.</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts = tlPTData.getAllPts(<span class="keyword">true</span>);</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, atPTData.getAllPts(<span class="keyword">true</span>));</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span> </div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">if</span> (!liveOnly)</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>  <span class="comment">// Subtract 1 from each counted points-to set because the live points-to</span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="comment">// sets have already been inserted and accounted for how often they occur.</span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <span class="comment">// They will each occur one more time in the cache.</span></div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="comment">// In essence, we want the ptCache.getAllPts() to just add the unused, non-GC'd</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="comment">// points-to sets to allPts.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned>::value_type</a> &pto : allPts) pto.second -= 1;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, tlPTData.ptCache.getAllPts());</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  }</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> </div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  <span class="keywordflow">return</span> allPts;</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  }</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span> </div><div class="line"><a name="l00926"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a364fc243fe230342b209bb0c3a7d0966"> 926</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a364fc243fe230342b209bb0c3a7d0966">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"== Top-level points-to information\n"</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  tlPTData.dumpPTData();</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"== Address-taken points-to information\n"</span>;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  atPTData.dumpPTData();</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  }</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span> </div><div class="line"><a name="l00936"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a28a8bf95351e295e65360bf16241a5da"> 936</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a28a8bf95351e295e65360bf16241a5da">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData<Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></a> *)</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  {</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  }</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span> </div><div class="line"><a name="l00941"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a1f85475cb6690bb1caa003c5a3aec92f"> 941</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a1f85475cb6690bb1caa003c5a3aec92f">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  {</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersVersioned;</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  }</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span> </div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00949"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a29104a2d53d94805e142f778d3d21ad5"> 949</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a29104a2d53d94805e142f778d3d21ad5">tlPTData</a>;</div><div class="line"><a name="l00951"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a61b44f6d63cca013da2b278f47298473"> 951</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<VersionedKey, VersionedKeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a61b44f6d63cca013da2b278f47298473">atPTData</a>;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span> };</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span> </div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="preprocessor">#endif // MUTABLE_POINTSTO_H_</span></div><div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a054f8e2a0668387c092b2802e64a4df0"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0">SVF::PersistentIncDFPTData::outUpdatedVarMap</a></div><div class="ttdeci">UpdatedVarMap outUpdatedVarMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00796">PersistentPointsToDS.h:796</a></div></div>
|
|
70
|
-
<div class="ttc" id="
|
|
69
|
+
<a href="PersistentPointsToDS_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> </div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">/*</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * PersistentPointsToDS.h</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> *</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * Authors: Mohamad Barbar</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> *</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment"> * The implementation is based on</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment"> * Mohamad Barbar and Yulei Sui. Hash Consed Points-To Sets.</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment"> * 28th Static Analysis Symposium (SAS'21)</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment"> */</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> </div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#ifndef PERSISTENT_POINTSTO_H_</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#define PERSISTENT_POINTSTO_H_</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="preprocessor">#include "<a class="code" href="AbstractPointsToDS_8h.html">MemoryModel/AbstractPointsToDS.h</a>"</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="preprocessor">#include "<a class="code" href="PersistentPointsToCache_8h.html">MemoryModel/PersistentPointsToCache.h</a>"</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="preprocessor">#include "<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>"</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> </div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> </div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html"> 26</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html"> 28</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet, <span class="keyword">typename</span> VersionedKey, <span class="keyword">typename</span> VersionedKeySet></div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html"> 30</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html"> 34</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PTData.html">PTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> {</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keyword">template</span> <<span class="keyword">typename</span> K, <span class="keyword">typename</span> KS, <span class="keyword">typename</span> D, <span class="keyword">typename</span> DS, <span class="keyword">typename</span> VK, <span class="keyword">typename</span> VKS></div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a5a0dfa2e5e989bcb30b913f37e561c35"> 37</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aea8bb6da9d6d5a4ed65168aceee2f85a"> 38</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a><Key, KeySet, Data, DataSet>;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a8386ddd5a45bd490860685ca18543287"> 39</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a><Key, KeySet, Data, DataSet>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a6ca39340bb502c933c3dd6c1ab8f79c1"> 41</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentPTData.html#a6ca39340bb502c933c3dd6c1ab8f79c1">BasePTData</a>;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a64864dcc7ec8a26244cdfbe8c25886a2"> 42</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentPTData.html#a64864dcc7ec8a26244cdfbe8c25886a2">PTDataTy</a>;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f"> 44</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Key, PointsToID></a> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">KeyToIDMap</a>;</div><div class="line"><a name="l00045"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8"> 45</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<Data, KeySet></a> <a class="code" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8">RevPtsMap</a>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a5b24a6efc462014ed8002cefee3c0e6e"> 48</a></span>  <span class="keyword">explicit</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a5b24a6efc462014ed8002cefee3c0e6e">PersistentPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersBase)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  : BasePTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache) { }</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> </div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a5d8aab7bf619800ae289ef38dad23306">~PersistentPTData</a>() <span class="keyword">override</span> = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> </div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a492df7c388e3f616e60b63630b8c37c5"> 53</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a492df7c388e3f616e60b63630b8c37c5">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>.clear();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>.clear();</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a82621bb9b53ccb479cb7278df9a4e366"> 59</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> DataSet& <a class="code" href="classSVF_1_1PersistentPTData.html#a82621bb9b53ccb479cb7278df9a4e366">getPts</a>(<span class="keyword">const</span> Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var];</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a2f4fe676fdb5c749aa9b3f68e45e26de"> 65</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentPTData.html#a2f4fe676fdb5c749aa9b3f68e45e26de">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[data];</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> </div><div class="line"><a name="l00071"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a46c5bffbcae1494d5acb5e2d76f1501c"> 71</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a46c5bffbcae1494d5acb5e2d76f1501c">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  DataSet srcPts;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  srcPts.set(element);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(srcPts);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</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> </div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a5610c0d4a06a9c97d6bf79c494366943"> 79</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a5610c0d4a06a9c97d6bf79c494366943">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[srcKey];</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</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"><a class="line" href="classSVF_1_1PersistentPTData.html#a75f78272350b64aa00fd739f352fecb5"> 85</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a75f78272350b64aa00fd739f352fecb5">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> DataSet& srcData)<span class="keyword"> override</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(srcData);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(dstKey, srcId);</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"><a class="line" href="classSVF_1_1PersistentPTData.html#a6e46180c11bc25c474d03e0091e81ee2"> 91</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a6e46180c11bc25c474d03e0091e81ee2">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="keyword"> </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> </div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a6d2e2837d18dc66c92d59d0729bd7c91"> 95</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a6d2e2837d18dc66c92d59d0729bd7c91">clearPts</a>(<span class="keyword">const</span> Key &var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  DataSet toRemoveData;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  toRemoveData.set(element);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> toRemoveId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(toRemoveData);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> varId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var];</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> complementId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a86bf6959fb5587e350015d58d529af14">complementPts</a>(varId, toRemoveId);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="keywordflow">if</span> (varId != complementId)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var] = complementId;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[element], var);</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>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#ae64bcb3ba179e934653e0ebfa2c18d8d"> 109</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#ae64bcb3ba179e934653e0ebfa2c18d8d">clearFullPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0">clearRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a82621bb9b53ccb479cb7278df9a4e366">getPts</a>(var), var);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[var] = <a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">PersistentPointsToCache<DataSet>::emptyPointsToId</a>();</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"><a class="line" href="classSVF_1_1PersistentPTData.html#a6ab42dbb4837bfaa1c76d61152fb321c"> 115</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a6ab42dbb4837bfaa1c76d61152fb321c">remapAllPts</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a3b1d6e55ccaf82cd03914a1c948c4577"> 120</a></span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentPTData.html#a3b1d6e55ccaf82cd03914a1c948c4577">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span> (liveOnly)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>)</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>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  }</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  }</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">else</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>  allPts = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab84d0806e87c982bf81ae309f28751e3">getAllPts</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span> </div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">return</span> allPts;</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> </div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a174c3cac13c839863171621ea25e609f"> 140</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a174c3cac13c839863171621ea25e609f">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> *)</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="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a4e896ec87d07e5b75401de4367d67458"> 145</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a4e896ec87d07e5b75401de4367d67458">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</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>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersBase;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  }</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> <span class="keyword">private</span>:</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8"> 154</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">unionPtsFromId</a>(<span class="keyword">const</span> Key &dstKey, <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> dstId = <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[dstKey];</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> newDstId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a178b49cca2c22e874ff9e772cc4df72b">unionPts</a>(dstId, srcId);</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>  <span class="keywordtype">bool</span> changed = newDstId != dstId;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">if</span> (changed)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>[dstKey] = newDstId;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="comment">// Reverse points-to only needs to be handled when dst's</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="comment">// points-to set has changed (i.e., do it the first time only).</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</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="keyword">const</span> DataSet &srcPts = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(srcId);</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Data &d : srcPts) <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(dstKey, <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[d]);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  }</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span> </div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c"> 176</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(KeySet &revSet, <span class="keyword">const</span> Key &k)</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="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aee74719d33695e4da6fee5fc83f745d9">SVFUtil::removeKey</a>(k, revSet);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  }</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0"> 184</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0">clearRevPts</a>(<span class="keyword">const</span> DataSet &pts, <span class="keyword">const</span> Key &k)</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="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a>)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Data &d : pts) <a class="code" href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">clearSingleRevPts</a>(<a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>[d], k);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  }</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> </div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f"> 193</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>;</div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e"> 194</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">ptsMap</a>;</div><div class="line"><a name="l00195"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563"> 195</a></span>  RevPtsMap <a class="code" href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">revPtsMap</a>;</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="l00199"></a><span class="lineno"> 199</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html"> 200</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDiffPTData.html">PersistentDiffPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1DiffPTData.html">DiffPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa110fddf7d0cedfb66fcd37bae2c962c"> 203</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa110fddf7d0cedfb66fcd37bae2c962c">BasePTData</a>;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a3a2cf38f220a831c4334614b835b57c6"> 204</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DiffPTData.html">DiffPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a3a2cf38f220a831c4334614b835b57c6">BaseDiffPTData</a>;</div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa55e1c39fb0918c4f7f080a521f504f5"> 205</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa55e1c39fb0918c4f7f080a521f504f5">BasePersPTData</a>;</div><div class="line"><a name="l00206"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a778e8374e15bba331f1be99594970812"> 206</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a778e8374e15bba331f1be99594970812">PTDataTy</a>;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span> </div><div class="line"><a name="l00208"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a4e706309fe4bb40b4424251888363215"> 208</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">BasePersPTData::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a4e706309fe4bb40b4424251888363215">KeyToIDMap</a>;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac008ee5f7e4d286f9e76d85989358305"> 209</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8">BasePersPTData::RevPtsMap</a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac008ee5f7e4d286f9e76d85989358305">RevPtsMap</a>;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> </div><div class="line"><a name="l00212"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a18f90b2f4e54b47c4d6f2d50886a4411"> 212</a></span>  <span class="keyword">explicit</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a18f90b2f4e54b47c4d6f2d50886a4411">PersistentDiffPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersDiff)</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  : BaseDiffPTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache), persPTData(cache, reversePT) { }</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> </div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  ~<a class="code" href="classSVF_1_1PersistentDiffPTData.html">PersistentDiffPTData</a>() <span class="keyword">override</span> = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ae7e3ba711b38a3fe382d690ee24d7912"> 217</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ae7e3ba711b38a3fe382d690ee24d7912">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  persPTData.clear();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  diffPtsMap.clear();</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  propaPtsMap.clear();</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"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ab1246073bd0e0395528f8ec53281e315"> 224</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#ab1246073bd0e0395528f8ec53281e315">getPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">return</span> persPTData.getPts(var);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a7c34a171565b7eb45a54b6a8336a321d"> 229</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a7c34a171565b7eb45a54b6a8336a321d">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentDiffPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">return</span> persPTData.getRevPts(data);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a6b5160708567c63cf9acf0b204a1bcf7"> 235</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a6b5160708567c63cf9acf0b204a1bcf7">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">return</span> persPTData.addPts(dstKey, element);</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> </div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac8cb860b427962be8c6e1f17e5f0fc21"> 240</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac8cb860b427962be8c6e1f17e5f0fc21">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcKey);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  }</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#af6ccac71f0232e46fef1da82cba01959"> 245</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#af6ccac71f0232e46fef1da82cba01959">unionPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcDataSet);</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> </div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a4a55644f32cf3ccddf85541f61bef5ff"> 250</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a4a55644f32cf3ccddf85541f61bef5ff">clearPts</a>(<span class="keyword">const</span> Key &var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="keywordflow">return</span> persPTData.clearPts(var, element);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  }</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#af686e607c3dd26a08a36c4212107d78d"> 255</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#af686e607c3dd26a08a36c4212107d78d">clearFullPts</a>(<span class="keyword">const</span> Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordflow">return</span> persPTData.clearFullPts(var);</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  }</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac21d6571ec53a01ee93e0383e4afef78"> 260</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac21d6571ec53a01ee93e0383e4afef78">remapAllPts</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> </div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a38a942cb65d87883433444ef8f2b986c"> 265</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a38a942cb65d87883433444ef8f2b986c">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <span class="comment">// TODO.</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a34819020692e33777fec59082269e8b4"> 270</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#a34819020692e33777fec59082269e8b4">getDiffPts</a>(Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = diffPtsMap[var];</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</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> </div><div class="line"><a name="l00276"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a0aa74ee810233d6f1da09d1e593c35d8"> 276</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a0aa74ee810233d6f1da09d1e593c35d8">computeDiffPts</a>(Key &var, <span class="keyword">const</span> DataSet &all)<span class="keyword"> override</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> propaId = propaPtsMap[var];</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> allId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">emplacePts</a>(all);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="comment">// Diff is made up of the entire points-to set minus what has been propagated.</span></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> diffId = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a86bf6959fb5587e350015d58d529af14">complementPts</a>(allId, propaId);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  diffPtsMap[var] = diffId;</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="comment">// We've now propagated the entire thing.</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  propaPtsMap[var] = allId;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// Whether diff is empty or not; just need to check against the ID since it</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">// is the only empty set.</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">return</span> diffId != <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">emptyPointsToId</a>();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  }</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#aa8c5694bcbf884bee43875433abc03c9"> 292</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#aa8c5694bcbf884bee43875433abc03c9">updatePropaPtsMap</a>(Key &src, Key &dst)<span class="keyword"> override</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> dstId = propaPtsMap[dst];</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> srcId = propaPtsMap[src];</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  propaPtsMap[dst] = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a17d33558208c19019e541ee167009494">intersectPts</a>(dstId, srcId);</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> </div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a5ab578384889cf6e01b0e67d9b0e456e"> 299</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a5ab578384889cf6e01b0e67d9b0e456e">clearPropaPts</a>(Key &var)<span class="keyword"> override</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  propaPtsMap[var] = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">emptyPointsToId</a>();</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"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a00d3ec19f1b669edee5af7757e03a0ef"> 304</a></span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a00d3ec19f1b669edee5af7757e03a0ef">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">return</span> persPTData.getAllPts(liveOnly);</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="l00311"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#afb53f0b47cdad94379c3a4895980be9c"> 311</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#afb53f0b47cdad94379c3a4895980be9c">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html">PersistentDiffPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span> </div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a4f4b1869210228e9d1b4f3900b41bb88"> 316</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a4f4b1869210228e9d1b4f3900b41bb88">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  {</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersDiff;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  }</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> </div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00323"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a444bc59754b4c365327b7ef44baadcd2"> 323</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentDiffPTData.html#a444bc59754b4c365327b7ef44baadcd2">ptCache</a>;</div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#a0d6620a7078bd60d16256ac48af58db9"> 325</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDiffPTData.html#a0d6620a7078bd60d16256ac48af58db9">persPTData</a>;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#ac54339952e2734a6affdaa543fb3ed22"> 327</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentDiffPTData.html#ac54339952e2734a6affdaa543fb3ed22">diffPtsMap</a>;</div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDiffPTData.html#abffb5c9cfe1e306ce524ef1dc5ff18ad"> 329</a></span>  KeyToIDMap <a class="code" href="classSVF_1_1PersistentDiffPTData.html#abffb5c9cfe1e306ce524ef1dc5ff18ad">propaPtsMap</a>;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> };</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> </div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a54c206686c17101a0233fbbd3836c05c"> 337</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a54c206686c17101a0233fbbd3836c05c">BasePTData</a>;</div><div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#abb11d9bd24cb587bba6f762ab49b07c8"> 338</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#abb11d9bd24cb587bba6f762ab49b07c8">PTDataTy</a>;</div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af9facbe8f694b8447bb6ebe48b95ad17"> 339</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#af9facbe8f694b8447bb6ebe48b95ad17">BaseDFPTData</a>;</div><div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#afccad3b3163f25cc058334083f90041d"> 340</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#afccad3b3163f25cc058334083f90041d">BasePersPTData</a>;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> </div><div class="line"><a name="l00342"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a76d8a4f907269e9980f39c531806e96b"> 342</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1DFPTData.html#a298a5ef6cfffbe10b9d05af0ad12e786">BaseDFPTData::LocID</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a76d8a4f907269e9980f39c531806e96b">LocID</a>;</div><div class="line"><a name="l00343"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aee8871b4895d38bccb9078ad540f9f0f"> 343</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">BasePersPTData::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#aee8871b4895d38bccb9078ad540f9f0f">KeyToIDMap</a>;</div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a0d0318fa192eac88a4307112e30e9d90"> 344</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<LocID, KeyToIDMap></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a0d0318fa192eac88a4307112e30e9d90">DFKeyToIDMap</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"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a85e0aec789ea945bd4cfa9e29189d1b4"> 346</a></span>  <span class="keyword">explicit</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a85e0aec789ea945bd4cfa9e29189d1b4">PersistentDFPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersDataFlow)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  : BaseDFPTData(reversePT, ty), <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>(cache), persPTData(cache, reversePT) { }</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>  ~<a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a>() <span class="keyword">override</span> = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00351"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab91a95d661a95bb307b011c46f4dcee8"> 351</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ab91a95d661a95bb307b011c46f4dcee8">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  dfInPtsMap.clear();</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  dfOutPtsMap.clear();</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  persPTData.clear();</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"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a2adbaa59c46d611a448594b74745e986"> 358</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#a2adbaa59c46d611a448594b74745e986">getPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordflow">return</span> persPTData.getPts(var);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00363"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a1cd608254a5d4a59b507bb6508e3560d"> 363</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentDFPTData.html#a1cd608254a5d4a59b507bb6508e3560d">getRevPts</a>(<span class="keyword">const</span> Data&)<span class="keyword"> override</span></div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  assert(<span class="keyword">false</span> && <span class="stringliteral">"PersistentDFPTData::getRevPts: not supported yet!"</span>);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  abort();</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  }</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> </div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a2d0924d1e9149e198d049777e2fcbd7a"> 369</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a2d0924d1e9149e198d049777e2fcbd7a">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> Key& srcKey)<span class="keyword"> override</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcKey);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> </div><div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a2c4e4e53d1ce79dfd5702ba41f26f286"> 374</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a2c4e4e53d1ce79dfd5702ba41f26f286">unionPts</a>(<span class="keyword">const</span> Key& dstKey, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">return</span> persPTData.unionPts(dstKey, srcDataSet);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span> </div><div class="line"><a name="l00379"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a99bc747e5a23b8d97a320fe1e0bf926f"> 379</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a99bc747e5a23b8d97a320fe1e0bf926f">addPts</a>(<span class="keyword">const</span> Key &dstKey, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">return</span> persPTData.addPts(dstKey, element);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a5ac4485ccff838ea9cf28751d1206e10"> 384</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a5ac4485ccff838ea9cf28751d1206e10">clearPts</a>(<span class="keyword">const</span> Key& var, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  persPTData.clearPts(var, element);</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> </div><div class="line"><a name="l00389"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a044c27920b947da4302d5214a3de580b"> 389</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a044c27920b947da4302d5214a3de580b">clearFullPts</a>(<span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  persPTData.clearFullPts(var);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af70d3b1ecbb8f9cb56b8b419dbc0490a"> 394</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#af70d3b1ecbb8f9cb56b8b419dbc0490a">remapAllPts</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">remapAllPts</a>();</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  }</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> </div><div class="line"><a name="l00399"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab98f7068c3fb7d8e98a5ed4d706e4e62"> 399</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ab98f7068c3fb7d8e98a5ed4d706e4e62">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  persPTData.dumpPTData();</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  }</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a17e68e28860278b425b9a2d99082e715"> 404</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a17e68e28860278b425b9a2d99082e715">hasDFInSet</a>(LocID loc)<span class="keyword"> const override</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">return</span> dfInPtsMap.find(loc) != dfInPtsMap.end();</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00409"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af8e866e13c7ba87a33b0da0a769d4372"> 409</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#af8e866e13c7ba87a33b0da0a769d4372">hasDFOutSet</a>(LocID loc)<span class="keyword"> const override</span></div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">return</span> dfOutPtsMap.find(loc) != dfOutPtsMap.end();</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  }</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> </div><div class="line"><a name="l00414"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad5ca81c46b57ba0203732f10423ad6ae"> 414</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad5ca81c46b57ba0203732f10423ad6ae">hasDFInSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> const override</span></div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  <span class="keyword">typename</span> DFKeyToIDMap::const_iterator foundInKeyToId = dfInPtsMap.find(loc);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">if</span> (foundInKeyToId == dfInPtsMap.end()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keyword">const</span> KeyToIDMap &inKeyToId = foundInKeyToId->second;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> (inKeyToId.find(var) != inKeyToId.end());</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a4e0a1656047e6a1e53a1377d23d251bd"> 422</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a4e0a1656047e6a1e53a1377d23d251bd">hasDFOutSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> const override</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keyword">typename</span> DFKeyToIDMap::const_iterator foundOutKeyToId = dfOutPtsMap.find(loc);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  <span class="keywordflow">if</span> (foundOutKeyToId == dfOutPtsMap.end()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keyword">const</span> KeyToIDMap &outKeyToId = foundOutKeyToId->second;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keywordflow">return</span> (outKeyToId.find(var) != outKeyToId.end());</div><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> </div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aa00130defb8ab675fdc6ec3ecb48fd85"> 430</a></span>  <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#aa00130defb8ab675fdc6ec3ecb48fd85">getDFInPtsSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = dfInPtsMap[loc][var];</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><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> </div><div class="line"><a name="l00436"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a22d61e046322d7315fed214bf75048e0"> 436</a></span>  <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentDFPTData.html#a22d61e046322d7315fed214bf75048e0">getDFOutPtsSet</a>(LocID loc, <span class="keyword">const</span> Key& var)<span class="keyword"> override</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> <span class="keywordtype">id</span> = dfOutPtsMap[loc][var];</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a1d6a7e3efe8ab65f1ecd7e915d70d659"> 442</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a1d6a7e3efe8ab65f1ecd7e915d70d659">updateDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFInPtIdRef(dstLoc, dstVar), getDFInPtIdRef(srcLoc, srcVar));</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> </div><div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a297cfa81c47d76f989a952edfc34c021"> 447</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a297cfa81c47d76f989a952edfc34c021">updateAllDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">return</span> updateDFInFromIn(srcLoc, srcVar, dstLoc, dstVar);</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> </div><div class="line"><a name="l00452"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a1d7dc1c34e506ed78e9e029329558b97"> 452</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a1d7dc1c34e506ed78e9e029329558b97">updateDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFInPtIdRef(dstLoc, dstVar), getDFOutPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span> </div><div class="line"><a name="l00457"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a57e8efefa1b49bd5fecd363a65b3bced"> 457</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a57e8efefa1b49bd5fecd363a65b3bced">updateAllDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, LocID dstLoc, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">return</span> updateDFInFromOut(srcLoc, srcVar, dstLoc, dstVar);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  }</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span> </div><div class="line"><a name="l00462"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab63925fcd6506e6146d5f7487a39f155"> 462</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ab63925fcd6506e6146d5f7487a39f155">updateDFOutFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFOutPtIdRef(dstLoc, dstVar), getDFInPtIdRef(srcLoc, srcVar));</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>  }</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#aa263aa1f78fd85d1104a907042f58177"> 467</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#aa263aa1f78fd85d1104a907042f58177">updateAllDFOutFromIn</a>(LocID loc, <span class="keyword">const</span> Key &singleton, <span class="keywordtype">bool</span> strongUpdates)<span class="keyword"> override</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <span class="keywordflow">if</span> (this->hasDFInSet(loc))</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="keyword">const</span> KeyToIDMap &inKeyToId = dfInPtsMap[loc];</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : inKeyToId)</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>  <span class="keyword">const</span> Key var = ki.first;</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  <span class="keywordflow">if</span> (strongUpdates && var == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> </div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordflow">if</span> (updateDFOutFromIn(loc, var, loc, var)) changed = <span class="keyword">true</span>;</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>  }</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span> </div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">return</span> changed;</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> </div><div class="line"><a name="l00486"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a6af27fbe2c38c4d40d8df5aa1c765f62"> 486</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a6af27fbe2c38c4d40d8df5aa1c765f62">clearAllDFOutUpdatedVar</a>(LocID)<span class="keyword"> override</span></div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span> <span class="keyword"> </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="l00491"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ae0e64a1ec7f80b148f0a882e96503453"> 491</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ae0e64a1ec7f80b148f0a882e96503453">updateTLVPts</a>(LocID srcLoc, <span class="keyword">const</span> Key &srcVar, <span class="keyword">const</span> Key &dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keywordflow">return</span> unionPtsThroughIds(persPTData.ptsMap[dstVar], getDFInPtIdRef(srcLoc, srcVar));</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> </div><div class="line"><a name="l00496"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a132babeb5291086130247f015b2bef2b"> 496</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a132babeb5291086130247f015b2bef2b">updateATVPts</a>(<span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  <span class="keywordflow">return</span> unionPtsThroughIds(getDFOutPtIdRef(dstLoc, dstVar), persPTData.ptsMap[srcVar]);</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> </div><div class="line"><a name="l00501"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#abc8fbd41eddccddbbdc3316a3fd03276"> 501</a></span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#abc8fbd41eddccddbbdc3316a3fd03276">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts = persPTData.getAllPts(liveOnly);</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> DFKeyToIDMap::value_type &lki : dfInPtsMap)</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">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : lki.second)</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>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  }</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="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> DFKeyToIDMap::value_type &lki : dfOutPtsMap)</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>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">typename</span> KeyToIDMap::value_type &ki : lki.second)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  ++allPts[<a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">getActualPts</a>(ki.second)];</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>  }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span> </div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  <span class="keywordflow">if</span> (!liveOnly)</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="comment">// Subtract 1 from each counted points-to set because the live points-to</span></div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="comment">// sets have already been inserted and accounted for how often they occur.</span></div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  <span class="comment">// They will each occur one more time in the cache.</span></div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">// In essence, we want the ptCache.getAllPts() to just add the unused, non-GC'd</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  <span class="comment">// points-to sets to allPts.</span></div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned>::value_type</a> pto : allPts) pto.second -= 1;</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#ab84d0806e87c982bf81ae309f28751e3">getAllPts</a>());</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  }</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">return</span> allPts;</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> </div><div class="line"><a name="l00536"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad374e8e6ddd5c397bd5ab6cf9b259968"> 536</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad374e8e6ddd5c397bd5ab6cf9b259968">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData<Key, KeySet, Data, DataSet></a> *)</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="keywordflow">return</span> <span class="keyword">true</span>;</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> </div><div class="line"><a name="l00541"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a575a441ddbe233d34937792b66d2b39c"> 541</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a575a441ddbe233d34937792b66d2b39c">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> *ptd)</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> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersDataFlow</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  || ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersIncDataFlow;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span> </div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00549"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a2cb37d0403e1b34316c9c24a0d6ab66c"> 549</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a2cb37d0403e1b34316c9c24a0d6ab66c">unionPtsThroughIds</a>(<a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &dst, <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &src)</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  {</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> oldDst = dst;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  dst = <a class="code" href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">ptCache</a>.<a class="code" href="classSVF_1_1PersistentPointsToCache.html#a178b49cca2c22e874ff9e772cc4df72b">unionPts</a>(dst, src);</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="keywordflow">return</span> oldDst != dst;</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00556"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#afc28b40eea7bad5276bbab30749d598b"> 556</a></span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#afc28b40eea7bad5276bbab30749d598b">getDFInPtIdRef</a>(LocID loc, <span class="keyword">const</span> Key &var)</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  {</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  <span class="keywordflow">return</span> dfInPtsMap[loc][var];</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span> </div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ab13b3a484a5ac22c47391f1b2eaa58a1"> 561</a></span>  <a class="code" href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">PointsToID</a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#ab13b3a484a5ac22c47391f1b2eaa58a1">getDFOutPtIdRef</a>(LocID loc, <span class="keyword">const</span> Key &var)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>  {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keywordflow">return</span> dfOutPtsMap[loc][var];</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  }</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00567"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#af86313e37c5177e45456f813b9b46a4f"> 567</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &<a class="code" href="classSVF_1_1PersistentDFPTData.html#af86313e37c5177e45456f813b9b46a4f">ptCache</a>;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span> </div><div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a349c231f59ea554059a1891f1a530820"> 570</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentDFPTData.html#a349c231f59ea554059a1891f1a530820">persPTData</a>;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div><div class="line"><a name="l00573"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#a6b892b707524127928e269f0f0bbe868"> 573</a></span>  DFKeyToIDMap <a class="code" href="classSVF_1_1PersistentDFPTData.html#a6b892b707524127928e269f0f0bbe868">dfInPtsMap</a>;</div><div class="line"><a name="l00575"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentDFPTData.html#ad77d7ccad393c995813f8c433c249dfc"> 575</a></span>  DFKeyToIDMap <a class="code" href="classSVF_1_1PersistentDFPTData.html#ad77d7ccad393c995813f8c433c249dfc">dfOutPtsMap</a>;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> };</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> </div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData</a><Key, KeySet, Data, DataSet></div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span> {</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00583"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a7751d9831519f8021626630dce499b1a"> 583</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a7751d9831519f8021626630dce499b1a">BasePTData</a>;</div><div class="line"><a name="l00584"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#acea7eb9ee0c1ee36906d50bce584b56a"> 584</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#acea7eb9ee0c1ee36906d50bce584b56a">BasePersPTData</a>;</div><div class="line"><a name="l00585"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ae56633d34e5fb4499c82d422646a91f0"> 585</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ae56633d34e5fb4499c82d422646a91f0">BaseDFPTData</a>;</div><div class="line"><a name="l00586"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#abce6fa91fed789ef25146440ee10872b"> 586</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#abce6fa91fed789ef25146440ee10872b">BasePersDFPTData</a>;</div><div class="line"><a name="l00587"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a440e0e1e1e449d5514dbc3f8a0da90d7"> 587</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a440e0e1e1e449d5514dbc3f8a0da90d7">PTDataTy</a>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span> </div><div class="line"><a name="l00589"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a77bdc80a999296bcfa8d9f1f92c933d1"> 589</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1DFPTData.html#a298a5ef6cfffbe10b9d05af0ad12e786">BaseDFPTData::LocID</a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a77bdc80a999296bcfa8d9f1f92c933d1">LocID</a>;</div><div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#abad78c2ef84371b693dca206ebbb63ab"> 590</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<LocID, KeySet></a> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#abad78c2ef84371b693dca206ebbb63ab">UpdatedVarMap</a>;</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">public</span>:</div><div class="line"><a name="l00594"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a495fede1f68c53956df3c033ef349940"> 594</a></span>  <span class="keyword">explicit</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a495fede1f68c53956df3c033ef349940">PersistentIncDFPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848a3f0b959f73825d56c2aebcb699f3a08a">BasePTData::PersIncDataFlow</a>)</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  : BasePersDFPTData(cache, reversePT, ty) { }</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> </div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  ~<a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData</a>() <span class="keyword">override</span> = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a5df898efbc74e653340571acba216dd7"> 599</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a5df898efbc74e653340571acba216dd7">updateDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar)</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  && this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  {</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  <span class="keywordflow">return</span> <span class="keyword">true</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> </div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div><div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#af010be5ac5466ed51f902fcf3d805080"> 611</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#af010be5ac5466ed51f902fcf3d805080">updateDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">if</span> (varHasNewDFOutPts(srcLoc, srcVar)</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  && this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFOutPtIdRef(srcLoc, srcVar)))</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>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  }</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span> </div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  }</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span> </div><div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aaed9e93e3515c025e05786212b1baac5"> 623</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aaed9e93e3515c025e05786212b1baac5">updateDFOutFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar))</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  {</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>  removeVarFromDFInUpdatedSet(srcLoc, srcVar);</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFOutPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  setVarDFOutSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</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> </div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  }</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> </div><div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a5291cccfb9bd6cb93ff931e4f2465d40"> 638</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a5291cccfb9bd6cb93ff931e4f2465d40">updateAllDFInFromOut</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFOutPtIdRef(srcLoc, srcVar)))</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>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  }</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span> </div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  }</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span> </div><div class="line"><a name="l00649"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a8898a6164a0d83f179b9ee6175ddc1fe"> 649</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a8898a6164a0d83f179b9ee6175ddc1fe">updateAllDFInFromIn</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFInPtIdRef(dstLoc, dstVar), this->getDFInPtIdRef(srcLoc, srcVar)))</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>  setVarDFInSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  <span class="keywordflow">return</span> <span class="keyword">true</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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</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"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a451756aea2a3a0c895b75b7239672fdd"> 660</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a451756aea2a3a0c895b75b7239672fdd">updateAllDFOutFromIn</a>(LocID loc, <span class="keyword">const</span> Key& singleton, <span class="keywordtype">bool</span> strongUpdates)<span class="keyword"> override</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">if</span> (this->hasDFInSet(loc))</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  {</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <span class="keyword">const</span> KeySet vars = getDFInUpdatedVar(loc);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Key &var : vars)</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  {</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">if</span> (strongUpdates && var == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  <span class="keywordflow">if</span> (updateDFOutFromIn(loc, var, loc, var)) changed = <span class="keyword">true</span>;</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>  }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  }</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div><div class="line"><a name="l00678"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a3e371be9324b9281781591d633d04c34"> 678</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a3e371be9324b9281781591d633d04c34">updateTLVPts</a>(LocID srcLoc, <span class="keyword">const</span> Key& srcVar, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">if</span> (varHasNewDFInPts(srcLoc, srcVar))</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>  removeVarFromDFInUpdatedSet(srcLoc, srcVar);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">return</span> this->unionPtsThroughIds(this->persPTData.ptsMap[dstVar], this->getDFInPtIdRef(srcLoc, srcVar));</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> </div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  <span class="keywordflow">return</span> <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"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a36697e534c6744dbc72b0a6ef619d906"> 689</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a36697e534c6744dbc72b0a6ef619d906">updateATVPts</a>(<span class="keyword">const</span> Key& srcVar, LocID dstLoc, <span class="keyword">const</span> Key& dstVar)<span class="keyword"> override</span></div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">if</span> (this->unionPtsThroughIds(this->getDFOutPtIdRef(dstLoc, dstVar), this->persPTData.ptsMap[srcVar]))</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>  setVarDFOutSetUpdated(dstLoc, dstVar);</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> </div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</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> </div><div class="line"><a name="l00700"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ab41bf3e2ba1700ae6116702fb5ce8efe"> 700</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ab41bf3e2ba1700ae6116702fb5ce8efe">clearAllDFOutUpdatedVar</a>(LocID loc)<span class="keyword"> override</span></div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  <span class="keywordflow">if</span> (this->hasDFOutSet(loc))</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="keyword">const</span> KeySet vars = getDFOutUpdatedVar(loc);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> Key &var : vars)</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  {</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  removeVarFromDFOutUpdatedSet(loc, var);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  }</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> </div><div class="line"><a name="l00712"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ad7785e4207e0b45aed72845af6c4916f"> 712</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ad7785e4207e0b45aed72845af6c4916f">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>  outUpdatedVarMap.clear();</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>  inUpdatedVarMap.clear();</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>  BasePersDFPTData::clear();</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  }</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span> </div><div class="line"><a name="l00721"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a656434f7b67aabf25f6dba400d95f2bb"> 721</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a656434f7b67aabf25f6dba400d95f2bb">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData<Key, KeySet, Data, DataSet></a> *)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</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> </div><div class="line"><a name="l00726"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a47c2fbf8b959aae3166b9757b12880a7"> 726</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a47c2fbf8b959aae3166b9757b12880a7">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> *ptd)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  {</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848a3f0b959f73825d56c2aebcb699f3a08a">BasePTData::PersIncDataFlow</a>;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  }</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span> </div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span> </div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> setVarDFInSetUpdated(LocID loc, <span class="keyword">const</span> Key& var)</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(var, inUpdatedVarMap[loc]);</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> </div><div class="line"><a name="l00743"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ad449df82589efb4c40affb5fdc46f479"> 743</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ad449df82589efb4c40affb5fdc46f479">removeVarFromDFInUpdatedSet</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = inUpdatedVarMap.find(loc);</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keywordflow">if</span> (it != inUpdatedVarMap.end()) it->second.erase(var);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  }</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span> </div><div class="line"><a name="l00750"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a56764f78042a2a9229d3b76861b54952"> 750</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a56764f78042a2a9229d3b76861b54952">varHasNewDFInPts</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  {</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = inUpdatedVarMap.find(loc);</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span> (it != inUpdatedVarMap.end()) <span class="keywordflow">return</span> it->second.find(var) != it->second.end();</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  <span class="keywordflow">return</span> <span class="keyword">false</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> </div><div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a1bd459f50c328974294930698fc61b8e"> 758</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a1bd459f50c328974294930698fc61b8e">getDFInUpdatedVar</a>(LocID loc)</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  {</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">return</span> inUpdatedVarMap[loc];</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  }</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span> </div><div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aa9f6b38595cabbb583c52217188457e8"> 767</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aa9f6b38595cabbb583c52217188457e8">setVarDFOutSetUpdated</a>(LocID loc, <span class="keyword">const</span> Key& var)</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>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVFUtil::insertKey</a>(var, outUpdatedVarMap[loc]);</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>  }</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span> </div><div class="line"><a name="l00773"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ad1a2cd17519912b1d7571eeddcdc0060"> 773</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ad1a2cd17519912b1d7571eeddcdc0060">removeVarFromDFOutUpdatedSet</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = outUpdatedVarMap.find(loc);</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>  <span class="keywordflow">if</span> (it != outUpdatedVarMap.end()) it->second.erase(var);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>  }</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span> </div><div class="line"><a name="l00780"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#ae44f71f2ff837fbdf9b6e77f609c0c53"> 780</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#ae44f71f2ff837fbdf9b6e77f609c0c53">varHasNewDFOutPts</a>(LocID loc, <span class="keyword">const</span> Key& var)</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  {</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keyword">typename</span> UpdatedVarMap::iterator it = outUpdatedVarMap.find(loc);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keywordflow">if</span> (it != outUpdatedVarMap.end()) <span class="keywordflow">return</span> it->second.find(var) != it->second.end();</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  }</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span> </div><div class="line"><a name="l00788"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#aa50d20f82143fd56cbe468b29bf9e11e"> 788</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#aa50d20f82143fd56cbe468b29bf9e11e">getDFOutUpdatedVar</a>(LocID loc)</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>  <span class="keywordflow">return</span> outUpdatedVarMap[loc];</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  }</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span> </div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span> </div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00796"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0"> 796</a></span>  UpdatedVarMap <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0">outUpdatedVarMap</a>;</div><div class="line"><a name="l00797"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentIncDFPTData.html#a106391cd8eefab1740b54cd9bbacccad"> 797</a></span>  UpdatedVarMap <a class="code" href="classSVF_1_1PersistentIncDFPTData.html#a106391cd8eefab1740b54cd9bbacccad">inUpdatedVarMap</a>;</div><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> </div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="keyword">template</span> <<span class="keyword">typename</span> Key, <span class="keyword">typename</span> KeySet, <span class="keyword">typename</span> Data, <span class="keyword">typename</span> DataSet, <span class="keyword">typename</span> VersionedKey, <span class="keyword">typename</span> VersionedKeySet></div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1VersionedPTData.html">VersionedPTData</a><Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span> {</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00808"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ad4586331863d67e78c54d919694b58db"> 808</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ad4586331863d67e78c54d919694b58db">BasePTData</a>;</div><div class="line"><a name="l00809"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ab71b82478d74f1a20ce3de479f2d8d5c"> 809</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VersionedPTData.html">VersionedPTData<Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ab71b82478d74f1a20ce3de479f2d8d5c">BaseVersionedPTData</a>;</div><div class="line"><a name="l00810"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a6051aa255081543388a8f9077012834c"> 810</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">BasePTData::PTDataTy</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a6051aa255081543388a8f9077012834c">PTDataTy</a>;</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span> </div><div class="line"><a name="l00812"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a1927ccf9bb74b698f540f683e7f0d0f2"> 812</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">PersistentPTData<Key, KeySet, Data, DataSet>::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a1927ccf9bb74b698f540f683e7f0d0f2">KeyToIDMap</a>;</div><div class="line"><a name="l00813"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a2ee473a1654b7d134a602268a2b70248"> 813</a></span>  <span class="keyword">typedef</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<VersionedKey, VersionedKeySet, Data, DataSet>::KeyToIDMap</a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a2ee473a1654b7d134a602268a2b70248">VersionedKeyToIDMap</a>;</div><div class="line"><a name="l00814"></a><span class="lineno"> 814</span> </div><div class="line"><a name="l00815"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a5cecb78af456e2241ff8554441b48d61"> 815</a></span>  <span class="keyword">explicit</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a5cecb78af456e2241ff8554441b48d61">PersistentVersionedPTData</a>(<a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<DataSet></a> &cache, <span class="keywordtype">bool</span> reversePT = <span class="keyword">true</span>, PTDataTy ty = PTDataTy::PersVersioned)</div><div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  : BaseVersionedPTData(reversePT, ty), tlPTData(cache, reversePT), atPTData(cache, reversePT) { }</div><div class="line"><a name="l00817"></a><span class="lineno"> 817</span> </div><div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  ~<a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData</a>() <span class="keyword">override</span> = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00819"></a><span class="lineno"> 819</span> </div><div class="line"><a name="l00820"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#af27a907b6207cc1c9f3f72f15a0c7c0a"> 820</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#af27a907b6207cc1c9f3f72f15a0c7c0a">clear</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00821"></a><span class="lineno"> 821</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  tlPTData.clear();</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  atPTData.clear();</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</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"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#abcfcbbb3fab89b89168409c1f714e1ed"> 826</a></span>  <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentVersionedPTData.html#abcfcbbb3fab89b89168409c1f714e1ed">getPts</a>(<span class="keyword">const</span> Key& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00827"></a><span class="lineno"> 827</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  <span class="keywordflow">return</span> tlPTData.getPts(vk);</div><div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  }</div><div class="line"><a name="l00830"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ae705d46ac78d39f0779c0bf05e39f8b3"> 830</a></span>  <span class="keyword">const</span> DataSet &<a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ae705d46ac78d39f0779c0bf05e39f8b3">getPts</a>(<span class="keyword">const</span> VersionedKey& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00831"></a><span class="lineno"> 831</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">return</span> atPTData.getPts(vk);</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> </div><div class="line"><a name="l00835"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a4faa0f91fa8acbd8c818f3abf5db8b5f"> 835</a></span>  <span class="keyword">const</span> KeySet& <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a4faa0f91fa8acbd8c818f3abf5db8b5f">getRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentVersionedPTData::getRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">return</span> tlPTData.getRevPts(data);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  }</div><div class="line"><a name="l00840"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#acabb81409a3767f31227f46e106cb2d0"> 840</a></span>  <span class="keyword">const</span> VersionedKeySet& <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#acabb81409a3767f31227f46e106cb2d0">getVersionedKeyRevPts</a>(<span class="keyword">const</span> Data &data)<span class="keyword"> override</span></div><div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>  assert(this-><a class="code" href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">rev</a> && <span class="stringliteral">"PersistentVersionedPTData::getVersionedKeyRevPts: constructed without reverse PT support!"</span>);</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>  <span class="keywordflow">return</span> atPTData.getRevPts(data);</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> </div><div class="line"><a name="l00846"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#aca91b22bed509c3b26efee746126f917"> 846</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#aca91b22bed509c3b26efee746126f917">addPts</a>(<span class="keyword">const</span> Key& k, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="keywordflow">return</span> tlPTData.addPts(k, element);</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  }</div><div class="line"><a name="l00850"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a3ca0f6fcfdf2f8c471ea47501bec08fe"> 850</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a3ca0f6fcfdf2f8c471ea47501bec08fe">addPts</a>(<span class="keyword">const</span> VersionedKey& vk, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  <span class="keywordflow">return</span> atPTData.addPts(vk, element);</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  }</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span> </div><div class="line"><a name="l00855"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a14419b91e9c790623060b10b13f9ad13"> 855</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a14419b91e9c790623060b10b13f9ad13">unionPts</a>(<span class="keyword">const</span> Key& dstVar, <span class="keyword">const</span> Key& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <span class="keywordflow">return</span> tlPTData.unionPts(dstVar, srcVar);</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  }</div><div class="line"><a name="l00859"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ae0eafb4667af1ba821247f9f4199d52f"> 859</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ae0eafb4667af1ba821247f9f4199d52f">unionPts</a>(<span class="keyword">const</span> VersionedKey& dstVar, <span class="keyword">const</span> VersionedKey& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  <span class="keywordflow">return</span> atPTData.unionPts(dstVar, srcVar);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  }</div><div class="line"><a name="l00863"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a5e6ab689e9a9eefdd5f6bf04ab279940"> 863</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a5e6ab689e9a9eefdd5f6bf04ab279940">unionPts</a>(<span class="keyword">const</span> VersionedKey& dstVar, <span class="keyword">const</span> Key& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <span class="keywordflow">return</span> atPTData.unionPtsFromId(dstVar, tlPTData.ptsMap[srcVar]);</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  }</div><div class="line"><a name="l00867"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#adb56e144709cab8efe057c3215e30b9b"> 867</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#adb56e144709cab8efe057c3215e30b9b">unionPts</a>(<span class="keyword">const</span> Key& dstVar, <span class="keyword">const</span> VersionedKey& srcVar)<span class="keyword"> override</span></div><div class="line"><a name="l00868"></a><span class="lineno"> 868</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keywordflow">return</span> tlPTData.unionPtsFromId(dstVar, atPTData.ptsMap[srcVar]);</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  }</div><div class="line"><a name="l00871"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#aaf048cdd17875dd3a9adca2aabcbfd7e"> 871</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#aaf048cdd17875dd3a9adca2aabcbfd7e">unionPts</a>(<span class="keyword">const</span> Key &dstVar, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keywordflow">return</span> tlPTData.unionPts(dstVar, srcDataSet);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  }</div><div class="line"><a name="l00875"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ab4828e2b42d646463bfd23c2154c3b8f"> 875</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ab4828e2b42d646463bfd23c2154c3b8f">unionPts</a>(<span class="keyword">const</span> VersionedKey &dstVar, <span class="keyword">const</span> DataSet &srcDataSet)<span class="keyword"> override</span></div><div class="line"><a name="l00876"></a><span class="lineno"> 876</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">return</span> atPTData.unionPts(dstVar, srcDataSet);</div><div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  }</div><div class="line"><a name="l00879"></a><span class="lineno"> 879</span> </div><div class="line"><a name="l00880"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a522af0d1727809479b1122b075b0845e"> 880</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a522af0d1727809479b1122b075b0845e">clearPts</a>(<span class="keyword">const</span> Key& k, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  tlPTData.clearPts(k, element);</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div><div class="line"><a name="l00884"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a64e3dbd840184eb8e829c4d003b5b4cf"> 884</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a64e3dbd840184eb8e829c4d003b5b4cf">clearPts</a>(<span class="keyword">const</span> VersionedKey& vk, <span class="keyword">const</span> Data &element)<span class="keyword"> override</span></div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  atPTData.clearPts(vk, element);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</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"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a080969ab00b584d44ea9afbd2baa740a"> 889</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a080969ab00b584d44ea9afbd2baa740a">clearFullPts</a>(<span class="keyword">const</span> Key& k)<span class="keyword"> override</span></div><div class="line"><a name="l00890"></a><span class="lineno"> 890</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  tlPTData.clearFullPts(k);</div><div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  }</div><div class="line"><a name="l00893"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a7560a47f1e8894b9025b779c4794138c"> 893</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a7560a47f1e8894b9025b779c4794138c">clearFullPts</a>(<span class="keyword">const</span> VersionedKey& vk)<span class="keyword"> override</span></div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>  atPTData.clearFullPts(vk);</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"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a5a21b654b380bdf26d65d60ceb86a787"> 898</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a5a21b654b380bdf26d65d60ceb86a787">remapAllPts</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="comment">// tlPTData and atPTData use the same cache.</span></div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  tlPTData.remapAllPts();</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  }</div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span> </div><div class="line"><a name="l00904"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#acfc73119798cb830a49f85ffab2654af"> 904</a></span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#acfc73119798cb830a49f85ffab2654af">getAllPts</a>(<span class="keywordtype">bool</span> liveOnly)<span class="keyword"> const override</span></div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="comment">// Explicitly pass in true because if we call it with false,</span></div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="comment">// we will double up on the cache, since it is shared with atPTData.</span></div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="comment">// if liveOnly == false, we will handle it in the if below.</span></div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned></a> allPts = tlPTData.getAllPts(<span class="keyword">true</span>);</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, atPTData.getAllPts(<span class="keyword">true</span>));</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span> </div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  <span class="keywordflow">if</span> (!liveOnly)</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>  <span class="comment">// Subtract 1 from each counted points-to set because the live points-to</span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="comment">// sets have already been inserted and accounted for how often they occur.</span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <span class="comment">// They will each occur one more time in the cache.</span></div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="comment">// In essence, we want the ptCache.getAllPts() to just add the unused, non-GC'd</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="comment">// points-to sets to allPts.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<DataSet, unsigned>::value_type</a> &pto : allPts) pto.second -= 1;</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  SVFUtil::mergePtsOccMaps<DataSet>(allPts, tlPTData.ptCache.getAllPts());</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  }</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span> </div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  <span class="keywordflow">return</span> allPts;</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  }</div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span> </div><div class="line"><a name="l00926"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#ab2ba1db7aeb6e3a508c11eb49bf31575"> 926</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#ab2ba1db7aeb6e3a508c11eb49bf31575">dumpPTData</a>()<span class="keyword"> override</span></div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"== Top-level points-to information\n"</span>;</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>  tlPTData.dumpPTData();</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"== Address-taken points-to information\n"</span>;</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>  atPTData.dumpPTData();</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>  }</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span> </div><div class="line"><a name="l00936"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a28a8bf95351e295e65360bf16241a5da"> 936</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a28a8bf95351e295e65360bf16241a5da">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData<Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet></a> *)</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>  {</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>  }</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span> </div><div class="line"><a name="l00941"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a1f85475cb6690bb1caa003c5a3aec92f"> 941</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a1f85475cb6690bb1caa003c5a3aec92f">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PTData.html">PTData<Key, KeySet, Data, DataSet></a>* ptd)</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  {</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  <span class="keywordflow">return</span> ptd-><a class="code" href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">getPTDTY</a>() == PTDataTy::PersVersioned;</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  }</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span> </div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00949"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a29104a2d53d94805e142f778d3d21ad5"> 949</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<Key, KeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a29104a2d53d94805e142f778d3d21ad5">tlPTData</a>;</div><div class="line"><a name="l00951"></a><span class="lineno"><a class="line" href="classSVF_1_1PersistentVersionedPTData.html#a61b44f6d63cca013da2b278f47298473"> 951</a></span>  <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<VersionedKey, VersionedKeySet, Data, DataSet></a> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html#a61b44f6d63cca013da2b278f47298473">atPTData</a>;</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span> };</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span> </div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="preprocessor">#endif // PERSISTENT_POINTSTO_H_</span></div><div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a054f8e2a0668387c092b2802e64a4df0"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a054f8e2a0668387c092b2802e64a4df0">SVF::PersistentIncDFPTData::outUpdatedVarMap</a></div><div class="ttdeci">UpdatedVarMap outUpdatedVarMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00796">PersistentPointsToDS.h:796</a></div></div>
|
|
70
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_ae7e3ba711b38a3fe382d690ee24d7912"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#ae7e3ba711b38a3fe382d690ee24d7912">SVF::PersistentDiffPTData::clear</a></div><div class="ttdeci">void clear() override</div><div class="ttdoc">Clears all points-to sets as if nothing is stored. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00217">PersistentPointsToDS.h:217</a></div></div>
|
|
71
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a6ab42dbb4837bfaa1c76d61152fb321c"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a6ab42dbb4837bfaa1c76d61152fb321c">SVF::PersistentPTData::remapAllPts</a></div><div class="ttdeci">void remapAllPts() override</div><div class="ttdoc">Remaps all points-to sets to use the current mapping. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00115">PersistentPointsToDS.h:115</a></div></div>
|
|
71
72
|
<div class="ttc" id="classSVF_1_1VersionedPTData_html"><div class="ttname"><a href="classSVF_1_1VersionedPTData.html">SVF::VersionedPTData</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00269">AbstractPointsToDS.h:269</a></div></div>
|
|
72
|
-
<div class="ttc" id="
|
|
73
|
+
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a5df898efbc74e653340571acba216dd7"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a5df898efbc74e653340571acba216dd7">SVF::PersistentIncDFPTData::updateDFInFromIn</a></div><div class="ttdeci">bool updateDFInFromIn(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00599">PersistentPointsToDS.h:599</a></div></div>
|
|
73
74
|
<div class="ttc" id="classSVF_1_1PTData_html_a74ce29609c51f2be34a0b5b7650a9848a3f0b959f73825d56c2aebcb699f3a08a"><div class="ttname"><a href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848a3f0b959f73825d56c2aebcb699f3a08a">SVF::PTData::PersIncDataFlow</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00092">AbstractPointsToDS.h:92</a></div></div>
|
|
75
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_ab4828e2b42d646463bfd23c2154c3b8f"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#ab4828e2b42d646463bfd23c2154c3b8f">SVF::PersistentVersionedPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const VersionedKey &dstVar, const DataSet &srcDataSet) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00875">PersistentPointsToDS.h:875</a></div></div>
|
|
74
76
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_afccad3b3163f25cc058334083f90041d"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#afccad3b3163f25cc058334083f90041d">SVF::PersistentDFPTData::BasePersPTData</a></div><div class="ttdeci">PersistentPTData< Key, KeySet, Data, DataSet > BasePersPTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00340">PersistentPointsToDS.h:340</a></div></div>
|
|
75
77
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a1bd459f50c328974294930698fc61b8e"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a1bd459f50c328974294930698fc61b8e">SVF::PersistentIncDFPTData::getDFInUpdatedVar</a></div><div class="ttdeci">const KeySet & getDFInUpdatedVar(LocID loc)</div><div class="ttdoc">Get all variables which have new pts informationin loc&#39;s IN set. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00758">PersistentPointsToDS.h:758</a></div></div>
|
|
78
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_ac8cb860b427962be8c6e1f17e5f0fc21"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#ac8cb860b427962be8c6e1f17e5f0fc21">SVF::PersistentDiffPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const Key &dstKey, const Key &srcKey) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U pts(srcVar). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00240">PersistentPointsToDS.h:240</a></div></div>
|
|
76
79
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html">SVF::PersistentDiffPTData</a></div><div class="ttdoc">DiffPTData implemented with a persistent points-to backing. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00200">PersistentPointsToDS.h:200</a></div></div>
|
|
77
|
-
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_ae4732dd1897883fafa98454b46134bfb"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#ae4732dd1897883fafa98454b46134bfb">SVF::PersistentIncDFPTData::updateTLVPts</a></div><div class="ttdeci">virtual bool updateTLVPts(LocID srcLoc, const Key &srcVar, const Key &dstVar) override</div><div class="ttdoc">Update points-to set of top-level pointers with IN[srcLoc:srcVar]. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00678">PersistentPointsToDS.h:678</a></div></div>
|
|
78
|
-
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a9b61c0557c6b1460af2328709011b32e"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a9b61c0557c6b1460af2328709011b32e">SVF::PersistentDFPTData::updateDFInFromIn</a></div><div class="ttdeci">virtual bool updateDFInFromIn(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00442">PersistentPointsToDS.h:442</a></div></div>
|
|
79
80
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_aa110fddf7d0cedfb66fcd37bae2c962c"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#aa110fddf7d0cedfb66fcd37bae2c962c">SVF::PersistentDiffPTData::BasePTData</a></div><div class="ttdeci">PTData< Key, KeySet, Data, DataSet > BasePTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00203">PersistentPointsToDS.h:203</a></div></div>
|
|
80
|
-
<div class="ttc" id="classSVF_1_1PersistentPTData_html_afb2dd005d3d2ad01bdad4b7a1af5477d"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#afb2dd005d3d2ad01bdad4b7a1af5477d">SVF::PersistentPTData::dumpPTData</a></div><div class="ttdeci">virtual void dumpPTData() override</div><div class="ttdoc">Dump stored keys and points-to sets. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00091">PersistentPointsToDS.h:91</a></div></div>
|
|
81
81
|
<div class="ttc" id="classSVF_1_1DiffPTData_html"><div class="ttname"><a href="classSVF_1_1DiffPTData.html">SVF::DiffPTData</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00149">AbstractPointsToDS.h:149</a></div></div>
|
|
82
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a2d0924d1e9149e198d049777e2fcbd7a"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a2d0924d1e9149e198d049777e2fcbd7a">SVF::PersistentDFPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const Key &dstKey, const Key &srcKey) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U pts(srcVar). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00369">PersistentPointsToDS.h:369</a></div></div>
|
|
83
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a3ca0f6fcfdf2f8c471ea47501bec08fe"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a3ca0f6fcfdf2f8c471ea47501bec08fe">SVF::PersistentVersionedPTData::addPts</a></div><div class="ttdeci">bool addPts(const VersionedKey &vk, const Data &element) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00850">PersistentPointsToDS.h:850</a></div></div>
|
|
82
84
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_aa55e1c39fb0918c4f7f080a521f504f5"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#aa55e1c39fb0918c4f7f080a521f504f5">SVF::PersistentDiffPTData::BasePersPTData</a></div><div class="ttdeci">PersistentPTData< Key, KeySet, Data, DataSet > BasePersPTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00205">PersistentPointsToDS.h:205</a></div></div>
|
|
83
85
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a5cecb78af456e2241ff8554441b48d61"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a5cecb78af456e2241ff8554441b48d61">SVF::PersistentVersionedPTData::PersistentVersionedPTData</a></div><div class="ttdeci">PersistentVersionedPTData(PersistentPointsToCache< DataSet > &cache, bool reversePT=true, PTDataTy ty=PTDataTy::PersVersioned)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00815">PersistentPointsToDS.h:815</a></div></div>
|
|
84
86
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html">SVF::PersistentPTData</a></div><div class="ttdoc">PTData backed by a PersistentPointsToCache. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00034">PersistentPointsToDS.h:34</a></div></div>
|
|
85
87
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_ae44f71f2ff837fbdf9b6e77f609c0c53"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#ae44f71f2ff837fbdf9b6e77f609c0c53">SVF::PersistentIncDFPTData::varHasNewDFOutPts</a></div><div class="ttdeci">bool varHasNewDFOutPts(LocID loc, const Key &var)</div><div class="ttdoc">Return TRUE if var has a new pts in loc&#39;s OUT set. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00780">PersistentPointsToDS.h:780</a></div></div>
|
|
86
|
-
<div class="ttc" id="
|
|
87
|
-
<div class="ttc" id="
|
|
88
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a5ac4485ccff838ea9cf28751d1206e10"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a5ac4485ccff838ea9cf28751d1206e10">SVF::PersistentDFPTData::clearPts</a></div><div class="ttdeci">void clearPts(const Key &var, const Data &element) override</div><div class="ttdoc">Clears element from the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00384">PersistentPointsToDS.h:384</a></div></div>
|
|
89
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a00d3ec19f1b669edee5af7757e03a0ef"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a00d3ec19f1b669edee5af7757e03a0ef">SVF::PersistentDiffPTData::getAllPts</a></div><div class="ttdeci">Map< DataSet, unsigned > getAllPts(bool liveOnly) const override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00304">PersistentPointsToDS.h:304</a></div></div>
|
|
88
90
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a2cb37d0403e1b34316c9c24a0d6ab66c"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a2cb37d0403e1b34316c9c24a0d6ab66c">SVF::PersistentDFPTData::unionPtsThroughIds</a></div><div class="ttdeci">bool unionPtsThroughIds(PointsToID &dst, PointsToID &src)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00549">PersistentPointsToDS.h:549</a></div></div>
|
|
89
91
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a146a25bf9ae76f4c3c117433df9d382f"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a146a25bf9ae76f4c3c117433df9d382f">SVF::PersistentPTData::ptCache</a></div><div class="ttdeci">PersistentPointsToCache< DataSet > & ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00193">PersistentPointsToDS.h:193</a></div></div>
|
|
90
|
-
<div class="ttc" id="
|
|
91
|
-
<div class="ttc" id="
|
|
92
|
-
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_a98d176e384469e0308bfee2061ef84b5"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">SVF::PersistentPointsToCache::emplacePts</a></div><div class="ttdeci">PointsToID emplacePts(const Data &pts)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#l00091">PersistentPointsToCache.h:91</a></div></div>
|
|
93
|
-
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_ac563829c0d6d091c905bfe16580ceb47"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#ac563829c0d6d091c905bfe16580ceb47">SVF::PersistentVersionedPTData::clear</a></div><div class="ttdeci">virtual void clear() override</div><div class="ttdoc">Clears all points-to sets as if nothing is stored. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00820">PersistentPointsToDS.h:820</a></div></div>
|
|
92
|
+
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_a98d176e384469e0308bfee2061ef84b5"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#a98d176e384469e0308bfee2061ef84b5">SVF::PersistentPointsToCache::emplacePts</a></div><div class="ttdeci">PointsToID emplacePts(const Data &pts)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#l00090">PersistentPointsToCache.h:90</a></div></div>
|
|
93
|
+
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_af010be5ac5466ed51f902fcf3d805080"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#af010be5ac5466ed51f902fcf3d805080">SVF::PersistentIncDFPTData::updateDFInFromOut</a></div><div class="ttdeci">bool updateDFInFromOut(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Union (IN[dstLoc:dstVar], OUT[srcLoc:srcVar]). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00611">PersistentPointsToDS.h:611</a></div></div>
|
|
94
94
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a85e0aec789ea945bd4cfa9e29189d1b4"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a85e0aec789ea945bd4cfa9e29189d1b4">SVF::PersistentDFPTData::PersistentDFPTData</a></div><div class="ttdeci">PersistentDFPTData(PersistentPointsToCache< DataSet > &cache, bool reversePT=true, PTDataTy ty=PTDataTy::PersDataFlow)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00346">PersistentPointsToDS.h:346</a></div></div>
|
|
95
|
-
<div class="ttc" id="
|
|
96
|
-
<div class="ttc" id="
|
|
97
|
-
<div class="ttc" id="
|
|
95
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a6af27fbe2c38c4d40d8df5aa1c765f62"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a6af27fbe2c38c4d40d8df5aa1c765f62">SVF::PersistentDFPTData::clearAllDFOutUpdatedVar</a></div><div class="ttdeci">void clearAllDFOutUpdatedVar(LocID) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00486">PersistentPointsToDS.h:486</a></div></div>
|
|
96
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_af8e866e13c7ba87a33b0da0a769d4372"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#af8e866e13c7ba87a33b0da0a769d4372">SVF::PersistentDFPTData::hasDFOutSet</a></div><div class="ttdeci">bool hasDFOutSet(LocID loc) const override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00409">PersistentPointsToDS.h:409</a></div></div>
|
|
97
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a82621bb9b53ccb479cb7278df9a4e366"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a82621bb9b53ccb479cb7278df9a4e366">SVF::PersistentPTData::getPts</a></div><div class="ttdeci">const DataSet & getPts(const Key &var) override</div><div class="ttdoc">Get points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00059">PersistentPointsToDS.h:59</a></div></div>
|
|
98
98
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aeecfaf26800dcebf0b079395126bc7f7"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aeecfaf26800dcebf0b079395126bc7f7">SVF::SVFUtil::insertKey</a></div><div class="ttdeci">void insertKey(const Key &key, KeySet &keySet)</div><div class="ttdoc">Inserts an element into a Set/CondSet (with ::insert). </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00256">SVFUtil.h:256</a></div></div>
|
|
99
99
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_afb53f0b47cdad94379c3a4895980be9c"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#afb53f0b47cdad94379c3a4895980be9c">SVF::PersistentDiffPTData::classof</a></div><div class="ttdeci">static bool classof(const PersistentDiffPTData< Key, KeySet, Data, DataSet > *)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00311">PersistentPointsToDS.h:311</a></div></div>
|
|
100
100
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a61b44f6d63cca013da2b278f47298473"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a61b44f6d63cca013da2b278f47298473">SVF::PersistentVersionedPTData::atPTData</a></div><div class="ttdeci">PersistentPTData< VersionedKey, VersionedKeySet, Data, DataSet > atPTData</div><div class="ttdoc">PTData for VersionedKeys (address-taken objects, generally). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00951">PersistentPointsToDS.h:951</a></div></div>
|
|
101
|
-
<div class="ttc" id="
|
|
101
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a4faa0f91fa8acbd8c818f3abf5db8b5f"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a4faa0f91fa8acbd8c818f3abf5db8b5f">SVF::PersistentVersionedPTData::getRevPts</a></div><div class="ttdeci">const KeySet & getRevPts(const Data &data) override</div><div class="ttdoc">Get reverse points-to set of a datum. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00835">PersistentPointsToDS.h:835</a></div></div>
|
|
102
102
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_ad1a2cd17519912b1d7571eeddcdc0060"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#ad1a2cd17519912b1d7571eeddcdc0060">SVF::PersistentIncDFPTData::removeVarFromDFOutUpdatedSet</a></div><div class="ttdeci">void removeVarFromDFOutUpdatedSet(LocID loc, const Key &var)</div><div class="ttdoc">Remove var from loc&#39;s OUT updated set. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00773">PersistentPointsToDS.h:773</a></div></div>
|
|
103
|
-
<div class="ttc" id="
|
|
104
|
-
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a50c3d871edb13ac5b3f0d625deb6449a"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a50c3d871edb13ac5b3f0d625deb6449a">SVF::PersistentDFPTData::getRevPts</a></div><div class="ttdeci">virtual const KeySet & getRevPts(const Data &) override</div><div class="ttdoc">Get reverse points-to set of a datum. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00363">PersistentPointsToDS.h:363</a></div></div>
|
|
105
|
-
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_af64c6a2c0a1b2044fac56a69e9db7cff"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#af64c6a2c0a1b2044fac56a69e9db7cff">SVF::PersistentDFPTData::clearPts</a></div><div class="ttdeci">virtual void clearPts(const Key &var, const Data &element) override</div><div class="ttdoc">Clears element from the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00384">PersistentPointsToDS.h:384</a></div></div>
|
|
103
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a492df7c388e3f616e60b63630b8c37c5"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a492df7c388e3f616e60b63630b8c37c5">SVF::PersistentPTData::clear</a></div><div class="ttdeci">void clear() override</div><div class="ttdoc">Clears all points-to sets as if nothing is stored. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00053">PersistentPointsToDS.h:53</a></div></div>
|
|
106
104
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a4e896ec87d07e5b75401de4367d67458"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a4e896ec87d07e5b75401de4367d67458">SVF::PersistentPTData::classof</a></div><div class="ttdeci">static bool classof(const PTData< Key, KeySet, Data, DataSet > *ptd)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00145">PersistentPointsToDS.h:145</a></div></div>
|
|
107
|
-
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_a178b49cca2c22e874ff9e772cc4df72b"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#a178b49cca2c22e874ff9e772cc4df72b">SVF::PersistentPointsToCache::unionPts</a></div><div class="ttdeci">PointsToID unionPts(PointsToID lhs, PointsToID rhs)</div><div class="ttdoc">Unions lhs and rhs and returns their union&#39;s ID. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#
|
|
105
|
+
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_a178b49cca2c22e874ff9e772cc4df72b"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#a178b49cca2c22e874ff9e772cc4df72b">SVF::PersistentPointsToCache::unionPts</a></div><div class="ttdeci">PointsToID unionPts(PointsToID lhs, PointsToID rhs)</div><div class="ttdoc">Unions lhs and rhs and returns their union&#39;s ID. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#l00113">PersistentPointsToCache.h:113</a></div></div>
|
|
108
106
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a444bc59754b4c365327b7ef44baadcd2"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a444bc59754b4c365327b7ef44baadcd2">SVF::PersistentDiffPTData::ptCache</a></div><div class="ttdeci">PersistentPointsToCache< DataSet > & ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00323">PersistentPointsToDS.h:323</a></div></div>
|
|
109
|
-
<div class="ttc" id="
|
|
110
|
-
<div class="ttc" id="
|
|
111
|
-
<div class="ttc" id="
|
|
107
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_aa00130defb8ab675fdc6ec3ecb48fd85"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#aa00130defb8ab675fdc6ec3ecb48fd85">SVF::PersistentDFPTData::getDFInPtsSet</a></div><div class="ttdeci">const DataSet & getDFInPtsSet(LocID loc, const Key &var) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00430">PersistentPointsToDS.h:430</a></div></div>
|
|
108
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a5610c0d4a06a9c97d6bf79c494366943"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a5610c0d4a06a9c97d6bf79c494366943">SVF::PersistentPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const Key &dstKey, const Key &srcKey) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U pts(srcVar). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00079">PersistentPointsToDS.h:79</a></div></div>
|
|
109
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a297cfa81c47d76f989a952edfc34c021"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a297cfa81c47d76f989a952edfc34c021">SVF::PersistentDFPTData::updateAllDFInFromIn</a></div><div class="ttdeci">bool updateAllDFInFromIn(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Union (IN[dstLoc::dstVar], IN[srcLoc:srcVar]. There is no flag check, unlike the above. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00447">PersistentPointsToDS.h:447</a></div></div>
|
|
110
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a5e6ab689e9a9eefdd5f6bf04ab279940"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a5e6ab689e9a9eefdd5f6bf04ab279940">SVF::PersistentVersionedPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const VersionedKey &dstVar, const Key &srcVar) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00863">PersistentPointsToDS.h:863</a></div></div>
|
|
111
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a4a55644f32cf3ccddf85541f61bef5ff"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a4a55644f32cf3ccddf85541f61bef5ff">SVF::PersistentDiffPTData::clearPts</a></div><div class="ttdeci">void clearPts(const Key &var, const Data &element) override</div><div class="ttdoc">Clears element from the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00250">PersistentPointsToDS.h:250</a></div></div>
|
|
112
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a7c34a171565b7eb45a54b6a8336a321d"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a7c34a171565b7eb45a54b6a8336a321d">SVF::PersistentDiffPTData::getRevPts</a></div><div class="ttdeci">const KeySet & getRevPts(const Data &data) override</div><div class="ttdoc">Get reverse points-to set of a datum. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00229">PersistentPointsToDS.h:229</a></div></div>
|
|
112
113
|
<div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
|
|
113
114
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_afc28b40eea7bad5276bbab30749d598b"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#afc28b40eea7bad5276bbab30749d598b">SVF::PersistentDFPTData::getDFInPtIdRef</a></div><div class="ttdeci">PointsToID & getDFInPtIdRef(LocID loc, const Key &var)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00556">PersistentPointsToDS.h:556</a></div></div>
|
|
114
|
-
<div class="ttc" id="
|
|
115
|
-
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_ab84d0806e87c982bf81ae309f28751e3"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#ab84d0806e87c982bf81ae309f28751e3">SVF::PersistentPointsToCache::getAllPts</a></div><div class="ttdeci">Map< Data, unsigned > getAllPts(void)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#l00345">PersistentPointsToCache.h:345</a></div></div>
|
|
115
|
+
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_ab84d0806e87c982bf81ae309f28751e3"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#ab84d0806e87c982bf81ae309f28751e3">SVF::PersistentPointsToCache::getAllPts</a></div><div class="ttdeci">Map< Data, unsigned > getAllPts(void)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#l00344">PersistentPointsToCache.h:344</a></div></div>
|
|
116
116
|
<div class="ttc" id="classSVF_1_1DFPTData_html"><div class="ttname"><a href="classSVF_1_1DFPTData.html">SVF::DFPTData</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00194">AbstractPointsToDS.h:194</a></div></div>
|
|
117
|
-
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_ae42379dbabbd66dfd91e305673788ed3"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#ae42379dbabbd66dfd91e305673788ed3">SVF::PersistentDiffPTData::computeDiffPts</a></div><div class="ttdeci">virtual bool computeDiffPts(Key &var, const DataSet &all) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00276">PersistentPointsToDS.h:276</a></div></div>
|
|
118
|
-
<div class="ttc" id="classSVF_1_1PersistentPTData_html_aff3437089686869faa772c44bca753b6"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#aff3437089686869faa772c44bca753b6">SVF::PersistentPTData::clearFullPts</a></div><div class="ttdeci">virtual void clearFullPts(const Key &var) override</div><div class="ttdoc">Fully clears the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00109">PersistentPointsToDS.h:109</a></div></div>
|
|
119
117
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a46ab9d8365d9f9db9d84f5b8bcd3309c"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a46ab9d8365d9f9db9d84f5b8bcd3309c">SVF::PersistentPTData::clearSingleRevPts</a></div><div class="ttdeci">void clearSingleRevPts(KeySet &revSet, const Key &k)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00176">PersistentPointsToDS.h:176</a></div></div>
|
|
120
118
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_af9facbe8f694b8447bb6ebe48b95ad17"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#af9facbe8f694b8447bb6ebe48b95ad17">SVF::PersistentDFPTData::BaseDFPTData</a></div><div class="ttdeci">DFPTData< Key, KeySet, Data, DataSet > BaseDFPTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00339">PersistentPointsToDS.h:339</a></div></div>
|
|
121
|
-
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_add8c649853678b6c7acfa4217f1b7ee0"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#add8c649853678b6c7acfa4217f1b7ee0">SVF::PersistentDiffPTData::remapAllPts</a></div><div class="ttdeci">virtual void remapAllPts(void) override</div><div class="ttdoc">Remaps all points-to sets to use the current mapping. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00260">PersistentPointsToDS.h:260</a></div></div>
|
|
122
|
-
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a83b7e86c11b03889d70b4dff46138987"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a83b7e86c11b03889d70b4dff46138987">SVF::PersistentVersionedPTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const Key &dstVar, const VersionedKey &srcVar) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00867">PersistentPointsToDS.h:867</a></div></div>
|
|
123
|
-
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a218ebd39a42b5de8910b98bef9d04f7d"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a218ebd39a42b5de8910b98bef9d04f7d">SVF::PersistentIncDFPTData::updateAllDFInFromOut</a></div><div class="ttdeci">virtual bool updateAllDFInFromOut(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Union (IN[dstLoc::dstVar], OUT[srcLoc:srcVar]. There is no flag check, unlike the above...</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00638">PersistentPointsToDS.h:638</a></div></div>
|
|
124
119
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a29104a2d53d94805e142f778d3d21ad5"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a29104a2d53d94805e142f778d3d21ad5">SVF::PersistentVersionedPTData::tlPTData</a></div><div class="ttdeci">PersistentPTData< Key, KeySet, Data, DataSet > tlPTData</div><div class="ttdoc">PTData for Keys (top-level pointers, generally). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00949">PersistentPointsToDS.h:949</a></div></div>
|
|
125
|
-
<div class="ttc" id="
|
|
120
|
+
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a8898a6164a0d83f179b9ee6175ddc1fe"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a8898a6164a0d83f179b9ee6175ddc1fe">SVF::PersistentIncDFPTData::updateAllDFInFromIn</a></div><div class="ttdeci">bool updateAllDFInFromIn(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Union (IN[dstLoc::dstVar], IN[srcLoc:srcVar]. There is no flag check, unlike the above. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00649">PersistentPointsToDS.h:649</a></div></div>
|
|
121
|
+
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a5291cccfb9bd6cb93ff931e4f2465d40"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a5291cccfb9bd6cb93ff931e4f2465d40">SVF::PersistentIncDFPTData::updateAllDFInFromOut</a></div><div class="ttdeci">bool updateAllDFInFromOut(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Union (IN[dstLoc::dstVar], OUT[srcLoc:srcVar]. There is no flag check, unlike the above...</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00638">PersistentPointsToDS.h:638</a></div></div>
|
|
126
122
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a77bdc80a999296bcfa8d9f1f92c933d1"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a77bdc80a999296bcfa8d9f1f92c933d1">SVF::PersistentIncDFPTData::LocID</a></div><div class="ttdeci">BaseDFPTData::LocID LocID</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00589">PersistentPointsToDS.h:589</a></div></div>
|
|
127
123
|
<div class="ttc" id="AbstractPointsToDS_8h_html"><div class="ttname"><a href="AbstractPointsToDS_8h.html">AbstractPointsToDS.h</a></div></div>
|
|
128
|
-
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a34f8226202e1654d4e67916b21ec4d99"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a34f8226202e1654d4e67916b21ec4d99">SVF::PersistentPTData::getPts</a></div><div class="ttdeci">virtual const DataSet & getPts(const Key &var) override</div><div class="ttdoc">Get points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00059">PersistentPointsToDS.h:59</a></div></div>
|
|
129
124
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ad77d7ccad393c995813f8c433c249dfc"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ad77d7ccad393c995813f8c433c249dfc">SVF::PersistentDFPTData::dfOutPtsMap</a></div><div class="ttdeci">DFKeyToIDMap dfOutPtsMap</div><div class="ttdoc">Address-taken points-to sets in OUT-sets. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00575">PersistentPointsToDS.h:575</a></div></div>
|
|
130
125
|
<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="SVFType_8h_source.html#l00099">SVFType.h:99</a></div></div>
|
|
131
|
-
<div class="ttc" id="
|
|
132
|
-
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ab070b1baa6a01800edac36dc075107fd"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ab070b1baa6a01800edac36dc075107fd">SVF::PersistentDFPTData::clear</a></div><div class="ttdeci">virtual void clear() override</div><div class="ttdoc">Clears all points-to sets as if nothing is stored. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00351">PersistentPointsToDS.h:351</a></div></div>
|
|
133
|
-
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a8ba8e547bf572cd7403cb4fe52c19908"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a8ba8e547bf572cd7403cb4fe52c19908">SVF::PersistentVersionedPTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const VersionedKey &dstVar, const Key &srcVar) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00863">PersistentPointsToDS.h:863</a></div></div>
|
|
126
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a6e46180c11bc25c474d03e0091e81ee2"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a6e46180c11bc25c474d03e0091e81ee2">SVF::PersistentPTData::dumpPTData</a></div><div class="ttdeci">void dumpPTData() override</div><div class="ttdoc">Dump stored keys and points-to sets. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00091">PersistentPointsToDS.h:91</a></div></div>
|
|
134
127
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html">SVF::PersistentVersionedPTData</a></div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00030">PersistentPointsToDS.h:30</a></div></div>
|
|
135
|
-
<div class="ttc" id="
|
|
136
|
-
<div class="ttc" id="
|
|
137
|
-
<div class="ttc" id="
|
|
128
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_ae0eafb4667af1ba821247f9f4199d52f"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#ae0eafb4667af1ba821247f9f4199d52f">SVF::PersistentVersionedPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const VersionedKey &dstVar, const VersionedKey &srcVar) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00859">PersistentPointsToDS.h:859</a></div></div>
|
|
129
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ab98f7068c3fb7d8e98a5ed4d706e4e62"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ab98f7068c3fb7d8e98a5ed4d706e4e62">SVF::PersistentDFPTData::dumpPTData</a></div><div class="ttdeci">void dumpPTData() override</div><div class="ttdoc">Dump stored keys and points-to sets. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00399">PersistentPointsToDS.h:399</a></div></div>
|
|
130
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_ab1246073bd0e0395528f8ec53281e315"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#ab1246073bd0e0395528f8ec53281e315">SVF::PersistentDiffPTData::getPts</a></div><div class="ttdeci">const DataSet & getPts(const Key &var) override</div><div class="ttdoc">Get points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00224">PersistentPointsToDS.h:224</a></div></div>
|
|
131
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a34819020692e33777fec59082269e8b4"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a34819020692e33777fec59082269e8b4">SVF::PersistentDiffPTData::getDiffPts</a></div><div class="ttdeci">const DataSet & getDiffPts(Key &var) override</div><div class="ttdoc">Get diff points to. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00270">PersistentPointsToDS.h:270</a></div></div>
|
|
138
132
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a656434f7b67aabf25f6dba400d95f2bb"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a656434f7b67aabf25f6dba400d95f2bb">SVF::PersistentIncDFPTData::classof</a></div><div class="ttdeci">static bool classof(const PersistentIncDFPTData< Key, KeySet, Data, DataSet > *)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00721">PersistentPointsToDS.h:721</a></div></div>
|
|
139
|
-
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a10221452ea6ffed4ae51a9c6f9dc1e93"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a10221452ea6ffed4ae51a9c6f9dc1e93">SVF::PersistentPTData::clearPts</a></div><div class="ttdeci">virtual void clearPts(const Key &var, const Data &element) override</div><div class="ttdoc">Clears element from the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00095">PersistentPointsToDS.h:95</a></div></div>
|
|
140
133
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_ac008ee5f7e4d286f9e76d85989358305"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#ac008ee5f7e4d286f9e76d85989358305">SVF::PersistentDiffPTData::RevPtsMap</a></div><div class="ttdeci">BasePersPTData::RevPtsMap RevPtsMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00209">PersistentPointsToDS.h:209</a></div></div>
|
|
141
|
-
<div class="ttc" id="
|
|
142
|
-
<div class="ttc" id="
|
|
134
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a17e68e28860278b425b9a2d99082e715"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a17e68e28860278b425b9a2d99082e715">SVF::PersistentDFPTData::hasDFInSet</a></div><div class="ttdeci">bool hasDFInSet(LocID loc) const override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00404">PersistentPointsToDS.h:404</a></div></div>
|
|
135
|
+
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_a89c4e8c8edcc6744f298e90d721a0745"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#a89c4e8c8edcc6744f298e90d721a0745">SVF::PersistentPointsToCache::remapAllPts</a></div><div class="ttdeci">void remapAllPts(void)</div><div class="ttdoc">Remaps all points-to sets stored in the cache to the current mapping. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#l00079">PersistentPointsToCache.h:79</a></div></div>
|
|
143
136
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a7b43ad5045ebdaa86f2587ea3f2f9563"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a7b43ad5045ebdaa86f2587ea3f2f9563">SVF::PersistentPTData::revPtsMap</a></div><div class="ttdeci">RevPtsMap revPtsMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00195">PersistentPointsToDS.h:195</a></div></div>
|
|
144
137
|
<div class="ttc" id="classSVF_1_1PTData_html"><div class="ttname"><a href="classSVF_1_1PTData.html">SVF::PTData</a></div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00074">AbstractPointsToDS.h:74</a></div></div>
|
|
145
|
-
<div class="ttc" id="
|
|
138
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a044c27920b947da4302d5214a3de580b"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a044c27920b947da4302d5214a3de580b">SVF::PersistentDFPTData::clearFullPts</a></div><div class="ttdeci">void clearFullPts(const Key &var) override</div><div class="ttdoc">Fully clears the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00389">PersistentPointsToDS.h:389</a></div></div>
|
|
139
|
+
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a451756aea2a3a0c895b75b7239672fdd"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a451756aea2a3a0c895b75b7239672fdd">SVF::PersistentIncDFPTData::updateAllDFOutFromIn</a></div><div class="ttdeci">bool updateAllDFOutFromIn(LocID loc, const Key &singleton, bool strongUpdates) override</div><div class="ttdoc">For each variable var in IN at loc, do updateDFOutFromIn(loc, var, loc, var). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00660">PersistentPointsToDS.h:660</a></div></div>
|
|
146
140
|
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html">SVF::PersistentPointsToCache< DataSet ></a></div></div>
|
|
147
141
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a142ea74fa724f047db14d3b573d9eee8"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a142ea74fa724f047db14d3b573d9eee8">SVF::PersistentPTData::unionPtsFromId</a></div><div class="ttdeci">bool unionPtsFromId(const Key &dstKey, PointsToID srcId)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00154">PersistentPointsToDS.h:154</a></div></div>
|
|
148
142
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html">SVF::PersistentDFPTData</a></div><div class="ttdoc">DFPTData backed by a PersistentPointsToCache. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00026">PersistentPointsToDS.h:26</a></div></div>
|
|
149
|
-
<div class="ttc" id="
|
|
150
|
-
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_ab2888b033a29de3af48d377dc2fe70aa"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">SVF::PersistentPointsToCache::getActualPts</a></div><div class="ttdeci">const Data & getActualPts(PointsToID id) const</div><div class="ttdoc">Returns the points-to set which id represents. id must be stored in the cache. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#l00106">PersistentPointsToCache.h:106</a></div></div>
|
|
143
|
+
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_ab2888b033a29de3af48d377dc2fe70aa"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#ab2888b033a29de3af48d377dc2fe70aa">SVF::PersistentPointsToCache::getActualPts</a></div><div class="ttdeci">const Data & getActualPts(PointsToID id) const</div><div class="ttdoc">Returns the points-to set which id represents. id must be stored in the cache. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#l00105">PersistentPointsToCache.h:105</a></div></div>
|
|
151
144
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_aa9f6b38595cabbb583c52217188457e8"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#aa9f6b38595cabbb583c52217188457e8">SVF::PersistentIncDFPTData::setVarDFOutSetUpdated</a></div><div class="ttdeci">void setVarDFOutSetUpdated(LocID loc, const Key &var)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00767">PersistentPointsToDS.h:767</a></div></div>
|
|
152
145
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a7751d9831519f8021626630dce499b1a"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a7751d9831519f8021626630dce499b1a">SVF::PersistentIncDFPTData::BasePTData</a></div><div class="ttdeci">PTData< Key, KeySet, Data, DataSet > BasePTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00583">PersistentPointsToDS.h:583</a></div></div>
|
|
153
|
-
<div class="ttc" id="
|
|
154
|
-
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_a86bf6959fb5587e350015d58d529af14"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#a86bf6959fb5587e350015d58d529af14">SVF::PersistentPointsToCache::complementPts</a></div><div class="ttdeci">PointsToID complementPts(PointsToID lhs, PointsToID rhs)</div><div class="ttdoc">Relatively complements lhs and rhs (lhs \ rhs) and returns it&#39;s ID. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#
|
|
155
|
-
<div class="ttc" id="
|
|
146
|
+
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a3e371be9324b9281781591d633d04c34"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a3e371be9324b9281781591d633d04c34">SVF::PersistentIncDFPTData::updateTLVPts</a></div><div class="ttdeci">bool updateTLVPts(LocID srcLoc, const Key &srcVar, const Key &dstVar) override</div><div class="ttdoc">Update points-to set of top-level pointers with IN[srcLoc:srcVar]. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00678">PersistentPointsToDS.h:678</a></div></div>
|
|
147
|
+
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_a86bf6959fb5587e350015d58d529af14"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#a86bf6959fb5587e350015d58d529af14">SVF::PersistentPointsToCache::complementPts</a></div><div class="ttdeci">PointsToID complementPts(PointsToID lhs, PointsToID rhs)</div><div class="ttdoc">Relatively complements lhs and rhs (lhs \ rhs) and returns it&#39;s ID. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#l00172">PersistentPointsToCache.h:172</a></div></div>
|
|
148
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_ae64bcb3ba179e934653e0ebfa2c18d8d"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#ae64bcb3ba179e934653e0ebfa2c18d8d">SVF::PersistentPTData::clearFullPts</a></div><div class="ttdeci">void clearFullPts(const Key &var) override</div><div class="ttdoc">Fully clears the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00109">PersistentPointsToDS.h:109</a></div></div>
|
|
156
149
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a18f90b2f4e54b47c4d6f2d50886a4411"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a18f90b2f4e54b47c4d6f2d50886a4411">SVF::PersistentDiffPTData::PersistentDiffPTData</a></div><div class="ttdeci">PersistentDiffPTData(PersistentPointsToCache< DataSet > &cache, bool reversePT=true, PTDataTy ty=PTDataTy::PersDiff)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00212">PersistentPointsToDS.h:212</a></div></div>
|
|
157
150
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a495fede1f68c53956df3c033ef349940"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a495fede1f68c53956df3c033ef349940">SVF::PersistentIncDFPTData::PersistentIncDFPTData</a></div><div class="ttdeci">PersistentIncDFPTData(PersistentPointsToCache< DataSet > &cache, bool reversePT=true, PTDataTy ty=BasePTData::PersIncDataFlow)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00594">PersistentPointsToDS.h:594</a></div></div>
|
|
151
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_af27a907b6207cc1c9f3f72f15a0c7c0a"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#af27a907b6207cc1c9f3f72f15a0c7c0a">SVF::PersistentVersionedPTData::clear</a></div><div class="ttdeci">void clear() override</div><div class="ttdoc">Clears all points-to sets as if nothing is stored. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00820">PersistentPointsToDS.h:820</a></div></div>
|
|
158
152
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a483c690c6cf19e258bdf7bb13e77976e"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a483c690c6cf19e258bdf7bb13e77976e">SVF::PersistentPTData::ptsMap</a></div><div class="ttdeci">KeyToIDMap ptsMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00194">PersistentPointsToDS.h:194</a></div></div>
|
|
159
|
-
<div class="ttc" id="
|
|
153
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_af686e607c3dd26a08a36c4212107d78d"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#af686e607c3dd26a08a36c4212107d78d">SVF::PersistentDiffPTData::clearFullPts</a></div><div class="ttdeci">void clearFullPts(const Key &var) override</div><div class="ttdoc">Fully clears the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00255">PersistentPointsToDS.h:255</a></div></div>
|
|
154
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_ab2ba1db7aeb6e3a508c11eb49bf31575"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#ab2ba1db7aeb6e3a508c11eb49bf31575">SVF::PersistentVersionedPTData::dumpPTData</a></div><div class="ttdeci">void dumpPTData() override</div><div class="ttdoc">Dump stored keys and points-to sets. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00926">PersistentPointsToDS.h:926</a></div></div>
|
|
160
155
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a0d0318fa192eac88a4307112e30e9d90"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a0d0318fa192eac88a4307112e30e9d90">SVF::PersistentDFPTData::DFKeyToIDMap</a></div><div class="ttdeci">Map< LocID, KeyToIDMap > DFKeyToIDMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00344">PersistentPointsToDS.h:344</a></div></div>
|
|
161
156
|
<div class="ttc" id="classSVF_1_1PTData_html_a74ce29609c51f2be34a0b5b7650a9848"><div class="ttname"><a href="classSVF_1_1PTData.html#a74ce29609c51f2be34a0b5b7650a9848">SVF::PTData< VersionedKey, VersionedKeySet, Data, DataSet >::PTDataTy</a></div><div class="ttdeci">PTDataTy</div><div class="ttdoc">Types of a points-to data structures. </div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00078">AbstractPointsToDS.h:78</a></div></div>
|
|
157
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_acfc73119798cb830a49f85ffab2654af"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#acfc73119798cb830a49f85ffab2654af">SVF::PersistentVersionedPTData::getAllPts</a></div><div class="ttdeci">Map< DataSet, unsigned > getAllPts(bool liveOnly) const override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00904">PersistentPointsToDS.h:904</a></div></div>
|
|
162
158
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a6b892b707524127928e269f0f0bbe868"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a6b892b707524127928e269f0f0bbe868">SVF::PersistentDFPTData::dfInPtsMap</a></div><div class="ttdeci">DFKeyToIDMap dfInPtsMap</div><div class="ttdoc">Address-taken points-to sets in IN-sets. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00573">PersistentPointsToDS.h:573</a></div></div>
|
|
163
159
|
<div class="ttc" id="PersistentPointsToCache_8h_html"><div class="ttname"><a href="PersistentPointsToCache_8h.html">PersistentPointsToCache.h</a></div></div>
|
|
164
|
-
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a7a12f89c0de40dbcb5fe48219a7c121b"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a7a12f89c0de40dbcb5fe48219a7c121b">SVF::PersistentDiffPTData::getRevPts</a></div><div class="ttdeci">virtual const KeySet & getRevPts(const Data &data) override</div><div class="ttdoc">Get reverse points-to set of a datum. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00229">PersistentPointsToDS.h:229</a></div></div>
|
|
165
|
-
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a5c31a5faad444bd19005d06ba28d0185"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a5c31a5faad444bd19005d06ba28d0185">SVF::PersistentVersionedPTData::clearFullPts</a></div><div class="ttdeci">virtual void clearFullPts(const Key &k) override</div><div class="ttdoc">Fully clears the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00889">PersistentPointsToDS.h:889</a></div></div>
|
|
166
160
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a64864dcc7ec8a26244cdfbe8c25886a2"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a64864dcc7ec8a26244cdfbe8c25886a2">SVF::PersistentPTData::PTDataTy</a></div><div class="ttdeci">BasePTData::PTDataTy PTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00042">PersistentPointsToDS.h:42</a></div></div>
|
|
161
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a46c5bffbcae1494d5acb5e2d76f1501c"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a46c5bffbcae1494d5acb5e2d76f1501c">SVF::PersistentPTData::addPts</a></div><div class="ttdeci">bool addPts(const Key &dstKey, const Data &element) override</div><div class="ttdoc">Adds element to the points-to set associated with var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00071">PersistentPointsToDS.h:71</a></div></div>
|
|
167
162
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_ac54339952e2734a6affdaa543fb3ed22"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#ac54339952e2734a6affdaa543fb3ed22">SVF::PersistentDiffPTData::diffPtsMap</a></div><div class="ttdeci">KeyToIDMap diffPtsMap</div><div class="ttdoc">Diff points-to to be propagated. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00327">PersistentPointsToDS.h:327</a></div></div>
|
|
168
163
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_aee8871b4895d38bccb9078ad540f9f0f"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#aee8871b4895d38bccb9078ad540f9f0f">SVF::PersistentDFPTData::KeyToIDMap</a></div><div class="ttdeci">BasePersPTData::KeyToIDMap KeyToIDMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00343">PersistentPointsToDS.h:343</a></div></div>
|
|
169
|
-
<div class="ttc" id="
|
|
164
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a57e8efefa1b49bd5fecd363a65b3bced"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a57e8efefa1b49bd5fecd363a65b3bced">SVF::PersistentDFPTData::updateAllDFInFromOut</a></div><div class="ttdeci">bool updateAllDFInFromOut(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Union (IN[dstLoc::dstVar], OUT[srcLoc:srcVar]. There is no flag check, unlike the above...</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00457">PersistentPointsToDS.h:457</a></div></div>
|
|
165
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a0aa74ee810233d6f1da09d1e593c35d8"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a0aa74ee810233d6f1da09d1e593c35d8">SVF::PersistentDiffPTData::computeDiffPts</a></div><div class="ttdeci">bool computeDiffPts(Key &var, const DataSet &all) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00276">PersistentPointsToDS.h:276</a></div></div>
|
|
170
166
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a3a2cf38f220a831c4334614b835b57c6"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a3a2cf38f220a831c4334614b835b57c6">SVF::PersistentDiffPTData::BaseDiffPTData</a></div><div class="ttdeci">DiffPTData< Key, KeySet, Data, DataSet > BaseDiffPTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00204">PersistentPointsToDS.h:204</a></div></div>
|
|
171
167
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a440e0e1e1e449d5514dbc3f8a0da90d7"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a440e0e1e1e449d5514dbc3f8a0da90d7">SVF::PersistentIncDFPTData::PTDataTy</a></div><div class="ttdeci">BasePTData::PTDataTy PTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00587">PersistentPointsToDS.h:587</a></div></div>
|
|
172
|
-
<div class="ttc" id="
|
|
168
|
+
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a36697e534c6744dbc72b0a6ef619d906"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a36697e534c6744dbc72b0a6ef619d906">SVF::PersistentIncDFPTData::updateATVPts</a></div><div class="ttdeci">bool updateATVPts(const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Update address-taken variables OUT[dstLoc:dstVar] with points-to of top-level pointers. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00689">PersistentPointsToDS.h:689</a></div></div>
|
|
173
169
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a56764f78042a2a9229d3b76861b54952"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a56764f78042a2a9229d3b76861b54952">SVF::PersistentIncDFPTData::varHasNewDFInPts</a></div><div class="ttdeci">bool varHasNewDFInPts(LocID loc, const Key &var)</div><div class="ttdoc">Return TRUE if var has a new pts in loc&#39;s IN set. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00750">PersistentPointsToDS.h:750</a></div></div>
|
|
174
|
-
<div class="ttc" id="
|
|
175
|
-
<div class="ttc" id="
|
|
176
|
-
<div class="ttc" id="
|
|
170
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a1cd608254a5d4a59b507bb6508e3560d"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a1cd608254a5d4a59b507bb6508e3560d">SVF::PersistentDFPTData::getRevPts</a></div><div class="ttdeci">const KeySet & getRevPts(const Data &) override</div><div class="ttdoc">Get reverse points-to set of a datum. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00363">PersistentPointsToDS.h:363</a></div></div>
|
|
171
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_aca91b22bed509c3b26efee746126f917"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#aca91b22bed509c3b26efee746126f917">SVF::PersistentVersionedPTData::addPts</a></div><div class="ttdeci">bool addPts(const Key &k, const Data &element) override</div><div class="ttdoc">Adds element to the points-to set associated with var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00846">PersistentPointsToDS.h:846</a></div></div>
|
|
172
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_ae705d46ac78d39f0779c0bf05e39f8b3"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#ae705d46ac78d39f0779c0bf05e39f8b3">SVF::PersistentVersionedPTData::getPts</a></div><div class="ttdeci">const DataSet & getPts(const VersionedKey &vk) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00830">PersistentPointsToDS.h:830</a></div></div>
|
|
173
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_ac21d6571ec53a01ee93e0383e4afef78"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#ac21d6571ec53a01ee93e0383e4afef78">SVF::PersistentDiffPTData::remapAllPts</a></div><div class="ttdeci">void remapAllPts() override</div><div class="ttdoc">Remaps all points-to sets to use the current mapping. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00260">PersistentPointsToDS.h:260</a></div></div>
|
|
177
174
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_aad89172e6e99d5ee576faa7bc74b36d8"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#aad89172e6e99d5ee576faa7bc74b36d8">SVF::PersistentPTData::RevPtsMap</a></div><div class="ttdeci">Map< Data, KeySet > RevPtsMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00045">PersistentPointsToDS.h:45</a></div></div>
|
|
178
|
-
<div class="ttc" id="
|
|
175
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a080969ab00b584d44ea9afbd2baa740a"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a080969ab00b584d44ea9afbd2baa740a">SVF::PersistentVersionedPTData::clearFullPts</a></div><div class="ttdeci">void clearFullPts(const Key &k) override</div><div class="ttdoc">Fully clears the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00889">PersistentPointsToDS.h:889</a></div></div>
|
|
179
176
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a28a8bf95351e295e65360bf16241a5da"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a28a8bf95351e295e65360bf16241a5da">SVF::PersistentVersionedPTData::classof</a></div><div class="ttdeci">static bool classof(const PersistentVersionedPTData< Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet > *)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00936">PersistentPointsToDS.h:936</a></div></div>
|
|
177
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a132babeb5291086130247f015b2bef2b"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a132babeb5291086130247f015b2bef2b">SVF::PersistentDFPTData::updateATVPts</a></div><div class="ttdeci">bool updateATVPts(const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Update address-taken variables OUT[dstLoc:dstVar] with points-to of top-level pointers. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00496">PersistentPointsToDS.h:496</a></div></div>
|
|
178
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ab63925fcd6506e6146d5f7487a39f155"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ab63925fcd6506e6146d5f7487a39f155">SVF::PersistentDFPTData::updateDFOutFromIn</a></div><div class="ttdeci">bool updateDFOutFromIn(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Union (OUT[dstLoc:dstVar], IN[srcLoc:srcVar]). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00462">PersistentPointsToDS.h:462</a></div></div>
|
|
180
179
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::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>
|
|
181
180
|
<div class="ttc" id="PointsTo_8h_html"><div class="ttname"><a href="PointsTo_8h.html">PointsTo.h</a></div></div>
|
|
182
181
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_acea7eb9ee0c1ee36906d50bce584b56a"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#acea7eb9ee0c1ee36906d50bce584b56a">SVF::PersistentIncDFPTData::BasePersPTData</a></div><div class="ttdeci">PersistentPTData< Key, KeySet, Data, DataSet > BasePersPTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00584">PersistentPointsToDS.h:584</a></div></div>
|
|
183
|
-
<div class="ttc" id="
|
|
184
|
-
<div class="ttc" id="
|
|
185
|
-
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_ab01a663b665d629c15f3531f18b5abc2"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#ab01a663b665d629c15f3531f18b5abc2">SVF::PersistentDiffPTData::clearPts</a></div><div class="ttdeci">virtual void clearPts(const Key &var, const Data &element) override</div><div class="ttdoc">Clears element from the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00250">PersistentPointsToDS.h:250</a></div></div>
|
|
182
|
+
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_aaed9e93e3515c025e05786212b1baac5"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#aaed9e93e3515c025e05786212b1baac5">SVF::PersistentIncDFPTData::updateDFOutFromIn</a></div><div class="ttdeci">bool updateDFOutFromIn(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Union (OUT[dstLoc:dstVar], IN[srcLoc:srcVar]). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00623">PersistentPointsToDS.h:623</a></div></div>
|
|
183
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a522af0d1727809479b1122b075b0845e"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a522af0d1727809479b1122b075b0845e">SVF::PersistentVersionedPTData::clearPts</a></div><div class="ttdeci">void clearPts(const Key &k, const Data &element) override</div><div class="ttdoc">Clears element from the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00880">PersistentPointsToDS.h:880</a></div></div>
|
|
186
184
|
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_a921a4ef4c72ccde5724860f98ad62a57"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#a921a4ef4c72ccde5724860f98ad62a57">SVF::PersistentPointsToCache::emptyPointsToId</a></div><div class="ttdeci">static PointsToID emptyPointsToId(void)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#l00039">PersistentPointsToCache.h:39</a></div></div>
|
|
187
|
-
<div class="ttc" id="
|
|
188
|
-
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_aa9aac7ff120abf87e7edfe233691f00f"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#aa9aac7ff120abf87e7edfe233691f00f">SVF::PersistentDiffPTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const Key &dstKey, const DataSet &srcDataSet) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U srcDataSet. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00245">PersistentPointsToDS.h:245</a></div></div>
|
|
189
|
-
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_afe80884fa8227e50f28631e20aa6fdf6"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#afe80884fa8227e50f28631e20aa6fdf6">SVF::PersistentVersionedPTData::getPts</a></div><div class="ttdeci">virtual const DataSet & getPts(const Key &vk) override</div><div class="ttdoc">Get points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00826">PersistentPointsToDS.h:826</a></div></div>
|
|
190
|
-
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_aa9d13ece84d5f519031b4f3cdb429d61"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#aa9d13ece84d5f519031b4f3cdb429d61">SVF::PersistentDFPTData::updateTLVPts</a></div><div class="ttdeci">virtual bool updateTLVPts(LocID srcLoc, const Key &srcVar, const Key &dstVar) override</div><div class="ttdoc">Update points-to set of top-level pointers with IN[srcLoc:srcVar]. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00491">PersistentPointsToDS.h:491</a></div></div>
|
|
185
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_af6ccac71f0232e46fef1da82cba01959"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#af6ccac71f0232e46fef1da82cba01959">SVF::PersistentDiffPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const Key &dstKey, const DataSet &srcDataSet) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U srcDataSet. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00245">PersistentPointsToDS.h:245</a></div></div>
|
|
191
186
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_ae56633d34e5fb4499c82d422646a91f0"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#ae56633d34e5fb4499c82d422646a91f0">SVF::PersistentIncDFPTData::BaseDFPTData</a></div><div class="ttdeci">DFPTData< Key, KeySet, Data, DataSet > BaseDFPTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00585">PersistentPointsToDS.h:585</a></div></div>
|
|
187
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_aaf048cdd17875dd3a9adca2aabcbfd7e"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#aaf048cdd17875dd3a9adca2aabcbfd7e">SVF::PersistentVersionedPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const Key &dstVar, const DataSet &srcDataSet) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U srcDataSet. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00871">PersistentPointsToDS.h:871</a></div></div>
|
|
192
188
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_ab71b82478d74f1a20ce3de479f2d8d5c"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#ab71b82478d74f1a20ce3de479f2d8d5c">SVF::PersistentVersionedPTData::BaseVersionedPTData</a></div><div class="ttdeci">VersionedPTData< Key, KeySet, Data, DataSet, VersionedKey, VersionedKeySet > BaseVersionedPTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00809">PersistentPointsToDS.h:809</a></div></div>
|
|
193
|
-
<div class="ttc" id="
|
|
189
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a75f78272350b64aa00fd739f352fecb5"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a75f78272350b64aa00fd739f352fecb5">SVF::PersistentPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const Key &dstKey, const DataSet &srcData) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U srcDataSet. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00085">PersistentPointsToDS.h:85</a></div></div>
|
|
194
190
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_abffb5c9cfe1e306ce524ef1dc5ff18ad"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#abffb5c9cfe1e306ce524ef1dc5ff18ad">SVF::PersistentDiffPTData::propaPtsMap</a></div><div class="ttdeci">KeyToIDMap propaPtsMap</div><div class="ttdoc">Points-to already propagated. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00329">PersistentPointsToDS.h:329</a></div></div>
|
|
195
|
-
<div class="ttc" id="
|
|
196
|
-
<div class="ttc" id="
|
|
191
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_aa263aa1f78fd85d1104a907042f58177"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#aa263aa1f78fd85d1104a907042f58177">SVF::PersistentDFPTData::updateAllDFOutFromIn</a></div><div class="ttdeci">bool updateAllDFOutFromIn(LocID loc, const Key &singleton, bool strongUpdates) override</div><div class="ttdoc">For each variable var in IN at loc, do updateDFOutFromIn(loc, var, loc, var). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00467">PersistentPointsToDS.h:467</a></div></div>
|
|
192
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a7560a47f1e8894b9025b779c4794138c"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a7560a47f1e8894b9025b779c4794138c">SVF::PersistentVersionedPTData::clearFullPts</a></div><div class="ttdeci">void clearFullPts(const VersionedKey &vk) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00893">PersistentPointsToDS.h:893</a></div></div>
|
|
193
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a14419b91e9c790623060b10b13f9ad13"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a14419b91e9c790623060b10b13f9ad13">SVF::PersistentVersionedPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const Key &dstVar, const Key &srcVar) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U pts(srcVar). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00855">PersistentPointsToDS.h:855</a></div></div>
|
|
197
194
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_abb11d9bd24cb587bba6f762ab49b07c8"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#abb11d9bd24cb587bba6f762ab49b07c8">SVF::PersistentDFPTData::PTDataTy</a></div><div class="ttdeci">BasePTData::PTDataTy PTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00338">PersistentPointsToDS.h:338</a></div></div>
|
|
198
|
-
<div class="ttc" id="
|
|
199
|
-
<div class="ttc" id="
|
|
200
|
-
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_ac7caee8468f12e87a70837a8f2e9685c"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#ac7caee8468f12e87a70837a8f2e9685c">SVF::PersistentDiffPTData::dumpPTData</a></div><div class="ttdeci">virtual void dumpPTData() override</div><div class="ttdoc">Dump stored keys and points-to sets. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00265">PersistentPointsToDS.h:265</a></div></div>
|
|
195
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a99bc747e5a23b8d97a320fe1e0bf926f"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a99bc747e5a23b8d97a320fe1e0bf926f">SVF::PersistentDFPTData::addPts</a></div><div class="ttdeci">bool addPts(const Key &dstKey, const Data &element) override</div><div class="ttdoc">Adds element to the points-to set associated with var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00379">PersistentPointsToDS.h:379</a></div></div>
|
|
196
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a5ab578384889cf6e01b0e67d9b0e456e"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a5ab578384889cf6e01b0e67d9b0e456e">SVF::PersistentDiffPTData::clearPropaPts</a></div><div class="ttdeci">void clearPropaPts(Key &var) override</div><div class="ttdoc">Clear propagated points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00299">PersistentPointsToDS.h:299</a></div></div>
|
|
201
197
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a349c231f59ea554059a1891f1a530820"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a349c231f59ea554059a1891f1a530820">SVF::PersistentDFPTData::persPTData</a></div><div class="ttdeci">PersistentPTData< Key, KeySet, Data, DataSet > persPTData</div><div class="ttdoc">PTData for top-level pointers. We will also use its cache for address-taken pointers. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00570">PersistentPointsToDS.h:570</a></div></div>
|
|
198
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ae0e64a1ec7f80b148f0a882e96503453"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ae0e64a1ec7f80b148f0a882e96503453">SVF::PersistentDFPTData::updateTLVPts</a></div><div class="ttdeci">bool updateTLVPts(LocID srcLoc, const Key &srcVar, const Key &dstVar) override</div><div class="ttdoc">Update points-to set of top-level pointers with IN[srcLoc:srcVar]. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00491">PersistentPointsToDS.h:491</a></div></div>
|
|
199
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_acabb81409a3767f31227f46e106cb2d0"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#acabb81409a3767f31227f46e106cb2d0">SVF::PersistentVersionedPTData::getVersionedKeyRevPts</a></div><div class="ttdeci">const VersionedKeySet & getVersionedKeyRevPts(const Data &data) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00840">PersistentPointsToDS.h:840</a></div></div>
|
|
202
200
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a778e8374e15bba331f1be99594970812"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a778e8374e15bba331f1be99594970812">SVF::PersistentDiffPTData::PTDataTy</a></div><div class="ttdeci">BasePTData::PTDataTy PTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00206">PersistentPointsToDS.h:206</a></div></div>
|
|
203
|
-
<div class="ttc" id="
|
|
204
|
-
<div class="ttc" id="
|
|
205
|
-
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a9191992b978b643f2d51633b2e330ec6"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a9191992b978b643f2d51633b2e330ec6">SVF::PersistentIncDFPTData::updateDFInFromOut</a></div><div class="ttdeci">virtual bool updateDFInFromOut(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Union (IN[dstLoc:dstVar], OUT[srcLoc:srcVar]). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00611">PersistentPointsToDS.h:611</a></div></div>
|
|
201
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_abcfcbbb3fab89b89168409c1f714e1ed"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#abcfcbbb3fab89b89168409c1f714e1ed">SVF::PersistentVersionedPTData::getPts</a></div><div class="ttdeci">const DataSet & getPts(const Key &vk) override</div><div class="ttdoc">Get points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00826">PersistentPointsToDS.h:826</a></div></div>
|
|
202
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a3b1d6e55ccaf82cd03914a1c948c4577"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a3b1d6e55ccaf82cd03914a1c948c4577">SVF::PersistentPTData::getAllPts</a></div><div class="ttdeci">Map< DataSet, unsigned > getAllPts(bool liveOnly) const override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00120">PersistentPointsToDS.h:120</a></div></div>
|
|
206
203
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html">SVF::PersistentIncDFPTData</a></div><div class="ttdoc">Incremental version of the persistent data-flow points-to data structure. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00028">PersistentPointsToDS.h:28</a></div></div>
|
|
207
204
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a1f85475cb6690bb1caa003c5a3aec92f"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a1f85475cb6690bb1caa003c5a3aec92f">SVF::PersistentVersionedPTData::classof</a></div><div class="ttdeci">static bool classof(const PTData< Key, KeySet, Data, DataSet > *ptd)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00941">PersistentPointsToDS.h:941</a></div></div>
|
|
205
|
+
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_ab41bf3e2ba1700ae6116702fb5ce8efe"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#ab41bf3e2ba1700ae6116702fb5ce8efe">SVF::PersistentIncDFPTData::clearAllDFOutUpdatedVar</a></div><div class="ttdeci">void clearAllDFOutUpdatedVar(LocID loc) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00700">PersistentPointsToDS.h:700</a></div></div>
|
|
208
206
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a54c206686c17101a0233fbbd3836c05c"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a54c206686c17101a0233fbbd3836c05c">SVF::PersistentDFPTData::BasePTData</a></div><div class="ttdeci">PTData< Key, KeySet, Data, DataSet > BasePTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00337">PersistentPointsToDS.h:337</a></div></div>
|
|
209
|
-
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_afe1f57d265c0910ec26567ce850b8421"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#afe1f57d265c0910ec26567ce850b8421">SVF::PersistentVersionedPTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const Key &dstVar, const Key &srcVar) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U pts(srcVar). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00855">PersistentPointsToDS.h:855</a></div></div>
|
|
210
207
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a2a83492ac0b641c67489a770aadc4ad0"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a2a83492ac0b641c67489a770aadc4ad0">SVF::PersistentPTData::clearRevPts</a></div><div class="ttdeci">void clearRevPts(const DataSet &pts, const Key &k)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00184">PersistentPointsToDS.h:184</a></div></div>
|
|
211
208
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a5b24a6efc462014ed8002cefee3c0e6e"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a5b24a6efc462014ed8002cefee3c0e6e">SVF::PersistentPTData::PersistentPTData</a></div><div class="ttdeci">PersistentPTData(PersistentPointsToCache< DataSet > &cache, bool reversePT=true, PTDataTy ty=PTDataTy::PersBase)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00048">PersistentPointsToDS.h:48</a></div></div>
|
|
212
|
-
<div class="ttc" id="
|
|
209
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_aa8c5694bcbf884bee43875433abc03c9"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#aa8c5694bcbf884bee43875433abc03c9">SVF::PersistentDiffPTData::updatePropaPtsMap</a></div><div class="ttdeci">void updatePropaPtsMap(Key &src, Key &dst) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00292">PersistentPointsToDS.h:292</a></div></div>
|
|
213
210
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ad374e8e6ddd5c397bd5ab6cf9b259968"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ad374e8e6ddd5c397bd5ab6cf9b259968">SVF::PersistentDFPTData::classof</a></div><div class="ttdeci">static bool classof(const PersistentDFPTData< Key, KeySet, Data, DataSet > *)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00536">PersistentPointsToDS.h:536</a></div></div>
|
|
214
211
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a4f4b1869210228e9d1b4f3900b41bb88"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a4f4b1869210228e9d1b4f3900b41bb88">SVF::PersistentDiffPTData::classof</a></div><div class="ttdeci">static bool classof(const PTData< Key, KeySet, Data, DataSet > *ptd)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00316">PersistentPointsToDS.h:316</a></div></div>
|
|
215
212
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_abad78c2ef84371b693dca206ebbb63ab"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#abad78c2ef84371b693dca206ebbb63ab">SVF::PersistentIncDFPTData::UpdatedVarMap</a></div><div class="ttdeci">Map< LocID, KeySet > UpdatedVarMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00590">PersistentPointsToDS.h:590</a></div></div>
|
|
213
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a2f4fe676fdb5c749aa9b3f68e45e26de"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a2f4fe676fdb5c749aa9b3f68e45e26de">SVF::PersistentPTData::getRevPts</a></div><div class="ttdeci">const KeySet & getRevPts(const Data &data) override</div><div class="ttdoc">Get reverse points-to set of a datum. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00065">PersistentPointsToDS.h:65</a></div></div>
|
|
216
214
|
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="AbstractValue_8h_source.html#l00037">AbstractValue.h:37</a></div></div>
|
|
217
215
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a575a441ddbe233d34937792b66d2b39c"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a575a441ddbe233d34937792b66d2b39c">SVF::PersistentDFPTData::classof</a></div><div class="ttdeci">static bool classof(const PTData< Key, KeySet, Data, DataSet > *ptd)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00541">PersistentPointsToDS.h:541</a></div></div>
|
|
216
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_abc8fbd41eddccddbbdc3316a3fd03276"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#abc8fbd41eddccddbbdc3316a3fd03276">SVF::PersistentDFPTData::getAllPts</a></div><div class="ttdeci">Map< DataSet, unsigned > getAllPts(bool liveOnly) const override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00501">PersistentPointsToDS.h:501</a></div></div>
|
|
218
217
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a6ca39340bb502c933c3dd6c1ab8f79c1"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a6ca39340bb502c933c3dd6c1ab8f79c1">SVF::PersistentPTData::BasePTData</a></div><div class="ttdeci">PTData< Key, KeySet, Data, DataSet > BasePTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00041">PersistentPointsToDS.h:41</a></div></div>
|
|
219
218
|
<div class="ttc" id="classSVF_1_1DFPTData_html_a298a5ef6cfffbe10b9d05af0ad12e786"><div class="ttname"><a href="classSVF_1_1DFPTData.html#a298a5ef6cfffbe10b9d05af0ad12e786">SVF::DFPTData::LocID</a></div><div class="ttdeci">NodeID LocID</div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00200">AbstractPointsToDS.h:200</a></div></div>
|
|
220
219
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_af86313e37c5177e45456f813b9b46a4f"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#af86313e37c5177e45456f813b9b46a4f">SVF::PersistentDFPTData::ptCache</a></div><div class="ttdeci">PersistentPointsToCache< DataSet > & ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00567">PersistentPointsToDS.h:567</a></div></div>
|
|
221
220
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a174c3cac13c839863171621ea25e609f"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a174c3cac13c839863171621ea25e609f">SVF::PersistentPTData::classof</a></div><div class="ttdeci">static bool classof(const PersistentPTData< Key, KeySet, Data, DataSet > *)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00140">PersistentPointsToDS.h:140</a></div></div>
|
|
222
|
-
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a5f6a01d0bb40a718bc14f2cc1bb98a13"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a5f6a01d0bb40a718bc14f2cc1bb98a13">SVF::PersistentDFPTData::getPts</a></div><div class="ttdeci">virtual const DataSet & getPts(const Key &var) override</div><div class="ttdoc">Get points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00358">PersistentPointsToDS.h:358</a></div></div>
|
|
223
221
|
<div class="ttc" id="namespaceSVF_html_ae545a88267bd2246de827cf590675aca"><div class="ttname"><a href="namespaceSVF.html#ae545a88267bd2246de827cf590675aca">SVF::PointsToID</a></div><div class="ttdeci">unsigned PointsToID</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00062">SVFType.h:62</a></div></div>
|
|
224
222
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_ad4586331863d67e78c54d919694b58db"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#ad4586331863d67e78c54d919694b58db">SVF::PersistentVersionedPTData::BasePTData</a></div><div class="ttdeci">PTData< Key, KeySet, Data, DataSet > BasePTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00808">PersistentPointsToDS.h:808</a></div></div>
|
|
225
|
-
<div class="ttc" id="
|
|
223
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_adb56e144709cab8efe057c3215e30b9b"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#adb56e144709cab8efe057c3215e30b9b">SVF::PersistentVersionedPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const Key &dstVar, const VersionedKey &srcVar) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00867">PersistentPointsToDS.h:867</a></div></div>
|
|
226
224
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_ad449df82589efb4c40affb5fdc46f479"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#ad449df82589efb4c40affb5fdc46f479">SVF::PersistentIncDFPTData::removeVarFromDFInUpdatedSet</a></div><div class="ttdeci">void removeVarFromDFInUpdatedSet(LocID loc, const Key &var)</div><div class="ttdoc">Remove var from loc&#39;s IN updated set. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00743">PersistentPointsToDS.h:743</a></div></div>
|
|
227
225
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a76d8a4f907269e9980f39c531806e96b"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a76d8a4f907269e9980f39c531806e96b">SVF::PersistentDFPTData::LocID</a></div><div class="ttdeci">BaseDFPTData::LocID LocID</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00342">PersistentPointsToDS.h:342</a></div></div>
|
|
228
|
-
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a00151507a86b71f99e43fa87b59d65bb"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a00151507a86b71f99e43fa87b59d65bb">SVF::PersistentVersionedPTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const Key &dstVar, const DataSet &srcDataSet) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U srcDataSet. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00871">PersistentPointsToDS.h:871</a></div></div>
|
|
229
226
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aee74719d33695e4da6fee5fc83f745d9"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aee74719d33695e4da6fee5fc83f745d9">SVF::SVFUtil::removeKey</a></div><div class="ttdeci">void removeKey(const Key &key, KeySet &keySet)</div><div class="ttdoc">Removes an element from a Set/CondSet (or anything implementing ::erase). </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00269">SVFUtil.h:269</a></div></div>
|
|
230
|
-
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a5b015e6801e4320e45e7942f9db82a42"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a5b015e6801e4320e45e7942f9db82a42">SVF::PersistentIncDFPTData::updateDFInFromIn</a></div><div class="ttdeci">virtual bool updateDFInFromIn(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00599">PersistentPointsToDS.h:599</a></div></div>
|
|
231
227
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a2ee473a1654b7d134a602268a2b70248"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a2ee473a1654b7d134a602268a2b70248">SVF::PersistentVersionedPTData::VersionedKeyToIDMap</a></div><div class="ttdeci">PersistentPTData< VersionedKey, VersionedKeySet, Data, DataSet >::KeyToIDMap VersionedKeyToIDMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00813">PersistentPointsToDS.h:813</a></div></div>
|
|
232
|
-
<div class="ttc" id="
|
|
228
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a64e3dbd840184eb8e829c4d003b5b4cf"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a64e3dbd840184eb8e829c4d003b5b4cf">SVF::PersistentVersionedPTData::clearPts</a></div><div class="ttdeci">void clearPts(const VersionedKey &vk, const Data &element) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00884">PersistentPointsToDS.h:884</a></div></div>
|
|
233
229
|
<div class="ttc" id="classSVF_1_1PersistentPTData_html_aa4660a55bee52fc51248d694d475811f"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#aa4660a55bee52fc51248d694d475811f">SVF::PersistentPTData::KeyToIDMap</a></div><div class="ttdeci">Map< Key, PointsToID > KeyToIDMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00044">PersistentPointsToDS.h:44</a></div></div>
|
|
230
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_af70d3b1ecbb8f9cb56b8b419dbc0490a"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#af70d3b1ecbb8f9cb56b8b419dbc0490a">SVF::PersistentDFPTData::remapAllPts</a></div><div class="ttdeci">void remapAllPts() override</div><div class="ttdoc">Remaps all points-to sets to use the current mapping. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00394">PersistentPointsToDS.h:394</a></div></div>
|
|
231
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a38a942cb65d87883433444ef8f2b986c"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a38a942cb65d87883433444ef8f2b986c">SVF::PersistentDiffPTData::dumpPTData</a></div><div class="ttdeci">void dumpPTData() override</div><div class="ttdoc">Dump stored keys and points-to sets. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00265">PersistentPointsToDS.h:265</a></div></div>
|
|
232
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a6d2e2837d18dc66c92d59d0729bd7c91"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a6d2e2837d18dc66c92d59d0729bd7c91">SVF::PersistentPTData::clearPts</a></div><div class="ttdeci">void clearPts(const Key &var, const Data &element) override</div><div class="ttdoc">Clears element from the points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00095">PersistentPointsToDS.h:95</a></div></div>
|
|
234
233
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a1927ccf9bb74b698f540f683e7f0d0f2"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a1927ccf9bb74b698f540f683e7f0d0f2">SVF::PersistentVersionedPTData::KeyToIDMap</a></div><div class="ttdeci">PersistentPTData< Key, KeySet, Data, DataSet >::KeyToIDMap KeyToIDMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00812">PersistentPointsToDS.h:812</a></div></div>
|
|
235
|
-
<div class="ttc" id="
|
|
234
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ab91a95d661a95bb307b011c46f4dcee8"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ab91a95d661a95bb307b011c46f4dcee8">SVF::PersistentDFPTData::clear</a></div><div class="ttdeci">void clear() override</div><div class="ttdoc">Clears all points-to sets as if nothing is stored. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00351">PersistentPointsToDS.h:351</a></div></div>
|
|
236
235
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_aa50d20f82143fd56cbe468b29bf9e11e"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#aa50d20f82143fd56cbe468b29bf9e11e">SVF::PersistentIncDFPTData::getDFOutUpdatedVar</a></div><div class="ttdeci">const KeySet & getDFOutUpdatedVar(LocID loc)</div><div class="ttdoc">Get all variables which have new pts info in loc&#39;s OUT set. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00788">PersistentPointsToDS.h:788</a></div></div>
|
|
237
|
-
<div class="ttc" id="classSVF_1_1PersistentPTData_html_af8084d77fb666933fd0efe0df983074d"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#af8084d77fb666933fd0efe0df983074d">SVF::PersistentPTData::remapAllPts</a></div><div class="ttdeci">virtual void remapAllPts(void) override</div><div class="ttdoc">Remaps all points-to sets to use the current mapping. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00115">PersistentPointsToDS.h:115</a></div></div>
|
|
238
236
|
<div class="ttc" id="classSVF_1_1PTData_html_adfcbaefe1c058d9ddf14aa3da07e1daf"><div class="ttname"><a href="classSVF_1_1PTData.html#adfcbaefe1c058d9ddf14aa3da07e1daf">SVF::PTData::getPTDTY</a></div><div class="ttdeci">PTDataTy getPTDTY() const</div><div class="ttdoc">Get the type of points-to data structure that this is. </div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00101">AbstractPointsToDS.h:101</a></div></div>
|
|
239
|
-
<div class="ttc" id="
|
|
240
|
-
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_adb2c450f2c93fbf630d91b8c2697fa06"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#adb2c450f2c93fbf630d91b8c2697fa06">SVF::PersistentDiffPTData::updatePropaPtsMap</a></div><div class="ttdeci">virtual void updatePropaPtsMap(Key &src, Key &dst) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00292">PersistentPointsToDS.h:292</a></div></div>
|
|
241
|
-
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a0b4feff5bc406088216d9e45941fe3ef"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a0b4feff5bc406088216d9e45941fe3ef">SVF::PersistentVersionedPTData::remapAllPts</a></div><div class="ttdeci">virtual void remapAllPts(void) override</div><div class="ttdoc">Remaps all points-to sets to use the current mapping. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00898">PersistentPointsToDS.h:898</a></div></div>
|
|
237
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ad5ca81c46b57ba0203732f10423ad6ae"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ad5ca81c46b57ba0203732f10423ad6ae">SVF::PersistentDFPTData::hasDFInSet</a></div><div class="ttdeci">bool hasDFInSet(LocID loc, const Key &var) const override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00414">PersistentPointsToDS.h:414</a></div></div>
|
|
242
238
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a106391cd8eefab1740b54cd9bbacccad"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a106391cd8eefab1740b54cd9bbacccad">SVF::PersistentIncDFPTData::inUpdatedVarMap</a></div><div class="ttdeci">UpdatedVarMap inUpdatedVarMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00797">PersistentPointsToDS.h:797</a></div></div>
|
|
243
239
|
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a6051aa255081543388a8f9077012834c"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a6051aa255081543388a8f9077012834c">SVF::PersistentVersionedPTData::PTDataTy</a></div><div class="ttdeci">BasePTData::PTDataTy PTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00810">PersistentPointsToDS.h:810</a></div></div>
|
|
244
|
-
<div class="ttc" id="
|
|
240
|
+
<div class="ttc" id="classSVF_1_1PersistentPTData_html_a5d8aab7bf619800ae289ef38dad23306"><div class="ttname"><a href="classSVF_1_1PersistentPTData.html#a5d8aab7bf619800ae289ef38dad23306">SVF::PersistentPTData::~PersistentPTData</a></div><div class="ttdeci">~PersistentPTData() override=default</div></div>
|
|
245
241
|
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_ab13b3a484a5ac22c47391f1b2eaa58a1"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#ab13b3a484a5ac22c47391f1b2eaa58a1">SVF::PersistentDFPTData::getDFOutPtIdRef</a></div><div class="ttdeci">PointsToID & getDFOutPtIdRef(LocID loc, const Key &var)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00561">PersistentPointsToDS.h:561</a></div></div>
|
|
246
242
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a4e706309fe4bb40b4424251888363215"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a4e706309fe4bb40b4424251888363215">SVF::PersistentDiffPTData::KeyToIDMap</a></div><div class="ttdeci">BasePersPTData::KeyToIDMap KeyToIDMap</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00208">PersistentPointsToDS.h:208</a></div></div>
|
|
247
|
-
<div class="ttc" id="
|
|
248
|
-
<div class="ttc" id="
|
|
249
|
-
<div class="ttc" id="
|
|
250
|
-
<div class="ttc" id="
|
|
251
|
-
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a9cc43f58ea3be1b7fbc7df7cfe965c3c"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a9cc43f58ea3be1b7fbc7df7cfe965c3c">SVF::PersistentDiffPTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const Key &dstKey, const Key &srcKey) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U pts(srcVar). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00240">PersistentPointsToDS.h:240</a></div></div>
|
|
243
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a4e0a1656047e6a1e53a1377d23d251bd"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a4e0a1656047e6a1e53a1377d23d251bd">SVF::PersistentDFPTData::hasDFOutSet</a></div><div class="ttdeci">bool hasDFOutSet(LocID loc, const Key &var) const override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00422">PersistentPointsToDS.h:422</a></div></div>
|
|
244
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a1d6a7e3efe8ab65f1ecd7e915d70d659"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a1d6a7e3efe8ab65f1ecd7e915d70d659">SVF::PersistentDFPTData::updateDFInFromIn</a></div><div class="ttdeci">bool updateDFInFromIn(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00442">PersistentPointsToDS.h:442</a></div></div>
|
|
245
|
+
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a5a21b654b380bdf26d65d60ceb86a787"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a5a21b654b380bdf26d65d60ceb86a787">SVF::PersistentVersionedPTData::remapAllPts</a></div><div class="ttdeci">void remapAllPts() override</div><div class="ttdoc">Remaps all points-to sets to use the current mapping. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00898">PersistentPointsToDS.h:898</a></div></div>
|
|
246
|
+
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a6b5160708567c63cf9acf0b204a1bcf7"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a6b5160708567c63cf9acf0b204a1bcf7">SVF::PersistentDiffPTData::addPts</a></div><div class="ttdeci">bool addPts(const Key &dstKey, const Data &element) override</div><div class="ttdoc">Adds element to the points-to set associated with var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00235">PersistentPointsToDS.h:235</a></div></div>
|
|
252
247
|
<div class="ttc" id="classSVF_1_1PersistentDiffPTData_html_a0d6620a7078bd60d16256ac48af58db9"><div class="ttname"><a href="classSVF_1_1PersistentDiffPTData.html#a0d6620a7078bd60d16256ac48af58db9">SVF::PersistentDiffPTData::persPTData</a></div><div class="ttdeci">PersistentPTData< Key, KeySet, Data, DataSet > persPTData</div><div class="ttdoc">Backing to implement basic PTData methods. Allows us to avoid multiple inheritance. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00325">PersistentPointsToDS.h:325</a></div></div>
|
|
253
|
-
<div class="ttc" id="classSVF_1_1PersistentVersionedPTData_html_a9b81d20e54d08e36edbff43549b1e820"><div class="ttname"><a href="classSVF_1_1PersistentVersionedPTData.html#a9b81d20e54d08e36edbff43549b1e820">SVF::PersistentVersionedPTData::getPts</a></div><div class="ttdeci">virtual const DataSet & getPts(const VersionedKey &vk) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00830">PersistentPointsToDS.h:830</a></div></div>
|
|
254
248
|
<div class="ttc" id="classSVF_1_1PTData_html_a46fa3ec6462f3dda19549340281bb219"><div class="ttname"><a href="classSVF_1_1PTData.html#a46fa3ec6462f3dda19549340281bb219">SVF::PTData::rev</a></div><div class="ttdeci">bool rev</div><div class="ttdoc">Whether we maintain reverse points-to sets or not. </div><div class="ttdef"><b>Definition:</b> <a href="AbstractPointsToDS_8h_source.html#l00141">AbstractPointsToDS.h:141</a></div></div>
|
|
255
|
-
<div class="ttc" id="
|
|
256
|
-
<div class="ttc" id="
|
|
257
|
-
<div class="ttc" id="
|
|
249
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a2adbaa59c46d611a448594b74745e986"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a2adbaa59c46d611a448594b74745e986">SVF::PersistentDFPTData::getPts</a></div><div class="ttdeci">const DataSet & getPts(const Key &var) override</div><div class="ttdoc">Get points-to set of var. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00358">PersistentPointsToDS.h:358</a></div></div>
|
|
250
|
+
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_ad7785e4207e0b45aed72845af6c4916f"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#ad7785e4207e0b45aed72845af6c4916f">SVF::PersistentIncDFPTData::clear</a></div><div class="ttdeci">void clear() override</div><div class="ttdoc">Clears all points-to sets as if nothing is stored. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00712">PersistentPointsToDS.h:712</a></div></div>
|
|
251
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a2c4e4e53d1ce79dfd5702ba41f26f286"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a2c4e4e53d1ce79dfd5702ba41f26f286">SVF::PersistentDFPTData::unionPts</a></div><div class="ttdeci">bool unionPts(const Key &dstKey, const DataSet &srcDataSet) override</div><div class="ttdoc">Performs pts(dstVar) = pts(dstVar) U srcDataSet. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00374">PersistentPointsToDS.h:374</a></div></div>
|
|
252
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a1d7dc1c34e506ed78e9e029329558b97"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a1d7dc1c34e506ed78e9e029329558b97">SVF::PersistentDFPTData::updateDFInFromOut</a></div><div class="ttdeci">bool updateDFInFromOut(LocID srcLoc, const Key &srcVar, LocID dstLoc, const Key &dstVar) override</div><div class="ttdoc">Union (IN[dstLoc:dstVar], OUT[srcLoc:srcVar]). </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00452">PersistentPointsToDS.h:452</a></div></div>
|
|
258
253
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_a47c2fbf8b959aae3166b9757b12880a7"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#a47c2fbf8b959aae3166b9757b12880a7">SVF::PersistentIncDFPTData::classof</a></div><div class="ttdeci">static bool classof(const PTData< Key, KeySet, Data, DataSet > *ptd)</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00726">PersistentPointsToDS.h:726</a></div></div>
|
|
254
|
+
<div class="ttc" id="classSVF_1_1PersistentDFPTData_html_a22d61e046322d7315fed214bf75048e0"><div class="ttname"><a href="classSVF_1_1PersistentDFPTData.html#a22d61e046322d7315fed214bf75048e0">SVF::PersistentDFPTData::getDFOutPtsSet</a></div><div class="ttdeci">const DataSet & getDFOutPtsSet(LocID loc, const Key &var) override</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00436">PersistentPointsToDS.h:436</a></div></div>
|
|
259
255
|
<div class="ttc" id="classSVF_1_1PersistentIncDFPTData_html_abce6fa91fed789ef25146440ee10872b"><div class="ttname"><a href="classSVF_1_1PersistentIncDFPTData.html#abce6fa91fed789ef25146440ee10872b">SVF::PersistentIncDFPTData::BasePersDFPTData</a></div><div class="ttdeci">PersistentDFPTData< Key, KeySet, Data, DataSet > BasePersDFPTData</div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToDS_8h_source.html#l00586">PersistentPointsToDS.h:586</a></div></div>
|
|
260
|
-
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_a17d33558208c19019e541ee167009494"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#a17d33558208c19019e541ee167009494">SVF::PersistentPointsToCache::intersectPts</a></div><div class="ttdeci">PointsToID intersectPts(PointsToID lhs, PointsToID rhs)</div><div class="ttdoc">Intersects lhs and rhs (lhs AND rhs) and returns the intersection&#39;s ID. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#
|
|
256
|
+
<div class="ttc" id="classSVF_1_1PersistentPointsToCache_html_a17d33558208c19019e541ee167009494"><div class="ttname"><a href="classSVF_1_1PersistentPointsToCache.html#a17d33558208c19019e541ee167009494">SVF::PersistentPointsToCache::intersectPts</a></div><div class="ttdeci">PointsToID intersectPts(PointsToID lhs, PointsToID rhs)</div><div class="ttdoc">Intersects lhs and rhs (lhs AND rhs) and returns the intersection&#39;s ID. </div><div class="ttdef"><b>Definition:</b> <a href="PersistentPointsToCache_8h_source.html#l00235">PersistentPointsToCache.h:235</a></div></div>
|
|
261
257
|
</div><!-- fragment --></div><!-- contents -->
|
|
262
258
|
<!-- start footer part -->
|
|
263
259
|
<hr class="footer"/><address class="footer"><small>
|