svf-tools 1.0.348 → 1.0.352
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/AndersenSFR_8cpp_source.html +6 -5
- package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +2 -2
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +16 -16
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/Andersen_8h_source.html +13 -13
- package/SVF-doxygen/html/html/CHG_8h_source.html +7 -7
- package/SVF-doxygen/html/html/CPPUtil_8cpp.html +3 -3
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/CPPUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/CSC_8h_source.html +3 -3
- package/SVF-doxygen/html/html/Conditions_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +7 -7
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +45 -46
- package/SVF-doxygen/html/html/ConsG_8h_source.html +22 -22
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +10 -8
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DCHG_8h_source.html +4 -4
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/DDAClient_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/DDAStat_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DPItem_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +4 -2
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +24 -22
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +17 -17
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +15 -14
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +25 -25
- package/SVF-doxygen/html/html/GenericGraph_8h_source.html +7 -8
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/ICFGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +5 -5
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +7 -8
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +13 -6
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +12 -14
- package/SVF-doxygen/html/html/MHP_8cpp.html +2 -2
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +4 -5
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +5 -6
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PTACallGraph_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PTACallGraph_8h_source.html +4 -5
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +9 -10
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PersistentPointsToCache_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +3 -4
- package/SVF-doxygen/html/html/SVFBasicTypes_8h.html +4 -4
- package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +5 -5
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +2 -3
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +53 -55
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +39 -41
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +38 -41
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +22 -24
- package/SVF-doxygen/html/html/SVFStatements_8h.html +0 -4
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +150 -160
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +101 -100
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +3 -4
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +14 -13
- package/SVF-doxygen/html/html/VFGEdge_8h_source.html +2 -2
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +13 -13
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +50 -51
- package/SVF-doxygen/html/html/VFG_8h_source.html +35 -35
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +4 -4
- package/SVF-doxygen/html/html/annotated.html +100 -102
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt-members.html +26 -27
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +26 -27
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +46 -46
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +64 -64
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +29 -29
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +29 -29
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +33 -33
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +43 -42
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1AssignStmt-members.html +30 -31
- package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.html +34 -39
- package/SVF-doxygen/html/html/classSVF_1_1AssignStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt-members.html +30 -31
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +32 -33
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +33 -34
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +47 -48
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1CHEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHEdge.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CHGraph.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1CHNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CHNode.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1CSC-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallCFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallICFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +29 -30
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +35 -36
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +32 -33
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +33 -34
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1CondManager.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintEdge.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +99 -100
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +68 -68
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +20 -19
- package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyCGEdge.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt-members.html +26 -27
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +26 -27
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1DCHEdge.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1DCHNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DCHNode.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +37 -37
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +9 -8
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +134 -134
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +93 -92
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryICFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FunExitICFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +43 -42
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepCGEdge.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +52 -52
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +18 -16
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +148 -59
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +49 -49
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GlobalICFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1HareParForEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ICFGEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +7 -8
- package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1InterICFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraCFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1IntraICFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadCGEdge.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt-members.html +29 -30
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +26 -27
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +120 -150
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MRVer-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MRVer.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MemObj-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1MemRegion-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MemRegion.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +35 -36
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +41 -42
- package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraph.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1PTACallGraphNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +11 -12
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +32 -33
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +32 -33
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetCFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1RetICFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +29 -30
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +35 -36
- package/SVF-doxygen/html/html/classSVF_1_1RetPN-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFBasicBlock.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFFunction.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGlobal.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +110 -111
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +152 -151
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +26 -27
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +67 -71
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SVFValue-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFValue.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreCGEdge.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +26 -27
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +27 -28
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1TCTEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TCTEdge.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TCTNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TCTNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +28 -29
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +28 -29
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +28 -29
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +28 -29
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadForkEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadJoinEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +22 -21
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt-members.html +31 -32
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +39 -40
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +79 -80
- package/SVF-doxygen/html/html/classSVF_1_1VFGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1ValVar-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepCGEdge.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt-members.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +55 -55
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +20 -20
- package/SVF-doxygen/html/html/classes.html +95 -93
- package/SVF-doxygen/html/html/functions_a.html +19 -16
- package/SVF-doxygen/html/html/functions_c.html +22 -22
- package/SVF-doxygen/html/html/functions_eval_g.html +2 -1
- package/SVF-doxygen/html/html/functions_eval_n.html +0 -1
- package/SVF-doxygen/html/html/functions_eval_v.html +0 -1
- package/SVF-doxygen/html/html/functions_f.html +3 -3
- package/SVF-doxygen/html/html/functions_func.html +20 -17
- package/SVF-doxygen/html/html/functions_func_c.html +20 -22
- package/SVF-doxygen/html/html/functions_func_f.html +1 -1
- package/SVF-doxygen/html/html/functions_func_g.html +37 -40
- package/SVF-doxygen/html/html/functions_func_i.html +8 -5
- package/SVF-doxygen/html/html/functions_func_n.html +0 -3
- package/SVF-doxygen/html/html/functions_func_o.html +5 -7
- package/SVF-doxygen/html/html/functions_func_r.html +2 -2
- package/SVF-doxygen/html/html/functions_func_s.html +1 -1
- package/SVF-doxygen/html/html/functions_func_t.html +0 -2
- package/SVF-doxygen/html/html/functions_func_v.html +1 -4
- package/SVF-doxygen/html/html/functions_g.html +30 -32
- package/SVF-doxygen/html/html/functions_i.html +13 -10
- package/SVF-doxygen/html/html/functions_l.html +4 -4
- package/SVF-doxygen/html/html/functions_m.html +3 -3
- package/SVF-doxygen/html/html/functions_n.html +23 -27
- package/SVF-doxygen/html/html/functions_o.html +6 -8
- package/SVF-doxygen/html/html/functions_p.html +7 -7
- package/SVF-doxygen/html/html/functions_r.html +2 -2
- package/SVF-doxygen/html/html/functions_s.html +7 -5
- package/SVF-doxygen/html/html/functions_t.html +4 -8
- package/SVF-doxygen/html/html/functions_type_g.html +3 -3
- package/SVF-doxygen/html/html/functions_type_n.html +1 -1
- package/SVF-doxygen/html/html/functions_type_o.html +1 -1
- package/SVF-doxygen/html/html/functions_v.html +10 -11
- package/SVF-doxygen/html/html/functions_vars_a.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_f.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_m.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_n.html +22 -22
- package/SVF-doxygen/html/html/functions_vars_t.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_v.html +5 -2
- package/SVF-doxygen/html/html/functions_w.html +5 -9
- package/SVF-doxygen/html/html/hierarchy.html +55 -57
- package/SVF-doxygen/html/html/namespaceSVF.html +22 -26
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +5 -5
- package/SVF-doxygen/html/html/namespacemembers_s.html +3 -3
- package/SVF-doxygen/html/html/namespacemembers_type_s.html +3 -3
- package/SVF-doxygen/html/html/search/all_1.js +9 -8
- package/SVF-doxygen/html/html/search/all_10.js +6 -6
- package/SVF-doxygen/html/html/search/all_12.js +2 -2
- package/SVF-doxygen/html/html/search/all_13.js +9 -9
- package/SVF-doxygen/html/html/search/all_14.js +6 -6
- package/SVF-doxygen/html/html/search/all_16.js +7 -7
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +1 -1
- package/SVF-doxygen/html/html/search/all_6.js +3 -3
- package/SVF-doxygen/html/html/search/all_7.js +19 -20
- package/SVF-doxygen/html/html/search/all_9.js +4 -3
- package/SVF-doxygen/html/html/search/all_c.js +3 -3
- package/SVF-doxygen/html/html/search/all_d.js +5 -5
- package/SVF-doxygen/html/html/search/all_e.js +20 -21
- package/SVF-doxygen/html/html/search/all_f.js +4 -4
- package/SVF-doxygen/html/html/search/classes_12.js +0 -1
- package/SVF-doxygen/html/html/search/classes_b.js +0 -1
- package/SVF-doxygen/html/html/search/enumvalues_12.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_6.js +1 -1
- package/SVF-doxygen/html/html/search/enumvalues_b.js +1 -1
- package/SVF-doxygen/html/html/search/functions_0.js +8 -7
- package/SVF-doxygen/html/html/search/functions_10.js +1 -1
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_13.js +1 -2
- package/SVF-doxygen/html/html/search/functions_2.js +1 -1
- package/SVF-doxygen/html/html/search/functions_5.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +16 -17
- package/SVF-doxygen/html/html/search/functions_8.js +3 -2
- package/SVF-doxygen/html/html/search/functions_a.js +1 -1
- package/SVF-doxygen/html/html/search/functions_c.js +0 -1
- package/SVF-doxygen/html/html/search/functions_d.js +3 -3
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/functions_f.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_6.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_d.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_e.js +1 -1
- package/SVF-doxygen/html/html/search/variables_1.js +1 -1
- package/SVF-doxygen/html/html/search/variables_14.js +4 -4
- package/SVF-doxygen/html/html/search/variables_16.js +3 -2
- package/SVF-doxygen/html/html/search/variables_6.js +2 -2
- package/SVF-doxygen/html/html/search/variables_d.js +3 -3
- package/SVF-doxygen/html/html/search/variables_e.js +18 -18
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +16 -16
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +18 -18
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +5 -5
- package/include/Graphs/CHG.h +6 -6
- package/include/Graphs/ConsG.h +2 -2
- package/include/Graphs/ConsGEdge.h +1 -1
- package/include/Graphs/ConsGNode.h +16 -16
- package/include/Graphs/GenericGraph.h +4 -4
- package/include/Graphs/IRGraph.h +5 -5
- package/include/Graphs/PTACallGraph.h +2 -2
- package/include/Graphs/VFG.h +2 -2
- package/include/MSSA/MSSAMuChi.h +1 -1
- package/include/MSSA/MemRegion.h +2 -2
- package/include/MemoryModel/LocationSet.h +10 -48
- package/include/MemoryModel/PAGBuilderFromFile.h +1 -1
- package/include/MemoryModel/PointerAnalysis.h +1 -1
- package/include/MemoryModel/SVFIR.h +5 -5
- package/include/MemoryModel/SVFStatements.h +18 -95
- package/include/MemoryModel/SVFVariables.h +9 -6
- package/include/MemoryModel/SymbolTableInfo.h +3 -3
- package/include/SVF-FE/DCHG.h +1 -1
- package/include/SVF-FE/SVFIRBuilder.h +7 -7
- package/include/Util/IRAnnotator.h +3 -3
- package/include/Util/SVFBasicTypes.h +3 -3
- package/include/WPA/Andersen.h +11 -11
- package/include/WPA/AndersenSFR.h +1 -1
- package/include/WPA/CSC.h +1 -1
- package/include/WPA/FlowSensitive.h +13 -13
- package/include/WPA/VersionedFlowSensitive.h +2 -2
- package/lib/DDA/ContextDDA.cpp +4 -5
- package/lib/DDA/DDAClient.cpp +6 -6
- package/lib/DDA/DDAStat.cpp +1 -1
- package/lib/DDA/FlowDDA.cpp +4 -5
- package/lib/Graphs/ConsG.cpp +30 -35
- package/lib/Graphs/ICFG.cpp +1 -1
- package/lib/Graphs/SVFG.cpp +2 -2
- package/lib/Graphs/SVFGStat.cpp +2 -2
- package/lib/Graphs/VFG.cpp +36 -43
- package/lib/MSSA/MemRegion.cpp +2 -2
- package/lib/MTA/MHP.cpp +2 -2
- package/lib/MTA/MTAAnnotator.cpp +3 -3
- package/lib/MemoryModel/LocationSet.cpp +49 -9
- package/lib/MemoryModel/PAGBuilderFromFile.cpp +3 -3
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +1 -1
- package/lib/MemoryModel/SVFIR.cpp +27 -35
- package/lib/MemoryModel/SVFStatements.cpp +0 -22
- package/lib/MemoryModel/SVFVariables.cpp +1 -1
- package/lib/MemoryModel/SymbolTableInfo.cpp +4 -4
- package/lib/SVF-FE/CPPUtil.cpp +6 -6
- package/lib/SVF-FE/DCHG.cpp +1 -1
- package/lib/SVF-FE/Graph2Json.cpp +24 -27
- package/lib/SVF-FE/LLVMUtil.cpp +1 -1
- package/lib/SVF-FE/SVFIRBuilder.cpp +14 -13
- package/lib/SVF-FE/SymbolTableBuilder.cpp +1 -1
- package/lib/Util/Conditions.cpp +1 -1
- package/lib/Util/PTAStat.cpp +9 -9
- package/lib/Util/TypeBasedHeapCloning.cpp +6 -6
- package/lib/WPA/Andersen.cpp +13 -13
- package/lib/WPA/AndersenSFR.cpp +8 -8
- package/lib/WPA/AndersenStat.cpp +2 -2
- package/lib/WPA/CSC.cpp +6 -6
- package/lib/WPA/FlowSensitive.cpp +4 -7
- package/lib/WPA/FlowSensitiveStat.cpp +2 -2
- package/lib/WPA/FlowSensitiveTBHC.cpp +6 -9
- package/lib/WPA/TypeAnalysis.cpp +3 -3
- package/package.json +1 -1
|
@@ -66,11 +66,11 @@ $(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#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1MemRegion.html#a8556bee344c108815adad4a405ac0ffb">MemRegion::totalMRNum</a> = 0;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> <a class="code" href="classSVF_1_1MRVer.html#aa89979685cbca9279d32c7512c9d3c16">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#a85ab6b592fefc45a0674d3295e01638f">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#a85ab6b592fefc45a0674d3295e01638f">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#a85ab6b592fefc45a0674d3295e01638f">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#a85ab6b592fefc45a0674d3295e01638f">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#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</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#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</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#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</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#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</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#a85ab6b592fefc45a0674d3295e01638f">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#a85ab6b592fefc45a0674d3295e01638f">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#a85ab6b592fefc45a0674d3295e01638f">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#a483e92e076a426ec8f177eab3b971723">getCallBlockNode</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#a483e92e076a426ec8f177eab3b971723">getCallBlockNode</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#a392e5ea7c356763a988407f91343f034">getRetBlockNode</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#a7e833aa9feaf931fb44fb1e3fd502a6c">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> ModRefInfo::ModRef;</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> ModRefInfo::Ref;</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> ModRefInfo::Mod;</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> ModRefInfo::NoModRef;</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#a7e833aa9feaf931fb44fb1e3fd502a6c">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> ModRefInfo::ModRef;</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> ModRefInfo::Ref;</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> ModRefInfo::Mod;</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> ModRefInfo::NoModRef;</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#a7e833aa9feaf931fb44fb1e3fd502a6c">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) == ModRefInfo::NoModRef || <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">getModRefInfo</a>(cs2) == ModRefInfo::NoModRef)</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keywordflow">return</span> ModRefInfo::NoModRef;</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> ModRefInfo::ModRef;</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> ModRefInfo::Ref;</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> ModRefInfo::Mod;</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> ModRefInfo::NoModRef;</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#a85ab6b592fefc45a0674d3295e01638f">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#a85ab6b592fefc45a0674d3295e01638f">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#a85ab6b592fefc45a0674d3295e01638f">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#a85ab6b592fefc45a0674d3295e01638f">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#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</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#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</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#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</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#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</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#a85ab6b592fefc45a0674d3295e01638f">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#a85ab6b592fefc45a0674d3295e01638f">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#a85ab6b592fefc45a0674d3295e01638f">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#a483e92e076a426ec8f177eab3b971723">getCallBlockNode</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#a483e92e076a426ec8f177eab3b971723">getCallBlockNode</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#a392e5ea7c356763a988407f91343f034">getRetBlockNode</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#a7e833aa9feaf931fb44fb1e3fd502a6c">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> ModRefInfo::ModRef;</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> ModRefInfo::Ref;</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> ModRefInfo::Mod;</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> ModRefInfo::NoModRef;</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#a7e833aa9feaf931fb44fb1e3fd502a6c">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> ModRefInfo::ModRef;</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> ModRefInfo::Ref;</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> ModRefInfo::Mod;</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> ModRefInfo::NoModRef;</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#a7e833aa9feaf931fb44fb1e3fd502a6c">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) == ModRefInfo::NoModRef || <a class="code" href="classSVF_1_1MRGenerator.html#ac14c99ee6064fc9cf30120a83c78e702">getModRefInfo</a>(cs2) == ModRefInfo::NoModRef)</div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>  <span class="keywordflow">return</span> ModRefInfo::NoModRef;</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> ModRefInfo::ModRef;</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> ModRefInfo::Ref;</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> ModRefInfo::Mod;</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> ModRefInfo::NoModRef;</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>
|
|
73
|
-
<div class="ttc" id="classSVF_1_1AddrStmt_html"><div class="ttname"><a href="classSVF_1_1AddrStmt.html">SVF::AddrStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#
|
|
73
|
+
<div class="ttc" id="classSVF_1_1AddrStmt_html"><div class="ttname"><a href="classSVF_1_1AddrStmt.html">SVF::AddrStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00266">SVFStatements.h:266</a></div></div>
|
|
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>
|
|
@@ -107,7 +107,7 @@ $(function() {
|
|
|
107
107
|
<div class="ttc" id="classSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00046">SVFVariables.h:46</a></div></div>
|
|
108
108
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a83f5087e84eb7a18976cbd3a446605ee"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a83f5087e84eb7a18976cbd3a446605ee">SVF::MRGenerator::addRefSideEffectOfCallSite</a></div><div class="ttdeci">bool addRefSideEffectOfCallSite(const CallICFGNode *cs, const NodeBS &refs)</div><div class="ttdoc">Add indirect uses an memory object in the function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00431">MemRegion.cpp:431</a></div></div>
|
|
109
109
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a0d8229b1f0b8428708e923d19096e4ba"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a0d8229b1f0b8428708e923d19096e4ba">SVF::MRGenerator::loadsToMRsMap</a></div><div class="ttdeci">LoadsToMRsMap loadsToMRsMap</div><div class="ttdoc">Map a load SVFIR Edge to its memory regions sets in order for inserting mus in Memory SSA...</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00201">MemRegion.h:201</a></div></div>
|
|
110
|
-
<div class="ttc" id="classSVF_1_1ObjVar_html"><div class="ttname"><a href="classSVF_1_1ObjVar.html">SVF::ObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#
|
|
110
|
+
<div class="ttc" id="classSVF_1_1ObjVar_html"><div class="ttname"><a href="classSVF_1_1ObjVar.html">SVF::ObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00325">SVFVariables.h:325</a></div></div>
|
|
111
111
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_af50efed3af17806a3ba3f668e4466d3e"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af50efed3af17806a3ba3f668e4466d3e">SVF::MRGenerator::addCPtsToStore</a></div><div class="ttdeci">void addCPtsToStore(NodeBS &cpts, const StoreStmt *st, const SVFFunction *fun)</div><div class="ttdoc">Add cpts to store/load. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00337">MemRegion.h:337</a></div></div>
|
|
112
112
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a8717adf4520e0702274c5f013776be52"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a8717adf4520e0702274c5f013776be52">SVF::MRGenerator::SVFStmtList</a></div><div class="ttdeci">SVFIR::SVFStmtList SVFStmtList</div><div class="ttdoc">SVFIR edge list. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00172">MemRegion.h:172</a></div></div>
|
|
113
113
|
<div class="ttc" id="classSVF_1_1SVFModule_html"><div class="ttname"><a href="classSVF_1_1SVFModule.html">SVF::SVFModule</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00041">SVFModule.h:41</a></div></div>
|
|
@@ -116,6 +116,7 @@ $(function() {
|
|
|
116
116
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a3e74c3706ffcc14f378771b417dcbb96"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a3e74c3706ffcc14f378771b417dcbb96">SVF::MRGenerator::funToMRsMap</a></div><div class="ttdeci">FunToMRsMap funToMRsMap</div><div class="ttdoc">Map a function to all its memory regions. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00199">MemRegion.h:199</a></div></div>
|
|
117
117
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_acc78a116ca0be01a359d1313b2ae603c"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">SVF::MRGenerator::getPAGEdgesFromInst</a></div><div class="ttdeci">SVFStmtList & getPAGEdgesFromInst(const Instruction *inst)</div><div class="ttdoc">Given an instruction, get all its the PAGEdge (statement) in sequence. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00160">MemRegion.cpp:160</a></div></div>
|
|
118
118
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a1535832f5b1ae3178fea950bf71fdd99"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a1535832f5b1ae3178fea950bf71fdd99">SVF::MRGenerator::getModSideEffectOfCallSite</a></div><div class="ttdeci">const NodeBS & getModSideEffectOfCallSite(const CallICFGNode *cs)</div><div class="ttdoc">Get indirect mods of a callsite. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00399">MemRegion.h:399</a></div></div>
|
|
119
|
+
<div class="ttc" id="namespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
|
|
119
120
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a7d86f708743a59aa31c0a9fd6de45dac"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a7d86f708743a59aa31c0a9fd6de45dac">SVF::MRGenerator::storesToPointsToMap</a></div><div class="ttdeci">StoresToPointsToMap storesToPointsToMap</div><div class="ttdoc">Map a store SVFIR Edge to its CPts set map. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00211">MemRegion.h:211</a></div></div>
|
|
120
121
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a05005a166c39b1adea492655d77db519"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a05005a166c39b1adea492655d77db519">SVF::MRGenerator::callGraph</a></div><div class="ttdeci">PTACallGraph * callGraph</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00195">MemRegion.h:195</a></div></div>
|
|
121
122
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a95f77211550ec2374d57779d88cf5138"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a95f77211550ec2374d57779d88cf5138">SVF::SVFIR::hasCallSiteArgsMap</a></div><div class="ttdeci">bool hasCallSiteArgsMap(const CallICFGNode *cs) const</div><div class="ttdoc">Callsite has argument list. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00232">SVFIR.h:232</a></div></div>
|
|
@@ -126,6 +127,7 @@ $(function() {
|
|
|
126
127
|
<div class="ttc" id="classSVF_1_1Options_html_a50182faec95c6c4635df65a55148b040"><div class="ttname"><a href="classSVF_1_1Options.html#a50182faec95c6c4635df65a55148b040">SVF::Options::IgnoreDeadFun</a></div><div class="ttdeci">static const llvm::cl::opt< bool > IgnoreDeadFun</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00148">Options.h:148</a></div></div>
|
|
127
128
|
<div class="ttc" id="classSVF_1_1SVFIR_html_aa530e33657f68fc2e8eae9435ce430cb"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa530e33657f68fc2e8eae9435ce430cb">SVF::SVFIR::getCallSiteSet</a></div><div class="ttdeci">const CallSiteSet & getCallSiteSet() const</div><div class="ttdoc">Get all callsites. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00204">SVFIR.h:204</a></div></div>
|
|
128
129
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a6f631290f3da7c308395eb6a9472d7a5"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5">SVF::MRGenerator::hasSVFStmtList</a></div><div class="ttdeci">bool hasSVFStmtList(const Instruction *inst)</div><div class="ttdoc">Whether this instruction has SVFIR Edge. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00151">MemRegion.cpp:151</a></div></div>
|
|
130
|
+
<div class="ttc" id="classSVF_1_1MRVer_html_ad746973fdd724b71ebb251eb6930fccc"><div class="ttname"><a href="classSVF_1_1MRVer.html#ad746973fdd724b71ebb251eb6930fccc">SVF::MRVer::totalVERNum</a></div><div class="ttdeci">static u32_t totalVERNum</div><div class="ttdoc">ver ID 0 is reserved </div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00050">MSSAMuChi.h:50</a></div></div>
|
|
129
131
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a9c1da53188729eb743e1a33bbad87af7"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a9c1da53188729eb743e1a33bbad87af7">SVF::MRGenerator::updateAliasMRs</a></div><div class="ttdeci">virtual void updateAliasMRs()</div><div class="ttdoc">Update aliased regions for loads/stores/callsites. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00348">MemRegion.cpp:348</a></div></div>
|
|
130
132
|
<div class="ttc" id="classSVF_1_1RetICFGNode_html"><div class="ttname"><a href="classSVF_1_1RetICFGNode.html">SVF::RetICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00459">ICFGNode.h:459</a></div></div>
|
|
131
133
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a81bd687d34eea884dfcf68274fcec7b5"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a81bd687d34eea884dfcf68274fcec7b5">SVF::MRGenerator::CollectPtsChain</a></div><div class="ttdeci">NodeBS & CollectPtsChain(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00527">MemRegion.cpp:527</a></div></div>
|
|
@@ -146,10 +148,8 @@ $(function() {
|
|
|
146
148
|
<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>
|
|
147
149
|
<div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
|
|
148
150
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_af8d52e6c9884c6e1abc6dbcbc5e32629"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#af8d52e6c9884c6e1abc6dbcbc5e32629">SVF::MRGenerator::SCC</a></div><div class="ttdeci">SCCDetection< PTACallGraph * > SCC</div><div class="ttdoc">Call Graph SCC. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00174">MemRegion.h:174</a></div></div>
|
|
149
|
-
<div class="ttc" id="classSVF_1_1MemRegion_html_a8556bee344c108815adad4a405ac0ffb"><div class="ttname"><a href="classSVF_1_1MemRegion.html#a8556bee344c108815adad4a405ac0ffb">SVF::MemRegion::totalMRNum</a></div><div class="ttdeci">static Size_t totalMRNum</div><div class="ttdoc">region ID 0 is reserved </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00058">MemRegion.h:58</a></div></div>
|
|
150
|
-
<div class="ttc" id="namespaceSVF_html_a2db29836a72e8d86e9baa6d8d55d2978"><div class="ttname"><a href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">SVF::Size_t</a></div><div class="ttdeci">signed long Size_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00078">SVFBasicTypes.h:78</a></div></div>
|
|
151
151
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_acbf0be131b1fc5d0366157d300d1aa68"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#acbf0be131b1fc5d0366157d300d1aa68">SVF::MRGenerator::handleCallsiteModRef</a></div><div class="ttdeci">virtual bool handleCallsiteModRef(NodeBS &mod, NodeBS &ref, const CallICFGNode *cs, const SVFFunction *fun)</div><div class="ttdoc">Get Mod-Ref of a callee function. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00603">MemRegion.cpp:603</a></div></div>
|
|
152
|
-
<div class="ttc" id="classSVF_1_1LoadStmt_html"><div class="ttname"><a href="classSVF_1_1LoadStmt.html">SVF::LoadStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#
|
|
152
|
+
<div class="ttc" id="classSVF_1_1LoadStmt_html"><div class="ttname"><a href="classSVF_1_1LoadStmt.html">SVF::LoadStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00373">SVFStatements.h:373</a></div></div>
|
|
153
153
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a240219c2dc4f5cc5f85445e18c79b83b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">SVF::PointerAnalysis::getPAG</a></div><div class="ttdeci">SVFIR * getPAG() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00205">PointerAnalysis.h:205</a></div></div>
|
|
154
154
|
<div class="ttc" id="classSVF_1_1PTACallGraphEdge_html"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html">SVF::PTACallGraphEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00051">PTACallGraph.h:51</a></div></div>
|
|
155
155
|
<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>
|
|
@@ -157,7 +157,6 @@ $(function() {
|
|
|
157
157
|
<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>
|
|
158
158
|
<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="BasicTypes_8h_source.html#l00147">BasicTypes.h:147</a></div></div>
|
|
159
159
|
<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>
|
|
160
|
-
<div class="ttc" id="classSVF_1_1MRVer_html_aa89979685cbca9279d32c7512c9d3c16"><div class="ttname"><a href="classSVF_1_1MRVer.html#aa89979685cbca9279d32c7512c9d3c16">SVF::MRVer::totalVERNum</a></div><div class="ttdeci">static Size_t totalVERNum</div><div class="ttdoc">ver ID 0 is reserved </div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00050">MSSAMuChi.h:50</a></div></div>
|
|
161
160
|
<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>
|
|
162
161
|
<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>
|
|
163
162
|
<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>
|
|
@@ -184,6 +183,7 @@ $(function() {
|
|
|
184
183
|
<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#l00154">SVFBasicTypes.h:154</a></div></div>
|
|
185
184
|
<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>
|
|
186
185
|
<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>
|
|
186
|
+
<div class="ttc" id="classSVF_1_1MemRegion_html_a23857f301395cbbad10f6f93256a7398"><div class="ttname"><a href="classSVF_1_1MemRegion.html#a23857f301395cbbad10f6f93256a7398">SVF::MemRegion::totalMRNum</a></div><div class="ttdeci">static u32_t totalMRNum</div><div class="ttdoc">region ID 0 is reserved </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00058">MemRegion.h:58</a></div></div>
|
|
187
187
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_ab3d3ca72d2cddf5336d00dc623f33401"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ab3d3ca72d2cddf5336d00dc623f33401">SVF::MRGenerator::getCallGraphSCCRevTopoOrder</a></div><div class="ttdeci">void getCallGraphSCCRevTopoOrder(WorkList &worklist)</div><div class="ttdoc">Get reverse topo call graph scc. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00464">MemRegion.cpp:464</a></div></div>
|
|
188
188
|
<div class="ttc" id="classSVF_1_1FIFOWorkList_html"><div class="ttname"><a href="classSVF_1_1FIFOWorkList.html">SVF::FIFOWorkList< NodeID ></a></div></div>
|
|
189
189
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_ac253d88de2a0cb9624c70d2bcfdac36e"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac253d88de2a0cb9624c70d2bcfdac36e">SVF::MRGenerator::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Clean up memory. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00052">MemRegion.cpp:52</a></div></div>
|
|
@@ -205,7 +205,7 @@ $(function() {
|
|
|
205
205
|
<div class="ttc" id="classSVF_1_1PTACallGraphEdge_html_a76aa19edf03a4cacfa3e27a21abfcd07"><div class="ttname"><a href="classSVF_1_1PTACallGraphEdge.html#a76aa19edf03a4cacfa3e27a21abfcd07">SVF::PTACallGraphEdge::getIndirectCalls</a></div><div class="ttdeci">CallInstSet & getIndirectCalls()</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00099">PTACallGraph.h:99</a></div></div>
|
|
206
206
|
<div class="ttc" id="classSVF_1_1SVFModule_html_a58d03edb6ff85f4943135478f113df31"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">SVF::SVFModule::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00155">SVFModule.h:155</a></div></div>
|
|
207
207
|
<div class="ttc" id="SVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
|
|
208
|
-
<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#
|
|
208
|
+
<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>
|
|
209
209
|
<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>
|
|
210
210
|
<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>
|
|
211
211
|
<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#l00442">SymbolTableInfo.h:442</a></div></div>
|