svf-tools 1.0.503 → 1.0.506
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/LICENSE.TXT +4 -2
- package/SVF-doxygen/html/html/AbstractPointsToDS_8h_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/AndersenLCD_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +8 -7
- package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +7 -7
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +12 -6
- package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +21 -17
- package/SVF-doxygen/html/html/Andersen_8h_source.html +10 -9
- package/SVF-doxygen/html/html/BDDExpr_8cpp_source.html +8 -4
- package/SVF-doxygen/html/html/BDDExpr_8h_source.html +5 -5
- package/SVF-doxygen/html/html/CFGNormalizer_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/CFLAlias_8h_source.html +6 -6
- package/SVF-doxygen/html/html/CFLGrammar_8cpp_source.html +5 -4
- package/SVF-doxygen/html/html/CFLGrammar_8h_source.html +7 -6
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CFLGraphBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGraph_8h_source.html +2 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/CHG_8cpp.html +1 -1
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/CHG_8h_source.html +5 -4
- package/SVF-doxygen/html/html/CPPUtil_8cpp.html +2 -2
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/CPPUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +5 -4
- package/SVF-doxygen/html/html/CSC_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +12 -10
- package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsG_8h_source.html +5 -4
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +8 -8
- package/SVF-doxygen/html/html/CoreBitVector_8cpp.html +1 -1
- package/SVF-doxygen/html/html/CoreBitVector_8cpp_source.html +4 -2
- package/SVF-doxygen/html/html/CoreBitVector_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CxtStmt_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +8 -6
- package/SVF-doxygen/html/html/DCHG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/DDAPass_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +6 -4
- package/SVF-doxygen/html/html/DDAStat_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +12 -8
- package/SVF-doxygen/html/html/DPItem_8h_source.html +4 -4
- package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ExeState_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ExeState_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ExtAPI_8cpp.html +1 -1
- package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +2 -2
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +17 -12
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +6 -6
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +4 -4
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +12 -10
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +19 -15
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +6 -6
- package/SVF-doxygen/html/html/GenericGraph_8h_source.html +5 -5
- package/SVF-doxygen/html/html/GrammarBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/GraphPrinter_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ICFGStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ICFG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/LLVMModule_8cpp.html +25 -7
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +12 -7
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +15 -14
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +5 -3
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +3 -3
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +7 -4
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +6 -5
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +8 -8
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/MHP_8cpp.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +19 -13
- package/SVF-doxygen/html/html/MHP_8h_source.html +10 -6
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +11 -8
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +12 -6
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MTA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +11 -2
- package/SVF-doxygen/html/html/MemPartition_8h_source.html +4 -4
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +19 -11
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +12 -7
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +5 -5
- package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +8 -4
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/NodeIDAllocator_8h_source.html +4 -4
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +6 -2
- package/SVF-doxygen/html/html/OfflineConsG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +6 -4
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +8 -7
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +8 -6
- package/SVF-doxygen/html/html/PTAStat_8h_source.html +4 -4
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +5 -5
- package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +12 -10
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +16 -13
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +9 -9
- package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +36 -24
- package/SVF-doxygen/html/html/PointsTo_8h.html +1 -0
- package/SVF-doxygen/html/html/PointsTo_8h_source.html +34 -33
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +8 -5
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SCC_8h_source.html +7 -4
- package/SVF-doxygen/html/html/SVFBasicTypes_8h.html +27 -29
- package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +76 -73
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +7 -5
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +8 -5
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +8 -6
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +6 -5
- package/SVF-doxygen/html/html/SVFGStat_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +11 -9
- package/SVF-doxygen/html/html/SVFG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +4 -3
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +7 -7
- package/SVF-doxygen/html/html/SVFLoop_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFModule_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +6 -6
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +8 -5
- package/SVF-doxygen/html/html/SVFUtil_8h.html +4 -4
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +17 -11
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SaberAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SparseBitVector_8h.html +201 -0
- package/SVF-doxygen/html/html/SparseBitVector_8h_source.html +179 -0
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +10 -7
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +4 -4
- package/SVF-doxygen/html/html/Steensgaard_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Steensgaard_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SymState_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +5 -5
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +8 -7
- package/SVF-doxygen/html/html/TCT_8h_source.html +10 -7
- package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +8 -5
- package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +4 -4
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +7 -7
- package/SVF-doxygen/html/html/VFGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +6 -6
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +7 -5
- package/SVF-doxygen/html/html/VFG_8h_source.html +5 -5
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +15 -10
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +7 -7
- package/SVF-doxygen/html/html/WPAFSSolver_8h_source.html +6 -3
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +3 -3
- package/SVF-doxygen/html/html/WPASolver_8h_source.html +3 -3
- package/SVF-doxygen/html/html/WPAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/WorkList_8h_source.html +1 -1
- package/SVF-doxygen/html/html/Z3Expr_8h_source.html +1 -1
- package/SVF-doxygen/html/html/annotated.html +169 -162
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +53 -41
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +19 -17
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +16 -10
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BDDExprManager.html +17 -10
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +26 -22
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CFGNormalizer.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +8 -6
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +8 -7
- package/SVF-doxygen/html/html/classSVF_1_1CondPointsToSet.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1CoreBitVector.html +6 -5
- package/SVF-doxygen/html/html/classSVF_1_1CxtProc.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CxtThreadProc.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +18 -16
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +12 -10
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +36 -33
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +50 -42
- package/SVF-doxygen/html/html/classSVF_1_1DoubleFreeChecker.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +4 -3
- package/SVF-doxygen/html/html/classSVF_1_1ExeState.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FileChecker.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +64 -51
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +18 -15
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +23 -21
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +6 -5
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +6 -5
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1GrammarBase.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GrammarBase_1_1SymbolHash.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +40 -39
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +53 -48
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet-members.html +25 -24
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +85 -45
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +13 -9
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +40 -40
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +56 -43
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +153 -125
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +13 -10
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +24 -15
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +44 -36
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MemRegion.html +12 -8
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MutableDFPTData.html +4 -2
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +10 -7
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +8 -6
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +5 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +13 -10
- package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDFPTData.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PersistentDiffPTData.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPointsToCache.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo.html +214 -206
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointsTo_1_1PointsToIterator.html +83 -75
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +13 -7
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SCCDetection.html +11 -8
- package/SVF-doxygen/html/html/classSVF_1_1SCCDetection_1_1GNodeSCCInfo.html +8 -7
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +49 -40
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +34 -29
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +11 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +11 -10
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +46 -46
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector-members.html +117 -0
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector.html +1358 -0
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator-members.html +95 -0
- package/SVF-doxygen/html/html/classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html +594 -0
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +13 -12
- package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +12 -9
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +44 -39
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +11 -10
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +2 -1
- package/SVF-doxygen/html/html/classSVF_1_1WPAFSSolver.html +4 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPAMinimumSolver.html +14 -11
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1WPASCCSolver.html +4 -3
- package/SVF-doxygen/html/html/classSVF_1_1WPASolver.html +1 -1
- package/SVF-doxygen/html/html/classes.html +107 -106
- package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +2 -0
- package/SVF-doxygen/html/html/files.html +8 -7
- package/SVF-doxygen/html/html/functions_a.html +12 -3
- package/SVF-doxygen/html/html/functions_b.html +27 -5
- package/SVF-doxygen/html/html/functions_c.html +25 -14
- package/SVF-doxygen/html/html/functions_e.html +20 -2
- package/SVF-doxygen/html/html/functions_eval_b.html +10 -0
- package/SVF-doxygen/html/html/functions_f.html +31 -13
- package/SVF-doxygen/html/html/functions_func.html +8 -2
- package/SVF-doxygen/html/html/functions_func_b.html +4 -3
- package/SVF-doxygen/html/html/functions_func_c.html +24 -16
- package/SVF-doxygen/html/html/functions_func_e.html +5 -2
- package/SVF-doxygen/html/html/functions_func_f.html +19 -1
- package/SVF-doxygen/html/html/functions_func_g.html +13 -10
- package/SVF-doxygen/html/html/functions_func_i.html +18 -8
- package/SVF-doxygen/html/html/functions_func_o.html +19 -8
- package/SVF-doxygen/html/html/functions_func_r.html +4 -2
- package/SVF-doxygen/html/html/functions_func_s.html +16 -5
- package/SVF-doxygen/html/html/functions_func_t.html +4 -0
- package/SVF-doxygen/html/html/functions_func_u.html +3 -0
- package/SVF-doxygen/html/html/functions_func_w.html +3 -0
- package/SVF-doxygen/html/html/functions_g.html +16 -13
- package/SVF-doxygen/html/html/functions_i.html +24 -12
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_o.html +28 -17
- package/SVF-doxygen/html/html/functions_p.html +19 -17
- package/SVF-doxygen/html/html/functions_r.html +5 -5
- package/SVF-doxygen/html/html/functions_s.html +25 -11
- package/SVF-doxygen/html/html/functions_t.html +14 -8
- package/SVF-doxygen/html/html/functions_type_b.html +3 -0
- package/SVF-doxygen/html/html/functions_type_e.html +9 -0
- package/SVF-doxygen/html/html/functions_type_i.html +1 -0
- package/SVF-doxygen/html/html/functions_type_s.html +3 -0
- package/SVF-doxygen/html/html/functions_u.html +3 -0
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_a.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_b.html +10 -0
- package/SVF-doxygen/html/html/functions_vars_c.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_e.html +6 -0
- package/SVF-doxygen/html/html/functions_vars_i.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_s.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_w.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +11 -11
- package/SVF-doxygen/html/html/globals_defs_h.html +6 -0
- package/SVF-doxygen/html/html/globals_defs_s.html +5 -2
- package/SVF-doxygen/html/html/globals_h.html +8 -2
- package/SVF-doxygen/html/html/globals_s.html +14 -11
- package/SVF-doxygen/html/html/hierarchy.html +161 -154
- package/SVF-doxygen/html/html/menudata.js +2 -1
- package/SVF-doxygen/html/html/namespaceSVF.html +559 -70
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +5 -5
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +27 -23
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +3 -3
- package/SVF-doxygen/html/html/namespacemembers_c.html +9 -0
- package/SVF-doxygen/html/html/namespacemembers_d.html +4 -1
- package/SVF-doxygen/html/html/namespacemembers_enum.html +3 -0
- package/SVF-doxygen/html/html/namespacemembers_eval.html +9 -0
- package/SVF-doxygen/html/html/namespacemembers_func.html +20 -2
- package/SVF-doxygen/html/html/namespacemembers_n.html +1 -1
- package/SVF-doxygen/html/html/namespacemembers_o.html +7 -1
- package/SVF-doxygen/html/html/namespacemembers_s.html +0 -3
- package/SVF-doxygen/html/html/namespacemembers_type.html +1 -4
- package/SVF-doxygen/html/html/namespacemembers_z.html +85 -0
- package/SVF-doxygen/html/html/search/all_1.js +3 -1
- package/SVF-doxygen/html/html/search/all_10.js +10 -8
- package/SVF-doxygen/html/html/search/all_12.js +2 -2
- package/SVF-doxygen/html/html/search/all_13.js +16 -11
- package/SVF-doxygen/html/html/search/all_14.js +9 -8
- package/SVF-doxygen/html/html/search/all_15.js +2 -1
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_17.js +3 -2
- package/SVF-doxygen/html/html/search/all_1a.js +4 -0
- package/SVF-doxygen/html/html/search/all_2.js +8 -3
- package/SVF-doxygen/html/html/search/all_3.js +7 -3
- package/SVF-doxygen/html/html/search/all_4.js +1 -1
- package/SVF-doxygen/html/html/search/all_5.js +7 -3
- package/SVF-doxygen/html/html/search/all_6.js +8 -3
- package/SVF-doxygen/html/html/search/all_7.js +1 -0
- package/SVF-doxygen/html/html/search/all_8.js +3 -1
- package/SVF-doxygen/html/html/search/all_9.js +8 -6
- package/SVF-doxygen/html/html/search/all_c.js +2 -1
- package/SVF-doxygen/html/html/search/all_d.js +2 -2
- package/SVF-doxygen/html/html/search/all_e.js +2 -2
- package/SVF-doxygen/html/html/search/all_f.js +15 -15
- package/SVF-doxygen/html/html/search/classes_10.js +1 -0
- package/SVF-doxygen/html/html/search/classes_7.js +1 -1
- package/SVF-doxygen/html/html/search/classes_9.js +1 -0
- package/SVF-doxygen/html/html/search/classes_d.js +2 -0
- package/SVF-doxygen/html/html/search/classes_f.js +3 -0
- package/SVF-doxygen/html/html/search/defines_6.js +2 -0
- package/SVF-doxygen/html/html/search/defines_f.js +2 -1
- package/SVF-doxygen/html/html/search/enums_d.html +26 -0
- package/SVF-doxygen/html/html/search/enums_d.js +4 -0
- package/SVF-doxygen/html/html/search/enumvalues_1.js +3 -0
- package/SVF-doxygen/html/html/search/enumvalues_14.js +3 -2
- package/SVF-doxygen/html/html/search/files_d.js +1 -0
- package/SVF-doxygen/html/html/search/functions_0.js +2 -0
- package/SVF-doxygen/html/html/search/functions_1.js +1 -1
- package/SVF-doxygen/html/html/search/functions_10.js +1 -1
- package/SVF-doxygen/html/html/search/functions_11.js +4 -1
- package/SVF-doxygen/html/html/search/functions_12.js +2 -2
- package/SVF-doxygen/html/html/search/functions_13.js +1 -0
- package/SVF-doxygen/html/html/search/functions_15.js +1 -0
- package/SVF-doxygen/html/html/search/functions_2.js +6 -3
- package/SVF-doxygen/html/html/search/functions_3.js +1 -1
- package/SVF-doxygen/html/html/search/functions_4.js +2 -2
- package/SVF-doxygen/html/html/search/functions_5.js +6 -1
- package/SVF-doxygen/html/html/search/functions_6.js +1 -0
- package/SVF-doxygen/html/html/search/functions_8.js +4 -2
- package/SVF-doxygen/html/html/search/functions_e.js +12 -12
- package/SVF-doxygen/html/html/search/searchdata.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_1.js +1 -0
- package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_4.js +3 -0
- package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_1.js +1 -1
- package/SVF-doxygen/html/html/search/variables_13.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_17.js +1 -0
- package/SVF-doxygen/html/html/search/variables_2.js +3 -1
- package/SVF-doxygen/html/html/search/variables_3.js +1 -0
- package/SVF-doxygen/html/html/search/variables_5.js +2 -1
- package/SVF-doxygen/html/html/search/variables_9.js +1 -0
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1GrammarBase_1_1Symbol.html +4 -4
- package/SVF-doxygen/html/html/structSVF_1_1Hash.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1Hash_3_01NodePair_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1Hash_3_01std_1_1pair_3_01S_00_01T_01_4_01_4.html +5 -5
- package/SVF-doxygen/html/html/structSVF_1_1LeadingZerosCounter-members.html +81 -0
- package/SVF-doxygen/html/html/structSVF_1_1LeadingZerosCounter.html +138 -0
- package/SVF-doxygen/html/html/structSVF_1_1PopulationCounter-members.html +81 -0
- package/SVF-doxygen/html/html/structSVF_1_1PopulationCounter.html +129 -0
- package/SVF-doxygen/html/html/structSVF_1_1PopulationCounter_3_01T_00_018_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structSVF_1_1PopulationCounter_3_01T_00_018_01_4.html +129 -0
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1equalNodeBS.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SparseBitVectorElement-members.html +107 -0
- package/SVF-doxygen/html/html/structSVF_1_1SparseBitVectorElement.html +981 -0
- package/SVF-doxygen/html/html/structSVF_1_1TrailingZerosCounter-members.html +81 -0
- package/SVF-doxygen/html/html/structSVF_1_1TrailingZerosCounter.html +138 -0
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CondStdSet_3_01Element_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtDPItem_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtStmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1ExeState_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +1 -1
- 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 +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SparseBitVector_3_01N_01_4_01_4-members.html +81 -0
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SparseBitVector_3_01N_01_4_01_4.html +136 -0
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1StmtDPItem_3_01LocCond_01_4_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SymState_01_4.html +1 -1
- 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 -6
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +6 -6
- package/include/MemoryModel/PointsTo.h +3 -2
- package/include/SVF-FE/LLVMModule.h +3 -0
- package/include/Util/SVFBasicTypes.h +6 -5
- package/include/Util/SparseBitVector.h +1208 -0
- package/lib/MemoryModel/PointsTo.cpp +12 -12
- package/lib/SVF-FE/LLVMModule.cpp +157 -18
- package/lib/Util/CoreBitVector.cpp +2 -2
- package/lib/WPA/Andersen.cpp +1 -1
- package/lib/WPA/FlowSensitive.cpp +1 -1
- package/package.json +1 -1
|
@@ -66,8 +66,9 @@ $(function() {
|
|
|
66
66
|
<div class="title">PointerAnalysisImpl.h</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="PointerAnalysisImpl_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> <span class="comment">//===- PointerAnalysis.h -- Base class of pointer analyses--------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * PointerAnalysis.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: Nov 12, 2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifndef INCLUDE_MEMORYMODEL_POINTERANALYSISIMPL_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#define INCLUDE_MEMORYMODEL_POINTERANALYSISIMPL_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <<a class="code" href="ConsG_8h.html">Graphs/ConsG.h</a>></span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="PointerAnalysis_8h.html">MemoryModel/PointerAnalysis.h</a>"</span></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">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html"> 42</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</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"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#acfdb43f20bbcababc928cc4df93a8483"> 46</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#acfdb43f20bbcababc928cc4df93a8483">PTDataTy</a>;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#abd8bb73e9beac5e39667091b1e211bd3"> 47</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DiffPTData.html">DiffPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#abd8bb73e9beac5e39667091b1e211bd3">DiffPTDataTy</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a5c2288519153467142e74c8dd4e77180"> 48</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a5c2288519153467142e74c8dd4e77180">DFPTDataTy</a>;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a8bc5e039958280b18e5a00a56e0bdc94"> 49</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VersionedPTData.html">VersionedPTData<NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set<VersionedVar></a>> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8bc5e039958280b18e5a00a56e0bdc94">VersionedPTDataTy</a>;</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_1BVDataPTAImpl.html#a533384bd2eb8a1589ba8b7695c759073"> 51</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutablePTData.html">MutablePTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a533384bd2eb8a1589ba8b7695c759073">MutPTDataTy</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646"> 52</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutableDiffPTData.html">MutableDiffPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646">MutDiffPTDataTy</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7"> 53</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutableDFPTData.html">MutableDFPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">MutDFPTDataTy</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a639446e6bf9712afa439d089b94aefae"> 54</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutableIncDFPTData.html">MutableIncDFPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a639446e6bf9712afa439d089b94aefae">MutIncDFPTDataTy</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a7fde3e9b189e988cd0a24d567b136e13"> 55</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutableVersionedPTData.html">MutableVersionedPTData<NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set<VersionedVar></a>> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7fde3e9b189e988cd0a24d567b136e13">MutVersionedPTDataTy</a>;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ae3ba6392560e5c0978335151c3373fd1"> 57</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae3ba6392560e5c0978335151c3373fd1">PersPTDataTy</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e"> 58</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html">PersistentDiffPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">PersDiffPTDataTy</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a7087f9d5a1a5b3576173bd6a7fd72163"> 59</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7087f9d5a1a5b3576173bd6a7fd72163">PersDFPTDataTy</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a29172b3e8b3891a5d946a493cfcde2e7"> 60</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a29172b3e8b3891a5d946a493cfcde2e7">PersIncDFPTDataTy</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ae028ae29bdc799f35777b82a39faf5e8"> 61</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData<NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set<VersionedVar></a>> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae028ae29bdc799f35777b82a39faf5e8">PersVersionedPTDataTy</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8a"> 64</a></span>  <span class="keyword">enum</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8a">PTBackingType</a></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8aa1cfb236b5127b660373c36b77a79ab5e"> 66</a></span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8aa1cfb236b5127b660373c36b77a79ab5e">Mutable</a>,</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8aaeda0ee502cc42a07c64c6f09296b6640"> 67</a></span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8aaeda0ee502cc42a07c64c6f09296b6640">Persistent</a>,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  };</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab0e1242aadfe1e16a2bd1445658a5476">BVDataPTAImpl</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PointerAnalysis::PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, <span class="keywordtype">bool</span> alias_check = <span class="keyword">true</span>);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a06f211184d3e75f0ca351a4b8092a478"> 74</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a06f211184d3e75f0ca351a4b8092a478">~BVDataPTAImpl</a>()</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af783769050ab663ad4bb93f901f01a6d">destroy</a>();</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_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792"> 79</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<PointsTo></a> &<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a6ba68138c10d1fbe5be6346c8dfeca74"> 84</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a6ba68138c10d1fbe5be6346c8dfeca74">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a> *pta)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#ac0f821cfe4fb9c9c8816e7a1b1bc0c5e">getImplTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da84705167ea3a7162ecb9470a8a77b5d8">BVDataImpl</a>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#af783769050ab663ad4bb93f901f01a6d"> 90</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af783769050ab663ad4bb93f901f01a6d">destroy</a>()</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>.clear();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb"> 99</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#a9ae6037637d8b9acb323333f491f4a7d">getPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a58113943e4e7144d94d26991dcc8bcc7"> 103</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a>& <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a58113943e4e7144d94d26991dcc8bcc7">getRevPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ab6146f5582946c08568f3a8d45e57b03">getRevPts</a>(nodeId);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a4909696c946cf6aba12542ec51766b64"> 110</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a4909696c946cf6aba12542ec51766b64">clearPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> element)</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#a03c783b9a1faac0aee3e22361df594ce">clearPts</a>(<span class="keywordtype">id</span>, element);</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="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#afdb10c2cce4935156566ea1c2daf9ea9"> 116</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#afdb10c2cce4935156566ea1c2daf9ea9">clearFullPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#a877888f12d9f8048002cc0e6b83d45ac">clearFullPts</a>(<span class="keywordtype">id</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"> 120</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2"> 124</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2">unionPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& target)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>, target);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad5e657b856681a534a8990df35ea08d0"> 128</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad5e657b856681a534a8990df35ea08d0">unionPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd)</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">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff"> 132</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ac1b9dc035fb0bdf468c7d14b9f9d437a">addPts</a>(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a4426df37aeabeb94d301373b55a53c20"> 139</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a4426df37aeabeb94d301373b55a53c20">clearAllPts</a>()</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ad45879017d8fdeedc987ce35c4eba1a5">clear</a>();</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& expandedPts);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& pts, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& expandedPts);</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>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c">remapPointsToSets</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b">writeToFile</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>& filename);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a290501006cb700db0e07dc577429c928">readFromFile</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>& filename);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">writeToModule</a>();</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">readFromModule</a>();</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81"> 162</a></span>  <span class="keyword">inline</span> PTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d">finalize</a>();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70"> 172</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&)</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"Virtual function not implemented!"</span>);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab"> 178</a></span>  <span class="keyword">inline</span> DiffPTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  DiffPTDataTy* diff = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><DiffPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(diff && <span class="stringliteral">"BVDataPTAImpl::getDiffPTDataTy: not a DiffPTDataTy!"</span>);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">return</span> diff;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502"> 185</a></span>  <span class="keyword">inline</span> DFPTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  DFPTDataTy* df = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><DFPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(df && <span class="stringliteral">"BVDataPTAImpl::getDFPTDataTy: not a DFPTDataTy!"</span>);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">return</span> df;</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"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#acbb979edee9427efa2a7c0dbd881c483"> 192</a></span>  <span class="keyword">inline</span> MutDFPTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#acbb979edee9427efa2a7c0dbd881c483">getMutDFPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  MutDFPTDataTy* mdf = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><MutDFPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdf && <span class="stringliteral">"BVDataPTAImpl::getMutDFPTDataTy: not a MutDFPTDataTy!"</span>);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">return</span> mdf;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a4859864a4c72d5e04c10305e4579e8ee"> 199</a></span>  <span class="keyword">inline</span> VersionedPTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a4859864a4c72d5e04c10305e4579e8ee">getVersionedPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  VersionedPTDataTy* v = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><VersionedPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(v && <span class="stringliteral">"BVDataPTAImpl::getVersionedPTDataTy: not a VersionedPTDataTy!"</span>);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">return</span> v;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296">onTheFlyCallGraphSolve</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>& callsites, <a class="code" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a>& newEdges);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">normalizePointsTo</a>();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d"> 215</a></span>  PTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</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_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8"> 217</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1,</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node2);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts1, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts2);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ae20bbb7991f585deb2e6d0d8115b1b93"> 232</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae20bbb7991f585deb2e6d0d8115b1b93">dumpCPts</a>()</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>  ptD-><a class="code" href="classSVF_1_1PTData.html#a91b898e3547eecfbf1ab155d183734bf">dumpPTData</a>();</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752">dumpTopLevelPtsTo</a>();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22">dumpAllPts</a>();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> };</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keyword">template</span><<span class="keyword">class</span> Cond></div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html"> 247</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1CondPTAImpl.html">CondPTAImpl</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a></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"> 250</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#af71b4ec9844701582d997466c2e4d94f"> 251</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1CondVar.html">CondVar<Cond></a> <a class="code" href="classSVF_1_1CondPTAImpl.html#af71b4ec9844701582d997466c2e4d94f">CVar</a>;</div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a3f2f48fc122c07ff9eb1382aa7a3f966"> 252</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1CondStdSet.html">CondStdSet<CVar></a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a3f2f48fc122c07ff9eb1382aa7a3f966">CPtSet</a>;</div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a761f8a7c6ab4a160e279e9a831f037b1"> 253</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<CVar, Set<CVar></a>, CVar, CPtSet> <a class="code" href="classSVF_1_1CondPTAImpl.html#a761f8a7c6ab4a160e279e9a831f037b1">PTDataTy</a>;</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#af3ae2748edfdefaa08a73930bd012d6c"> 254</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutablePTData.html">MutablePTData<CVar, Set<CVar></a>, CVar, CPtSet> <a class="code" href="classSVF_1_1CondPTAImpl.html#af3ae2748edfdefaa08a73930bd012d6c">MutPTDataTy</a>;</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#aba828ca8e2aa2bd71b78be8b45a48c9b"> 255</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID,PointsTo></a> <a class="code" href="classSVF_1_1CondPTAImpl.html#aba828ca8e2aa2bd71b78be8b45a48c9b">PtrToBVPtsMap</a>; </div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a838c3f2be39d278072f7a9df7c0bcb4d"> 256</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, NodeSet></a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a838c3f2be39d278072f7a9df7c0bcb4d">PtrToNSMap</a>;</div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a5043e9d9255d31777d038c48c809bb09"> 257</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID,CPtSet></a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a5043e9d9255d31777d038c48c809bb09">PtrToCPtsMap</a>; </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a60678dda5071557483b27d09d26dc270"> 260</a></span>  <a class="code" href="classSVF_1_1CondPTAImpl.html#a60678dda5071557483b27d09d26dc270">CondPTAImpl</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PointerAnalysis::PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>) : <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>(pag, type), normalized(<a class="code" href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a>)</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acaf0c0774025005647deaf59582b9d58">PathS_DDA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a0ab6564c48897595c9d23382a026e0a8">Cxt_DDA</a>)</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a533384bd2eb8a1589ba8b7695c759073">MutPTDataTy</a>();</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"no points-to data available"</span>);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">ptaImplTy</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da88380bb05f60a1349e192364ba6c5292">CondImpl</a>;</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="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a01f64600bf6581403836019e4e5ae741"> 271</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a01f64600bf6581403836019e4e5ae741">~CondPTAImpl</a>()</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af783769050ab663ad4bb93f901f01a6d">destroy</a>();</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_1CondPTAImpl.html#ae76fb767c13ca39baa0fbec55a7780fe"> 276</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#ae76fb767c13ca39baa0fbec55a7780fe">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a> *pta)</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">return</span> pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#ac0f821cfe4fb9c9c8816e7a1b1bc0c5e">getImplTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da88380bb05f60a1349e192364ba6c5292">CondImpl</a>;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a5fa3d986e4ef710a2148b2854167c3ed"> 282</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a5fa3d986e4ef710a2148b2854167c3ed">destroy</a>()</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a35cb1fd6e18cdc8e8466ee94846bc553"> 289</a></span>  <span class="keyword">inline</span> PTDataTy* <a class="code" href="classSVF_1_1CondPTAImpl.html#a35cb1fd6e18cdc8e8466ee94846bc553">getPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#ab582d46731c06a7fa022bf301d6008c1"> 294</a></span>  <span class="keyword">inline</span> MutPTDataTy* <a class="code" href="classSVF_1_1CondPTAImpl.html#ab582d46731c06a7fa022bf301d6008c1">getMutPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  MutPTDataTy* mut = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><MutPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mut && <span class="stringliteral">"BVDataPTAImpl::getMutPTDataTy: not a MutPTDataTy!"</span>);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">return</span> mut;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a597e9c4e76f358c36d4b820c4d69ebc6"> 301</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a597e9c4e76f358c36d4b820c4d69ebc6">hasPtsMap</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">return</span> SVFUtil::isa<MutPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a979486e35b529fbc62b2974899627113"> 306</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1MutablePTData.html#ad74cc6c81c4a95f6ba4e89352bccee3e">MutPTDataTy::PtsMap</a>& <a class="code" href="classSVF_1_1CondPTAImpl.html#a979486e35b529fbc62b2974899627113">getPtsMap</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">if</span> (MutPTDataTy *m = SVFUtil::dyn_cast<MutPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>)) <span class="keywordflow">return</span> m->getPtsMap();</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"CondPTAImpl::getPtsMap: not a PTData with a PtsMap!"</span>);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>(1);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a63fa2b3a96696ffc67a119c1ba5ce748"> 315</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> CPtSet& <a class="code" href="classSVF_1_1CondPTAImpl.html#a63fa2b3a96696ffc67a119c1ba5ce748">getPts</a>(CVar <span class="keywordtype">id</span>)</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#a9ae6037637d8b9acb323333f491f4a7d">getPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div><div class="line"><a name="l00319"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a0da0602c5b260afaba4bef1abcbcf7b3"> 319</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<CVar></a>& <a class="code" href="classSVF_1_1CondPTAImpl.html#a0da0602c5b260afaba4bef1abcbcf7b3">getRevPts</a>(CVar nodeId)</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ab6146f5582946c08568f3a8d45e57b03">getRevPts</a>(nodeId);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#adfae199dfbe05c9c20052e0fc204e6de"> 326</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#adfae199dfbe05c9c20052e0fc204e6de">clearPts</a>()</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ad45879017d8fdeedc987ce35c4eba1a5">clear</a>();</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div><div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#adf0acbb0c605278e43d88787d651bbd8"> 332</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#adf0acbb0c605278e43d88787d651bbd8">overlap</a>(<span class="keyword">const</span> CPtSet& cpts1, <span class="keyword">const</span> CPtSet& cpts2)<span class="keyword"> const</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> it1 = cpts1.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(); it1 != cpts1.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); ++it1)</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="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> it2 = cpts2.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(); it2 != cpts2.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); ++it2)</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">if</span>(isSameVar(*it1,*it2))</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  }</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a87b48287d7edb97fc120200fe0e5218d"> 346</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a87b48287d7edb97fc120200fe0e5218d">expandFIObjs</a>(<span class="keyword">const</span> CPtSet& cpts, CPtSet& expandedCpts)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  expandedCpts = cpts;;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> cit = cpts.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(), ecit=cpts.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); cit!=ecit; ++cit)</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  {</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(cit->get_id())==cit->get_id())</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& fields = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(cit->get_id());</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = fields.begin(), eit = fields.end(); it!=eit; ++it)</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  CVar cvar(cit->get_cond(),*it);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  expandedCpts.<a class="code" href="classSVF_1_1CondStdSet.html#ae11deddad534be115d29daad08c90599">set</a>(cvar);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  }</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div><div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a9bdc3a50c695029a28371116ddc3ef8d"> 366</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a9bdc3a50c695029a28371116ddc3ef8d">finalize</a>()</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>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">normalizePointsTo</a>();</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</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_1CondPTAImpl.html#a1a95d1d6ac48157c896d9895cff697b4"> 374</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a1a95d1d6ac48157c896d9895cff697b4">unionPts</a>(CVar <span class="keywordtype">id</span>, <span class="keyword">const</span> CPtSet& target)</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  {</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>, target);</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_1CondPTAImpl.html#a4ad5da56c8b7bc75bf2dc30a1bcf1552"> 379</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a4ad5da56c8b7bc75bf2dc30a1bcf1552">unionPts</a>(CVar <span class="keywordtype">id</span>, CVar ptd)</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>,ptd);</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_1CondPTAImpl.html#a08037f32b927fe2e6be47a61a060463c"> 384</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a08037f32b927fe2e6be47a61a060463c">addPts</a>(CVar <span class="keywordtype">id</span>, CVar ptd)</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ac1b9dc035fb0bdf468c7d14b9f9d437a">addPts</a>(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div><div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a3b5877fec52bbfa7c83bab6c9bc95684"> 392</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a3b5877fec52bbfa7c83bab6c9bc95684">mustAlias</a>(<span class="keyword">const</span> CVar& var1, <span class="keyword">const</span> CVar& var2)</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">if</span>(isSameVar(var1,var2))</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordtype">bool</span> singleton = !(<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(var1.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>()) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a108380f6f0b67654bb7c7676686096c8">isLocalVarInRecursiveFun</a>(var1.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>()));</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">if</span>(isCondCompatible(var1.<a class="code" href="classSVF_1_1CondVar.html#af84e7bfcff909009be5e109c600c63fe">get_cond</a>(),var2.<a class="code" href="classSVF_1_1CondVar.html#af84e7bfcff909009be5e109c600c63fe">get_cond</a>(),singleton) == <span class="keyword">false</span>)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keyword">const</span> CPtSet& cpts1 = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var1);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keyword">const</span> CPtSet& cpts2 = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var2);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordflow">return</span> (contains(cpts1,cpts2) && contains(cpts2,cpts1));</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  }</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="comment">// Whether cpts1 contains all points-to targets of pts2</span></div><div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a5af00bb26800882ab96c470ee9fc4632"> 407</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a5af00bb26800882ab96c470ee9fc4632">contains</a>(<span class="keyword">const</span> CPtSet& cpts1, <span class="keyword">const</span> CPtSet& cpts2)</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">if</span> (cpts1.<a class="code" href="classSVF_1_1CondStdSet.html#a0305cbf452b4e858e464023727417d76">empty</a>() || cpts2.<a class="code" href="classSVF_1_1CondStdSet.html#a0305cbf452b4e858e464023727417d76">empty</a>())</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> it2 = cpts2.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(); it2 != cpts2.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); ++it2)</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keywordtype">bool</span> hasObj = <span class="keyword">false</span>;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> it1 = cpts1.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(); it1 != cpts1.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); ++it1)</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  {</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">if</span>(isSameVar(*it1,*it2))</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  hasObj = <span class="keyword">true</span>;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  }</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">if</span>(hasObj == <span class="keyword">false</span>)</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a7a1be735c76ba4a6b235264fe8ec6c28"> 430</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a7a1be735c76ba4a6b235264fe8ec6c28">isSameVar</a>(<span class="keyword">const</span> CVar& var1, <span class="keyword">const</span> CVar& var2)<span class="keyword"> const</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>  <span class="keywordflow">if</span>(var1.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>() != var2.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>())</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordtype">bool</span> singleton = !(<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(var1.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>()) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a108380f6f0b67654bb7c7676686096c8">isLocalVarInRecursiveFun</a>(var1.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>()));</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">return</span> isCondCompatible(var1.<a class="code" href="classSVF_1_1CondVar.html#af84e7bfcff909009be5e109c600c63fe">get_cond</a>(),var2.<a class="code" href="classSVF_1_1CondVar.html#af84e7bfcff909009be5e109c600c63fe">get_cond</a>(),singleton);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#aa945d068c8935fc6926833fdf102e21c"> 442</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#aa945d068c8935fc6926833fdf102e21c">normalizePointsTo</a>()</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  normalized = <span class="keyword">true</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">if</span> (hasPtsMap())</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1MutablePTData.html#ad74cc6c81c4a95f6ba4e89352bccee3e">MutPTDataTy::PtsMap</a>& ptsMap = getPtsMap();</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> MutPTDataTy::PtsMap::const_iterator it = ptsMap.begin(), eit=ptsMap.end(); it!=eit; ++it)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> cit = it->second.begin(), ecit=it->second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  ptrToBVPtsMap[(it->first).get_id()].set(cit->get_id());</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  objToNSRevPtsMap[cit->get_id()].insert((it->first).get_id());</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  ptrToCPtsMap[(it->first).get_id()].set(*cit);</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"> 457</span>  }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"CondPTAImpl::NormalizePointsTo: could not normalize points-to sets"</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"> 462</span>  }</div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#af960c10e49932ea5e9dcdd299ff300ce"> 464</a></span>  PTDataTy* <a class="code" href="classSVF_1_1CondPTAImpl.html#af960c10e49932ea5e9dcdd299ff300ce">ptD</a>;</div><div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#ab4115f25e2e477bfd73d01f069f47241"> 466</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#ab4115f25e2e477bfd73d01f069f47241">normalized</a>;</div><div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a30b9ee7b1dcd04285f92cf7accd05b2e"> 468</a></span>  PtrToBVPtsMap <a class="code" href="classSVF_1_1CondPTAImpl.html#a30b9ee7b1dcd04285f92cf7accd05b2e">ptrToBVPtsMap</a>;</div><div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a22c23f3ba1ee7e0aaccf0b8a1b58e33e"> 470</a></span>  PtrToNSMap <a class="code" href="classSVF_1_1CondPTAImpl.html#a22c23f3ba1ee7e0aaccf0b8a1b58e33e">objToNSRevPtsMap</a>;</div><div class="line"><a name="l00472"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a61167fcdb2005090de1b38e53450431a"> 472</a></span>  PtrToCPtsMap <a class="code" href="classSVF_1_1CondPTAImpl.html#a61167fcdb2005090de1b38e53450431a">ptrToCPtsMap</a>;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00475"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#aa260a3275fbec7061295306a58763d24"> 475</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#aa260a3275fbec7061295306a58763d24">dumpCPts</a>()</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  {</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  ptD-><a class="code" href="classSVF_1_1PTData.html#a91b898e3547eecfbf1ab155d183734bf">dumpPTData</a>();</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  }</div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a94f3e4d073b8c5bab3c46058ddba3f43"> 480</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a94f3e4d073b8c5bab3c46058ddba3f43">getBVPointsTo</a>(<span class="keyword">const</span> CPtSet& cpts)<span class="keyword"> const</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> cit = cpts.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(), ecit=cpts.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); cit!=ecit; ++cit)</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  pts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(cit->get_id());</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">return</span> pts;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }</div><div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a0b96ba98239186d6d676f9540da9e590"> 488</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& <a class="code" href="classSVF_1_1CondPTAImpl.html#a0b96ba98239186d6d676f9540da9e590">getPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptr)</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(normalized && <span class="stringliteral">"Pts of all context-var have to be merged/normalized. Want to use getPts(CVar cvar)??"</span>);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">return</span> ptrToBVPtsMap[ptr];</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  }</div><div class="line"><a name="l00494"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a454a998ef5a866f2a6f270e3283c6ebd"> 494</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> CPtSet& <a class="code" href="classSVF_1_1CondPTAImpl.html#a454a998ef5a866f2a6f270e3283c6ebd">getCondPointsTo</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptr)</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  {</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(normalized && <span class="stringliteral">"Pts of all context-vars have to be merged/normalized. Want to use getPts(CVar cvar)??"</span>);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">return</span> ptrToCPtsMap[ptr];</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  }</div><div class="line"><a name="l00500"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#aa266eef30817c557882de19aefe135a9"> 500</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a>& <a class="code" href="classSVF_1_1CondPTAImpl.html#aa266eef30817c557882de19aefe135a9">getRevPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj)</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(normalized && <span class="stringliteral">"Pts of all context-var have to be merged/normalized. Want to use getPts(CVar cvar)??"</span>);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordflow">return</span> objToNSRevPtsMap[obj];</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div><div class="line"><a name="l00507"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a171918ada9b679b0114b27476caa5ee6"> 507</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a171918ada9b679b0114b27476caa5ee6">alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2)</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V1),<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V2));</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  }</div><div class="line"><a name="l00512"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#ac18e1dc9c6fc8cc952f67a93c2491876"> 512</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1CondPTAImpl.html#ac18e1dc9c6fc8cc952f67a93c2491876">alias</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node2)</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">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(getCondPointsTo(node1),getCondPointsTo(node2));</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  }</div><div class="line"><a name="l00517"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#adb1ed3728d53a13c94402392155e9913"> 517</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1CondPTAImpl.html#adb1ed3728d53a13c94402392155e9913">alias</a>(<span class="keyword">const</span> CVar& var1, <span class="keyword">const</span> CVar& var2)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var1),<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var2));</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  }</div><div class="line"><a name="l00522"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a8e48e9fe6f7e21da49a155f8f6893944"> 522</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a8e48e9fe6f7e21da49a155f8f6893944">alias</a>(<span class="keyword">const</span> CPtSet& pts1, <span class="keyword">const</span> CPtSet& pts2)</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  CPtSet cpts1;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(pts1,cpts1);</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  CPtSet cpts2;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(pts2,cpts2);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(cpts1) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(cpts2))</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a>;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(this-><a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>()==<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acaf0c0774025005647deaf59582b9d58">PathS_DDA</a> && contains(cpts1,cpts2) && contains(cpts2,cpts1))</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2">AliasResult::MustAlias</a>;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(overlap(cpts1,cpts2))</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a>;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">AliasResult::NoAlias</a>;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  }</div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a8cd7b08bd978513cb0faacc47bbaf578"> 540</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a8cd7b08bd978513cb0faacc47bbaf578">containBlackHoleNode</a>(<span class="keyword">const</span> CPtSet& cpts)</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  {</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> cit = cpts.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(), ecit=cpts.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); cit!=ecit; ++cit)</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keywordflow">if</span>(cit->get_id() == <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">getBlackHoleNode</a>())</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  }</div><div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a3a10f3327d6473c348df5b62a5d6683f"> 550</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a3a10f3327d6473c348df5b62a5d6683f">containConstantNode</a>(<span class="keyword">const</span> CPtSet& cpts)</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> cit = cpts.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(), ecit=cpts.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); cit!=ecit; ++cit)</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  {</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordflow">if</span>(cit->get_id() == <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>())</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  }</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isCondCompatible(<span class="keyword">const</span> Cond& cxt1, <span class="keyword">const</span> Cond& cxt2, <span class="keywordtype">bool</span> singleton) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div><div class="line"><a name="l00563"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a80daa422e0dacf75aceb4fe5b4687c04"> 563</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a80daa422e0dacf75aceb4fe5b4687c04">dumpTopLevelPtsTo</a>()</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>  <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().begin(); nIter != this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*nIter);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()->isValidTopLevelPtr(node))</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DummyObjVar>(node))</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"##<Blackhole or constant> id:"</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  }</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!SVFUtil::isa<DummyValVar>(node))</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"##<"</span> << node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()->getName().str() << <span class="stringliteral">"> "</span>;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="comment">//SVFUtil::outs() << "Source Loc: " << SVFUtil::getSourceLoc(node->getValue());</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"\nNodeID "</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"\t\tPointsTo: {empty}\n\n"</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"\t\tPointsTo: { "</span>;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << *it << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"}\n\n"</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  }</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> };</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor">#endif </span><span class="comment">/* INCLUDE_MEMORYMODEL_POINTERANALYSISIMPL_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae3ba6392560e5c0978335151c3373fd1"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae3ba6392560e5c0978335151c3373fd1">SVF::BVDataPTAImpl::PersPTDataTy</a></div><div class="ttdeci">PersistentPTData< NodeID, NodeSet, NodeID, PointsTo > PersPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00057">PointerAnalysisImpl.h:57</a></div></div>
|
|
69
|
+
<a href="PointerAnalysisImpl_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> <span class="comment">//===- PointerAnalysis.h -- Base class of pointer analyses--------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-> <Yulei Sui></span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> </div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// along with this program. If not, see <http://www.gnu.org/licenses/>.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> </div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment"> * PointerAnalysis.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: Nov 12, 2013</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="preprocessor">#ifndef INCLUDE_MEMORYMODEL_POINTERANALYSISIMPL_H_</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#define INCLUDE_MEMORYMODEL_POINTERANALYSISIMPL_H_</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> </div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include <<a class="code" href="ConsG_8h.html">Graphs/ConsG.h</a>></span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="PointerAnalysis_8h.html">MemoryModel/PointerAnalysis.h</a>"</span></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">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html"> 42</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</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"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#acfdb43f20bbcababc928cc4df93a8483"> 46</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#acfdb43f20bbcababc928cc4df93a8483">PTDataTy</a>;</div><div class="line"><a name="l00047"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#abd8bb73e9beac5e39667091b1e211bd3"> 47</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DiffPTData.html">DiffPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#abd8bb73e9beac5e39667091b1e211bd3">DiffPTDataTy</a>;</div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a5c2288519153467142e74c8dd4e77180"> 48</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1DFPTData.html">DFPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a5c2288519153467142e74c8dd4e77180">DFPTDataTy</a>;</div><div class="line"><a name="l00049"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a8bc5e039958280b18e5a00a56e0bdc94"> 49</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VersionedPTData.html">VersionedPTData<NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set<VersionedVar></a>> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8bc5e039958280b18e5a00a56e0bdc94">VersionedPTDataTy</a>;</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_1BVDataPTAImpl.html#a533384bd2eb8a1589ba8b7695c759073"> 51</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutablePTData.html">MutablePTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a533384bd2eb8a1589ba8b7695c759073">MutPTDataTy</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646"> 52</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutableDiffPTData.html">MutableDiffPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646">MutDiffPTDataTy</a>;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7"> 53</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutableDFPTData.html">MutableDFPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">MutDFPTDataTy</a>;</div><div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a639446e6bf9712afa439d089b94aefae"> 54</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutableIncDFPTData.html">MutableIncDFPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a639446e6bf9712afa439d089b94aefae">MutIncDFPTDataTy</a>;</div><div class="line"><a name="l00055"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a7fde3e9b189e988cd0a24d567b136e13"> 55</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutableVersionedPTData.html">MutableVersionedPTData<NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set<VersionedVar></a>> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7fde3e9b189e988cd0a24d567b136e13">MutVersionedPTDataTy</a>;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ae3ba6392560e5c0978335151c3373fd1"> 57</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentPTData.html">PersistentPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae3ba6392560e5c0978335151c3373fd1">PersPTDataTy</a>;</div><div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e"> 58</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentDiffPTData.html">PersistentDiffPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">PersDiffPTDataTy</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a7087f9d5a1a5b3576173bd6a7fd72163"> 59</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentDFPTData.html">PersistentDFPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7087f9d5a1a5b3576173bd6a7fd72163">PersDFPTDataTy</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a29172b3e8b3891a5d946a493cfcde2e7"> 60</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentIncDFPTData.html">PersistentIncDFPTData<NodeID, NodeSet, NodeID, PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a29172b3e8b3891a5d946a493cfcde2e7">PersIncDFPTDataTy</a>;</div><div class="line"><a name="l00061"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ae028ae29bdc799f35777b82a39faf5e8"> 61</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PersistentVersionedPTData.html">PersistentVersionedPTData<NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set<VersionedVar></a>> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae028ae29bdc799f35777b82a39faf5e8">PersVersionedPTDataTy</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8a"> 64</a></span>  <span class="keyword">enum</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8a">PTBackingType</a></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  {</div><div class="line"><a name="l00066"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8aa1cfb236b5127b660373c36b77a79ab5e"> 66</a></span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8aa1cfb236b5127b660373c36b77a79ab5e">Mutable</a>,</div><div class="line"><a name="l00067"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8aaeda0ee502cc42a07c64c6f09296b6640"> 67</a></span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8aaeda0ee502cc42a07c64c6f09296b6640">Persistent</a>,</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  };</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> </div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab0e1242aadfe1e16a2bd1445658a5476">BVDataPTAImpl</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PointerAnalysis::PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, <span class="keywordtype">bool</span> alias_check = <span class="keyword">true</span>);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span> </div><div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a06f211184d3e75f0ca351a4b8092a478"> 74</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a06f211184d3e75f0ca351a4b8092a478">~BVDataPTAImpl</a>()</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  {</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af783769050ab663ad4bb93f901f01a6d">destroy</a>();</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_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792"> 79</a></span>  <span class="keyword">inline</span> <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<PointsTo></a> &<a class="code" href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">getPtCache</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  {</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span> </div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a6ba68138c10d1fbe5be6346c8dfeca74"> 84</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a6ba68138c10d1fbe5be6346c8dfeca74">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a> *pta)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">return</span> pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#ac0f821cfe4fb9c9c8816e7a1b1bc0c5e">getImplTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da84705167ea3a7162ecb9470a8a77b5d8">BVDataImpl</a>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#af783769050ab663ad4bb93f901f01a6d"> 90</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af783769050ab663ad4bb93f901f01a6d">destroy</a>()</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>.clear();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00099"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb"> 99</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  {</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#a9ae6037637d8b9acb323333f491f4a7d">getPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  }</div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a58113943e4e7144d94d26991dcc8bcc7"> 103</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a>& <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a58113943e4e7144d94d26991dcc8bcc7">getRevPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ab6146f5582946c08568f3a8d45e57b03">getRevPts</a>(nodeId);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  }</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span> </div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a4909696c946cf6aba12542ec51766b64"> 110</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a4909696c946cf6aba12542ec51766b64">clearPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> element)</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  {</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#a03c783b9a1faac0aee3e22361df594ce">clearPts</a>(<span class="keywordtype">id</span>, element);</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="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#afdb10c2cce4935156566ea1c2daf9ea9"> 116</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#afdb10c2cce4935156566ea1c2daf9ea9">clearFullPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#a877888f12d9f8048002cc0e6b83d45ac">clearFullPts</a>(<span class="keywordtype">id</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"> 120</span> </div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span> </div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2"> 124</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2">unionPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& target)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>, target);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ad5e657b856681a534a8990df35ea08d0"> 128</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad5e657b856681a534a8990df35ea08d0">unionPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd)</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">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  }</div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff"> 132</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ac1b9dc035fb0bdf468c7d14b9f9d437a">addPts</a>(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a4426df37aeabeb94d301373b55a53c20"> 139</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a4426df37aeabeb94d301373b55a53c20">clearAllPts</a>()</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ad45879017d8fdeedc987ce35c4eba1a5">clear</a>();</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& expandedPts);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>& pts, <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>& expandedPts);</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>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c">remapPointsToSets</a>(<span class="keywordtype">void</span>);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> </div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span> </div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b">writeToFile</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>& filename);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a290501006cb700db0e07dc577429c928">readFromFile</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>& filename);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa0ca07204a31004fb876c6e18d1ac1ca">writeToModule</a>();</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a857cdacfc8cafdeb1431bdfa077ef9b5">readFromModule</a>();</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00162"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81"> 162</a></span>  <span class="keyword">inline</span> PTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae94cea78b71fb75837ee2a17b5ed0e81">getPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>;</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  }</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> </div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a57ff2bf45ede7a730a8adaba8e61179d">finalize</a>();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span> </div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70"> 172</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">updateCallGraph</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>&)</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"Virtual function not implemented!"</span>);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  }</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> </div><div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab"> 178</a></span>  <span class="keyword">inline</span> DiffPTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">getDiffPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  DiffPTDataTy* diff = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><DiffPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(diff && <span class="stringliteral">"BVDataPTAImpl::getDiffPTDataTy: not a DiffPTDataTy!"</span>);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">return</span> diff;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502"> 185</a></span>  <span class="keyword">inline</span> DFPTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  DFPTDataTy* df = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><DFPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(df && <span class="stringliteral">"BVDataPTAImpl::getDFPTDataTy: not a DFPTDataTy!"</span>);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">return</span> df;</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"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#acbb979edee9427efa2a7c0dbd881c483"> 192</a></span>  <span class="keyword">inline</span> MutDFPTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#acbb979edee9427efa2a7c0dbd881c483">getMutDFPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  MutDFPTDataTy* mdf = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><MutDFPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdf && <span class="stringliteral">"BVDataPTAImpl::getMutDFPTDataTy: not a MutDFPTDataTy!"</span>);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">return</span> mdf;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span> </div><div class="line"><a name="l00199"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#a4859864a4c72d5e04c10305e4579e8ee"> 199</a></span>  <span class="keyword">inline</span> VersionedPTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a4859864a4c72d5e04c10305e4579e8ee">getVersionedPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  VersionedPTDataTy* v = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><VersionedPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(v && <span class="stringliteral">"BVDataPTAImpl::getVersionedPTDataTy: not a VersionedPTDataTy!"</span>);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">return</span> v;</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span> </div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296">onTheFlyCallGraphSolve</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html#ad95c842964e6ca46e51fb763fefec585">CallSiteToFunPtrMap</a>& callsites, <a class="code" href="classSVF_1_1PointerAnalysis.html#a35bd5f0fb2c146199e9f1aa6a19b4062">CallEdgeMap</a>& newEdges);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">normalizePointsTo</a>();</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00215"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d"> 215</a></span>  PTDataTy* <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</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_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8"> 217</a></span>  <a class="code" href="classSVF_1_1PersistentPointsToCache.html">PersistentPointsToCache<PointsTo></a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">ptCache</a>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> </div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1,</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node2);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts1, <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts2);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classSVF_1_1BVDataPTAImpl.html#ae20bbb7991f585deb2e6d0d8115b1b93"> 232</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae20bbb7991f585deb2e6d0d8115b1b93">dumpCPts</a>()</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>  ptD-><a class="code" href="classSVF_1_1PTData.html#a91b898e3547eecfbf1ab155d183734bf">dumpPTData</a>();</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> </div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a8d6cea841b6ded0f80ef2b5784e9b752">dumpTopLevelPtsTo</a>();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> </div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22">dumpAllPts</a>();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> };</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="keyword">template</span><<span class="keyword">class</span> Cond></div><div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html"> 247</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1CondPTAImpl.html">CondPTAImpl</a> : <span class="keyword">public</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a></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"> 250</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00251"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#af71b4ec9844701582d997466c2e4d94f"> 251</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1CondVar.html">CondVar<Cond></a> <a class="code" href="classSVF_1_1CondPTAImpl.html#af71b4ec9844701582d997466c2e4d94f">CVar</a>;</div><div class="line"><a name="l00252"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a3f2f48fc122c07ff9eb1382aa7a3f966"> 252</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1CondStdSet.html">CondStdSet<CVar></a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a3f2f48fc122c07ff9eb1382aa7a3f966">CPtSet</a>;</div><div class="line"><a name="l00253"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a761f8a7c6ab4a160e279e9a831f037b1"> 253</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTData.html">PTData<CVar, Set<CVar></a>, CVar, CPtSet> <a class="code" href="classSVF_1_1CondPTAImpl.html#a761f8a7c6ab4a160e279e9a831f037b1">PTDataTy</a>;</div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#af3ae2748edfdefaa08a73930bd012d6c"> 254</a></span>  <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1MutablePTData.html">MutablePTData<CVar, Set<CVar></a>, CVar, CPtSet> <a class="code" href="classSVF_1_1CondPTAImpl.html#af3ae2748edfdefaa08a73930bd012d6c">MutPTDataTy</a>;</div><div class="line"><a name="l00255"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#aba828ca8e2aa2bd71b78be8b45a48c9b"> 255</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID,PointsTo></a> <a class="code" href="classSVF_1_1CondPTAImpl.html#aba828ca8e2aa2bd71b78be8b45a48c9b">PtrToBVPtsMap</a>; </div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a838c3f2be39d278072f7a9df7c0bcb4d"> 256</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID, NodeSet></a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a838c3f2be39d278072f7a9df7c0bcb4d">PtrToNSMap</a>;</div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a5043e9d9255d31777d038c48c809bb09"> 257</a></span>  <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<NodeID,CPtSet></a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a5043e9d9255d31777d038c48c809bb09">PtrToCPtsMap</a>; </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a60678dda5071557483b27d09d26dc270"> 260</a></span>  <a class="code" href="classSVF_1_1CondPTAImpl.html#a60678dda5071557483b27d09d26dc270">CondPTAImpl</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PointerAnalysis::PTATY</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>) : <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a>(pag, type), normalized(<a class="code" href="cJSON_8cpp.html#a65e9886d74aaee76545e83dd09011727">false</a>)</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <span class="keywordflow">if</span> (type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acaf0c0774025005647deaf59582b9d58">PathS_DDA</a> || type == <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85a0ab6564c48897595c9d23382a026e0a8">Cxt_DDA</a>)</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a533384bd2eb8a1589ba8b7695c759073">MutPTDataTy</a>();</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"no points-to data available"</span>);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> </div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">ptaImplTy</a> = <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da88380bb05f60a1349e192364ba6c5292">CondImpl</a>;</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="l00271"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a01f64600bf6581403836019e4e5ae741"> 271</a></span>  <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a01f64600bf6581403836019e4e5ae741">~CondPTAImpl</a>()</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af783769050ab663ad4bb93f901f01a6d">destroy</a>();</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_1CondPTAImpl.html#ae76fb767c13ca39baa0fbec55a7780fe"> 276</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#ae76fb767c13ca39baa0fbec55a7780fe">classof</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointerAnalysis.html">PointerAnalysis</a> *pta)</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">return</span> pta-><a class="code" href="classSVF_1_1PointerAnalysis.html#ac0f821cfe4fb9c9c8816e7a1b1bc0c5e">getImplTy</a>() == <a class="code" href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da88380bb05f60a1349e192364ba6c5292">CondImpl</a>;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  }</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> </div><div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a5fa3d986e4ef710a2148b2854167c3ed"> 282</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a5fa3d986e4ef710a2148b2854167c3ed">destroy</a>()</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  {</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>;</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> </div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a35cb1fd6e18cdc8e8466ee94846bc553"> 289</a></span>  <span class="keyword">inline</span> PTDataTy* <a class="code" href="classSVF_1_1CondPTAImpl.html#a35cb1fd6e18cdc8e8466ee94846bc553">getPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  }</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span> </div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#ab582d46731c06a7fa022bf301d6008c1"> 294</a></span>  <span class="keyword">inline</span> MutPTDataTy* <a class="code" href="classSVF_1_1CondPTAImpl.html#ab582d46731c06a7fa022bf301d6008c1">getMutPTDataTy</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  MutPTDataTy* mut = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><MutPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mut && <span class="stringliteral">"BVDataPTAImpl::getMutPTDataTy: not a MutPTDataTy!"</span>);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="keywordflow">return</span> mut;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> </div><div class="line"><a name="l00301"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a597e9c4e76f358c36d4b820c4d69ebc6"> 301</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a597e9c4e76f358c36d4b820c4d69ebc6">hasPtsMap</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keywordflow">return</span> SVFUtil::isa<MutPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a979486e35b529fbc62b2974899627113"> 306</a></span>  <span class="keyword">inline</span> <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1MutablePTData.html#ad74cc6c81c4a95f6ba4e89352bccee3e">MutPTDataTy::PtsMap</a>& <a class="code" href="classSVF_1_1CondPTAImpl.html#a979486e35b529fbc62b2974899627113">getPtsMap</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keywordflow">if</span> (MutPTDataTy *m = SVFUtil::dyn_cast<MutPTDataTy>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>)) <span class="keywordflow">return</span> m->getPtsMap();</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"CondPTAImpl::getPtsMap: not a PTData with a PtsMap!"</span>);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>(1);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> </div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a63fa2b3a96696ffc67a119c1ba5ce748"> 315</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> CPtSet& <a class="code" href="classSVF_1_1CondPTAImpl.html#a63fa2b3a96696ffc67a119c1ba5ce748">getPts</a>(CVar <span class="keywordtype">id</span>)</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#a9ae6037637d8b9acb323333f491f4a7d">getPts</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div><div class="line"><a name="l00319"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a0da0602c5b260afaba4bef1abcbcf7b3"> 319</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set<CVar></a>& <a class="code" href="classSVF_1_1CondPTAImpl.html#a0da0602c5b260afaba4bef1abcbcf7b3">getRevPts</a>(CVar nodeId)</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ab6146f5582946c08568f3a8d45e57b03">getRevPts</a>(nodeId);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#adfae199dfbe05c9c20052e0fc204e6de"> 326</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#adfae199dfbe05c9c20052e0fc204e6de">clearPts</a>()</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ad45879017d8fdeedc987ce35c4eba1a5">clear</a>();</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span> </div><div class="line"><a name="l00332"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#adf0acbb0c605278e43d88787d651bbd8"> 332</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#adf0acbb0c605278e43d88787d651bbd8">overlap</a>(<span class="keyword">const</span> CPtSet& cpts1, <span class="keyword">const</span> CPtSet& cpts2)<span class="keyword"> const</span></div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> it1 = cpts1.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(); it1 != cpts1.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); ++it1)</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="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> it2 = cpts2.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(); it2 != cpts2.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); ++it2)</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keywordflow">if</span>(isSameVar(*it1,*it2))</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  }</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> </div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a87b48287d7edb97fc120200fe0e5218d"> 346</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a87b48287d7edb97fc120200fe0e5218d">expandFIObjs</a>(<span class="keyword">const</span> CPtSet& cpts, CPtSet& expandedCpts)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  expandedCpts = cpts;;</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> cit = cpts.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(), ecit=cpts.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); cit!=ecit; ++cit)</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  {</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(cit->get_id())==cit->get_id())</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  {</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a>& fields = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(cit->get_id());</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">NodeBS::iterator</a> it = fields.<a class="code" href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">begin</a>(), eit = fields.<a class="code" href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">end</a>(); it!=eit; ++it)</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  CVar cvar(cit->get_cond(),*it);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  expandedCpts.<a class="code" href="classSVF_1_1CondStdSet.html#ae11deddad534be115d29daad08c90599">set</a>(cvar);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  }</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  }</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="keyword">protected</span>:</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span> </div><div class="line"><a name="l00366"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a9bdc3a50c695029a28371116ddc3ef8d"> 366</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a9bdc3a50c695029a28371116ddc3ef8d">finalize</a>()</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>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a2026cffd7043208333083ed1a6603e7b">normalizePointsTo</a>();</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a118dabc50024b5cd91095814ade47166">PointerAnalysis::finalize</a>();</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</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_1CondPTAImpl.html#a1a95d1d6ac48157c896d9895cff697b4"> 374</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a1a95d1d6ac48157c896d9895cff697b4">unionPts</a>(CVar <span class="keywordtype">id</span>, <span class="keyword">const</span> CPtSet& target)</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  {</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>, target);</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_1CondPTAImpl.html#a4ad5da56c8b7bc75bf2dc30a1bcf1552"> 379</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a4ad5da56c8b7bc75bf2dc30a1bcf1552">unionPts</a>(CVar <span class="keywordtype">id</span>, CVar ptd)</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#af7aa22f11558c12ff16612174e2221dd">unionPts</a>(<span class="keywordtype">id</span>,ptd);</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_1CondPTAImpl.html#a08037f32b927fe2e6be47a61a060463c"> 384</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a08037f32b927fe2e6be47a61a060463c">addPts</a>(CVar <span class="keywordtype">id</span>, CVar ptd)</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">ptD</a>-><a class="code" href="classSVF_1_1PTData.html#ac1b9dc035fb0bdf468c7d14b9f9d437a">addPts</a>(<span class="keywordtype">id</span>,ptd);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> </div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> </div><div class="line"><a name="l00392"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a3b5877fec52bbfa7c83bab6c9bc95684"> 392</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a3b5877fec52bbfa7c83bab6c9bc95684">mustAlias</a>(<span class="keyword">const</span> CVar& var1, <span class="keyword">const</span> CVar& var2)</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">if</span>(isSameVar(var1,var2))</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> </div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  <span class="keywordtype">bool</span> singleton = !(<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(var1.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>()) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a108380f6f0b67654bb7c7676686096c8">isLocalVarInRecursiveFun</a>(var1.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>()));</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">if</span>(isCondCompatible(var1.<a class="code" href="classSVF_1_1CondVar.html#af84e7bfcff909009be5e109c600c63fe">get_cond</a>(),var2.<a class="code" href="classSVF_1_1CondVar.html#af84e7bfcff909009be5e109c600c63fe">get_cond</a>(),singleton) == <span class="keyword">false</span>)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keyword">const</span> CPtSet& cpts1 = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var1);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  <span class="keyword">const</span> CPtSet& cpts2 = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var2);</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  <span class="keywordflow">return</span> (contains(cpts1,cpts2) && contains(cpts2,cpts1));</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  }</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> </div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="comment">// Whether cpts1 contains all points-to targets of pts2</span></div><div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a5af00bb26800882ab96c470ee9fc4632"> 407</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a5af00bb26800882ab96c470ee9fc4632">contains</a>(<span class="keyword">const</span> CPtSet& cpts1, <span class="keyword">const</span> CPtSet& cpts2)</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">if</span> (cpts1.<a class="code" href="classSVF_1_1CondStdSet.html#a0305cbf452b4e858e464023727417d76">empty</a>() || cpts2.<a class="code" href="classSVF_1_1CondStdSet.html#a0305cbf452b4e858e464023727417d76">empty</a>())</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> </div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> it2 = cpts2.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(); it2 != cpts2.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); ++it2)</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  <span class="keywordtype">bool</span> hasObj = <span class="keyword">false</span>;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  <span class="keywordflow">for</span> (<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> it1 = cpts1.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(); it1 != cpts1.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); ++it1)</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  {</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>  <span class="keywordflow">if</span>(isSameVar(*it1,*it2))</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  hasObj = <span class="keyword">true</span>;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  }</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  <span class="keywordflow">if</span>(hasObj == <span class="keyword">false</span>)</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  }</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span> </div><div class="line"><a name="l00430"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a7a1be735c76ba4a6b235264fe8ec6c28"> 430</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a7a1be735c76ba4a6b235264fe8ec6c28">isSameVar</a>(<span class="keyword">const</span> CVar& var1, <span class="keyword">const</span> CVar& var2)<span class="keyword"> const</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>  <span class="keywordflow">if</span>(var1.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>() != var2.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>())</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span> </div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  <span class="keywordtype">bool</span> singleton = !(<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(var1.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>()) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a108380f6f0b67654bb7c7676686096c8">isLocalVarInRecursiveFun</a>(var1.<a class="code" href="classSVF_1_1CondVar.html#a5d64fa2be89051cd03301e3b07bffd6a">get_id</a>()));</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="keywordflow">return</span> isCondCompatible(var1.<a class="code" href="classSVF_1_1CondVar.html#af84e7bfcff909009be5e109c600c63fe">get_cond</a>(),var2.<a class="code" href="classSVF_1_1CondVar.html#af84e7bfcff909009be5e109c600c63fe">get_cond</a>(),singleton);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span> </div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#aa945d068c8935fc6926833fdf102e21c"> 442</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#aa945d068c8935fc6926833fdf102e21c">normalizePointsTo</a>()</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  normalized = <span class="keyword">true</span>;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  <span class="keywordflow">if</span> (hasPtsMap())</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>  <span class="keyword">const</span> <span class="keyword">typename</span> <a class="code" href="classSVF_1_1MutablePTData.html#ad74cc6c81c4a95f6ba4e89352bccee3e">MutPTDataTy::PtsMap</a>& ptsMap = getPtsMap();</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> MutPTDataTy::PtsMap::const_iterator it = ptsMap.begin(), eit=ptsMap.end(); it!=eit; ++it)</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> cit = it->second.begin(), ecit=it->second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  ptrToBVPtsMap[(it->first).get_id()].set(cit->get_id());</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  objToNSRevPtsMap[cit->get_id()].insert((it->first).get_id());</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  ptrToCPtsMap[(it->first).get_id()].set(*cit);</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"> 457</span>  }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"CondPTAImpl::NormalizePointsTo: could not normalize points-to sets"</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"> 462</span>  }</div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#af960c10e49932ea5e9dcdd299ff300ce"> 464</a></span>  PTDataTy* <a class="code" href="classSVF_1_1CondPTAImpl.html#af960c10e49932ea5e9dcdd299ff300ce">ptD</a>;</div><div class="line"><a name="l00466"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#ab4115f25e2e477bfd73d01f069f47241"> 466</a></span>  <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#ab4115f25e2e477bfd73d01f069f47241">normalized</a>;</div><div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a30b9ee7b1dcd04285f92cf7accd05b2e"> 468</a></span>  PtrToBVPtsMap <a class="code" href="classSVF_1_1CondPTAImpl.html#a30b9ee7b1dcd04285f92cf7accd05b2e">ptrToBVPtsMap</a>;</div><div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a22c23f3ba1ee7e0aaccf0b8a1b58e33e"> 470</a></span>  PtrToNSMap <a class="code" href="classSVF_1_1CondPTAImpl.html#a22c23f3ba1ee7e0aaccf0b8a1b58e33e">objToNSRevPtsMap</a>;</div><div class="line"><a name="l00472"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a61167fcdb2005090de1b38e53450431a"> 472</a></span>  PtrToCPtsMap <a class="code" href="classSVF_1_1CondPTAImpl.html#a61167fcdb2005090de1b38e53450431a">ptrToCPtsMap</a>;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00475"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#aa260a3275fbec7061295306a58763d24"> 475</a></span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#aa260a3275fbec7061295306a58763d24">dumpCPts</a>()</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>  {</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>  ptD-><a class="code" href="classSVF_1_1PTData.html#a91b898e3547eecfbf1ab155d183734bf">dumpPTData</a>();</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  }</div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a94f3e4d073b8c5bab3c46058ddba3f43"> 480</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a94f3e4d073b8c5bab3c46058ddba3f43">getBVPointsTo</a>(<span class="keyword">const</span> CPtSet& cpts)<span class="keyword"> const</span></div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span> <span class="keyword"> </span>{</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> pts;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> cit = cpts.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(), ecit=cpts.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); cit!=ecit; ++cit)</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  pts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(cit->get_id());</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">return</span> pts;</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }</div><div class="line"><a name="l00488"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a0b96ba98239186d6d676f9540da9e590"> 488</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& <a class="code" href="classSVF_1_1CondPTAImpl.html#a0b96ba98239186d6d676f9540da9e590">getPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptr)</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(normalized && <span class="stringliteral">"Pts of all context-var have to be merged/normalized. Want to use getPts(CVar cvar)??"</span>);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">return</span> ptrToBVPtsMap[ptr];</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  }</div><div class="line"><a name="l00494"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a454a998ef5a866f2a6f270e3283c6ebd"> 494</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> CPtSet& <a class="code" href="classSVF_1_1CondPTAImpl.html#a454a998ef5a866f2a6f270e3283c6ebd">getCondPointsTo</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptr)</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  {</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(normalized && <span class="stringliteral">"Pts of all context-vars have to be merged/normalized. Want to use getPts(CVar cvar)??"</span>);</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  <span class="keywordflow">return</span> ptrToCPtsMap[ptr];</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  }</div><div class="line"><a name="l00500"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#aa266eef30817c557882de19aefe135a9"> 500</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">NodeSet</a>& <a class="code" href="classSVF_1_1CondPTAImpl.html#aa266eef30817c557882de19aefe135a9">getRevPts</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj)</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  {</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(normalized && <span class="stringliteral">"Pts of all context-var have to be merged/normalized. Want to use getPts(CVar cvar)??"</span>);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordflow">return</span> objToNSRevPtsMap[obj];</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  }</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span> </div><div class="line"><a name="l00507"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a171918ada9b679b0114b27476caa5ee6"> 507</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a171918ada9b679b0114b27476caa5ee6">alias</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V1, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V2)</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V1),<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V2));</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  }</div><div class="line"><a name="l00512"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#ac18e1dc9c6fc8cc952f67a93c2491876"> 512</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1CondPTAImpl.html#ac18e1dc9c6fc8cc952f67a93c2491876">alias</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node2)</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">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(getCondPointsTo(node1),getCondPointsTo(node2));</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  }</div><div class="line"><a name="l00517"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#adb1ed3728d53a13c94402392155e9913"> 517</a></span>  <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1CondPTAImpl.html#adb1ed3728d53a13c94402392155e9913">alias</a>(<span class="keyword">const</span> CVar& var1, <span class="keyword">const</span> CVar& var2)</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>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#adaba5a41a60e32d18d964bdb8ae5b2df">alias</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var1),<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(var2));</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>  }</div><div class="line"><a name="l00522"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a8e48e9fe6f7e21da49a155f8f6893944"> 522</a></span>  <span class="keyword">virtual</span> <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">AliasResult</a> <a class="code" href="classSVF_1_1CondPTAImpl.html#a8e48e9fe6f7e21da49a155f8f6893944">alias</a>(<span class="keyword">const</span> CPtSet& pts1, <span class="keyword">const</span> CPtSet& pts2)</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  CPtSet cpts1;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(pts1,cpts1);</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  CPtSet cpts2;</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(pts2,cpts2);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(cpts1) || <a class="code" href="classSVF_1_1PointerAnalysis.html#a56368369bc37e37b13f19e5eb1890063">containBlackHoleNode</a>(cpts2))</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a>;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(this-><a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>()==<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85acaf0c0774025005647deaf59582b9d58">PathS_DDA</a> && contains(cpts1,cpts2) && contains(cpts2,cpts1))</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  {</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2">AliasResult::MustAlias</a>;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  }</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(overlap(cpts1,cpts2))</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">AliasResult::MayAlias</a>;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">AliasResult::NoAlias</a>;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  }</div><div class="line"><a name="l00540"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a8cd7b08bd978513cb0faacc47bbaf578"> 540</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a8cd7b08bd978513cb0faacc47bbaf578">containBlackHoleNode</a>(<span class="keyword">const</span> CPtSet& cpts)</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  {</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> cit = cpts.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(), ecit=cpts.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); cit!=ecit; ++cit)</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>  {</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>  <span class="keywordflow">if</span>(cit->get_id() == <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">getBlackHoleNode</a>())</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  }</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  }</div><div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a3a10f3327d6473c348df5b62a5d6683f"> 550</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a3a10f3327d6473c348df5b62a5d6683f">containConstantNode</a>(<span class="keyword">const</span> CPtSet& cpts)</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keywordflow">for</span>(<span class="keyword">typename</span> <a class="code" href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">CPtSet::const_iterator</a> cit = cpts.<a class="code" href="classSVF_1_1CondStdSet.html#adf095111734d81b6ad1908a7f795b038">begin</a>(), ecit=cpts.<a class="code" href="classSVF_1_1CondStdSet.html#a93c232ef7e5dea652622da7f994e1dc3">end</a>(); cit!=ecit; ++cit)</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  {</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordflow">if</span>(cit->get_id() == <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>())</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>  }</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>  }</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keyword">virtual</span> <span class="keywordtype">bool</span> isCondCompatible(<span class="keyword">const</span> Cond& cxt1, <span class="keyword">const</span> Cond& cxt2, <span class="keywordtype">bool</span> singleton) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> </div><div class="line"><a name="l00563"></a><span class="lineno"><a class="line" href="classSVF_1_1CondPTAImpl.html#a80daa422e0dacf75aceb4fe5b4687c04"> 563</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1CondPTAImpl.html#a80daa422e0dacf75aceb4fe5b4687c04">dumpTopLevelPtsTo</a>()</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>  <span class="keywordflow">for</span> (OrderedNodeSet::iterator nIter = this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().begin(); nIter != this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a60b111647e000cc983aa52513f90afbc">getAllValidPtrs</a>().end(); ++nIter)</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  {</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(*nIter);</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordflow">if</span> (this-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()->isValidTopLevelPtr(node))</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  {</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordflow">if</span> (SVFUtil::isa<DummyObjVar>(node))</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  {</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"##<Blackhole or constant> id:"</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  }</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!SVFUtil::isa<DummyValVar>(node))</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  {</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"##<"</span> << node-><a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()->getName().str() << <span class="stringliteral">"> "</span>;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>  <span class="comment">//SVFUtil::outs() << "Source Loc: " << SVFUtil::getSourceLoc(node->getValue());</span></div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  }</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span> </div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"\nNodeID "</span> << node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">if</span> (pts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"\t\tPointsTo: {empty}\n\n"</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  {</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"\t\tPointsTo: { "</span>;</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1PointsTo_1_1PointsToIterator.html">PointsTo::iterator</a> it = pts.<a class="code" href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">begin</a>(), eit = pts.<a class="code" href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">end</a>(); it != eit; ++it)</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << *it << <span class="stringliteral">" "</span>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() << <span class="stringliteral">"}\n\n"</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  }</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  }</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  }</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>().flush();</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  }</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> };</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span> </div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span> </div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span> <span class="preprocessor">#endif </span><span class="comment">/* INCLUDE_MEMORYMODEL_POINTERANALYSISIMPL_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae3ba6392560e5c0978335151c3373fd1"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae3ba6392560e5c0978335151c3373fd1">SVF::BVDataPTAImpl::PersPTDataTy</a></div><div class="ttdeci">PersistentPTData< NodeID, NodeSet, NodeID, PointsTo > PersPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00057">PointerAnalysisImpl.h:57</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00042">PointerAnalysisImpl.h:42</a></div></div>
|
|
71
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector_1_1SparseBitVectorIterator.html">SVF::SparseBitVector::SparseBitVectorIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00534">SparseBitVector.h:534</a></div></div>
|
|
71
72
|
<div class="ttc" id="classSVF_1_1IRGraph_html_a3ce34b9fcb651689bce44ab48fbcdff0"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">SVF::IRGraph::getBlackHoleNode</a></div><div class="ttdeci">NodeID getBlackHoleNode() const</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00148">IRGraph.h:148</a></div></div>
|
|
72
73
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a7a87ca1a439e871896f92e4342befa2c"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a7a87ca1a439e871896f92e4342befa2c">SVF::BVDataPTAImpl::remapPointsToSets</a></div><div class="ttdeci">void remapPointsToSets(void)</div><div class="ttdoc">Remap all points-to sets to use the current mapping. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00106">PointerAnalysisImpl.cpp:106</a></div></div>
|
|
73
74
|
<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#l00235">AbstractPointsToDS.h:235</a></div></div>
|
|
@@ -85,7 +86,7 @@ $(function() {
|
|
|
85
86
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a1a95d1d6ac48157c896d9895cff697b4"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a1a95d1d6ac48157c896d9895cff697b4">SVF::CondPTAImpl::unionPts</a></div><div class="ttdeci">virtual bool unionPts(CVar id, const CPtSet &target)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00374">PointerAnalysisImpl.h:374</a></div></div>
|
|
86
87
|
<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#l00115">AbstractPointsToDS.h:115</a></div></div>
|
|
87
88
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a30b9ee7b1dcd04285f92cf7accd05b2e"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a30b9ee7b1dcd04285f92cf7accd05b2e">SVF::CondPTAImpl::ptrToBVPtsMap</a></div><div class="ttdeci">PtrToBVPtsMap ptrToBVPtsMap</div><div class="ttdoc">Normal points-to representation (without conditions) </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00468">PointerAnalysisImpl.h:468</a></div></div>
|
|
88
|
-
<div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set< NodeID > NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
89
|
+
<div class="ttc" id="namespaceSVF_html_a212231734fa43d5c7414137deaac7df3"><div class="ttname"><a href="namespaceSVF.html#a212231734fa43d5c7414137deaac7df3">SVF::NodeSet</a></div><div class="ttdeci">Set< NodeID > NodeSet</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00122">SVFBasicTypes.h:122</a></div></div>
|
|
89
90
|
<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#l00024">PersistentPointsToDS.h:24</a></div></div>
|
|
90
91
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a3b5877fec52bbfa7c83bab6c9bc95684"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a3b5877fec52bbfa7c83bab6c9bc95684">SVF::CondPTAImpl::mustAlias</a></div><div class="ttdeci">bool mustAlias(const CVar &var1, const CVar &var2)</div><div class="ttdoc">Internal interface to be used for conditional points-to set queries. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00392">PointerAnalysisImpl.h:392</a></div></div>
|
|
91
92
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_aba828ca8e2aa2bd71b78be8b45a48c9b"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#aba828ca8e2aa2bd71b78be8b45a48c9b">SVF::CondPTAImpl::PtrToBVPtsMap</a></div><div class="ttdeci">Map< NodeID, PointsTo > PtrToBVPtsMap</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00255">PointerAnalysisImpl.h:255</a></div></div>
|
|
@@ -102,7 +103,7 @@ $(function() {
|
|
|
102
103
|
<div class="ttc" id="classSVF_1_1CondVar_html_af84e7bfcff909009be5e109c600c63fe"><div class="ttname"><a href="classSVF_1_1CondVar.html#af84e7bfcff909009be5e109c600c63fe">SVF::CondVar::get_cond</a></div><div class="ttdeci">const Cond & get_cond() const</div><div class="ttdef"><b>Definition:</b> <a href="ConditionalPT_8h_source.html#l00099">ConditionalPT.h:99</a></div></div>
|
|
103
104
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a61167fcdb2005090de1b38e53450431a"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a61167fcdb2005090de1b38e53450431a">SVF::CondPTAImpl::ptrToCPtsMap</a></div><div class="ttdeci">PtrToCPtsMap ptrToCPtsMap</div><div class="ttdoc">Conditional points-to representation (with conditions) </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00472">PointerAnalysisImpl.h:472</a></div></div>
|
|
104
105
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a9830d4676fd424b633f8e4d918734296"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a9830d4676fd424b633f8e4d918734296">SVF::BVDataPTAImpl::onTheFlyCallGraphSolve</a></div><div class="ttdeci">virtual void onTheFlyCallGraphSolve(const CallSiteToFunPtrMap &callsites, CallEdgeMap &newEdges)</div><div class="ttdoc">On the fly call graph construction. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00383">PointerAnalysisImpl.cpp:383</a></div></div>
|
|
105
|
-
<div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#
|
|
106
|
+
<div class="ttc" id="classSVF_1_1PointsTo_1_1PointsToIterator_html"><div class="ttname"><a href="classSVF_1_1PointsTo_1_1PointsToIterator.html">SVF::PointsTo::PointsToIterator</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00181">PointsTo.h:181</a></div></div>
|
|
106
107
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a77a6bb9335aa12d29825af1b5ea07e08"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">SVF::SVFIR::getBaseObjVar</a></div><div class="ttdeci">NodeID getBaseObjVar(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00409">SVFIR.h:409</a></div></div>
|
|
107
108
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a761f8a7c6ab4a160e279e9a831f037b1"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a761f8a7c6ab4a160e279e9a831f037b1">SVF::CondPTAImpl::PTDataTy</a></div><div class="ttdeci">PTData< CVar, Set< CVar >, CVar, CPtSet > PTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00253">PointerAnalysisImpl.h:253</a></div></div>
|
|
108
109
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a34d87fa1988b78f032735b5fc2803792"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a34d87fa1988b78f032735b5fc2803792">SVF::BVDataPTAImpl::getPtCache</a></div><div class="ttdeci">PersistentPointsToCache< PointsTo > & getPtCache(void)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00079">PointerAnalysisImpl.h:79</a></div></div>
|
|
@@ -121,12 +122,12 @@ $(function() {
|
|
|
121
122
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a3f2f48fc122c07ff9eb1382aa7a3f966"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a3f2f48fc122c07ff9eb1382aa7a3f966">SVF::CondPTAImpl::CPtSet</a></div><div class="ttdeci">CondStdSet< CVar > CPtSet</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00252">PointerAnalysisImpl.h:252</a></div></div>
|
|
122
123
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a22c23f3ba1ee7e0aaccf0b8a1b58e33e"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a22c23f3ba1ee7e0aaccf0b8a1b58e33e">SVF::CondPTAImpl::objToNSRevPtsMap</a></div><div class="ttdeci">PtrToNSMap objToNSRevPtsMap</div><div class="ttdoc">Normal points-to representation (without conditions) </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00470">PointerAnalysisImpl.h:470</a></div></div>
|
|
123
124
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae7073c07bfd7912f888d54d4652c7cc2"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2">SVF::BVDataPTAImpl::unionPts</a></div><div class="ttdeci">virtual bool unionPts(NodeID id, const PointsTo &target)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00124">PointerAnalysisImpl.h:124</a></div></div>
|
|
124
|
-
<div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">SVF::AliasResult</a></div><div class="ttdeci">AliasResult</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
125
|
+
<div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943">SVF::AliasResult</a></div><div class="ttdeci">AliasResult</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00196">SVFBasicTypes.h:196</a></div></div>
|
|
125
126
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a25c68f9d2b88437778e854ff0d741d1b"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a25c68f9d2b88437778e854ff0d741d1b">SVF::BVDataPTAImpl::writeToFile</a></div><div class="ttdeci">virtual void writeToFile(const std::string &filename)</div><div class="ttdoc">Interface for analysis result storage on filesystem. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00116">PointerAnalysisImpl.cpp:116</a></div></div>
|
|
126
127
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a94f3e4d073b8c5bab3c46058ddba3f43"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a94f3e4d073b8c5bab3c46058ddba3f43">SVF::CondPTAImpl::getBVPointsTo</a></div><div class="ttdeci">virtual PointsTo getBVPointsTo(const CPtSet &cpts) const</div><div class="ttdoc">Given a conditional pts return its bit vector points-to. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00480">PointerAnalysisImpl.h:480</a></div></div>
|
|
127
128
|
<div class="ttc" id="classSVF_1_1MutableIncDFPTData_html"><div class="ttname"><a href="classSVF_1_1MutableIncDFPTData.html">SVF::MutableIncDFPTData</a></div><div class="ttdoc">Incremental version of the mutable data-flow points-to data structure. </div><div class="ttdef"><b>Definition:</b> <a href="MutablePointsToDS_8h_source.html#l00650">MutablePointsToDS.h:650</a></div></div>
|
|
128
129
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac23f71c1307cda9cba44acc40059f0a3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">SVF::PointerAnalysis::getAnalysisTy</a></div><div class="ttdeci">PTATY getAnalysisTy() const</div><div class="ttdoc">Type of pointer analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00192">PointerAnalysis.h:192</a></div></div>
|
|
129
|
-
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
130
|
+
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00110">SVFBasicTypes.h:110</a></div></div>
|
|
130
131
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_af783769050ab663ad4bb93f901f01a6d"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#af783769050ab663ad4bb93f901f01a6d">SVF::BVDataPTAImpl::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Release memory. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00090">PointerAnalysisImpl.h:90</a></div></div>
|
|
131
132
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_ab4115f25e2e477bfd73d01f069f47241"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#ab4115f25e2e477bfd73d01f069f47241">SVF::CondPTAImpl::normalized</a></div><div class="ttdeci">bool normalized</div><div class="ttdoc">Normalized flag. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00466">PointerAnalysisImpl.h:466</a></div></div>
|
|
132
133
|
<div class="ttc" id="classSVF_1_1PTData_html_ad45879017d8fdeedc987ce35c4eba1a5"><div class="ttname"><a href="classSVF_1_1PTData.html#ad45879017d8fdeedc987ce35c4eba1a5">SVF::PTData::clear</a></div><div class="ttdeci">virtual void clear()=0</div><div class="ttdoc">Clears all points-to sets as if nothing is stored. </div></div>
|
|
@@ -148,13 +149,13 @@ $(function() {
|
|
|
148
149
|
<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#l00016">PersistentPointsToDS.h:16</a></div></div>
|
|
149
150
|
<div class="ttc" id="classSVF_1_1PTData_html_a03c783b9a1faac0aee3e22361df594ce"><div class="ttname"><a href="classSVF_1_1PTData.html#a03c783b9a1faac0aee3e22361df594ce">SVF::PTData::clearPts</a></div><div class="ttdeci">virtual void clearPts(const Key &var, const Data &element)=0</div><div class="ttdoc">Clears element from the points-to set of var. </div></div>
|
|
150
151
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ac130bf326911b8e5396f57daa78566e7"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ac130bf326911b8e5396f57daa78566e7">SVF::BVDataPTAImpl::MutDFPTDataTy</a></div><div class="ttdeci">MutableDFPTData< NodeID, NodeSet, NodeID, PointsTo > MutDFPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00053">PointerAnalysisImpl.h:53</a></div></div>
|
|
151
|
-
<div class="ttc" id="classSVF_1_1PointsTo_html_aa53962e561399bf493d1f2b9137356f6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">SVF::PointsTo::begin</a></div><div class="ttdeci">const_iterator begin(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#
|
|
152
|
+
<div class="ttc" id="classSVF_1_1PointsTo_html_aa53962e561399bf493d1f2b9137356f6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#aa53962e561399bf493d1f2b9137356f6">SVF::PointsTo::begin</a></div><div class="ttdeci">const_iterator begin(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00128">PointsTo.h:128</a></div></div>
|
|
152
153
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a9bdc3a50c695029a28371116ddc3ef8d"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a9bdc3a50c695029a28371116ddc3ef8d">SVF::CondPTAImpl::finalize</a></div><div class="ttdeci">virtual void finalize()</div><div class="ttdoc">Finalization of pointer analysis, and normalize points-to information to Bit Vector representation...</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00366">PointerAnalysisImpl.h:366</a></div></div>
|
|
153
154
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a63fa2b3a96696ffc67a119c1ba5ce748"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a63fa2b3a96696ffc67a119c1ba5ce748">SVF::CondPTAImpl::getPts</a></div><div class="ttdeci">virtual const CPtSet & getPts(CVar id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00315">PointerAnalysisImpl.h:315</a></div></div>
|
|
154
155
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a97705b60d294b87ee075a69f04a35d22"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a97705b60d294b87ee075a69f04a35d22">SVF::BVDataPTAImpl::dumpAllPts</a></div><div class="ttdeci">virtual void dumpAllPts()</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00360">PointerAnalysisImpl.cpp:360</a></div></div>
|
|
155
156
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_adf0acbb0c605278e43d88787d651bbd8"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#adf0acbb0c605278e43d88787d651bbd8">SVF::CondPTAImpl::overlap</a></div><div class="ttdeci">bool overlap(const CPtSet &cpts1, const CPtSet &cpts2) const</div><div class="ttdoc">Whether cpts1 and cpts2 have overlap points-to targets. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00332">PointerAnalysisImpl.h:332</a></div></div>
|
|
156
157
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_af960c10e49932ea5e9dcdd299ff300ce"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#af960c10e49932ea5e9dcdd299ff300ce">SVF::CondPTAImpl::ptD</a></div><div class="ttdeci">PTDataTy * ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00464">PointerAnalysisImpl.h:464</a></div></div>
|
|
157
|
-
<div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
158
|
+
<div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set< Key, Hash, KeyEqual, Allocator > Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00105">SVFBasicTypes.h:105</a></div></div>
|
|
158
159
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_af68485a2208553579f9c2e4b2cb20cff"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">SVF::BVDataPTAImpl::addPts</a></div><div class="ttdeci">virtual bool addPts(NodeID id, NodeID ptd)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00132">PointerAnalysisImpl.h:132</a></div></div>
|
|
159
160
|
<div class="ttc" id="classSVF_1_1MutableDiffPTData_html"><div class="ttname"><a href="classSVF_1_1MutableDiffPTData.html">SVF::MutableDiffPTData</a></div><div class="ttdoc">DiffPTData implemented with points-to sets which are updated continuously. </div><div class="ttdef"><b>Definition:</b> <a href="MutablePointsToDS_8h_source.html#l00195">MutablePointsToDS.h:195</a></div></div>
|
|
160
161
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a7fde3e9b189e988cd0a24d567b136e13"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a7fde3e9b189e988cd0a24d567b136e13">SVF::BVDataPTAImpl::MutVersionedPTDataTy</a></div><div class="ttdeci">MutableVersionedPTData< NodeID, NodeSet, NodeID, PointsTo, VersionedVar, Set< VersionedVar > > MutVersionedPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00055">PointerAnalysisImpl.h:55</a></div></div>
|
|
@@ -170,7 +171,8 @@ $(function() {
|
|
|
170
171
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ac4e74e6dfee9d08198e0f7e3d76a0646"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ac4e74e6dfee9d08198e0f7e3d76a0646">SVF::BVDataPTAImpl::MutDiffPTDataTy</a></div><div class="ttdeci">MutableDiffPTData< NodeID, NodeSet, NodeID, PointsTo > MutDiffPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00052">PointerAnalysisImpl.h:52</a></div></div>
|
|
171
172
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ad76328a8543b02784992afc2d5501d8aaeda0ee502cc42a07c64c6f09296b6640"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ad76328a8543b02784992afc2d5501d8aaeda0ee502cc42a07c64c6f09296b6640">SVF::BVDataPTAImpl::Persistent</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00067">PointerAnalysisImpl.h:67</a></div></div>
|
|
172
173
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ae20bbb7991f585deb2e6d0d8115b1b93"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ae20bbb7991f585deb2e6d0d8115b1b93">SVF::BVDataPTAImpl::dumpCPts</a></div><div class="ttdeci">virtual void dumpCPts()</div><div class="ttdoc">dump and debug, print out conditional pts </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00232">PointerAnalysisImpl.h:232</a></div></div>
|
|
173
|
-
<div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">SVF::MayAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
174
|
+
<div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943aef15fd8989d8dd9576b3fbb2aabc118f">SVF::MayAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00199">SVFBasicTypes.h:199</a></div></div>
|
|
175
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_a1b5abe09fd0fcd337385653cb47343c1"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#a1b5abe09fd0fcd337385653cb47343c1">SVF::SparseBitVector::end</a></div><div class="ttdeci">iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01118">SparseBitVector.h:1118</a></div></div>
|
|
174
176
|
<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>
|
|
175
177
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a1342c0953d7bb9bf0f6f676bd564350e"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a1342c0953d7bb9bf0f6f676bd564350e">SVF::BVDataPTAImpl::PersDiffPTDataTy</a></div><div class="ttdeci">PersistentDiffPTData< NodeID, NodeSet, NodeID, PointsTo > PersDiffPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00058">PointerAnalysisImpl.h:58</a></div></div>
|
|
176
178
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a60678dda5071557483b27d09d26dc270"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a60678dda5071557483b27d09d26dc270">SVF::CondPTAImpl::CondPTAImpl</a></div><div class="ttdeci">CondPTAImpl(SVFIR *pag, PointerAnalysis::PTATY type)</div><div class="ttdoc">map a pointer to its conditional points-to set </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00260">PointerAnalysisImpl.h:260</a></div></div>
|
|
@@ -191,11 +193,13 @@ $(function() {
|
|
|
191
193
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ae6ea391ac44dffeb6899bb44323c5361"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">SVF::PointerAnalysis::isHeapMemObj</a></div><div class="ttdeci">bool isHeapMemObj(NodeID id) const</div><div class="ttdoc">Whether this object is heap or array. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00316">PointerAnalysis.h:316</a></div></div>
|
|
192
194
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac0c0855918cb2cdc3d8ebc175acfbd4da88380bb05f60a1349e192364ba6c5292"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac0c0855918cb2cdc3d8ebc175acfbd4da88380bb05f60a1349e192364ba6c5292">SVF::PointerAnalysis::CondImpl</a></div><div class="ttdoc">Represents CondPTAImpl. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00101">PointerAnalysis.h:101</a></div></div>
|
|
193
195
|
<div class="ttc" id="classSVF_1_1MutablePTData_html"><div class="ttname"><a href="classSVF_1_1MutablePTData.html">SVF::MutablePTData</a></div><div class="ttdoc">PTData implemented using points-to sets which are created once and updated continuously. </div><div class="ttdef"><b>Definition:</b> <a href="MutablePointsToDS_8h_source.html#l00021">MutablePointsToDS.h:21</a></div></div>
|
|
196
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html_abf76d8157c49ddba24bdc9dab3655772"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html#abf76d8157c49ddba24bdc9dab3655772">SVF::SparseBitVector::begin</a></div><div class="ttdeci">iterator begin() const</div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l01113">SparseBitVector.h:1113</a></div></div>
|
|
194
197
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_adfae199dfbe05c9c20052e0fc204e6de"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#adfae199dfbe05c9c20052e0fc204e6de">SVF::CondPTAImpl::clearPts</a></div><div class="ttdeci">virtual void clearPts()</div><div class="ttdoc">Clear all data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00326">PointerAnalysisImpl.h:326</a></div></div>
|
|
195
198
|
<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#l00018">PersistentPointsToDS.h:18</a></div></div>
|
|
196
199
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a58113943e4e7144d94d26991dcc8bcc7"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a58113943e4e7144d94d26991dcc8bcc7">SVF::BVDataPTAImpl::getRevPts</a></div><div class="ttdeci">virtual const NodeSet & getRevPts(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00103">PointerAnalysisImpl.h:103</a></div></div>
|
|
197
200
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_ab9c0bb439f98ae11dd178148109697ab"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#ab9c0bb439f98ae11dd178148109697ab">SVF::BVDataPTAImpl::getDiffPTDataTy</a></div><div class="ttdeci">DiffPTDataTy * getDiffPTDataTy() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00178">PointerAnalysisImpl.h:178</a></div></div>
|
|
198
201
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a7087f9d5a1a5b3576173bd6a7fd72163"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a7087f9d5a1a5b3576173bd6a7fd72163">SVF::BVDataPTAImpl::PersDFPTDataTy</a></div><div class="ttdeci">PersistentDFPTData< NodeID, NodeSet, NodeID, PointsTo > PersDFPTDataTy</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00059">PointerAnalysisImpl.h:59</a></div></div>
|
|
202
|
+
<div class="ttc" id="classSVF_1_1SparseBitVector_html"><div class="ttname"><a href="classSVF_1_1SparseBitVector.html">SVF::SparseBitVector</a></div><div class="ttdef"><b>Definition:</b> <a href="SparseBitVector_8h_source.html#l00460">SparseBitVector.h:460</a></div></div>
|
|
199
203
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee07488c4d53551826439d79b28e2e6d"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee07488c4d53551826439d79b28e2e6d">SVF::BVDataPTAImpl::ptD</a></div><div class="ttdeci">PTDataTy * ptD</div><div class="ttdoc">Points-to data. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00215">PointerAnalysisImpl.h:215</a></div></div>
|
|
200
204
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a8e48e9fe6f7e21da49a155f8f6893944"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a8e48e9fe6f7e21da49a155f8f6893944">SVF::CondPTAImpl::alias</a></div><div class="ttdeci">virtual AliasResult alias(const CPtSet &pts1, const CPtSet &pts2)</div><div class="ttdoc">Interface expose to users of our pointer analysis, given two conditional points-to sets...</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00522">PointerAnalysisImpl.h:522</a></div></div>
|
|
201
205
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a94acf249e50ad56f966ddad6843c18f8"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a94acf249e50ad56f966ddad6843c18f8">SVF::BVDataPTAImpl::ptCache</a></div><div class="ttdeci">PersistentPointsToCache< PointsTo > ptCache</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00217">PointerAnalysisImpl.h:217</a></div></div>
|
|
@@ -209,7 +213,6 @@ $(function() {
|
|
|
209
213
|
<div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00169">GenericGraph.h:169</a></div></div>
|
|
210
214
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a4ad5da56c8b7bc75bf2dc30a1bcf1552"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a4ad5da56c8b7bc75bf2dc30a1bcf1552">SVF::CondPTAImpl::unionPts</a></div><div class="ttdeci">virtual bool unionPts(CVar id, CVar ptd)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00379">PointerAnalysisImpl.h:379</a></div></div>
|
|
211
215
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a798c84d5e861de2b61bcb1a86385f721"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">SVF::BVDataPTAImpl::expandFIObjs</a></div><div class="ttdeci">virtual void expandFIObjs(const PointsTo &pts, PointsTo &expandedPts)</div><div class="ttdoc">Expand FI objects. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8cpp_source.html#l00082">PointerAnalysisImpl.cpp:82</a></div></div>
|
|
212
|
-
<div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00095">SVFBasicTypes.h:95</a></div></div>
|
|
213
216
|
<div class="ttc" id="classSVF_1_1CondStdSet_html"><div class="ttname"><a href="classSVF_1_1CondStdSet.html">SVF::CondStdSet</a></div><div class="ttdef"><b>Definition:</b> <a href="ConditionalPT_8h_source.html#l00130">ConditionalPT.h:130</a></div></div>
|
|
214
217
|
<div class="ttc" id="classSVF_1_1IRGraph_html_ac5da3a0cbe040a45d719b6f6a23aed91"><div class="ttname"><a href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">SVF::IRGraph::getConstantNode</a></div><div class="ttdeci">NodeID getConstantNode() const</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00152">IRGraph.h:152</a></div></div>
|
|
215
218
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5d3c3094e263bf16a4f312a118c1bd36"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5d3c3094e263bf16a4f312a118c1bd36">SVF::PointerAnalysis::ptaImplTy</a></div><div class="ttdeci">PTAImplTy ptaImplTy</div><div class="ttdoc">PTA implementation type. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00152">PointerAnalysis.h:152</a></div></div>
|
|
@@ -230,21 +233,21 @@ $(function() {
|
|
|
230
233
|
<div class="ttc" id="classSVF_1_1PTData_html_a91b898e3547eecfbf1ab155d183734bf"><div class="ttname"><a href="classSVF_1_1PTData.html#a91b898e3547eecfbf1ab155d183734bf">SVF::PTData::dumpPTData</a></div><div class="ttdeci">virtual void dumpPTData()=0</div><div class="ttdoc">Dump stored keys and points-to sets. </div></div>
|
|
231
234
|
<div class="ttc" id="classSVF_1_1CondStdSet_html_ae11deddad534be115d29daad08c90599"><div class="ttname"><a href="classSVF_1_1CondStdSet.html#ae11deddad534be115d29daad08c90599">SVF::CondStdSet::set</a></div><div class="ttdeci">void set(const Element &var)</div><div class="ttdoc">Add the element into set. </div><div class="ttdef"><b>Definition:</b> <a href="ConditionalPT_8h_source.html#l00157">ConditionalPT.h:157</a></div></div>
|
|
232
235
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00391">GenericGraph.h:391</a></div></div>
|
|
233
|
-
<div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#
|
|
236
|
+
<div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00028">PointsTo.h:28</a></div></div>
|
|
234
237
|
<div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
|
|
235
238
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a8cd7b08bd978513cb0faacc47bbaf578"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a8cd7b08bd978513cb0faacc47bbaf578">SVF::CondPTAImpl::containBlackHoleNode</a></div><div class="ttdeci">bool containBlackHoleNode(const CPtSet &cpts)</div><div class="ttdoc">Test blk node for cpts. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00540">PointerAnalysisImpl.h:540</a></div></div>
|
|
236
239
|
<div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
|
|
237
240
|
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00072">BasicTypes.h:72</a></div></div>
|
|
238
|
-
<div class="ttc" id="classSVF_1_1PointsTo_html_a8f741cdffbf3c5fe0f602cdca677dee6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#
|
|
241
|
+
<div class="ttc" id="classSVF_1_1PointsTo_html_a8f741cdffbf3c5fe0f602cdca677dee6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00132">PointsTo.h:132</a></div></div>
|
|
239
242
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a642613e98982259183d3f34a97f05502"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">SVF::BVDataPTAImpl::getDFPTDataTy</a></div><div class="ttdeci">DFPTDataTy * getDFPTDataTy() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00185">PointerAnalysisImpl.h:185</a></div></div>
|
|
240
243
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a171918ada9b679b0114b27476caa5ee6"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a171918ada9b679b0114b27476caa5ee6">SVF::CondPTAImpl::alias</a></div><div class="ttdeci">virtual AliasResult alias(const Value *V1, const Value *V2)</div><div class="ttdoc">Interface expose to users of our pointer analysis, given Value infos. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00507">PointerAnalysisImpl.h:507</a></div></div>
|
|
241
244
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a454a998ef5a866f2a6f270e3283c6ebd"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a454a998ef5a866f2a6f270e3283c6ebd">SVF::CondPTAImpl::getCondPointsTo</a></div><div class="ttdeci">virtual const CPtSet & getCondPointsTo(NodeID ptr)</div><div class="ttdoc">Given a pointer return its conditional points-to. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00494">PointerAnalysisImpl.h:494</a></div></div>
|
|
242
245
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aa534e475fa34fa322c567bc376a3da70"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aa534e475fa34fa322c567bc376a3da70">SVF::BVDataPTAImpl::updateCallGraph</a></div><div class="ttdeci">virtual bool updateCallGraph(const CallSiteToFunPtrMap &)</div><div class="ttdoc">Update callgraph. This should be implemented by its subclass. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00172">PointerAnalysisImpl.h:172</a></div></div>
|
|
243
246
|
<div class="ttc" id="classSVF_1_1CondStdSet_html_a55152b7749868cc25f1c3c33ea57a650"><div class="ttname"><a href="classSVF_1_1CondStdSet.html#a55152b7749868cc25f1c3c33ea57a650">SVF::CondStdSet::const_iterator</a></div><div class="ttdeci">OrderedSet< Element >::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="ConditionalPT_8h_source.html#l00136">ConditionalPT.h:136</a></div></div>
|
|
244
|
-
<div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">SVF::NoAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
247
|
+
<div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943afdd83ddff93d38902f07775cd36df239">SVF::NoAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00198">SVFBasicTypes.h:198</a></div></div>
|
|
245
248
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_ac18e1dc9c6fc8cc952f67a93c2491876"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#ac18e1dc9c6fc8cc952f67a93c2491876">SVF::CondPTAImpl::alias</a></div><div class="ttdeci">virtual AliasResult alias(NodeID node1, NodeID node2)</div><div class="ttdoc">Interface expose to users of our pointer analysis, given two pointers. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00512">PointerAnalysisImpl.h:512</a></div></div>
|
|
246
249
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_a7a1be735c76ba4a6b235264fe8ec6c28"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#a7a1be735c76ba4a6b235264fe8ec6c28">SVF::CondPTAImpl::isSameVar</a></div><div class="ttdeci">bool isSameVar(const CVar &var1, const CVar &var2) const</div><div class="ttdoc">Whether two pointers/objects are the same one by considering their conditions. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00430">PointerAnalysisImpl.h:430</a></div></div>
|
|
247
|
-
<div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2">SVF::MustAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#
|
|
250
|
+
<div class="ttc" id="namespaceSVF_html_a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2"><div class="ttname"><a href="namespaceSVF.html#a61c01e2e687ab3a001fb806737583943ab58a0391f037031a51016ebfe2a752b2">SVF::MustAlias</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00200">SVFBasicTypes.h:200</a></div></div>
|
|
248
251
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_a6ba68138c10d1fbe5be6346c8dfeca74"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#a6ba68138c10d1fbe5be6346c8dfeca74">SVF::BVDataPTAImpl::classof</a></div><div class="ttdeci">static bool classof(const PointerAnalysis *pta)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00084">PointerAnalysisImpl.h:84</a></div></div>
|
|
249
252
|
<div class="ttc" id="classSVF_1_1CondPTAImpl_html_af71b4ec9844701582d997466c2e4d94f"><div class="ttname"><a href="classSVF_1_1CondPTAImpl.html#af71b4ec9844701582d997466c2e4d94f">SVF::CondPTAImpl::CVar</a></div><div class="ttdeci">CondVar< Cond > CVar</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00251">PointerAnalysisImpl.h:251</a></div></div>
|
|
250
253
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html">SVF::PointerAnalysis</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00057">PointerAnalysis.h:57</a></div></div>
|