svf-tools 1.0.427 → 1.0.430
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
- package/SVF-doxygen/html/html/BreakConstantExpr_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +3 -3
- package/SVF-doxygen/html/html/CHG_8cpp.html +2 -2
- package/SVF-doxygen/html/html/CHG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/CHG_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ConsG_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CxtStmt_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/DCHG_8h_source.html +7 -7
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +9 -9
- package/SVF-doxygen/html/html/DataFlowUtil_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/DataFlowUtil_8h_source.html +6 -6
- package/SVF-doxygen/html/html/ExtAPI_8h_source.html +3 -3
- package/SVF-doxygen/html/html/FileChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ICFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +18 -18
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMModule_8h_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/LLVMUtil_8h.html +6 -0
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +58 -56
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LeakChecker_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/LockAnalysis_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/LockResultValidator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/MHP_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MTAAnnotator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +3 -3
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/MTA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/MTA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/MemPartition_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemPartition_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +13 -12
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +1 -1
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/MutablePointsToDS_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PCG_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PCG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +33 -27
- package/SVF-doxygen/html/html/PathCondAllocator_8h_source.html +32 -28
- package/SVF-doxygen/html/html/PersistentPointsToDS_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +6 -6
- package/SVF-doxygen/html/html/ProgSlice_8cpp_source.html +5 -4
- package/SVF-doxygen/html/html/ProgSlice_8h_source.html +4 -4
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h.html +117 -27
- package/SVF-doxygen/html/html/SVF-FE_2BasicTypes_8h_source.html +32 -27
- package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/SVFGBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +70 -70
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +34 -34
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +10 -10
- package/SVF-doxygen/html/html/SVFModule_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFModule_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/SVFUtil_8h.html +0 -3
- package/SVF-doxygen/html/html/SVFUtil_8h_source.html +12 -13
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +7 -7
- package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +9 -7
- package/SVF-doxygen/html/html/SaberAnnotator_8h.html +1 -1
- package/SVF-doxygen/html/html/SaberAnnotator_8h_source.html +6 -7
- package/SVF-doxygen/html/html/SaberCheckerAPI_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +62 -61
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +77 -76
- package/SVF-doxygen/html/html/SymbolTableInfo_8h.html +1 -0
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +135 -134
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/TCT_8h_source.html +7 -7
- package/SVF-doxygen/html/html/ThreadAPI_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/ThreadAPI_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/ThreadCallGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
- package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -11
- package/SVF-doxygen/html/html/Util_2BasicTypes_8h_source.html +75 -80
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/VFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/WPAPass_8h_source.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1CallGraphBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallSite.html +41 -41
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +47 -47
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +5 -3
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +14 -14
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IteratedDominanceFrontier.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +20 -19
- package/SVF-doxygen/html/html/classSVF_1_1MTA.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +5 -4
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +115 -88
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1MemSSADF.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MutablePTData.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +94 -94
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PCG.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1PTACFInfoBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator-members.html +26 -25
- package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +153 -114
- package/SVF-doxygen/html/html/classSVF_1_1PersistentIncDFPTData.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PersistentPTData.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +31 -30
- package/SVF-doxygen/html/html/classSVF_1_1ProgSlice.html +11 -8
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +29 -29
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +89 -89
- package/SVF-doxygen/html/html/classSVF_1_1SVFModule.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +28 -24
- package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +36 -36
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +86 -86
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +41 -42
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +189 -220
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +3 -3
- package/SVF-doxygen/html/html/functions_a.html +3 -3
- package/SVF-doxygen/html/html/functions_e.html +2 -2
- package/SVF-doxygen/html/html/functions_func.html +3 -3
- package/SVF-doxygen/html/html/functions_func_e.html +2 -2
- package/SVF-doxygen/html/html/functions_func_g.html +8 -7
- package/SVF-doxygen/html/html/functions_func_i.html +5 -8
- package/SVF-doxygen/html/html/functions_func_s.html +9 -8
- package/SVF-doxygen/html/html/functions_g.html +15 -14
- package/SVF-doxygen/html/html/functions_i.html +11 -14
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_o.html +15 -15
- package/SVF-doxygen/html/html/functions_p.html +7 -7
- package/SVF-doxygen/html/html/functions_r.html +8 -8
- package/SVF-doxygen/html/html/functions_s.html +11 -10
- package/SVF-doxygen/html/html/functions_t.html +10 -8
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/globals.html +3 -0
- package/SVF-doxygen/html/html/globals_b.html +3 -0
- package/SVF-doxygen/html/html/globals_r.html +3 -0
- package/SVF-doxygen/html/html/globals_s.html +9 -6
- package/SVF-doxygen/html/html/globals_type.html +15 -0
- package/SVF-doxygen/html/html/globals_u.html +5 -2
- package/SVF-doxygen/html/html/namespaceSVF.html +40 -130
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +253 -220
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +20 -20
- package/SVF-doxygen/html/html/namespacemembers.html +0 -3
- package/SVF-doxygen/html/html/namespacemembers_b.html +1 -4
- package/SVF-doxygen/html/html/namespacemembers_func.html +8 -5
- package/SVF-doxygen/html/html/namespacemembers_i.html +11 -8
- package/SVF-doxygen/html/html/namespacemembers_r.html +1 -4
- package/SVF-doxygen/html/html/namespacemembers_s.html +0 -3
- package/SVF-doxygen/html/html/namespacemembers_type.html +0 -15
- package/SVF-doxygen/html/html/namespacemembers_u.html +0 -3
- package/SVF-doxygen/html/html/search/all_1.js +4 -4
- package/SVF-doxygen/html/html/search/all_10.js +9 -9
- package/SVF-doxygen/html/html/search/all_12.js +4 -4
- package/SVF-doxygen/html/html/search/all_13.js +8 -8
- package/SVF-doxygen/html/html/search/all_14.js +7 -7
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_2.js +1 -1
- package/SVF-doxygen/html/html/search/all_5.js +2 -2
- package/SVF-doxygen/html/html/search/all_7.js +1 -1
- package/SVF-doxygen/html/html/search/all_9.js +2 -2
- package/SVF-doxygen/html/html/search/all_c.js +1 -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 +3 -3
- package/SVF-doxygen/html/html/search/functions_0.js +3 -3
- package/SVF-doxygen/html/html/search/functions_10.js +2 -2
- package/SVF-doxygen/html/html/search/functions_4.js +2 -2
- package/SVF-doxygen/html/html/search/functions_6.js +1 -1
- package/SVF-doxygen/html/html/search/functions_8.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_0.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_1.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_10.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_13.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01PTACallGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CallSite_01_4.html +3 -3
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CxtProc_01_4.html +1 -1
- package/include/DDA/DDAVFSolver.h +3 -3
- package/include/MemoryModel/SymbolTableInfo.h +6 -4
- package/include/SABER/PathCondAllocator.h +8 -2
- package/include/SABER/SaberAnnotator.h +4 -4
- package/include/SVF-FE/BasicTypes.h +5 -0
- package/include/SVF-FE/LLVMUtil.h +13 -0
- package/include/Util/BasicTypes.h +0 -5
- package/include/Util/SVFUtil.h +0 -5
- package/lib/MSSA/MemRegion.cpp +4 -4
- package/lib/MemoryModel/PointerAnalysis.cpp +4 -4
- package/lib/MemoryModel/SymbolTableInfo.cpp +6 -8
- package/lib/SABER/PathCondAllocator.cpp +31 -26
- package/lib/SABER/ProgSlice.cpp +7 -4
- package/lib/SABER/SaberAnnotator.cpp +8 -8
- package/lib/SVF-FE/SymbolTableBuilder.cpp +1 -1
- package/package.json +1 -1
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">MemRegion.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="MemRegion_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- MemRegion.cpp -- Memory region-----------------------------------------//</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-2017> <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"> * MemRegion.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: Dec 14, 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">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="MemRegion_8h.html">MSSA/MemRegion.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="MSSAMuChi_8h.html">MSSA/MSSAMuChi.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.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">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemRegion.html#a23857f301395cbbad10f6f93256a7398">MemRegion::totalMRNum</a> = 0;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MRVer.html#ad746973fdd724b71ebb251eb6930fccc">MRVer::totalVERNum</a> = 0;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac8fedbb65a582135354c939183d48f46"> 42</a></span> <a class="code" href="classSVF_1_1MRGenerator.html#ac8fedbb65a582135354c939183d48f46">MRGenerator::MRGenerator</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* p, <span class="keywordtype">bool</span> ptrOnly) :</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  pta(p), ptrOnlyMSSA(ptrOnly)</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>  <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a> = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MRGenerator.html#af8d52e6c9884c6e1abc6dbcbc5e32629">SCC</a>(<a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac253d88de2a0cb9624c70d2bcfdac36e"> 52</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac253d88de2a0cb9624c70d2bcfdac36e">MRGenerator::destroy</a>()</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">for</span> (MRSet::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  it != eit; ++it)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5"> 70</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5">MRGenerator::createMR</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& cpts)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& repCPts = <a class="code" href="classSVF_1_1MRGenerator.html#a98b3481580be48cff7e93bf3c8a29dac">getRepPointsTo</a>(cpts);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a> mr(repCPts);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  MRSet::const_iterator mit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.find(&mr);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">if</span>(mit!=<a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end())</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* mr = *mit;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a>& mrs = <a class="code" href="classSVF_1_1MRGenerator.html#a3e74c3706ffcc14f378771b417dcbb96">funToMRsMap</a>[fun];</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">if</span>(mrs.find(mr)==mrs.end())</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  mrs.insert(mr);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">else</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"> 84</span>  <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* m = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>(repCPts);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.insert(m);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a3e74c3706ffcc14f378771b417dcbb96">funToMRsMap</a>[fun].insert(m);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a55d38020bbece70847f7e72bb02bc4af"> 93</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* <a class="code" href="classSVF_1_1MRGenerator.html#a55d38020bbece70847f7e72bb02bc4af">MRGenerator::getMR</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& cpts)<span class="keyword"> const</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keyword"></span>{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a> mr(<a class="code" href="classSVF_1_1MRGenerator.html#a98b3481580be48cff7e93bf3c8a29dac">getRepPointsTo</a>(cpts));</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  MRSet::iterator mit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.find(&mr);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mit!=<a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end() && <span class="stringliteral">"memory region not found!!"</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">return</span> *mit;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd"> 105</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd">MRGenerator::collectGlobals</a>()</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != pag-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* obj = SVFUtil::dyn_cast<ObjVar>(nIter->second))</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>  <span class="keywordflow">if</span> (obj->getMemObj()->isGlobalObj())</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>  <a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a>.set(nIter->first);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a> |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(nIter->first);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a"> 125</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a">MRGenerator::generateMRs</a>()</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"Generate Memory Regions \n"</span>));</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd">collectGlobals</a>();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-><a class="code" href="classSVF_1_1SCCDetection.html#a123b5006a6da7053e5e357140da3c5a3">find</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCollect ModRef For Load/Store \n"</span>));</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>  <a class="code" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22">collectModRefForLoadStore</a>();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCollect ModRef For const CallICFGNode*\n"</span>));</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2">collectModRefForCall</a>();</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tPartition Memory Regions \n"</span>));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9">partitionMRs</a>();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7">updateAliasMRs</a>();</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5"> 151</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5">MRGenerator::hasSVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#a6a62d2dede5d2506c19b2d058d1cd9d3">ptrOnlyMSSA</a>)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a0552d565633ee22abe03085134a871c0">hasPTASVFStmtList</a>(pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a63acb4d86d93ad1e88860ac839a8c654">hasSVFStmtList</a>(pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst));</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c"> 160</a></span> <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>& <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">MRGenerator::getPAGEdgesFromInst</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#a6a62d2dede5d2506c19b2d058d1cd9d3">ptrOnlyMSSA</a>)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#abb91ed47d5c13d0ad7eec35164e37988">getPTASVFStmtList</a>(pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst));</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">getSVFStmtList</a>(pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst));</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22"> 172</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22">MRGenerator::collectModRefForLoadStore</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> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#ad8b71cebf46deaf60e2cd4f6d6bb9433">getModule</a>();</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#afcf2978f32e15127fb093405dc17d7f1">SVFModule::const_iterator</a> fi = svfModule-><a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), efi = svfModule-><a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>(); fi != efi;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  ++fi)</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& fun = **fi;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a50182faec95c6c4635df65a55148b040">Options::IgnoreDeadFun</a> && <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6d268e8d588717601345be3a911a7625">isDeadFunction</a>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()))</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">continue</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"> 185</span>  <span class="keywordflow">for</span> (Function::const_iterator iter = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->begin(), eiter = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->end();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  iter != eiter; ++iter)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb = *iter;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">for</span> (BasicBlock::const_iterator bit = bb.begin(), ebit = bb.end();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  bit != ebit; ++bit)</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>& inst = *bit;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(&inst);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">for</span> (SVFStmtList::iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* inst = *bit;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ab250a4950269f57027d8e8ef10089f58">pagEdgeToFunMap</a>[inst] = &fun;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a> *st = SVFUtil::dyn_cast<StoreStmt>(inst))</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cpts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(st->getLHSVarID()).toNodeBS());</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="comment">// TODO: change this assertion check later when we have conditional points-to set</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">if</span> (cpts.empty())</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!cpts.empty() && <span class="stringliteral">"null pointer!!"</span>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <a class="code" href="classSVF_1_1MRGenerator.html#af50efed3af17806a3ba3f668e4466d3e">addCPtsToStore</a>(cpts, st, &fun);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *ld = SVFUtil::dyn_cast<LoadStmt>(inst))</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cpts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(ld->getRHSVarID()).toNodeBS());</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="comment">// TODO: change this assertion check later when we have conditional points-to set</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (cpts.empty())</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!cpts.empty() && <span class="stringliteral">"null pointer!!"</span>);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a79a3032b50f7ef905213b770b12e0967">addCPtsToLoad</a>(cpts, ld, &fun);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2"> 228</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2">MRGenerator::collectModRefForCall</a>()</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\t\tCollect Callsite PointsTo \n"</span>));</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">for</span>(SVFIR::CallSiteSet::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>().begin(),</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  eit = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>().end(); it!=eit; ++it)</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>  <a class="code" href="classSVF_1_1MRGenerator.html#a9de695122660c1d8b65e1f3dab8a7ece">collectCallSitePts</a>((*it));</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\t\tPerform Callsite Mod-Ref \n"</span>));</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>  <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401">getCallGraphSCCRevTopoOrder</a>(worklist);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> callGraphNodeID = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& subNodes = <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-><a class="code" href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">subNodes</a>(callGraphNodeID);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = subNodes.begin(), eit = subNodes.end(); it!=eit; ++it)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* subCallGraphNode = <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>-><a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(*it);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <a class="code" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b">modRefAnalysis</a>(subCallGraphNode,worklist);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\t\tAdd PointsTo to Callsites \n"</span>));</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs : <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()->getCallSiteSet())</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="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#adc66b547720b9271e6805edea0b9d01f">getCallICFGNode</a>(cs.getInstruction());</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a9718c9e8efc1e6f32441aa5f418711dd">hasRefSideEffectOfCallSite</a>(callBlockNode))</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refs = <a class="code" href="classSVF_1_1MRGenerator.html#a62757aa995a6a01b484c60df2f51c53d">getRefSideEffectOfCallSite</a>(callBlockNode);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a94ce7ceff7cee90d672e9f3a4f3aa4e8">addCPtsToCallSiteRefs</a>(refs,callBlockNode);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a187d82895b2e1156c6dd5ae28795944f">hasModSideEffectOfCallSite</a>(callBlockNode))</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mods = <a class="code" href="classSVF_1_1MRGenerator.html#a1535832f5b1ae3178fea950bf71fdd99">getModSideEffectOfCallSite</a>(callBlockNode);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ab5b92ca898739f613f965fc05f86f094">addCPtsToCallSiteMods</a>(mods,callBlockNode);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a94ce7ceff7cee90d672e9f3a4f3aa4e8">addCPtsToCallSiteRefs</a>(mods,callBlockNode);</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"> 276</span> }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd"> 284</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd">MRGenerator::sortPointsTo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& cpts)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.find(cpts)!=<a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.end())</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a8b254a0c5063e25f297d1b00fb0b515e">PointsToList</a> subSetList;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> repCPts = cpts;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">for</span>(PtsToRepPtsSetMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.begin(),</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  eit = <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& existCPts = it->second;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">if</span>(cpts.contains(existCPts))</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  subSetList.insert(it->first);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(existCPts.contains(cpts))</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  repCPts = existCPts;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">for</span>(PointsToList::iterator it = subSetList.begin(), eit = subSetList.end(); it!=eit; ++it)</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>[*it] = cpts;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>[cpts] = repCPts;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9"> 317</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9">MRGenerator::partitionMRs</a>()</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">for</span>(FunToPointsTosMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().end();</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  it!=eit; ++it)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">for</span>(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd">sortPointsTo</a>(*cit);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">for</span>(FunToPointsTosMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().end();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  it!=eit; ++it)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it->first;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">for</span>(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5">createMR</a>(fun,*cit);</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> </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="l00348"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7"> 348</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7">MRGenerator::updateAliasMRs</a>()</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">for</span>(StoresToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a7d86f708743a59aa31c0a9fd6de45dac">storesToPointsToMap</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a7d86f708743a59aa31c0a9fd6de45dac">storesToPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1MRGenerator.html#a3121380139c7ae96d2045d66203253b6">getFunction</a>(it->first);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& storeCPts = it->second;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ad740188222439c089907fa6c6c951f02">getAliasMemRegions</a>(aliasMRs,storeCPts,fun);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</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>  <a class="code" href="classSVF_1_1MRGenerator.html#a255551fd3ff8fb33bcea93d0b00280b3">storesToMRsMap</a>[it->first].insert(*ait);</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> </div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">for</span>(LoadsToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#af47e15d6b8c15d547a718f3577513975">loadsToPointsToMap</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#af47e15d6b8c15d547a718f3577513975">loadsToPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1MRGenerator.html#a3121380139c7ae96d2045d66203253b6">getFunction</a>(it->first);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& loadCPts = it->second;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="classSVF_1_1MRGenerator.html#abe8d6217250d227e743e4b581497aae8">getMRsForLoad</a>(aliasMRs, loadCPts, fun);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  {</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a0d8229b1f0b8428708e923d19096e4ba">loadsToMRsMap</a>[it->first].insert(*ait);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">for</span>(CallSiteToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#ab8df193e84009e406c301731d17dc7b9">callsiteToModPointsToMap</a>.begin(),</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  eit = <a class="code" href="classSVF_1_1MRGenerator.html#ab8df193e84009e406c301731d17dc7b9">callsiteToModPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it->first->getCaller();</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& callsiteModCPts = it->second;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ad740188222439c089907fa6c6c951f02">getAliasMemRegions</a>(aliasMRs,callsiteModCPts,fun);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</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>  <a class="code" href="classSVF_1_1MRGenerator.html#adf8d477e5f622855799842134145ecc4">callsiteToModMRsMap</a>[it->first].insert(*ait);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordflow">for</span>(CallSiteToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a34967cda51699f948a581b9f88fa3b10">callsiteToRefPointsToMap</a>.begin(),</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  eit = <a class="code" href="classSVF_1_1MRGenerator.html#a34967cda51699f948a581b9f88fa3b10">callsiteToRefPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it->first->getCaller();</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& callsiteRefCPts = it->second;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a02c60ceb7c9c37bcf83c739aa4083acc">getMRsForCallSiteRef</a>(aliasMRs, callsiteRefCPts, fun);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a7a7ed21181c2486b60170a479a5a534e">callsiteToRefMRsMap</a>[it->first].insert(*ait);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf"> 407</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf">MRGenerator::addRefSideEffectOfFunction</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& refs)</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">for</span>(NodeBS::iterator it = refs.begin(), eit = refs.end(); it!=eit; ++it)</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">isNonLocalObject</a>(*it,fun))</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <a class="code" href="classSVF_1_1MRGenerator.html#af6d58e2971c4a8d3ee03f9dfd9072a3a">funToRefsMap</a>[fun].<span class="keyword">set</span>(*it);</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> }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div><div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a"> 419</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a">MRGenerator::addModSideEffectOfFunction</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& mods)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = mods.begin(), eit = mods.end(); it!=eit; ++it)</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>(<a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">isNonLocalObject</a>(*it,fun))</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a2c94bfa19ad8d1d6360b12693c8b891d">funToModsMap</a>[fun].<span class="keyword">set</span>(*it);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> }</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div><div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a83f5087e84eb7a18976cbd3a446605ee"> 431</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a83f5087e84eb7a18976cbd3a446605ee">MRGenerator::addRefSideEffectOfCallSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& refs)</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">if</span>(!refs.empty())</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refset = refs;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  refset &= <a class="code" href="classSVF_1_1MRGenerator.html#ad402506c2938d4b5440119e6091e4057">getCallSiteArgsPts</a>(cs);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">getEscapObjviaGlobals</a>(refset,refs);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf">addRefSideEffectOfFunction</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a18f4077d42b23c3fed35efc793b6102e">getCaller</a>(),refset);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac7b5ca3fd950e1a940f875ac135640f6">csToRefsMap</a>[cs] |= refset;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> }</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a915486be8b119c1f1cc87143a2a5180e"> 447</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a915486be8b119c1f1cc87143a2a5180e">MRGenerator::addModSideEffectOfCallSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& mods)</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> {</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">if</span>(!mods.empty())</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> modset = mods;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  modset &= (<a class="code" href="classSVF_1_1MRGenerator.html#ad402506c2938d4b5440119e6091e4057">getCallSiteArgsPts</a>(cs) | <a class="code" href="classSVF_1_1MRGenerator.html#ab19c541dd4c3a0e691287da5dd43540d">getCallSiteRetPts</a>(cs));</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">getEscapObjviaGlobals</a>(modset,mods);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a">addModSideEffectOfFunction</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a18f4077d42b23c3fed35efc793b6102e">getCaller</a>(),modset);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#a603f993995e7d6961e203a195bb56029">csToModsMap</a>[cs] |= modset;</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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401"> 464</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401">MRGenerator::getCallGraphSCCRevTopoOrder</a>(<a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>& worklist)</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span> {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>& topoOrder = <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-><a class="code" href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">topoNodeStack</a>();</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">while</span>(!topoOrder.empty())</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  {</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> callgraphNodeID = topoOrder.top();</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  topoOrder.pop();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(callgraphNodeID);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div><div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a9de695122660c1d8b65e1f3dab8a7ece"> 479</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a9de695122660c1d8b65e1f3dab8a7ece">MRGenerator::collectCallSitePts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& argsPts = <a class="code" href="classSVF_1_1MRGenerator.html#afe91b57b451d7788364493549e015acf">csToCallSiteArgsPtsMap</a>[cs];</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#adc66b547720b9271e6805edea0b9d01f">getCallICFGNode</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a66cb50d8c176f800f06d9cb8924eb896">getRetICFGNode</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1SVFIR.html#a95f77211550ec2374d57779d88cf5138">hasCallSiteArgsMap</a>(callBlockNode))</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>& args = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a2a1e8ce39bf8deace3c344d5f05fe6ac">getCallSiteArgsList</a>(callBlockNode);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">for</span>(SVFIR::SVFVarList::const_iterator itA = args.begin(), ieA = args.end(); itA!=ieA; ++itA)</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = *itA;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keywordflow">if</span>(node-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(nodeId).<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>();</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  argsPts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& retPts = <a class="code" href="classSVF_1_1MRGenerator.html#a21550f978f42ac3cbb32cbc426ff5cb1">csToCallSiteRetPtsMap</a>[cs];</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#aa79dba26cb34b40eee682713db299d5f">callsiteHasRet</a>(retBlockNode))</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a3145677c7a3763fc0d6aa7e21b264ab6">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keywordflow">if</span>(node-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()).toNodeBS();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  retPts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5"> 527</a></span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">MRGenerator::CollectPtsChain</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  NodeToPTSSMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>.find(baseId);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>.end())</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& pts = <a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>[baseId];</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  pts |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">getFieldsAfterCollapse</a>(baseId);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = pts.begin(), eit = pts.end(); it!=eit; ++it)</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(*it);</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">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(nodeId).<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>();</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  {</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  pts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  }</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  }</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">return</span> pts;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  }</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> </div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a"> 561</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">MRGenerator::getEscapObjviaGlobals</a>(<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& globs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& calleeModRef)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = calleeModRef.begin(), eit = calleeModRef.end(); it!=eit; ++it)</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="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(*it);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj && <span class="stringliteral">"object not found!!"</span>);</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a>.test(*it))</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  globs.set(*it);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  }</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span> }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div><div class="line"><a name="l00576"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf"> 576</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">MRGenerator::isNonLocalObject</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_1SVFFunction.html">SVFFunction</a>* curFun)<span class="keyword"> const</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keyword"></span>{</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj && <span class="stringliteral">"object not found!!"</span>);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <span class="keywordflow">if</span>(obj-><a class="code" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">isGlobalObj</a>() || obj-><a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">isHeap</a>())</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(obj-><a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">isStack</a>())</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  {</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a>* local = SVFUtil::dyn_cast<AllocaInst>(obj-><a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>()))</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(local->getFunction());</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keywordflow">if</span>(fun!=curFun)</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-><a class="code" href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">isInCycle</a>(<a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>-><a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(fun)-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</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> </div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keywordflow">return</span> <span class="keyword">false</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="l00603"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68"> 603</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68">MRGenerator::handleCallsiteModRef</a>(<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& mod, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& ref, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee)</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()))</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(),</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  ebit = pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* addr = SVFUtil::dyn_cast<AddrStmt>(edge))</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  mod.set(addr->getRHSVarID());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  mod = <a class="code" href="classSVF_1_1MRGenerator.html#a7d47fbc3dbe8fd19ca5e4210bdecf914">getModSideEffectOfFunction</a>(callee);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  ref = <a class="code" href="classSVF_1_1MRGenerator.html#ac0007c8808654ca74feef0d8568378b9">getRefSideEffectOfFunction</a>(callee);</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  }</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="comment">// add ref set</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordtype">bool</span> refchanged = <a class="code" href="classSVF_1_1MRGenerator.html#a83f5087e84eb7a18976cbd3a446605ee">addRefSideEffectOfCallSite</a>(cs, ref);</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="comment">// add mod set</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordtype">bool</span> modchanged = <a class="code" href="classSVF_1_1MRGenerator.html#a915486be8b119c1f1cc87143a2a5180e">addModSideEffectOfCallSite</a>(cs, mod);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">return</span> refchanged || modchanged;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span> }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b"> 635</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b">MRGenerator::modRefAnalysis</a>(<a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* callGraphNode, <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>& worklist)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> </div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PTACallGraphNode.html#a796994541eec90f2b540e24816120aff">PTACallGraphNode::iterator</a> it = callGraphNode-><a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(), eit = callGraphNode-><a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>();</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  it!=eit; ++it)</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>* edge = *it;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator cit = edge-><a class="code" href="classSVF_1_1PTACallGraphEdge.html#af0e9f86be3cf263b868f80d374641fc9">getDirectCalls</a>().begin(),</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  ecit = edge-><a class="code" href="classSVF_1_1PTACallGraphEdge.html#af0e9f86be3cf263b868f80d374641fc9">getDirectCalls</a>().end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mod, ref;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = (*cit);</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordtype">bool</span> modrefchanged = <a class="code" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68">handleCallsiteModRef</a>(mod, ref, cs, callGraphNode-><a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>());</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">if</span>(modrefchanged)</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator cit = edge-><a class="code" href="classSVF_1_1PTACallGraphEdge.html#a76aa19edf03a4cacfa3e27a21abfcd07">getIndirectCalls</a>().begin(),</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  ecit = edge-><a class="code" href="classSVF_1_1PTACallGraphEdge.html#a76aa19edf03a4cacfa3e27a21abfcd07">getIndirectCalls</a>().end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mod, ref;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = (*cit);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordtype">bool</span> modrefchanged = <a class="code" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68">handleCallsiteModRef</a>(mod, ref, cs, callGraphNode-><a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>());</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keywordflow">if</span>(modrefchanged)</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> }</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> </div><div class="line"><a name="l00670"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80"> 670</a></span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">MRGenerator::getModInfoForCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> {</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()) && !<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()))</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mods;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* st = SVFUtil::dyn_cast<StoreStmt>(edge))</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  mods |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(st->getLHSVarID()).toNodeBS();</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">return</span> mods;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#a1535832f5b1ae3178fea950bf71fdd99">getModSideEffectOfCallSite</a>(cs);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span> }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00694"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2"> 694</a></span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">MRGenerator::getRefInfoForCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()) && !<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()))</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refs;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* ld = SVFUtil::dyn_cast<LoadStmt>(edge))</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  refs |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(ld->getRHSVarID()).toNodeBS();</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordflow">return</span> refs;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  {</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#a62757aa995a6a01b484c60df2f51c53d">getRefSideEffectOfCallSite</a>(cs);</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  }</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> }</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> </div><div class="line"><a name="l00719"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702"> 719</a></span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span> {</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordtype">bool</span> ref = !<a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs).empty();</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordtype">bool</span> mod = !<a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs).empty();</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keywordflow">if</span> (mod && ref)</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a7f99364c041329bd5758261c8c440b30">ModRefInfo::ModRef</a>;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a068332f7018e0e4ff96fd22e7db1ca76">ModRefInfo::Ref</a>;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844aea8604a04fd5c658e0ca8b9177316ba0">ModRefInfo::Mod</a>;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a>;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span> }</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div><div class="line"><a name="l00738"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a3a6c0f60c861b6d744225a40aea638d7"> 738</a></span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span> {</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keywordtype">bool</span> ref = <span class="keyword">false</span>;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="keywordtype">bool</span> mod = <span class="keyword">false</span>;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(V))</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> pts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V)).toNodeBS());</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> csRef = <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> csMod = <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> ptsExpanded, csRefExpanded, csModExpanded;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(pts, ptsExpanded);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(csRef, csRefExpanded);</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(csMod, csModExpanded);</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span> (csRefExpanded.intersects(ptsExpanded))</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  ref = <span class="keyword">true</span>;</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <span class="keywordflow">if</span> (csModExpanded.intersects(ptsExpanded))</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  mod = <span class="keyword">true</span>;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  }</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span> </div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <span class="keywordflow">if</span> (mod && ref)</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a7f99364c041329bd5758261c8c440b30">ModRefInfo::ModRef</a>;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a068332f7018e0e4ff96fd22e7db1ca76">ModRefInfo::Ref</a>;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844aea8604a04fd5c658e0ca8b9177316ba0">ModRefInfo::Mod</a>;</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a>;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span> }</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span> </div><div class="line"><a name="l00772"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a7e1c258e120d89d7b9d6e414f91c6e4a"> 772</a></span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs1, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs2)</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span> {</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="keywordtype">bool</span> ref = <span class="keyword">false</span>;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keywordtype">bool</span> mod = <span class="keyword">false</span>;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span> </div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">getModRefInfo</a>(cs1) == <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a> || <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">getModRefInfo</a>(cs2) == <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a>)</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a>;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span> </div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1Ref = <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs1);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1Mod = <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs1);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs2Ref = <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs2);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs2Mod = <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs2);</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1RefExpanded, cs1ModExpanded, cs2RefExpanded, cs2ModExpanded;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs1Ref, cs1RefExpanded);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs1Mod, cs1ModExpanded);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs2Ref, cs2RefExpanded);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs2Mod, cs2ModExpanded);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span> </div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keywordflow">if</span> (cs1RefExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  ref = <span class="keyword">true</span>;</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordflow">if</span> (cs1ModExpanded.intersects(cs2RefExpanded) || cs1ModExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  mod = <span class="keyword">true</span>;</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordflow">if</span> (cs1RefExpanded.intersects(cs2ModExpanded) && cs1ModExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  ref = mod = <span class="keyword">true</span>;</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span> </div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">if</span> (ref && mod)</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a7f99364c041329bd5758261c8c440b30">ModRefInfo::ModRef</a>;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a068332f7018e0e4ff96fd22e7db1ca76">ModRefInfo::Ref</a>;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844aea8604a04fd5c658e0ca8b9177316ba0">ModRefInfo::Mod</a>;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a>;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span> }</div><div class="ttc" id="classSVF_1_1MRGenerator_html_af6d58e2971c4a8d3ee03f9dfd9072a3a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af6d58e2971c4a8d3ee03f9dfd9072a3a">SVF::MRGenerator::funToRefsMap</a></div><div class="ttdeci">FunToPointsToMap funToRefsMap</div><div class="ttdoc">Map a function to its indirect uses of memory objects. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00223">MemRegion.h:223</a></div></div>
|
|
69
|
+
<a href="MemRegion_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">//===- MemRegion.cpp -- Memory region-----------------------------------------//</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-2017> <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"> * MemRegion.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment"> * Created on: Dec 14, 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">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="preprocessor">#include "<a class="code" href="SVFModule_8h.html">Util/SVFModule.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="MemRegion_8h.html">MSSA/MemRegion.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="MSSAMuChi_8h.html">MSSA/MSSAMuChi.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.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">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemRegion.html#a23857f301395cbbad10f6f93256a7398">MemRegion::totalMRNum</a> = 0;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MRVer.html#ad746973fdd724b71ebb251eb6930fccc">MRVer::totalVERNum</a> = 0;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac8fedbb65a582135354c939183d48f46"> 42</a></span> <a class="code" href="classSVF_1_1MRGenerator.html#ac8fedbb65a582135354c939183d48f46">MRGenerator::MRGenerator</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* p, <span class="keywordtype">bool</span> ptrOnly) :</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  pta(p), ptrOnlyMSSA(ptrOnly)</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>  <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a> = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>();</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MRGenerator.html#af8d52e6c9884c6e1abc6dbcbc5e32629">SCC</a>(<a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> }</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac253d88de2a0cb9624c70d2bcfdac36e"> 52</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac253d88de2a0cb9624c70d2bcfdac36e">MRGenerator::destroy</a>()</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> </div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">for</span> (MRSet::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end();</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  it != eit; ++it)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  {</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5"> 70</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5">MRGenerator::createMR</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& cpts)</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& repCPts = <a class="code" href="classSVF_1_1MRGenerator.html#a98b3481580be48cff7e93bf3c8a29dac">getRepPointsTo</a>(cpts);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a> mr(repCPts);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  MRSet::const_iterator mit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.find(&mr);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">if</span>(mit!=<a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end())</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* mr = *mit;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a>& mrs = <a class="code" href="classSVF_1_1MRGenerator.html#a3e74c3706ffcc14f378771b417dcbb96">funToMRsMap</a>[fun];</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">if</span>(mrs.find(mr)==mrs.end())</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  mrs.insert(mr);</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">else</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"> 84</span>  <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* m = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>(repCPts);</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.insert(m);</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a3e74c3706ffcc14f378771b417dcbb96">funToMRsMap</a>[fun].insert(m);</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> </div><div class="line"><a name="l00093"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a55d38020bbece70847f7e72bb02bc4af"> 93</a></span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* <a class="code" href="classSVF_1_1MRGenerator.html#a55d38020bbece70847f7e72bb02bc4af">MRGenerator::getMR</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& cpts)<span class="keyword"> const</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="keyword"></span>{</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a> mr(<a class="code" href="classSVF_1_1MRGenerator.html#a98b3481580be48cff7e93bf3c8a29dac">getRepPointsTo</a>(cpts));</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  MRSet::iterator mit = <a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.find(&mr);</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mit!=<a class="code" href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">memRegSet</a>.end() && <span class="stringliteral">"memory region not found!!"</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="keywordflow">return</span> *mit;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd"> 105</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd">MRGenerator::collectGlobals</a>()</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != pag-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* obj = SVFUtil::dyn_cast<ObjVar>(nIter->second))</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>  <span class="keywordflow">if</span> (obj->getMemObj()->isGlobalObj())</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>  <a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a>.set(nIter->first);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a> |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(nIter->first);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  }</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> }</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span> </div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a"> 125</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a">MRGenerator::generateMRs</a>()</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> {</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"Generate Memory Regions \n"</span>));</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> </div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afdae3e11009966856736d9aa1e2ad5bd">collectGlobals</a>();</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> </div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-><a class="code" href="classSVF_1_1SCCDetection.html#a123b5006a6da7053e5e357140da3c5a3">find</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> </div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCollect ModRef For Load/Store \n"</span>));</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>  <a class="code" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22">collectModRefForLoadStore</a>();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> </div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tCollect ModRef For const CallICFGNode*\n"</span>));</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span> </div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2">collectModRefForCall</a>();</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> </div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\tPartition Memory Regions \n"</span>));</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9">partitionMRs</a>();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7">updateAliasMRs</a>();</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> }</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span> </div><div class="line"><a name="l00151"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5"> 151</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5">MRGenerator::hasSVFStmtList</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span> {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#a6a62d2dede5d2506c19b2d058d1cd9d3">ptrOnlyMSSA</a>)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a0552d565633ee22abe03085134a871c0">hasPTASVFStmtList</a>(pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a63acb4d86d93ad1e88860ac839a8c654">hasSVFStmtList</a>(pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst));</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span> }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> </div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c"> 160</a></span> <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>& <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">MRGenerator::getPAGEdgesFromInst</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span> {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#a6a62d2dede5d2506c19b2d058d1cd9d3">ptrOnlyMSSA</a>)</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#abb91ed47d5c13d0ad7eec35164e37988">getPTASVFStmtList</a>(pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst));</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">return</span> pag-><a class="code" href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">getSVFStmtList</a>(pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(inst));</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span> }</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00172"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22"> 172</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22">MRGenerator::collectModRefForLoadStore</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> </div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#ad8b71cebf46deaf60e2cd4f6d6bb9433">getModule</a>();</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#afcf2978f32e15127fb093405dc17d7f1">SVFModule::const_iterator</a> fi = svfModule-><a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), efi = svfModule-><a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>(); fi != efi;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  ++fi)</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  {</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& fun = **fi;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a50182faec95c6c4635df65a55148b040">Options::IgnoreDeadFun</a> && <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6d268e8d588717601345be3a911a7625">isDeadFunction</a>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()))</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">continue</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"> 185</span>  <span class="keywordflow">for</span> (Function::const_iterator iter = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->begin(), eiter = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->end();</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  iter != eiter; ++iter)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb = *iter;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">for</span> (BasicBlock::const_iterator bit = bb.begin(), ebit = bb.end();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  bit != ebit; ++bit)</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>& inst = *bit;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(&inst);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">for</span> (SVFStmtList::iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  {</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* inst = *bit;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ab250a4950269f57027d8e8ef10089f58">pagEdgeToFunMap</a>[inst] = &fun;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a> *st = SVFUtil::dyn_cast<StoreStmt>(inst))</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cpts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(st->getLHSVarID()).toNodeBS());</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="comment">// TODO: change this assertion check later when we have conditional points-to set</span></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">if</span> (cpts.empty())</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!cpts.empty() && <span class="stringliteral">"null pointer!!"</span>);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <a class="code" href="classSVF_1_1MRGenerator.html#af50efed3af17806a3ba3f668e4466d3e">addCPtsToStore</a>(cpts, st, &fun);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  }</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span> </div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a> *ld = SVFUtil::dyn_cast<LoadStmt>(inst))</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cpts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(ld->getRHSVarID()).toNodeBS());</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="comment">// TODO: change this assertion check later when we have conditional points-to set</span></div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (cpts.empty())</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!cpts.empty() && <span class="stringliteral">"null pointer!!"</span>);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a79a3032b50f7ef905213b770b12e0967">addCPtsToLoad</a>(cpts, ld, &fun);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  }</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  }</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  }</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span> }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00228"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2"> 228</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a502f8379620378b36bc12d9a91b408d2">MRGenerator::collectModRefForCall</a>()</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span> {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\t\tCollect Callsite PointsTo \n"</span>));</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">for</span>(SVFIR::CallSiteSet::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>().begin(),</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  eit = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">getCallSiteSet</a>().end(); it!=eit; ++it)</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>  <a class="code" href="classSVF_1_1MRGenerator.html#a9de695122660c1d8b65e1f3dab8a7ece">collectCallSitePts</a>((*it));</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  }</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> </div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\t\tPerform Callsite Mod-Ref \n"</span>));</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>  <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401">getCallGraphSCCRevTopoOrder</a>(worklist);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> </div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  <span class="keywordflow">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> callGraphNodeID = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& subNodes = <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-><a class="code" href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">subNodes</a>(callGraphNodeID);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = subNodes.begin(), eit = subNodes.end(); it!=eit; ++it)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* subCallGraphNode = <a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>-><a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(*it);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <a class="code" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b">modRefAnalysis</a>(subCallGraphNode,worklist);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  }</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  }</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">"\t\tAdd PointsTo to Callsites \n"</span>));</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1CallSite.html">CallSite</a> cs : <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()->getCallSiteSet())</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="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#adc66b547720b9271e6805edea0b9d01f">getCallICFGNode</a>(cs.getInstruction());</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a9718c9e8efc1e6f32441aa5f418711dd">hasRefSideEffectOfCallSite</a>(callBlockNode))</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  {</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refs = <a class="code" href="classSVF_1_1MRGenerator.html#a62757aa995a6a01b484c60df2f51c53d">getRefSideEffectOfCallSite</a>(callBlockNode);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a94ce7ceff7cee90d672e9f3a4f3aa4e8">addCPtsToCallSiteRefs</a>(refs,callBlockNode);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a187d82895b2e1156c6dd5ae28795944f">hasModSideEffectOfCallSite</a>(callBlockNode))</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mods = <a class="code" href="classSVF_1_1MRGenerator.html#a1535832f5b1ae3178fea950bf71fdd99">getModSideEffectOfCallSite</a>(callBlockNode);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ab5b92ca898739f613f965fc05f86f094">addCPtsToCallSiteMods</a>(mods,callBlockNode);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a94ce7ceff7cee90d672e9f3a4f3aa4e8">addCPtsToCallSiteRefs</a>(mods,callBlockNode);</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"> 276</span> }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00284"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd"> 284</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd">MRGenerator::sortPointsTo</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& cpts)</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span> </div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.find(cpts)!=<a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.end())</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> </div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a8b254a0c5063e25f297d1b00fb0b515e">PointsToList</a> subSetList;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> repCPts = cpts;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">for</span>(PtsToRepPtsSetMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.begin(),</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  eit = <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& existCPts = it->second;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">if</span>(cpts.contains(existCPts))</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  subSetList.insert(it->first);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(existCPts.contains(cpts))</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  repCPts = existCPts;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  }</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> </div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keywordflow">for</span>(PointsToList::iterator it = subSetList.begin(), eit = subSetList.end(); it!=eit; ++it)</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>[*it] = cpts;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  }</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> </div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ab4d1ff0357d389a65ff1c2112ce631a1">cptsToRepCPtsMap</a>[cpts] = repCPts;</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00317"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9"> 317</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac0b966ee2065607a24920dd9067b40e9">MRGenerator::partitionMRs</a>()</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> </div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="keywordflow">for</span>(FunToPointsTosMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().end();</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  it!=eit; ++it)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">for</span>(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  {</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd">sortPointsTo</a>(*cit);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">for</span>(FunToPointsTosMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a1331e6f0941838064d77a5adaa5c6303">getFunToPointsToList</a>().end();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  it!=eit; ++it)</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it->first;</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">for</span>(PointsToList::iterator cit = it->second.begin(), ecit = it->second.end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ac18324bd2b862c3cdbf65494bf69ecb5">createMR</a>(fun,*cit);</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> </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="l00348"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7"> 348</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7">MRGenerator::updateAliasMRs</a>()</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> </div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keywordflow">for</span>(StoresToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a7d86f708743a59aa31c0a9fd6de45dac">storesToPointsToMap</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#a7d86f708743a59aa31c0a9fd6de45dac">storesToPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1MRGenerator.html#a3121380139c7ae96d2045d66203253b6">getFunction</a>(it->first);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& storeCPts = it->second;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ad740188222439c089907fa6c6c951f02">getAliasMemRegions</a>(aliasMRs,storeCPts,fun);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</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>  <a class="code" href="classSVF_1_1MRGenerator.html#a255551fd3ff8fb33bcea93d0b00280b3">storesToMRsMap</a>[it->first].insert(*ait);</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> </div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">for</span>(LoadsToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#af47e15d6b8c15d547a718f3577513975">loadsToPointsToMap</a>.begin(), eit = <a class="code" href="classSVF_1_1MRGenerator.html#af47e15d6b8c15d547a718f3577513975">loadsToPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1MRGenerator.html#a3121380139c7ae96d2045d66203253b6">getFunction</a>(it->first);</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& loadCPts = it->second;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <a class="code" href="classSVF_1_1MRGenerator.html#abe8d6217250d227e743e4b581497aae8">getMRsForLoad</a>(aliasMRs, loadCPts, fun);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  {</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a0d8229b1f0b8428708e923d19096e4ba">loadsToMRsMap</a>[it->first].insert(*ait);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>  }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <span class="keywordflow">for</span>(CallSiteToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#ab8df193e84009e406c301731d17dc7b9">callsiteToModPointsToMap</a>.begin(),</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  eit = <a class="code" href="classSVF_1_1MRGenerator.html#ab8df193e84009e406c301731d17dc7b9">callsiteToModPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it->first->getCaller();</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& callsiteModCPts = it->second;</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="classSVF_1_1MRGenerator.html#ad740188222439c089907fa6c6c951f02">getAliasMemRegions</a>(aliasMRs,callsiteModCPts,fun);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</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>  <a class="code" href="classSVF_1_1MRGenerator.html#adf8d477e5f622855799842134145ecc4">callsiteToModMRsMap</a>[it->first].insert(*ait);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  }</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordflow">for</span>(CallSiteToPointsToMap::const_iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a34967cda51699f948a581b9f88fa3b10">callsiteToRefPointsToMap</a>.begin(),</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  eit = <a class="code" href="classSVF_1_1MRGenerator.html#a34967cda51699f948a581b9f88fa3b10">callsiteToRefPointsToMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  {</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = it->first->getCaller();</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">MRSet</a> aliasMRs;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& callsiteRefCPts = it->second;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a02c60ceb7c9c37bcf83c739aa4083acc">getMRsForCallSiteRef</a>(aliasMRs, callsiteRefCPts, fun);</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  <span class="keywordflow">for</span>(MRSet::iterator ait = aliasMRs.begin(), eait = aliasMRs.end(); ait!=eait; ++ait)</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>  {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a7a7ed21181c2486b60170a479a5a534e">callsiteToRefMRsMap</a>[it->first].insert(*ait);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  }</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00407"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf"> 407</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf">MRGenerator::addRefSideEffectOfFunction</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& refs)</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">for</span>(NodeBS::iterator it = refs.begin(), eit = refs.end(); it!=eit; ++it)</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">isNonLocalObject</a>(*it,fun))</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <a class="code" href="classSVF_1_1MRGenerator.html#af6d58e2971c4a8d3ee03f9dfd9072a3a">funToRefsMap</a>[fun].<span class="keyword">set</span>(*it);</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> }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div><div class="line"><a name="l00419"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a"> 419</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a">MRGenerator::addModSideEffectOfFunction</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& mods)</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> {</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = mods.begin(), eit = mods.end(); it!=eit; ++it)</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>(<a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">isNonLocalObject</a>(*it,fun))</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a2c94bfa19ad8d1d6360b12693c8b891d">funToModsMap</a>[fun].<span class="keyword">set</span>(*it);</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>  }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> }</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span> </div><div class="line"><a name="l00431"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a83f5087e84eb7a18976cbd3a446605ee"> 431</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a83f5087e84eb7a18976cbd3a446605ee">MRGenerator::addRefSideEffectOfCallSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& refs)</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="keywordflow">if</span>(!refs.empty())</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  {</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refset = refs;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  refset &= <a class="code" href="classSVF_1_1MRGenerator.html#ad402506c2938d4b5440119e6091e4057">getCallSiteArgsPts</a>(cs);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">getEscapObjviaGlobals</a>(refset,refs);</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a899c81db92c6bcf24f6f9b769e02e5bf">addRefSideEffectOfFunction</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a18f4077d42b23c3fed35efc793b6102e">getCaller</a>(),refset);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#ac7b5ca3fd950e1a940f875ac135640f6">csToRefsMap</a>[cs] |= refset;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span> }</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00447"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a915486be8b119c1f1cc87143a2a5180e"> 447</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a915486be8b119c1f1cc87143a2a5180e">MRGenerator::addModSideEffectOfCallSite</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& mods)</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span> {</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <span class="keywordflow">if</span>(!mods.empty())</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> modset = mods;</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  modset &= (<a class="code" href="classSVF_1_1MRGenerator.html#ad402506c2938d4b5440119e6091e4057">getCallSiteArgsPts</a>(cs) | <a class="code" href="classSVF_1_1MRGenerator.html#ab19c541dd4c3a0e691287da5dd43540d">getCallSiteRetPts</a>(cs));</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">getEscapObjviaGlobals</a>(modset,mods);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a">addModSideEffectOfFunction</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a18f4077d42b23c3fed35efc793b6102e">getCaller</a>(),modset);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#a603f993995e7d6961e203a195bb56029">csToModsMap</a>[cs] |= modset;</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>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span> }</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span> </div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span> </div><div class="line"><a name="l00464"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401"> 464</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401">MRGenerator::getCallGraphSCCRevTopoOrder</a>(<a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>& worklist)</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span> {</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span> </div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  <a class="code" href="namespaceSVF.html#a1811127aebdb9c926e39d155e20b3dc0">NodeStack</a>& topoOrder = <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-><a class="code" href="classSVF_1_1SCCDetection.html#a6502c0a765ac1653474ffee651949f93">topoNodeStack</a>();</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  <span class="keywordflow">while</span>(!topoOrder.empty())</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>  {</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> callgraphNodeID = topoOrder.top();</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  topoOrder.pop();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(callgraphNodeID);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>  }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span> }</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span> </div><div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a9de695122660c1d8b65e1f3dab8a7ece"> 479</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#a9de695122660c1d8b65e1f3dab8a7ece">MRGenerator::collectCallSitePts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span> {</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& argsPts = <a class="code" href="classSVF_1_1MRGenerator.html#afe91b57b451d7788364493549e015acf">csToCallSiteArgsPtsMap</a>[cs];</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#adc66b547720b9271e6805edea0b9d01f">getCallICFGNode</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a66cb50d8c176f800f06d9cb8924eb896">getRetICFGNode</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span> </div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">if</span> (pag-><a class="code" href="classSVF_1_1SVFIR.html#a95f77211550ec2374d57779d88cf5138">hasCallSiteArgsMap</a>(callBlockNode))</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  {</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVFIR::SVFVarList</a>& args = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a2a1e8ce39bf8deace3c344d5f05fe6ac">getCallSiteArgsList</a>(callBlockNode);</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordflow">for</span>(SVFIR::SVFVarList::const_iterator itA = args.begin(), ieA = args.end(); itA!=ieA; ++itA)</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  {</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = *itA;</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keywordflow">if</span>(node-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  }</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> </div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(nodeId).<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>();</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  argsPts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>  }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span> </div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& retPts = <a class="code" href="classSVF_1_1MRGenerator.html#a21550f978f42ac3cbb32cbc426ff5cb1">csToCallSiteRetPtsMap</a>[cs];</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span> </div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#aa79dba26cb34b40eee682713db299d5f">callsiteHasRet</a>(retBlockNode))</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  {</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a>* node = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a3145677c7a3763fc0d6aa7e21b264ab6">getCallSiteRet</a>(retBlockNode);</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <span class="keywordflow">if</span>(node-><a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>())</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  {</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()).toNodeBS();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  retPts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  }</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span> }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> </div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div><div class="line"><a name="l00527"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5"> 527</a></span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">MRGenerator::CollectPtsChain</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> {</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> baseId = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a77a6bb9335aa12d29825af1b5ea07e08">getBaseObjVar</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  NodeToPTSSMap::iterator it = <a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>.find(baseId);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>.end())</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  <span class="keywordflow">return</span> it->second;</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  {</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& pts = <a class="code" href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">cachedPtsChainMap</a>[baseId];</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  pts |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">getFieldsAfterCollapse</a>(baseId);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span> </div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a> worklist;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = pts.begin(), eit = pts.end(); it!=eit; ++it)</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(*it);</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">while</span>(!worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& tmp = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(nodeId).<a class="code" href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">toNodeBS</a>();</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = tmp.begin(), eit = tmp.end(); it!=eit; ++it)</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  {</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  pts |= <a class="code" href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">CollectPtsChain</a>(*it);</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  }</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  }</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  <span class="keywordflow">return</span> pts;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  }</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span> </div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span> }</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> </div><div class="line"><a name="l00561"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a"> 561</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">MRGenerator::getEscapObjviaGlobals</a>(<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& globs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& calleeModRef)</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> {</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>  <span class="keywordflow">for</span>(NodeBS::iterator it = calleeModRef.begin(), eit = calleeModRef.end(); it!=eit; ++it)</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="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(*it);</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj && <span class="stringliteral">"object not found!!"</span>);</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MRGenerator.html#af46b82e45aa1ecdfb397325971206541">allGlobals</a>.test(*it))</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  globs.set(*it);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  }</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span> }</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span> </div><div class="line"><a name="l00576"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf"> 576</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">MRGenerator::isNonLocalObject</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_1SVFFunction.html">SVFFunction</a>* curFun)<span class="keyword"> const</span></div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="keyword"></span>{</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1SVFIR.html#a2dd4d5f704906270af13e7a07f900eb1">getObject</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj && <span class="stringliteral">"object not found!!"</span>);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <span class="keywordflow">if</span>(obj-><a class="code" href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">isGlobalObj</a>() || obj-><a class="code" href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">isHeap</a>())</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(obj-><a class="code" href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">isStack</a>())</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  {</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>)-><a class="code" href="classSVF_1_1SVFVar.html#a53439a493963d16e5a1b5ed36ab6d33e">getFunction</a>())</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(fun);</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <span class="keywordflow">if</span>(svffun!=curFun)</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">callGraphSCC</a>-><a class="code" href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">isInCycle</a>(<a class="code" href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">callGraph</a>-><a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(svffun)-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</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> </div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <span class="keywordflow">return</span> <span class="keyword">false</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="l00603"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68"> 603</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68">MRGenerator::handleCallsiteModRef</a>(<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& mod, <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& ref, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* callee)</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span> {</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()))</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  {</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(),</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  ebit = pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* addr = SVFUtil::dyn_cast<AddrStmt>(edge))</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  mod.set(addr->getRHSVarID());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>  }</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  {</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  mod = <a class="code" href="classSVF_1_1MRGenerator.html#a7d47fbc3dbe8fd19ca5e4210bdecf914">getModSideEffectOfFunction</a>(callee);</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  ref = <a class="code" href="classSVF_1_1MRGenerator.html#ac0007c8808654ca74feef0d8568378b9">getRefSideEffectOfFunction</a>(callee);</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  }</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <span class="comment">// add ref set</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordtype">bool</span> refchanged = <a class="code" href="classSVF_1_1MRGenerator.html#a83f5087e84eb7a18976cbd3a446605ee">addRefSideEffectOfCallSite</a>(cs, ref);</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  <span class="comment">// add mod set</span></div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  <span class="keywordtype">bool</span> modchanged = <a class="code" href="classSVF_1_1MRGenerator.html#a915486be8b119c1f1cc87143a2a5180e">addModSideEffectOfCallSite</a>(cs, mod);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">return</span> refchanged || modchanged;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span> }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div><div class="line"><a name="l00635"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b"> 635</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b">MRGenerator::modRefAnalysis</a>(<a class="code" href="classSVF_1_1PTACallGraphNode.html">PTACallGraphNode</a>* callGraphNode, <a class="code" href="classSVF_1_1FIFOWorkList.html">WorkList</a>& worklist)</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span> {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span> </div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1PTACallGraphNode.html#a796994541eec90f2b540e24816120aff">PTACallGraphNode::iterator</a> it = callGraphNode-><a class="code" href="classSVF_1_1GenericNode.html#ae5b113921530eee6afe58a65d8e5b3a7">InEdgeBegin</a>(), eit = callGraphNode-><a class="code" href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">InEdgeEnd</a>();</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  it!=eit; ++it)</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>  {</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>  <a class="code" href="classSVF_1_1PTACallGraphEdge.html">PTACallGraphEdge</a>* edge = *it;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span> </div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator cit = edge-><a class="code" href="classSVF_1_1PTACallGraphEdge.html#af0e9f86be3cf263b868f80d374641fc9">getDirectCalls</a>().begin(),</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  ecit = edge-><a class="code" href="classSVF_1_1PTACallGraphEdge.html#af0e9f86be3cf263b868f80d374641fc9">getDirectCalls</a>().end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mod, ref;</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = (*cit);</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>  <span class="keywordtype">bool</span> modrefchanged = <a class="code" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68">handleCallsiteModRef</a>(mod, ref, cs, callGraphNode-><a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>());</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">if</span>(modrefchanged)</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator cit = edge-><a class="code" href="classSVF_1_1PTACallGraphEdge.html#a76aa19edf03a4cacfa3e27a21abfcd07">getIndirectCalls</a>().begin(),</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  ecit = edge-><a class="code" href="classSVF_1_1PTACallGraphEdge.html#a76aa19edf03a4cacfa3e27a21abfcd07">getIndirectCalls</a>().end(); cit!=ecit; ++cit)</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>  {</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mod, ref;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = (*cit);</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordtype">bool</span> modrefchanged = <a class="code" href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68">handleCallsiteModRef</a>(mod, ref, cs, callGraphNode-><a class="code" href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">getFunction</a>());</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <span class="keywordflow">if</span>(modrefchanged)</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  worklist.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>());</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  }</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  }</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span> }</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span> </div><div class="line"><a name="l00670"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80"> 670</a></span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">MRGenerator::getModInfoForCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span> {</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()) && !<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()))</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> mods;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* st = SVFUtil::dyn_cast<StoreStmt>(edge))</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  mods |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(st->getLHSVarID()).toNodeBS();</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  }</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">return</span> mods;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  }</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  {</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#a1535832f5b1ae3178fea950bf71fdd99">getModSideEffectOfCallSite</a>(cs);</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  }</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span> }</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00694"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2"> 694</a></span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">MRGenerator::getRefInfoForCall</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span> {</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()) && !<a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>()))</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>  {</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>  <a class="code" href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVFStmtList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(cs-><a class="code" href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">getCallSite</a>());</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> refs;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(), ebit =</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  {</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* ld = SVFUtil::dyn_cast<LoadStmt>(edge))</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  refs |= <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(ld->getRHSVarID()).toNodeBS();</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  }</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  <span class="keywordflow">return</span> refs;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  }</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>  {</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MRGenerator.html#a62757aa995a6a01b484c60df2f51c53d">getRefSideEffectOfCallSite</a>(cs);</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  }</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span> }</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span> </div><div class="line"><a name="l00719"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702"> 719</a></span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs)</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span> {</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordtype">bool</span> ref = !<a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs).empty();</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  <span class="keywordtype">bool</span> mod = !<a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs).empty();</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span> </div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  <span class="keywordflow">if</span> (mod && ref)</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a7f99364c041329bd5758261c8c440b30">ModRefInfo::ModRef</a>;</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a068332f7018e0e4ff96fd22e7db1ca76">ModRefInfo::Ref</a>;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844aea8604a04fd5c658e0ca8b9177316ba0">ModRefInfo::Mod</a>;</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a>;</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span> }</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span> </div><div class="line"><a name="l00738"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a3a6c0f60c861b6d744225a40aea638d7"> 738</a></span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span> {</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>  <span class="keywordtype">bool</span> ref = <span class="keyword">false</span>;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>  <span class="keywordtype">bool</span> mod = <span class="keyword">false</span>;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span> </div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">hasValueNode</a>(V))</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>  {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> pts(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(<a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>()-><a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V)).toNodeBS());</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> csRef = <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs);</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> csMod = <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> ptsExpanded, csRefExpanded, csModExpanded;</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(pts, ptsExpanded);</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(csRef, csRefExpanded);</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(csMod, csModExpanded);</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span> </div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <span class="keywordflow">if</span> (csRefExpanded.intersects(ptsExpanded))</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>  ref = <span class="keyword">true</span>;</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>  <span class="keywordflow">if</span> (csModExpanded.intersects(ptsExpanded))</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>  mod = <span class="keyword">true</span>;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>  }</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span> </div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>  <span class="keywordflow">if</span> (mod && ref)</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a7f99364c041329bd5758261c8c440b30">ModRefInfo::ModRef</a>;</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a068332f7018e0e4ff96fd22e7db1ca76">ModRefInfo::Ref</a>;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844aea8604a04fd5c658e0ca8b9177316ba0">ModRefInfo::Mod</a>;</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a>;</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span> }</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span> </div><div class="line"><a name="l00772"></a><span class="lineno"><a class="line" href="classSVF_1_1MRGenerator.html#a7e1c258e120d89d7b9d6e414f91c6e4a"> 772</a></span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844">ModRefInfo</a> <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">MRGenerator::getModRefInfo</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs1, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs2)</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span> {</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>  <span class="keywordtype">bool</span> ref = <span class="keyword">false</span>;</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>  <span class="keywordtype">bool</span> mod = <span class="keyword">false</span>;</div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span> </div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">getModRefInfo</a>(cs1) == <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a> || <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">getModRefInfo</a>(cs2) == <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a>)</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a>;</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span> </div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1Ref = <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs1);</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1Mod = <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs1);</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs2Ref = <a class="code" href="classSVF_1_1MRGenerator.html#a965a31712341b1fc02e667f325423ca2">getRefInfoForCall</a>(cs2);</div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs2Mod = <a class="code" href="classSVF_1_1MRGenerator.html#ae487d7b800d7536b578095c9f140ac80">getModInfoForCall</a>(cs2);</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> cs1RefExpanded, cs1ModExpanded, cs2RefExpanded, cs2ModExpanded;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs1Ref, cs1RefExpanded);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs1Mod, cs1ModExpanded);</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs2Ref, cs2RefExpanded);</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>  <a class="code" href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">pta</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#a798c84d5e861de2b61bcb1a86385f721">expandFIObjs</a>(cs2Mod, cs2ModExpanded);</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span> </div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>  <span class="keywordflow">if</span> (cs1RefExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>  ref = <span class="keyword">true</span>;</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keywordflow">if</span> (cs1ModExpanded.intersects(cs2RefExpanded) || cs1ModExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  mod = <span class="keyword">true</span>;</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keywordflow">if</span> (cs1RefExpanded.intersects(cs2ModExpanded) && cs1ModExpanded.intersects(cs2ModExpanded))</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  ref = mod = <span class="keyword">true</span>;</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span> </div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">if</span> (ref && mod)</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a7f99364c041329bd5758261c8c440b30">ModRefInfo::ModRef</a>;</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ref)</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a068332f7018e0e4ff96fd22e7db1ca76">ModRefInfo::Ref</a>;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (mod)</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844aea8604a04fd5c658e0ca8b9177316ba0">ModRefInfo::Mod</a>;</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  <span class="keywordflow">return</span> <a class="code" href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a4756baeb9dbb8b8c737941d67ca99d4f">ModRefInfo::NoModRef</a>;</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span> }</div><div class="ttc" id="classSVF_1_1MRGenerator_html_af6d58e2971c4a8d3ee03f9dfd9072a3a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af6d58e2971c4a8d3ee03f9dfd9072a3a">SVF::MRGenerator::funToRefsMap</a></div><div class="ttdeci">FunToPointsToMap funToRefsMap</div><div class="ttdoc">Map a function to its indirect uses of memory objects. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00223">MemRegion.h:223</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1PointsTo_html_ae4749cf6dc43645e2479cefbcc246637"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ae4749cf6dc43645e2479cefbcc246637">SVF::PointsTo::toNodeBS</a></div><div class="ttdeci">NodeBS toNodeBS(void) const</div><div class="ttdoc">Returns this points-to set as a NodeBS. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00298">PointsTo.cpp:298</a></div></div>
|
|
71
71
|
<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>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_aa3a12cf1f761d25b9213bc6e50d89ba5"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#aa3a12cf1f761d25b9213bc6e50d89ba5">SVF::MRGenerator::callGraphSCC</a></div><div class="ttdeci">SCC * callGraphSCC</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00194">MemRegion.h:194</a></div></div>
|
|
@@ -74,7 +74,7 @@ $(function() {
|
|
|
74
74
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00361">GenericGraph.h:361</a></div></div>
|
|
75
75
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a64939d7ecfd8e2cf862782954a56596b"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a64939d7ecfd8e2cf862782954a56596b">SVF::SVFIR::SVFVarList</a></div><div class="ttdeci">std::vector< const SVFVar * > SVFVarList</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00057">SVFIR.h:57</a></div></div>
|
|
76
76
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a7d47fbc3dbe8fd19ca5e4210bdecf914"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a7d47fbc3dbe8fd19ca5e4210bdecf914">SVF::MRGenerator::getModSideEffectOfFunction</a></div><div class="ttdeci">const NodeBS & getModSideEffectOfFunction(const SVFFunction *fun)</div><div class="ttdoc">Get indirect mods of a function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00389">MemRegion.h:389</a></div></div>
|
|
77
|
-
<div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#
|
|
77
|
+
<div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00392">SymbolTableInfo.h:392</a></div></div>
|
|
78
78
|
<div class="ttc" id="classSVF_1_1PTACallGraph_html_aaab54c670518d9d6790707f76ea76aa1"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">SVF::PTACallGraph::getCallGraphNode</a></div><div class="ttdeci">PTACallGraphNode * getCallGraphNode(NodeID id) const</div><div class="ttdoc">Get call graph node. </div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00315">PTACallGraph.h:315</a></div></div>
|
|
79
79
|
<div class="ttc" id="classSVF_1_1SCCDetection_html_a6ab5eff6a576e6d8703c1ea29b7f425d"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a6ab5eff6a576e6d8703c1ea29b7f425d">SVF::SCCDetection::subNodes</a></div><div class="ttdeci">const NodeBS & subNodes(NodeID n) const</div><div class="ttdoc">get all subnodes in one scc, if size is empty insert itself into the set </div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00173">SCC.h:173</a></div></div>
|
|
80
80
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a915486be8b119c1f1cc87143a2a5180e"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a915486be8b119c1f1cc87143a2a5180e">SVF::MRGenerator::addModSideEffectOfCallSite</a></div><div class="ttdeci">bool addModSideEffectOfCallSite(const CallICFGNode *cs, const NodeBS &mods)</div><div class="ttdoc">Add indirect def an memory object in the function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00447">MemRegion.cpp:447</a></div></div>
|
|
@@ -94,12 +94,12 @@ $(function() {
|
|
|
94
94
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
95
95
|
<div class="ttc" id="namespaceSVF_html_a3e2b6638b0fbca37846e953142bcc844a068332f7018e0e4ff96fd22e7db1ca76"><div class="ttname"><a href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844a068332f7018e0e4ff96fd22e7db1ca76">SVF::Ref</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00187">SVFBasicTypes.h:187</a></div></div>
|
|
96
96
|
<div class="ttc" id="classSVF_1_1FIFOWorkList_html_a7056704c224dfb4b57287fe90c004aa8"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">SVF::FIFOWorkList::empty</a></div><div class="ttdeci">bool empty() const</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00146">WorkList.h:146</a></div></div>
|
|
97
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a40462512a99eb258d8cd442c38d812b4"><div class="ttname"><a href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">SVF::MemObj::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
98
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_af7316c697eafc71d5fc93108da4e2cee"><div class="ttname"><a href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">SVF::MemObj::isStack</a></div><div class="ttdeci">bool isStack() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
97
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a40462512a99eb258d8cd442c38d812b4"><div class="ttname"><a href="classSVF_1_1MemObj.html#a40462512a99eb258d8cd442c38d812b4">SVF::MemObj::isGlobalObj</a></div><div class="ttdeci">bool isGlobalObj() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00682">SymbolTableInfo.cpp:682</a></div></div>
|
|
98
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_af7316c697eafc71d5fc93108da4e2cee"><div class="ttname"><a href="classSVF_1_1MemObj.html#af7316c697eafc71d5fc93108da4e2cee">SVF::MemObj::isStack</a></div><div class="ttdeci">bool isStack() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00692">SymbolTableInfo.cpp:692</a></div></div>
|
|
99
99
|
<div class="ttc" id="classSVF_1_1SVFIR_html_abb91ed47d5c13d0ad7eec35164e37988"><div class="ttname"><a href="classSVF_1_1SVFIR.html#abb91ed47d5c13d0ad7eec35164e37988">SVF::SVFIR::getPTASVFStmtList</a></div><div class="ttdeci">SVFStmtList & getPTASVFStmtList(const ICFGNode *inst)</div><div class="ttdoc">Given an instruction, get all its PTA PAGEdges. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00186">SVFIR.h:186</a></div></div>
|
|
100
100
|
<div class="ttc" id="classSVF_1_1GenericEdge_html_ae6792506a0150a9400d635eceab7f9e7"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">SVF::GenericEdge::getSrcID</a></div><div class="ttdeci">NodeID getSrcID() const</div><div class="ttdoc">get methods of the components </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00073">GenericGraph.h:73</a></div></div>
|
|
101
101
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_adc9d530e6f010596d91cd3711dc1358b"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#adc9d530e6f010596d91cd3711dc1358b">SVF::MRGenerator::modRefAnalysis</a></div><div class="ttdeci">virtual void modRefAnalysis(PTACallGraphNode *callGraphNode, WorkList &worklist)</div><div class="ttdoc">Mod-Ref analysis for callsite invoking this callGraphNode. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00635">MemRegion.cpp:635</a></div></div>
|
|
102
|
-
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
102
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00179">BasicTypes.h:179</a></div></div>
|
|
103
103
|
<div class="ttc" id="classSVF_1_1ICFG_html_a66cb50d8c176f800f06d9cb8924eb896"><div class="ttname"><a href="classSVF_1_1ICFG.html#a66cb50d8c176f800f06d9cb8924eb896">SVF::ICFG::getRetICFGNode</a></div><div class="ttdeci">RetICFGNode * getRetICFGNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00222">ICFG.cpp:222</a></div></div>
|
|
104
104
|
<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#l00410">SVFIR.h:410</a></div></div>
|
|
105
105
|
<div class="ttc" id="classSVF_1_1SCCDetection_html_a123b5006a6da7053e5e357140da3c5a3"><div class="ttname"><a href="classSVF_1_1SCCDetection.html#a123b5006a6da7053e5e357140da3c5a3">SVF::SCCDetection::find</a></div><div class="ttdeci">void find(void)</div><div class="ttdef"><b>Definition:</b> <a href="SCC_8h_source.html#l00308">SCC.h:308</a></div></div>
|
|
@@ -147,6 +147,7 @@ $(function() {
|
|
|
147
147
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph< SVFVar, SVFStmt >::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00338">GenericGraph.h:338</a></div></div>
|
|
148
148
|
<div class="ttc" id="classSVF_1_1PTACallGraphEdge_html_af0e9f86be3cf263b868f80d374641fc9"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html#af0e9f86be3cf263b868f80d374641fc9">SVF::PTACallGraphEdge::getDirectCalls</a></div><div class="ttdeci">CallInstSet & getDirectCalls()</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00095">PTACallGraph.h:95</a></div></div>
|
|
149
149
|
<div class="ttc" id="MSSAMuChi_8h_html"><div class="ttname"><a href="MSSAMuChi_8h.html">MSSAMuChi.h</a></div></div>
|
|
150
|
+
<div class="ttc" id="namespaceSVF_html_a5faee14fa1dd41447bc73ac365fe33c1"><div class="ttname"><a href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">SVF::Function</a></div><div class="ttdeci">llvm::Function Function</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00073">BasicTypes.h:73</a></div></div>
|
|
150
151
|
<div class="ttc" id="classSVF_1_1FIFOWorkList_html_ad4c6a48b60c870d63049fe7272cc7eb8"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">SVF::FIFOWorkList::push</a></div><div class="ttdeci">bool push(Data data)</div><div class="ttdef"><b>Definition:</b> <a href="WorkList_8h_source.html#l00159">WorkList.h:159</a></div></div>
|
|
151
152
|
<div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo & getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00099">PointerAnalysisImpl.h:99</a></div></div>
|
|
152
153
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a9de695122660c1d8b65e1f3dab8a7ece"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a9de695122660c1d8b65e1f3dab8a7ece">SVF::MRGenerator::collectCallSitePts</a></div><div class="ttdeci">void collectCallSitePts(const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00479">MemRegion.cpp:479</a></div></div>
|
|
@@ -159,11 +160,11 @@ $(function() {
|
|
|
159
160
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a2cf20660f2fd686fa3cabd046c4a10bf"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a2cf20660f2fd686fa3cabd046c4a10bf">SVF::MRGenerator::isNonLocalObject</a></div><div class="ttdeci">bool isNonLocalObject(NodeID id, const SVFFunction *curFun) const</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00576">MemRegion.cpp:576</a></div></div>
|
|
160
161
|
<div class="ttc" id="classSVF_1_1GenericNode_html_afe6a7b286d9af4992f41b59612fd2900"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">SVF::GenericNode::InEdgeEnd</a></div><div class="ttdeci">iterator InEdgeEnd()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00214">GenericGraph.h:214</a></div></div>
|
|
161
162
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_ac0007c8808654ca74feef0d8568378b9"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac0007c8808654ca74feef0d8568378b9">SVF::MRGenerator::getRefSideEffectOfFunction</a></div><div class="ttdeci">const NodeBS & getRefSideEffectOfFunction(const SVFFunction *fun)</div><div class="ttdoc">Get indirect refs of a function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00384">MemRegion.h:384</a></div></div>
|
|
162
|
-
<div class="ttc" id="namespaceSVF_html_a3bacb4f95c73e6d794901d01c6b65a83"><div class="ttname"><a href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">SVF::AllocaInst</a></div><div class="ttdeci">llvm::AllocaInst AllocaInst</div><div class="ttdoc">LLVM Instructions. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
|
|
163
163
|
<div class="ttc" id="namespaceSVF_html_a3e2b6638b0fbca37846e953142bcc844"><div class="ttname"><a href="namespaceSVF.html#a3e2b6638b0fbca37846e953142bcc844">SVF::ModRefInfo</a></div><div class="ttdeci">ModRefInfo</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00184">SVFBasicTypes.h:184</a></div></div>
|
|
164
164
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_af94bd8155a23273aab2396334d905119"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af94bd8155a23273aab2396334d905119">SVF::MRGenerator::memRegSet</a></div><div class="ttdeci">MRSet memRegSet</div><div class="ttdoc">A set of All memory regions. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00274">MemRegion.h:274</a></div></div>
|
|
165
165
|
<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>
|
|
166
166
|
<div class="ttc" id="classSVF_1_1PTACallGraphNode_html_a959445c97605953fbdebbbd999437a09"><div class="ttname"><a href="classSVF_1_1PTACallGraphNode.html#a959445c97605953fbdebbbd999437a09">SVF::PTACallGraphNode::getFunction</a></div><div class="ttdeci">const SVFFunction * getFunction() const</div><div class="ttdoc">Get function of this call node. </div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00193">PTACallGraph.h:193</a></div></div>
|
|
167
|
+
<div class="ttc" id="classSVF_1_1SVFVar_html_a53439a493963d16e5a1b5ed36ab6d33e"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a53439a493963d16e5a1b5ed36ab6d33e">SVF::SVFVar::getFunction</a></div><div class="ttdeci">virtual const Function * getFunction() const</div><div class="ttdoc">Return the function that this SVFVar resides in. Return nullptr if it is a global or constantexpr nod...</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00138">SVFVariables.h:138</a></div></div>
|
|
167
168
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a7a7ed21181c2486b60170a479a5a534e"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a7a7ed21181c2486b60170a479a5a534e">SVF::MRGenerator::callsiteToRefMRsMap</a></div><div class="ttdeci">CallSiteToMRsMap callsiteToRefMRsMap</div><div class="ttdoc">Map a callsite to its refs regions. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00205">MemRegion.h:205</a></div></div>
|
|
168
169
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a2c94bfa19ad8d1d6360b12693c8b891d"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a2c94bfa19ad8d1d6360b12693c8b891d">SVF::MRGenerator::funToModsMap</a></div><div class="ttdeci">FunToPointsToMap funToModsMap</div><div class="ttdoc">Map a function to its indirect defs of memory objects. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00225">MemRegion.h:225</a></div></div>
|
|
169
170
|
<div class="ttc" id="classSVF_1_1IRGraph_html_aceb17dfbe137658625e16291127267d1"><div class="ttname"><a href="classSVF_1_1IRGraph.html#aceb17dfbe137658625e16291127267d1">SVF::IRGraph::hasValueNode</a></div><div class="ttdeci">bool hasValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00124">IRGraph.h:124</a></div></div>
|
|
@@ -178,13 +179,13 @@ $(function() {
|
|
|
178
179
|
<div class="ttc" id="classSVF_1_1ICFG_html_a5f2c0aaba07d6fdd63058da0fb60ca8b"><div class="ttname"><a href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">SVF::ICFG::getICFGNode</a></div><div class="ttdeci">ICFGNode * getICFGNode(NodeID id) const</div><div class="ttdoc">Get a ICFG node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00084">ICFG.h:84</a></div></div>
|
|
179
180
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a8b254a0c5063e25f297d1b00fb0b515e"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a8b254a0c5063e25f297d1b00fb0b515e">SVF::MRGenerator::PointsToList</a></div><div class="ttdeci">OrderedSet< NodeBS, SVFUtil::equalNodeBS > PointsToList</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00139">MemRegion.h:139</a></div></div>
|
|
180
181
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a94ce7ceff7cee90d672e9f3a4f3aa4e8"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a94ce7ceff7cee90d672e9f3a4f3aa4e8">SVF::MRGenerator::addCPtsToCallSiteRefs</a></div><div class="ttdeci">void addCPtsToCallSiteRefs(NodeBS &cpts, const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00349">MemRegion.h:349</a></div></div>
|
|
181
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a93ac673b885633849fa484938405ca75"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">SVF::SVFUtil::isHeapAllocExtCall</a></div><div class="ttdeci">bool isHeapAllocExtCall(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#
|
|
182
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a93ac673b885633849fa484938405ca75"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">SVF::SVFUtil::isHeapAllocExtCall</a></div><div class="ttdeci">bool isHeapAllocExtCall(const CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00130">LLVMUtil.h:130</a></div></div>
|
|
182
183
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a6a62d2dede5d2506c19b2d058d1cd9d3"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a6a62d2dede5d2506c19b2d058d1cd9d3">SVF::MRGenerator::ptrOnlyMSSA</a></div><div class="ttdeci">bool ptrOnlyMSSA</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00196">MemRegion.h:196</a></div></div>
|
|
183
184
|
<div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
|
|
184
185
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a0e46c7beb580ace3a652ac9e1c419b48"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a0e46c7beb580ace3a652ac9e1c419b48">SVF::MRGenerator::cachedPtsChainMap</a></div><div class="ttdeci">NodeToPTSSMap cachedPtsChainMap</div><div class="ttdoc">Map a pointer to its cached points-to chain;. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00236">MemRegion.h:236</a></div></div>
|
|
185
186
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a79a3032b50f7ef905213b770b12e0967"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a79a3032b50f7ef905213b770b12e0967">SVF::MRGenerator::addCPtsToLoad</a></div><div class="ttdeci">void addCPtsToLoad(NodeBS &cpts, const LoadStmt *ld, const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00343">MemRegion.h:343</a></div></div>
|
|
186
187
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a39604645ca9ba10607ada3872b14705a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a39604645ca9ba10607ada3872b14705a">SVF::MRGenerator::addModSideEffectOfFunction</a></div><div class="ttdeci">void addModSideEffectOfFunction(const SVFFunction *fun, const NodeBS &mods)</div><div class="ttdoc">Add indirect def an memory object in the function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00419">MemRegion.cpp:419</a></div></div>
|
|
187
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a898c5bb3956402578266a6fb142e02b1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">SVF::MemObj::isHeap</a></div><div class="ttdeci">bool isHeap() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#
|
|
188
|
+
<div class="ttc" id="classSVF_1_1MemObj_html_a898c5bb3956402578266a6fb142e02b1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a898c5bb3956402578266a6fb142e02b1">SVF::MemObj::isHeap</a></div><div class="ttdeci">bool isHeap() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00697">SymbolTableInfo.cpp:697</a></div></div>
|
|
188
189
|
<div class="ttc" id="SVFBasicTypes_8h_html_a2c64190a065f342897573a3ef4973adb"><div class="ttname"><a href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a></div><div class="ttdeci">#define DGENERAL</div><div class="ttdoc">General debug flag is for each phase of a pass, it is often in a colorful output format. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00156">SVFBasicTypes.h:156</a></div></div>
|
|
189
190
|
<div class="ttc" id="classSVF_1_1CallICFGNode_html_a674753d5ca0fbe28674acb25291f2bcf"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html#a674753d5ca0fbe28674acb25291f2bcf">SVF::CallICFGNode::getCallSite</a></div><div class="ttdeci">const Instruction * getCallSite() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00381">ICFGNode.h:381</a></div></div>
|
|
190
191
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_ad740188222439c089907fa6c6c951f02"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ad740188222439c089907fa6c6c951f02">SVF::MRGenerator::getAliasMemRegions</a></div><div class="ttdeci">virtual void getAliasMemRegions(MRSet &aliasMRs, const NodeBS &cpts, const SVFFunction *fun)</div><div class="ttdoc">Get all aliased mem regions from function fun according to cpts. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00305">MemRegion.h:305</a></div></div>
|
|
@@ -195,12 +196,12 @@ $(function() {
|
|
|
195
196
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a55d38020bbece70847f7e72bb02bc4af"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a55d38020bbece70847f7e72bb02bc4af">SVF::MRGenerator::getMR</a></div><div class="ttdeci">const MemRegion * getMR(const NodeBS &cpts) const</div><div class="ttdoc">Get a memory region according to cpts. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00093">MemRegion.cpp:93</a></div></div>
|
|
196
197
|
<div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
|
|
197
198
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00069">LLVMModule.h:69</a></div></div>
|
|
198
|
-
<div class="ttc" id="classSVF_1_1SVFFunction_html_ac4ae917ae35ac6fca652fe2dd90a8ac2"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">SVF::SVFFunction::getLLVMFun</a></div><div class="ttdeci">Function * getLLVMFun() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
199
|
+
<div class="ttc" id="classSVF_1_1SVFFunction_html_ac4ae917ae35ac6fca652fe2dd90a8ac2"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">SVF::SVFFunction::getLLVMFun</a></div><div class="ttdeci">Function * getLLVMFun() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00195">BasicTypes.h:195</a></div></div>
|
|
199
200
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_add22c9a95478dea21148e87c8dfc584a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#add22c9a95478dea21148e87c8dfc584a">SVF::MRGenerator::getEscapObjviaGlobals</a></div><div class="ttdeci">void getEscapObjviaGlobals(NodeBS &globs, const NodeBS &pts)</div><div class="ttdoc">Get all the objects in callee&#39;s modref escaped via global objects (the chain pts of globals) ...</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00561">MemRegion.cpp:561</a></div></div>
|
|
200
201
|
<div class="ttc" id="classSVF_1_1CallICFGNode_html_a18f4077d42b23c3fed35efc793b6102e"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html#a18f4077d42b23c3fed35efc793b6102e">SVF::CallICFGNode::getCaller</a></div><div class="ttdeci">const SVFFunction * getCaller() const</div><div class="ttdoc">Return callsite. </div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00400">ICFGNode.h:400</a></div></div>
|
|
201
202
|
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
|
|
202
203
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_afb7ce3a24edda14895999eb15231daff"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#afb7ce3a24edda14895999eb15231daff">SVF::MRGenerator::pta</a></div><div class="ttdeci">BVDataPTAImpl * pta</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00193">MemRegion.h:193</a></div></div>
|
|
203
|
-
<div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#
|
|
204
|
+
<div class="ttc" id="classSVF_1_1CallSite_html"><div class="ttname"><a href="classSVF_1_1CallSite.html">SVF::CallSite</a></div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00254">BasicTypes.h:254</a></div></div>
|
|
204
205
|
<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#l00165">GenericGraph.h:165</a></div></div>
|
|
205
206
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_adf8d477e5f622855799842134145ecc4"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#adf8d477e5f622855799842134145ecc4">SVF::MRGenerator::callsiteToModMRsMap</a></div><div class="ttdeci">CallSiteToMRsMap callsiteToModMRsMap</div><div class="ttdoc">Map a callsite to its mods regions. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00207">MemRegion.h:207</a></div></div>
|
|
206
207
|
<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>
|
|
@@ -213,7 +214,6 @@ $(function() {
|
|
|
213
214
|
<div class="ttc" id="classSVF_1_1StoreStmt_html"><div class="ttname"><a href="classSVF_1_1StoreStmt.html">SVF::StoreStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00336">SVFStatements.h:336</a></div></div>
|
|
214
215
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a187d82895b2e1156c6dd5ae28795944f"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a187d82895b2e1156c6dd5ae28795944f">SVF::MRGenerator::hasModSideEffectOfCallSite</a></div><div class="ttdeci">bool hasModSideEffectOfCallSite(const CallICFGNode *cs)</div><div class="ttdoc">Has indirect mods of a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00409">MemRegion.h:409</a></div></div>
|
|
215
216
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_abe8d6217250d227e743e4b581497aae8"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#abe8d6217250d227e743e4b581497aae8">SVF::MRGenerator::getMRsForLoad</a></div><div class="ttdeci">virtual void getMRsForLoad(MRSet &aliasMRs, const NodeBS &cpts, const SVFFunction *)</div><div class="ttdoc">Get memory regions for a load statement according to cpts. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00315">MemRegion.h:315</a></div></div>
|
|
216
|
-
<div class="ttc" id="classSVF_1_1MemObj_html_a4da54ef60231d2e6c26669226b99d2f3"><div class="ttname"><a href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">SVF::MemObj::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get the reference value to this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00417">SymbolTableInfo.h:417</a></div></div>
|
|
217
217
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a66d94d15fb94e90a771f6b3dd7c0ecdd"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a66d94d15fb94e90a771f6b3dd7c0ecdd">SVF::MRGenerator::sortPointsTo</a></div><div class="ttdeci">virtual void sortPointsTo(const NodeBS &cpts)</div><div class="ttdoc">Given a condition pts, insert into cptsToRepCPtsMap for region generation. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00284">MemRegion.cpp:284</a></div></div>
|
|
218
218
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a207dfa4c9f044764665478142c6e6b22"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a207dfa4c9f044764665478142c6e6b22">SVF::MRGenerator::collectModRefForLoadStore</a></div><div class="ttdeci">virtual void collectModRefForLoadStore()</div><div class="ttdoc">Generate regions for loads/stores. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00172">MemRegion.cpp:172</a></div></div>
|
|
219
219
|
<div class="ttc" id="classSVF_1_1PTACallGraphNode_html_a796994541eec90f2b540e24816120aff"><div class="ttname"><a href="classSVF_1_1PTACallGraphNode.html#a796994541eec90f2b540e24816120aff">SVF::PTACallGraphNode::iterator</a></div><div class="ttdeci">PTACallGraphEdge::CallGraphEdgeSet::iterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00179">PTACallGraph.h:179</a></div></div>
|
|
@@ -224,6 +224,7 @@ $(function() {
|
|
|
224
224
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_afe91b57b451d7788364493549e015acf"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#afe91b57b451d7788364493549e015acf">SVF::MRGenerator::csToCallSiteArgsPtsMap</a></div><div class="ttdeci">CallSiteToPointsToMap csToCallSiteArgsPtsMap</div><div class="ttdoc">Map a callsite to all its object might pass into its callees. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00231">MemRegion.h:231</a></div></div>
|
|
225
225
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a570ad42ad516e3fabb91a3563b618c0b"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a570ad42ad516e3fabb91a3563b618c0b">SVF::SVFIR::getSVFStmtList</a></div><div class="ttdeci">SVFStmtList & getSVFStmtList(const ICFGNode *inst)</div><div class="ttdoc">Given an instruction, get all its PAGEdges. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00181">SVFIR.h:181</a></div></div>
|
|
226
226
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_af47e15d6b8c15d547a718f3577513975"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af47e15d6b8c15d547a718f3577513975">SVF::MRGenerator::loadsToPointsToMap</a></div><div class="ttdeci">LoadsToPointsToMap loadsToPointsToMap</div><div class="ttdoc">Map a load SVFIR Edge to its CPts set map. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00209">MemRegion.h:209</a></div></div>
|
|
227
|
+
<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#l00387">GenericGraph.h:387</a></div></div>
|
|
227
228
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a3145677c7a3763fc0d6aa7e21b264ab6"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a3145677c7a3763fc0d6aa7e21b264ab6">SVF::SVFIR::getCallSiteRet</a></div><div class="ttdeci">const SVFVar * getCallSiteRet(const RetICFGNode *cs) const</div><div class="ttdoc">Get callsite return. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00254">SVFIR.h:254</a></div></div>
|
|
228
229
|
<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>
|
|
229
230
|
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
|
|
@@ -238,7 +239,7 @@ $(function() {
|
|
|
238
239
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a6d268e8d588717601345be3a911a7625"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a6d268e8d588717601345be3a911a7625">SVF::SVFUtil::isDeadFunction</a></div><div class="ttdeci">bool isDeadFunction(const Function *fun)</div><div class="ttdoc">whether this is a function without any possible caller? </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00126">LLVMUtil.cpp:126</a></div></div>
|
|
239
240
|
<div class="ttc" id="LLVMUtil_8h_html"><div class="ttname"><a href="LLVMUtil_8h.html">LLVMUtil.h</a></div></div>
|
|
240
241
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a547b3bc62de65b9dbfc6dee55c063dd7"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">const SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00112">LLVMModule.h:112</a></div></div>
|
|
241
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#
|
|
242
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00072">LLVMUtil.h:72</a></div></div>
|
|
242
243
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a98ac3bf264e6a85d172c2c4264ea908f"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a98ac3bf264e6a85d172c2c4264ea908f">SVF::MRGenerator::MRSet</a></div><div class="ttdeci">OrderedSet< const MemRegion *, MemRegion::equalMemRegion > MRSet</div><div class="ttdoc">Get typedef from Pointer Analysis. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00137">MemRegion.h:137</a></div></div>
|
|
243
244
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_ab5b92ca898739f613f965fc05f86f094"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ab5b92ca898739f613f965fc05f86f094">SVF::MRGenerator::addCPtsToCallSiteMods</a></div><div class="ttdeci">void addCPtsToCallSiteMods(NodeBS &cpts, const CallICFGNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00354">MemRegion.h:354</a></div></div>
|
|
244
245
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a21550f978f42ac3cbb32cbc426ff5cb1"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a21550f978f42ac3cbb32cbc426ff5cb1">SVF::MRGenerator::csToCallSiteRetPtsMap</a></div><div class="ttdeci">CallSiteToPointsToMap csToCallSiteRetPtsMap</div><div class="ttdoc">Map a callsite to all its object might return from its callees. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00233">MemRegion.h:233</a></div></div>
|