svf-tools 1.0.320 → 1.0.324
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 +1 -1
- package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
- package/SVF-doxygen/html/html/CHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/ConsG_8h_source.html +15 -15
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +3 -3
- 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 +3 -3
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +8 -8
- package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/ICFGNode_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ICFG_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +7 -7
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +9 -9
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +24 -24
- package/SVF-doxygen/html/html/MemRegion_8h_source.html +13 -13
- package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/MemSSA_8h_source.html +13 -13
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +8 -8
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +17 -17
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +18 -18
- package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +42 -42
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +58 -58
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +153 -154
- package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +22 -22
- package/SVF-doxygen/html/html/SVFStatements_8h.html +11 -11
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +133 -132
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +9 -9
- package/SVF-doxygen/html/html/SVFVariables_8h.html +9 -9
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +78 -78
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/SrcSnkDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +13 -13
- package/SVF-doxygen/html/html/VFGNode_8h_source.html +17 -17
- package/SVF-doxygen/html/html/VFG_8cpp_source.html +48 -48
- 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 +5 -5
- package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/annotated.html +21 -21
- package/SVF-doxygen/html/html/classSVF_1_1AddrCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt-members.html +137 -0
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.html +500 -0
- package/SVF-doxygen/html/html/classSVF_1_1AddrStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1AliasDDAClient.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +34 -34
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt-members.html +155 -0
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +756 -0
- package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt-members.html +20 -19
- package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +33 -31
- package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1CallBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1CallPE-members.html +20 -19
- package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +24 -22
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar-members.html +169 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +537 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar-members.html +169 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +547 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +172 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +556 -0
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt-members.html +75 -22
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +479 -93
- package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +46 -46
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt-members.html +57 -21
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.html +253 -89
- package/SVF-doxygen/html/html/classSVF_1_1CopyStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1DDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG-members.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1DistinctMRG.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar-members.html +167 -0
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +531 -0
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar-members.html +165 -0
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +502 -0
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar-members.html +167 -0
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +577 -0
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +26 -26
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1FunEntryBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1FunExitBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1GenericEdge.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjPN-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +61 -61
- package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt-members.html +57 -22
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +259 -118
- package/SVF-doxygen/html/html/classSVF_1_1GepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar-members.html +170 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +752 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1GlobalBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1ICFGNode.html +22 -22
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1IRGraph.html +43 -43
- package/SVF-doxygen/html/html/classSVF_1_1InterBlockNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1InterBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG-members.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1InterDisjointMRG.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode-members.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1IntraBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG-members.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1IntraDisjointMRG.html +27 -27
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1LoadMU-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LoadMU.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt-members.html +57 -21
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +253 -89
- package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator-members.html +23 -23
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +147 -147
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA-members.html +25 -25
- package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +102 -102
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt-members.html +24 -23
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +36 -34
- package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt-members.html +142 -0
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +649 -0
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar-members.html +165 -0
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +644 -0
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG-members.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1OfflineConsG.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +74 -22
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +447 -98
- package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +53 -53
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode-members.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1RetBlockNode.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1RetPE-members.html +20 -19
- package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +24 -22
- package/SVF-doxygen/html/html/classSVF_1_1RetPN-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +56 -56
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +58 -58
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +68 -68
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +36 -36
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +132 -133
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +730 -748
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +12 -12
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +180 -180
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt-members.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.html +57 -39
- package/SVF-doxygen/html/html/classSVF_1_1SVFStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +82 -82
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1StoreCHI-members.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1StoreCHI.html +20 -20
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt-members.html +57 -21
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +260 -89
- package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE-members.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +18 -16
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE-members.html +23 -22
- package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +18 -16
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +28 -28
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt-members.html +147 -0
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +794 -0
- package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1VFG-members.html +42 -42
- package/SVF-doxygen/html/html/classSVF_1_1VFG.html +145 -145
- package/SVF-doxygen/html/html/classSVF_1_1ValVar-members.html +163 -0
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +521 -0
- package/SVF-doxygen/html/html/classSVF_1_1ValVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN-members.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +24 -24
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt-members.html +139 -0
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.html +544 -0
- package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +16 -16
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +3 -3
- package/SVF-doxygen/html/html/classes.html +18 -18
- package/SVF-doxygen/html/html/functions_a.html +55 -55
- package/SVF-doxygen/html/html/functions_b.html +2 -2
- package/SVF-doxygen/html/html/functions_c.html +52 -57
- package/SVF-doxygen/html/html/functions_d.html +4 -4
- package/SVF-doxygen/html/html/functions_f.html +5 -5
- package/SVF-doxygen/html/html/functions_func.html +54 -54
- package/SVF-doxygen/html/html/functions_func_b.html +2 -2
- package/SVF-doxygen/html/html/functions_func_c.html +30 -30
- package/SVF-doxygen/html/html/functions_func_d.html +4 -4
- package/SVF-doxygen/html/html/functions_func_f.html +2 -2
- package/SVF-doxygen/html/html/functions_func_g.html +107 -105
- package/SVF-doxygen/html/html/functions_func_h.html +6 -6
- package/SVF-doxygen/html/html/functions_func_l.html +3 -3
- package/SVF-doxygen/html/html/functions_func_n.html +2 -2
- package/SVF-doxygen/html/html/functions_func_o.html +15 -15
- package/SVF-doxygen/html/html/functions_func_p.html +2 -2
- package/SVF-doxygen/html/html/functions_func_s.html +4 -4
- package/SVF-doxygen/html/html/functions_func_t.html +20 -20
- package/SVF-doxygen/html/html/functions_func_u.html +2 -2
- package/SVF-doxygen/html/html/functions_func_v.html +5 -5
- package/SVF-doxygen/html/html/functions_g.html +123 -121
- package/SVF-doxygen/html/html/functions_h.html +6 -6
- package/SVF-doxygen/html/html/functions_i.html +15 -15
- package/SVF-doxygen/html/html/functions_k.html +9 -0
- package/SVF-doxygen/html/html/functions_l.html +11 -11
- package/SVF-doxygen/html/html/functions_m.html +1 -1
- package/SVF-doxygen/html/html/functions_n.html +2 -2
- package/SVF-doxygen/html/html/functions_o.html +32 -35
- package/SVF-doxygen/html/html/functions_p.html +34 -51
- package/SVF-doxygen/html/html/functions_r.html +1 -1
- package/SVF-doxygen/html/html/functions_s.html +32 -16
- package/SVF-doxygen/html/html/functions_t.html +24 -24
- package/SVF-doxygen/html/html/functions_type_c.html +1 -4
- package/SVF-doxygen/html/html/functions_type_f.html +2 -2
- package/SVF-doxygen/html/html/functions_type_g.html +2 -2
- package/SVF-doxygen/html/html/functions_type_i.html +3 -3
- package/SVF-doxygen/html/html/functions_type_k.html +3 -0
- package/SVF-doxygen/html/html/functions_type_l.html +3 -3
- package/SVF-doxygen/html/html/functions_type_p.html +3 -19
- package/SVF-doxygen/html/html/functions_type_s.html +19 -3
- package/SVF-doxygen/html/html/functions_type_v.html +1 -1
- package/SVF-doxygen/html/html/functions_u.html +2 -2
- package/SVF-doxygen/html/html/functions_v.html +10 -10
- package/SVF-doxygen/html/html/functions_vars_f.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_g.html +8 -8
- package/SVF-doxygen/html/html/functions_vars_i.html +9 -9
- package/SVF-doxygen/html/html/functions_vars_k.html +6 -0
- package/SVF-doxygen/html/html/functions_vars_l.html +2 -2
- package/SVF-doxygen/html/html/functions_vars_m.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_o.html +3 -4
- package/SVF-doxygen/html/html/functions_vars_p.html +4 -7
- package/SVF-doxygen/html/html/functions_w.html +5 -9
- package/SVF-doxygen/html/html/hierarchy.html +65 -65
- package/SVF-doxygen/html/html/namespaceSVF.html +24 -24
- package/SVF-doxygen/html/html/search/all_1.js +39 -39
- package/SVF-doxygen/html/html/search/all_10.js +12 -17
- package/SVF-doxygen/html/html/search/all_12.js +1 -1
- package/SVF-doxygen/html/html/search/all_13.js +15 -11
- package/SVF-doxygen/html/html/search/all_14.js +7 -7
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +4 -4
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_2.js +1 -1
- package/SVF-doxygen/html/html/search/all_3.js +8 -9
- package/SVF-doxygen/html/html/search/all_4.js +2 -2
- package/SVF-doxygen/html/html/search/all_6.js +4 -4
- package/SVF-doxygen/html/html/search/all_7.js +54 -53
- package/SVF-doxygen/html/html/search/all_8.js +2 -2
- package/SVF-doxygen/html/html/search/all_9.js +4 -4
- package/SVF-doxygen/html/html/search/all_b.js +3 -0
- package/SVF-doxygen/html/html/search/all_c.js +7 -7
- package/SVF-doxygen/html/html/search/all_d.js +1 -1
- package/SVF-doxygen/html/html/search/all_e.js +4 -4
- package/SVF-doxygen/html/html/search/all_f.js +6 -6
- package/SVF-doxygen/html/html/search/classes_0.js +1 -1
- package/SVF-doxygen/html/html/search/classes_1.js +1 -1
- package/SVF-doxygen/html/html/search/classes_11.js +1 -1
- package/SVF-doxygen/html/html/search/classes_12.js +2 -2
- package/SVF-doxygen/html/html/search/classes_2.js +5 -5
- package/SVF-doxygen/html/html/search/classes_3.js +2 -2
- package/SVF-doxygen/html/html/search/classes_5.js +1 -1
- package/SVF-doxygen/html/html/search/classes_6.js +2 -2
- package/SVF-doxygen/html/html/search/classes_9.js +1 -1
- package/SVF-doxygen/html/html/search/classes_b.js +1 -1
- package/SVF-doxygen/html/html/search/classes_c.js +1 -1
- package/SVF-doxygen/html/html/search/classes_d.js +1 -1
- package/SVF-doxygen/html/html/search/classes_f.js +1 -1
- package/SVF-doxygen/html/html/search/functions_0.js +39 -39
- package/SVF-doxygen/html/html/search/functions_1.js +1 -1
- package/SVF-doxygen/html/html/search/functions_10.js +4 -4
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_12.js +1 -1
- package/SVF-doxygen/html/html/search/functions_13.js +2 -2
- package/SVF-doxygen/html/html/search/functions_2.js +7 -7
- package/SVF-doxygen/html/html/search/functions_3.js +2 -2
- package/SVF-doxygen/html/html/search/functions_5.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +49 -48
- package/SVF-doxygen/html/html/search/functions_7.js +2 -2
- package/SVF-doxygen/html/html/search/functions_a.js +3 -3
- package/SVF-doxygen/html/html/search/functions_c.js +1 -1
- package/SVF-doxygen/html/html/search/functions_d.js +2 -2
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_11.js +7 -3
- package/SVF-doxygen/html/html/search/typedefs_14.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_2.js +1 -2
- package/SVF-doxygen/html/html/search/typedefs_5.js +2 -2
- package/SVF-doxygen/html/html/search/typedefs_6.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_8.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_a.js +2 -1
- package/SVF-doxygen/html/html/search/typedefs_b.js +3 -3
- package/SVF-doxygen/html/html/search/typedefs_f.js +3 -7
- package/SVF-doxygen/html/html/search/variables_10.js +2 -3
- package/SVF-doxygen/html/html/search/variables_14.js +4 -4
- package/SVF-doxygen/html/html/search/variables_6.js +1 -1
- package/SVF-doxygen/html/html/search/variables_7.js +4 -4
- package/SVF-doxygen/html/html/search/variables_9.js +4 -4
- package/SVF-doxygen/html/html/search/variables_b.js +3 -1
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/search/variables_d.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +2 -2
- package/SVF-doxygen/html/html/search/variables_f.js +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +4 -4
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
- package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
- package/include/DDA/ContextDDA.h +1 -1
- package/include/DDA/FlowDDA.h +1 -1
- package/include/Graphs/CHG.h +2 -2
- package/include/Graphs/ConsG.h +10 -10
- package/include/Graphs/ICFGNode.h +4 -4
- package/include/Graphs/IRGraph.h +7 -7
- package/include/Graphs/VFG.h +13 -13
- package/include/Graphs/VFGNode.h +6 -6
- package/include/MSSA/MSSAMuChi.h +6 -6
- package/include/MSSA/MemRegion.h +11 -11
- package/include/MSSA/MemSSA.h +11 -11
- package/include/MemoryModel/PointerAnalysis.h +9 -9
- package/include/MemoryModel/PointerAnalysisImpl.h +4 -4
- package/include/MemoryModel/SVFIR.h +82 -83
- package/include/MemoryModel/SVFStatements.h +97 -92
- package/include/MemoryModel/SVFVariables.h +71 -71
- package/include/SVF-FE/SVFIRBuilder.h +24 -24
- package/include/Util/IRAnnotator.h +1 -1
- package/include/Util/TypeBasedHeapCloning.h +2 -2
- package/include/WPA/Andersen.h +1 -1
- package/include/WPA/FlowSensitiveTBHC.h +1 -1
- package/lib/DDA/ContextDDA.cpp +6 -6
- package/lib/DDA/DDAClient.cpp +6 -6
- package/lib/DDA/DDAStat.cpp +2 -2
- package/lib/DDA/FlowDDA.cpp +4 -4
- package/lib/Graphs/ConsG.cpp +34 -34
- package/lib/Graphs/ICFG.cpp +4 -4
- package/lib/Graphs/IRGraph.cpp +21 -21
- package/lib/Graphs/OfflineConsG.cpp +8 -8
- package/lib/Graphs/SVFG.cpp +14 -14
- package/lib/Graphs/ThreadCallGraph.cpp +2 -2
- package/lib/Graphs/VFG.cpp +52 -52
- package/lib/MSSA/MemRegion.cpp +23 -23
- package/lib/MSSA/MemSSA.cpp +15 -15
- package/lib/MTA/MTAAnnotator.cpp +5 -5
- package/lib/MemoryModel/PAGBuilderFromFile.cpp +13 -13
- package/lib/MemoryModel/PointerAnalysis.cpp +9 -9
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +14 -14
- package/lib/MemoryModel/SVFIR.cpp +95 -95
- package/lib/MemoryModel/SVFStatements.cpp +24 -24
- package/lib/MemoryModel/SVFVariables.cpp +19 -19
- package/lib/SABER/LeakChecker.cpp +2 -2
- package/lib/SABER/SaberSVFGBuilder.cpp +5 -5
- package/lib/SVF-FE/Graph2Json.cpp +3 -3
- package/lib/SVF-FE/SVFIRBuilder.cpp +22 -22
- package/lib/Util/PTAStat.cpp +8 -8
- package/lib/Util/TypeBasedHeapCloning.cpp +22 -22
- package/lib/WPA/Andersen.cpp +13 -13
- package/lib/WPA/AndersenSFR.cpp +2 -2
- package/lib/WPA/AndersenStat.cpp +6 -6
- package/lib/WPA/FlowSensitive.cpp +8 -8
- package/lib/WPA/FlowSensitiveStat.cpp +4 -4
- package/lib/WPA/FlowSensitiveTBHC.cpp +9 -9
- package/lib/WPA/VersionedFlowSensitive.cpp +2 -2
- package/lib/WPA/VersionedFlowSensitiveStat.cpp +1 -1
- package/package.json +1 -1
|
@@ -66,7 +66,8 @@ $(function() {
|
|
|
66
66
|
<div class="title">MemSSA.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="MemSSA_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">//===- MemSSA.cpp -- Base class of pointer analyses------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-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"> * MemSSA.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="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="MemPartition_8h.html">MSSA/MemPartition.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="MemSSA_8h.html">MSSA/MemSSA.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="SVFGStat_8h.html">Graphs/SVFGStat.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> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MemSSA.html#a37dca8a7d155de4870358146d219b5e5">MemSSA::timeOfGeneratingMemRegions</a> = 0; </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MemSSA.html#a4d2418b7df74f23d8fd328f66e29f198">MemSSA::timeOfCreateMUCHI</a> = 0; </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MemSSA.html#a3c7b5fa73fdc7c805ee3673fbe812b44">MemSSA::timeOfInsertingPHI</a> = 0; </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MemSSA.html#a97ccd5e0b9ab6144415e26bdf95cbabd">MemSSA::timeOfSSARenaming</a> = 0; </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a6bd57451370f5f4c92ce212be4cddd15"> 48</a></span> <a class="code" href="classSVF_1_1MemSSA.html#a6bd57451370f5f4c92ce212be4cddd15">MemSSA::MemSSA</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* p, <span class="keywordtype">bool</span> ptrOnlyMSSA) : df(nullptr),dt(nullptr)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a> = p;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((<a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>()!=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85adb3d4cbd8c38c1c498bc51198626a790">PointerAnalysis::Default_PTA</a>)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  && <span class="stringliteral">"please specify a pointer analysis"</span>);</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>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a74b821736a04f89adb79d6fd5369cdc3">Options::MemPar</a> == MemPartition::Distinct)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1DistinctMRG.html">DistinctMRG</a>(<a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>, ptrOnlyMSSA);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a74b821736a04f89adb79d6fd5369cdc3">Options::MemPar</a> == MemPartition::IntraDisjoint)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1IntraDisjointMRG.html">IntraDisjointMRG</a>(<a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>, ptrOnlyMSSA);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a74b821736a04f89adb79d6fd5369cdc3">Options::MemPar</a> == MemPartition::InterDisjoint)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1InterDisjointMRG.html">InterDisjointMRG</a>(<a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>, ptrOnlyMSSA);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"unrecognised memory partition strategy"</span>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemSSAStat.html">MemSSAStat</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordtype">double</span> mrStart = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a">generateMRs</a>();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordtype">double</span> mrEnd = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="code" href="classSVF_1_1MemSSA.html#a37dca8a7d155de4870358146d219b5e5">timeOfGeneratingMemRegions</a> += (mrEnd - mrStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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> </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a41b153f2f8f3a27be63750e73a290569"> 73</a></span> <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1MemSSA.html#a41b153f2f8f3a27be63750e73a290569">MemSSA::getPAG</a>()</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</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> </div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a11e1e9a74a6764131fc8aae27d8bde5e"> 81</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a11e1e9a74a6764131fc8aae27d8bde5e">MemSSA::setCurrentDFDT</a>(<a class="code" href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">DominanceFrontier</a>* f, <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a>* t)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="classSVF_1_1MemSSA.html#ac0aeb79ec4f86f55c97bd397509acd05">df</a> = f;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <a class="code" href="classSVF_1_1MemSSA.html#a52b1598f44fe6a6e30095f596bf85cb0">dt</a> = t;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="classSVF_1_1MemSSA.html#acf840b71b67cabe831f01f2d358f27fa">usedRegs</a>.clear();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="classSVF_1_1MemSSA.html#add1d4ff17d0860906d2f5f7172176121">reg2BBMap</a>.clear();</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="l00092"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#ae56d1878046c119d1857727ca3609d74"> 92</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#ae56d1878046c119d1857727ca3609d74">MemSSA::buildMemSSA</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& fun, <a class="code" href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">DominanceFrontier</a>* f, <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a>* t)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(&fun) && <span class="stringliteral">"we do not build memory ssa for external functions"</span>);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a385e9d80a013723304b329454d32e8b1">DMSSA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Building Memory SSA for function "</span> << fun.<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>()</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  << <span class="stringliteral">" \n"</span>);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="classSVF_1_1MemSSA.html#a11e1e9a74a6764131fc8aae27d8bde5e">setCurrentDFDT</a>(f,t);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordtype">double</span> muchiStart = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="classSVF_1_1MemSSA.html#a695adf83e8c40b9628b1866053f68033">createMUCHI</a>(fun);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordtype">double</span> muchiEnd = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="classSVF_1_1MemSSA.html#a4d2418b7df74f23d8fd328f66e29f198">timeOfCreateMUCHI</a> += (muchiEnd - muchiStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordtype">double</span> phiStart = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="classSVF_1_1MemSSA.html#acc6f72d96cf29e36093ba08ea86b8983">insertPHI</a>(fun);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordtype">double</span> phiEnd = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1MemSSA.html#a3c7b5fa73fdc7c805ee3673fbe812b44">timeOfInsertingPHI</a> += (phiEnd - phiStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordtype">double</span> renameStart = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="classSVF_1_1MemSSA.html#a16114eb55775f6ee812c1648dcaede0c">SSARename</a>(fun);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordtype">double</span> renameEnd = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <a class="code" href="classSVF_1_1MemSSA.html#a97ccd5e0b9ab6144415e26bdf95cbabd">timeOfSSARenaming</a> += (renameEnd - renameStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a695adf83e8c40b9628b1866053f68033"> 126</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a695adf83e8c40b9628b1866053f68033">MemSSA::createMUCHI</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& fun)</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> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a385e9d80a013723304b329454d32e8b1">DMSSA</a>,</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t creating mu chi for function "</span> << fun.<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>()</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  << <span class="stringliteral">"\n"</span>);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="comment">// 1. create mu/chi</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="comment">// insert a set of mus for memory regions at each load</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="comment">// inset a set of chis for memory regions at each store</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="comment">// 2. find global names (region name before renaming) of each memory region,</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="comment">// collect used mrs in usedRegs, and collect its def basic block in reg2BBMap</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="comment">// in the form of mu(r) and r = chi (r)</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="comment">// a) mu(r):</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// if(r \not\in varKills) global = global \cup r</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">// b) r = chi(r):</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="comment">// if(r \not\in varKills) global = global \cup r</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// varKills = varKills \cup r</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="comment">// block(r) = block(r) \cup bb_{chi}</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <a class="code" href="classSVF_1_1MemSSA.html#a66e693af7b37e4e58b4834898d6a34fa">BBList</a> reachableBBs;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a61b29238f1f32978c7b6aded4b73244d">getFunReachableBBs</a>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>(),<a class="code" href="classSVF_1_1MemSSA.html#a9741a8d0540ba4c27cb667590d246197">getDT</a>(fun),reachableBBs);</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>  <span class="keywordflow">for</span> (BBList::const_iterator iter = reachableBBs.begin(), eiter = reachableBBs.end();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  iter != eiter; ++iter)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = *iter;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="classSVF_1_1MemSSA.html#ae64f97a984765a43f05df26b57a43a43">varKills</a>.clear();</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">for</span> (BasicBlock::const_iterator it = bb->begin(), eit = bb->end();</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  it != eit; ++it)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = &*it;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a8832a53d8f6a5eb0a07551ca19c5513d">hasPAGEdgeList</a>(inst))</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="classSVF_1_1MemSSA.html#a45f8ece590b091bd5ebf87f820f28f44">PAGEdgeList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a820e30118868947b62f0a558da5512fc">getPAGEdgesFromInst</a>(inst);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">for</span> (PAGEdgeList::const_iterator bit = pagEdgeList.begin(),</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  ebit = pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* inst = *bit;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadPE.html">LoadPE</a>* load = SVFUtil::dyn_cast<LoadPE>(inst))</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="classSVF_1_1MemSSA.html#a9f4c84dbffb28eea74a0bc03fda9fc51">AddLoadMU</a>(bb, load, <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a5cf5ae60ad6028809088f3c842afde9d">getLoadMRSet</a>(load));</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StorePE.html">StorePE</a>* store = SVFUtil::dyn_cast<StorePE>(inst))</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <a class="code" href="classSVF_1_1MemSSA.html#a71fe305891acfaad16d510dc11a764fc">AddStoreCHI</a>(bb, store, <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#ac409bbee6bf9deef7e31233a05054ee2">getStoreMRSet</a>(store));</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>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a8d8216a92140d982303f83ea424ddc91">isNonInstricCallSite</a>(inst))</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#aeed8bcf54d2a72c640e464e256249630">hasRefMRSet</a>(cs))</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <a class="code" href="classSVF_1_1MemSSA.html#a1aa05f81640286a796db0ded4e10c7ac">AddCallSiteMU</a>(cs,<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a7ede01d58bb2490ded5895ca5bd45948">getCallSiteRefMRSet</a>(cs));</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a8868281e5f5b5f3a83acf8568971ad40">hasModMRSet</a>(cs))</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <a class="code" href="classSVF_1_1MemSSA.html#ac6f2171f92e0bdd5dbdb58efed144c18">AddCallSiteCHI</a>(cs,<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#acb78098bf1fc8c3a80720a3dff3a0a1d">getCallSiteModMRSet</a>(cs));</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="comment">// create entry chi for this function including all memory regions</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="comment">// initialize them with version 0 and 1 r_1 = chi (r_0)</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">for</span> (MRSet::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#acf840b71b67cabe831f01f2d358f27fa">usedRegs</a>.begin(), eiter = <a class="code" href="classSVF_1_1MemSSA.html#acf840b71b67cabe831f01f2d358f27fa">usedRegs</a>.end();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  iter != eiter; ++iter)</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="classSVF_1_1MemRegion.html">MemRegion</a>* mr = *iter;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="comment">// initialize mem region version and stack for renaming phase</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <a class="code" href="classSVF_1_1MemSSA.html#a22e2dd0fc78877bdedd207a40540a634">mr2CounterMap</a>[mr] = 0;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="classSVF_1_1MemSSA.html#ae4c7b17d8da8278dca362af79f9f268d">mr2VerStackMap</a>[mr].clear();</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="classSVF_1_1EntryCHI.html">ENTRYCHI</a>* chi = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemSSA.html#a6a20da24d82ace1888be49a2ae0f6bd5">ENTRYCHI</a>(&fun, mr);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  chi-><a class="code" href="classSVF_1_1MSSACHI.html#a245d8ee9e81ba4fe6f41533baf471331">setOpVer</a>(<a class="code" href="classSVF_1_1MemSSA.html#a381a35d48ce2f8e348ddbbb9ce526ca8">newSSAName</a>(mr,chi));</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  chi-><a class="code" href="classSVF_1_1MSSADEF.html#a343eb4c9515dfbbbdadaacf5500e5f05">setResVer</a>(<a class="code" href="classSVF_1_1MemSSA.html#a381a35d48ce2f8e348ddbbb9ce526ca8">newSSAName</a>(mr,chi));</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="classSVF_1_1MemSSA.html#a59314f6ce17919574d687a08a38b55ec">funToEntryChiSetMap</a>[&fun].insert(chi);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a7a7e06e90a215086696effb5f5537baf">functionDoesNotRet</a>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()) == <span class="keyword">false</span>)</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <a class="code" href="classSVF_1_1RetMU.html">RETMU</a>* mu = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemSSA.html#a953a56a65ee36fd1c78b29179cd3f33a">RETMU</a>(&fun, mr);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <a class="code" href="classSVF_1_1MemSSA.html#abae2396bf8a37a22be9365d368fe455c">funToReturnMuSetMap</a>[&fun].insert(mu);</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>  }</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> }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">/*</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment"> * Insert phi node</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment"> */</span></div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#acc6f72d96cf29e36093ba08ea86b8983"> 216</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#acc6f72d96cf29e36093ba08ea86b8983">MemSSA::insertPHI</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& 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>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a385e9d80a013723304b329454d32e8b1">DMSSA</a>,</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t insert phi for function "</span> << fun.<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>() << <span class="stringliteral">"\n"</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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">DominanceFrontier</a>* <a class="code" href="classSVF_1_1MemSSA.html#ac0aeb79ec4f86f55c97bd397509acd05">df</a> = <a class="code" href="classSVF_1_1MemSSA.html#a36e9cf7394c3ece8a5f2f9bfc512956a">getDF</a>(fun);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="comment">// record whether a phi of mr has already been inserted into the bb.</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <a class="code" href="classSVF_1_1MemSSA.html#a4d4f7039c2972e671dc15b8c75abad14">BBToMRSetMap</a> bb2MRSetMap;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="comment">// start inserting phi node</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">for</span> (MRSet::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#acf840b71b67cabe831f01f2d358f27fa">usedRegs</a>.begin(), eiter = <a class="code" href="classSVF_1_1MemSSA.html#acf840b71b67cabe831f01f2d358f27fa">usedRegs</a>.end();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  iter != eiter; ++iter)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* mr = *iter;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <a class="code" href="classSVF_1_1MemSSA.html#a66e693af7b37e4e58b4834898d6a34fa">BBList</a> bbs = <a class="code" href="classSVF_1_1MemSSA.html#add1d4ff17d0860906d2f5f7172176121">reg2BBMap</a>[mr];</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">while</span> (!bbs.empty())</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = bbs.back();</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  bbs.pop_back();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  DominanceFrontierBase::const_iterator it = df->find(const_cast<BasicBlock*>(bb));</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span>(it == df->end())</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="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">"bb not in the dominance frontier map??"</span>);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">const</span> DominanceFrontierBase::DomSetType& domSet = it->second;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">for</span> (DominanceFrontierBase::DomSetType::const_iterator bit =</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  domSet.begin(); bit != domSet.end(); ++bit)</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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* pbb = *bit;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">// if we never insert this phi node before</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">if</span> (0 == bb2MRSetMap[pbb].count(mr))</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  bb2MRSetMap[pbb].insert(mr);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="comment">// insert phi node</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <a class="code" href="classSVF_1_1MemSSA.html#a606aaf7a76ca71cb32adc9af7291ae6e">AddMSSAPHI</a>(pbb,mr);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="comment">// continue to insert phi in its iterative dominate frontiers</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  bbs.push_back(pbb);</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>  }</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> </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> </div><div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a16114eb55775f6ee812c1648dcaede0c"> 266</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a16114eb55775f6ee812c1648dcaede0c">MemSSA::SSARename</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& fun)</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> </div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a385e9d80a013723304b329454d32e8b1">DMSSA</a>,</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t ssa rename for function "</span> << fun.<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>() << <span class="stringliteral">"\n"</span>);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="classSVF_1_1MemSSA.html#a271c20725d49dd65b95c062938ffde4c">SSARenameBB</a>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->getEntryBlock());</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a271c20725d49dd65b95c062938ffde4c"> 279</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a271c20725d49dd65b95c062938ffde4c">MemSSA::SSARenameBB</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb)</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="comment">// record which mem region needs to pop stack</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <a class="code" href="classSVF_1_1MemSSA.html#a7c3fda6f082231350524c2d7c16f067e">MRVector</a> memRegs;</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>  <span class="comment">// rename phi result op</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// for each r = phi (...)</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">// rewrite r as new name</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemSSA.html#a552bb17f0435e012b7393fb641c19298">hasPHISet</a>(&bb))</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="classSVF_1_1MemSSA.html#a630be375832b1477989af85dce6760f3">RenamePhiRes</a>(<a class="code" href="classSVF_1_1MemSSA.html#a964f3fe39ece9a7b8b2033428b75a274">getPHISet</a>(&bb),memRegs);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="comment">// process mu and chi</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="comment">// for each mu(r)</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="comment">// rewrite r with top mrver of stack(r)</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="comment">// for each r = chi(r')</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="comment">// rewrite r' with top mrver of stack(r)</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="comment">// rewrite r with new name</span></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">for</span> (BasicBlock::const_iterator it = bb.begin(), eit = bb.end();</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  it != eit; ++it)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = &*it;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a8832a53d8f6a5eb0a07551ca19c5513d">hasPAGEdgeList</a>(inst))</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>  <a class="code" href="classSVF_1_1MemSSA.html#a45f8ece590b091bd5ebf87f820f28f44">PAGEdgeList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a820e30118868947b62f0a558da5512fc">getPAGEdgesFromInst</a>(inst);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">for</span>(PAGEdgeList::const_iterator bit = pagEdgeList.begin(), ebit= pagEdgeList.end();</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  bit!=ebit; ++bit)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* inst = *bit;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadPE.html">LoadPE</a>* load = SVFUtil::dyn_cast<LoadPE>(inst))</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="classSVF_1_1MemSSA.html#a2527b76b92dffa8f8513ebfdcc8d8133">RenameMuSet</a>(<a class="code" href="classSVF_1_1MemSSA.html#aea0fc1d2e5407f86e0211d8e253fa24e">getMUSet</a>(load));</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StorePE.html">StorePE</a>* store = SVFUtil::dyn_cast<StorePE>(inst))</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <a class="code" href="classSVF_1_1MemSSA.html#a6066364112e665c33cbf2ec50ae1e3a8">RenameChiSet</a>(<a class="code" href="classSVF_1_1MemSSA.html#a24dd10cbd41df4f57d8d6fa9ca6a3083">getCHISet</a>(store),memRegs);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a8d8216a92140d982303f83ea424ddc91">isNonInstricCallSite</a>(inst))</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#aeed8bcf54d2a72c640e464e256249630">hasRefMRSet</a>(cs))</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="classSVF_1_1MemSSA.html#a2527b76b92dffa8f8513ebfdcc8d8133">RenameMuSet</a>(<a class="code" href="classSVF_1_1MemSSA.html#aea0fc1d2e5407f86e0211d8e253fa24e">getMUSet</a>(cs));</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a8868281e5f5b5f3a83acf8568971ad40">hasModMRSet</a>(cs))</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <a class="code" href="classSVF_1_1MemSSA.html#a6066364112e665c33cbf2ec50ae1e3a8">RenameChiSet</a>(<a class="code" href="classSVF_1_1MemSSA.html#a24dd10cbd41df4f57d8d6fa9ca6a3083">getCHISet</a>(cs),memRegs);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#abd525a2e3b7b9167b61b2304cc2cbdf2">isReturn</a>(inst))</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <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>(bb.getParent());</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <a class="code" href="classSVF_1_1MemSSA.html#a2527b76b92dffa8f8513ebfdcc8d8133">RenameMuSet</a>(<a class="code" href="classSVF_1_1MemSSA.html#af8c38a7ff8da4206f19c038024606d93">getReturnMuSet</a>(fun));</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="comment">// fill phi operands of succ basic blocks</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> sit = succ_begin(&bb), esit = succ_end(&bb);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  sit != esit; ++sit)</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* succ = *sit;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> pos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ae40e2e043b04ede541688ce61048fb4e">getBBPredecessorPos</a>(&bb, succ);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemSSA.html#a552bb17f0435e012b7393fb641c19298">hasPHISet</a>(succ))</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <a class="code" href="classSVF_1_1MemSSA.html#a0ed34f7a27db045c624c5db61d53132b">RenamePhiOps</a>(<a class="code" href="classSVF_1_1MemSSA.html#a964f3fe39ece9a7b8b2033428b75a274">getPHISet</a>(succ),pos,memRegs);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="comment">// for succ basic block in dominator tree</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</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>(bb.getParent());</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a>* <a class="code" href="classSVF_1_1MemSSA.html#a52b1598f44fe6a6e30095f596bf85cb0">dt</a> = <a class="code" href="classSVF_1_1MemSSA.html#a9741a8d0540ba4c27cb667590d246197">getDT</a>(*fun);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a> *dtNode = dt->getNode(const_cast<BasicBlock*>(&bb)))</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  {</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">for</span> (DomTreeNode::iterator DI = dtNode->begin(), DE = dtNode->end();</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  DI != DE; ++DI)</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_1MemSSA.html#a271c20725d49dd65b95c062938ffde4c">SSARenameBB</a>(*((*DI)->getBlock()));</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="comment">// for each r = chi(..), and r = phi(..)</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="comment">// pop ver stack(r)</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">while</span> (!memRegs.empty())</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* mr = memRegs.back();</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  memRegs.pop_back();</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <a class="code" href="classSVF_1_1MemSSA.html#ae4c7b17d8da8278dca362af79f9f268d">mr2VerStackMap</a>[mr].pop_back();</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  }</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> }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a381a35d48ce2f8e348ddbbb9ce526ca8"> 368</a></span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* <a class="code" href="classSVF_1_1MemSSA.html#a381a35d48ce2f8e348ddbbb9ce526ca8">MemSSA::newSSAName</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* mr, <a class="code" href="classSVF_1_1MSSADEF.html">MSSADEF</a>* def)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 != <a class="code" href="classSVF_1_1MemSSA.html#a22e2dd0fc78877bdedd207a40540a634">mr2CounterMap</a>.count(mr)</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  && <span class="stringliteral">"did not find initial version in map? "</span>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 != <a class="code" href="classSVF_1_1MemSSA.html#ae4c7b17d8da8278dca362af79f9f268d">mr2VerStackMap</a>.count(mr)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  && <span class="stringliteral">"did not find initial stack in map? "</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>  <a class="code" href="namespaceSVF.html#a39df0130e37e97db2ff7620bbb2a72f5">MRVERSION</a> version = <a class="code" href="classSVF_1_1MemSSA.html#a22e2dd0fc78877bdedd207a40540a634">mr2CounterMap</a>[mr];</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <a class="code" href="classSVF_1_1MemSSA.html#a22e2dd0fc78877bdedd207a40540a634">mr2CounterMap</a>[mr] = version + 1;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* mrVer = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>(mr, version, def);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <a class="code" href="classSVF_1_1MemSSA.html#ae4c7b17d8da8278dca362af79f9f268d">mr2VerStackMap</a>[mr].push_back(mrVer);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">return</span> mrVer;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> }</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a3d6096aeb4155444b532b02bb8559113"> 385</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a3d6096aeb4155444b532b02bb8559113">MemSSA::destroy</a>()</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">for</span> (LoadToMUSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#a5cf94edea3a5c35b3c1d9c6ae4b5f9d6">load2MuSetMap</a>.begin(), eiter =</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="classSVF_1_1MemSSA.html#a5cf94edea3a5c35b3c1d9c6ae4b5f9d6">load2MuSetMap</a>.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">for</span> (MUSet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">for</span> (StoreToChiSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#a73d7465cf166d9ffa9d234d15edb375a">store2ChiSetMap</a>.begin(), eiter =</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <a class="code" href="classSVF_1_1MemSSA.html#a73d7465cf166d9ffa9d234d15edb375a">store2ChiSetMap</a>.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">for</span> (CHISet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">for</span> (CallSiteToMUSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#aba54e534d18f68fbb97b26befd06ba1a">callsiteToMuSetMap</a>.begin(),</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  eiter = <a class="code" href="classSVF_1_1MemSSA.html#aba54e534d18f68fbb97b26befd06ba1a">callsiteToMuSetMap</a>.end(); iter != eiter; ++iter)</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">for</span> (MUSet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  iter->second.end(); it != eit; ++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>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  }</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">for</span> (CallSiteToCHISetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#a1be5a6776c8785f26573b597881c8195">callsiteToChiSetMap</a>.begin(),</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  eiter = <a class="code" href="classSVF_1_1MemSSA.html#a1be5a6776c8785f26573b597881c8195">callsiteToChiSetMap</a>.end(); iter != eiter; ++iter)</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> (CHISet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keyword">delete</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="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">for</span> (FunToEntryChiSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#a59314f6ce17919574d687a08a38b55ec">funToEntryChiSetMap</a>.begin(),</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  eiter = <a class="code" href="classSVF_1_1MemSSA.html#a59314f6ce17919574d687a08a38b55ec">funToEntryChiSetMap</a>.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordflow">for</span> (CHISet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">for</span> (FunToReturnMuSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#abae2396bf8a37a22be9365d368fe455c">funToReturnMuSetMap</a>.begin(),</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  eiter = <a class="code" href="classSVF_1_1MemSSA.html#abae2396bf8a37a22be9365d368fe455c">funToReturnMuSetMap</a>.end(); iter != eiter; ++iter)</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">for</span> (MUSet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">for</span> (BBToPhiSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#a190061a6f7423461f4292fc326330f23">bb2PhiSetMap</a>.begin(), eiter =</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <a class="code" href="classSVF_1_1MemSSA.html#a190061a6f7423461f4292fc326330f23">bb2PhiSetMap</a>.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">for</span> (PHISet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> }</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div><div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a89c40c8fad70f3aead6531261e5a3cc3"> 468</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a89c40c8fad70f3aead6531261e5a3cc3">MemSSA::performStat</a>()</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>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">printStat</a>())</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1MemSSAStat.html#abf3825b642cf115259ea21e5f7e28878">performStat</a>();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div><div class="line"><a name="l00477"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#aafc83f7f22ebf3b3683607440c488bef"> 477</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#aafc83f7f22ebf3b3683607440c488bef">MemSSA::getLoadMuNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keyword"></span>{</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  LoadToMUSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#a5cf94edea3a5c35b3c1d9c6ae4b5f9d6">load2MuSetMap</a>.begin();</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  LoadToMUSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#a5cf94edea3a5c35b3c1d9c6ae4b5f9d6">load2MuSetMap</a>.end();</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordflow">for</span> (; it != eit; it++)</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#a81bba824495a882b49e687683954b112">MUSet</a> & muSet = it->second;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  num+= muSet.size();</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">return</span> num;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div><div class="line"><a name="l00494"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#aa8c45b455e6fc60cab955534c3e50bfa"> 494</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#aa8c45b455e6fc60cab955534c3e50bfa">MemSSA::getStoreChiNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keyword"></span>{</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  StoreToChiSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#a73d7465cf166d9ffa9d234d15edb375a">store2ChiSetMap</a>.begin();</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  StoreToChiSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#a73d7465cf166d9ffa9d234d15edb375a">store2ChiSetMap</a>.end();</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">for</span> (; it != eit; it++)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#af9cf084e3070456d8cca491e1391b0c4">CHISet</a>& chiSet = it->second;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  num += chiSet.size();</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">return</span> num;</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="l00507"></a><span class="lineno"> 507</span> </div><div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a15272a4ed019d1c323d1826c1bedb70f"> 511</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#a15272a4ed019d1c323d1826c1bedb70f">MemSSA::getFunEntryChiNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keyword"></span>{</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  FunToEntryChiSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#a59314f6ce17919574d687a08a38b55ec">funToEntryChiSetMap</a>.begin();</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  FunToEntryChiSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#a59314f6ce17919574d687a08a38b55ec">funToEntryChiSetMap</a>.end();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">for</span> (; it != eit; it++)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#af9cf084e3070456d8cca491e1391b0c4">CHISet</a>& chiSet = it->second;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  num += chiSet.size();</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>  <span class="keywordflow">return</span> num;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div><div class="line"><a name="l00528"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a67175188232e08f5c5374f92ff61810f"> 528</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#a67175188232e08f5c5374f92ff61810f">MemSSA::getFunRetMuNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keyword"></span>{</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  FunToReturnMuSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#abae2396bf8a37a22be9365d368fe455c">funToReturnMuSetMap</a>.begin();</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  FunToReturnMuSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#abae2396bf8a37a22be9365d368fe455c">funToReturnMuSetMap</a>.end();</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">for</span> (; it != eit; it++)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#a81bba824495a882b49e687683954b112">MUSet</a> & muSet = it->second;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  num+= muSet.size();</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  }</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keywordflow">return</span> num;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a9e8c5b85957485635d0f72c2f48bb8b5"> 545</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#a9e8c5b85957485635d0f72c2f48bb8b5">MemSSA::getCallSiteMuNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keyword"></span>{</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  CallSiteToMUSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#aba54e534d18f68fbb97b26befd06ba1a">callsiteToMuSetMap</a>.begin();</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  CallSiteToMUSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#aba54e534d18f68fbb97b26befd06ba1a">callsiteToMuSetMap</a>.end();</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">for</span> (; it != eit; it++)</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#a81bba824495a882b49e687683954b112">MUSet</a> & muSet = it->second;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  num+= muSet.size();</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>  <span class="keywordflow">return</span> num;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> }</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> </div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div><div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a2c65795ca63a53c833f5ac17a752b6dc"> 562</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#a2c65795ca63a53c833f5ac17a752b6dc">MemSSA::getCallSiteChiNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="keyword"></span>{</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  CallSiteToCHISetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#a1be5a6776c8785f26573b597881c8195">callsiteToChiSetMap</a>.begin();</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  CallSiteToCHISetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#a1be5a6776c8785f26573b597881c8195">callsiteToChiSetMap</a>.end();</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">for</span> (; it != eit; it++)</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  {</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#af9cf084e3070456d8cca491e1391b0c4">CHISet</a> & chiSet = it->second;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  num+= chiSet.size();</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">return</span> num;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> }</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div><div class="line"><a name="l00579"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a9bb6512999cbf9c7c03153be77c8af20"> 579</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#a9bb6512999cbf9c7c03153be77c8af20">MemSSA::getBBPhiNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keyword"></span>{</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  BBToPhiSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#a190061a6f7423461f4292fc326330f23">bb2PhiSetMap</a>.begin();</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  BBToPhiSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#a190061a6f7423461f4292fc326330f23">bb2PhiSetMap</a>.end();</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">for</span> (; it != eit; it++)</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  {</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#a8a5d3597f3dba9744e170cc8c32bf25f">PHISet</a> & phiSet = it->second;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  num+= phiSet.size();</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="keywordflow">return</span> num;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00595"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a9f9ac433d9c9348ceb5be8893d814ebd"> 595</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a9f9ac433d9c9348ceb5be8893d814ebd">MemSSA::dumpMSSA</a>(<a class="code" href="namespaceSVF.html#a424cc053c29ad7303699c529d1a2cc71">raw_ostream</a>& Out)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#a709371b13dcf500277f8bc275bdb23c7">SVFModule::iterator</a> fit = <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#ad8b71cebf46deaf60e2cd4f6d6bb9433">getModule</a>()-><a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), efit = <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#ad8b71cebf46deaf60e2cd4f6d6bb9433">getModule</a>()-><a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>();</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  fit != efit; ++fit)</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = *fit;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a4ac0e6b77fc9ccc18b269268b3cd046d">Options::MSSAFun</a>!=<span class="stringliteral">""</span> && <a class="code" href="classSVF_1_1Options.html#a4ac0e6b77fc9ccc18b269268b3cd046d">Options::MSSAFun</a>!=fun-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>())</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> </div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  Out << <span class="stringliteral">"==========FUNCTION: "</span> << fun-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>() << <span class="stringliteral">"==========\n"</span>;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="comment">// dump function entry chi nodes</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemSSA.html#aec75259d035e3b5589e6fcbbcdfe4b2c">hasFuncEntryChi</a>(fun))</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <a class="code" href="classSVF_1_1MemSSA.html#af9cf084e3070456d8cca491e1391b0c4">CHISet</a> & entry_chis = <a class="code" href="classSVF_1_1MemSSA.html#a10743fe9c116ee624387c0473815b800">getFuncEntryChiSet</a>(fun);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">for</span> (CHISet::iterator chi_it = entry_chis.begin(); chi_it != entry_chis.end(); chi_it++)</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  {</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  (*chi_it)->dump();</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">for</span> (Function::iterator bit = fun-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->begin(), ebit = fun-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->end();</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  bit != ebit; ++bit)</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>  <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb = *bit;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordflow">if</span> (bb.hasName())</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  Out << bb.getName() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <a class="code" href="classSVF_1_1MemSSA.html#a8a5d3597f3dba9744e170cc8c32bf25f">PHISet</a>& phiSet = <a class="code" href="classSVF_1_1MemSSA.html#a964f3fe39ece9a7b8b2033428b75a274">getPHISet</a>(&bb);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">for</span>(PHISet::iterator pi = phiSet.begin(), epi = phiSet.end(); pi !=epi; ++pi)</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  (*pi)->dump();</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> </div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keywordtype">bool</span> last_is_chi = <span class="keyword">false</span>;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keywordflow">for</span> (BasicBlock::iterator it = bb.begin(), eit = bb.end();</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  it != eit; ++it)</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  {</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>& inst = *it;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="keywordtype">bool</span> isAppCall = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8d8216a92140d982303f83ea424ddc91">isNonInstricCallSite</a>(&inst) && !<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(&inst);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">if</span> (isAppCall || <a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(&inst))</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(&inst);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#af5e356e82c3f93b65bd89908e0f465dc">hasMU</a>(cs))</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (!last_is_chi)</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>  Out << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  }</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <span class="keywordflow">for</span> (MUSet::iterator mit = <a class="code" href="classSVF_1_1MemSSA.html#aea0fc1d2e5407f86e0211d8e253fa24e">getMUSet</a>(cs).begin(), emit = <a class="code" href="classSVF_1_1MemSSA.html#aea0fc1d2e5407f86e0211d8e253fa24e">getMUSet</a>(cs).end();</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  mit != emit; ++mit)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  (*mit)-><a class="code" href="classSVF_1_1ICFGNode.html#a3c193da05d6dee7313a141ae3ab43e97">dump</a>();</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> </div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  Out << inst << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#abfb338ce36ad46a9654d50dd6e2b07f1">hasCHI</a>(cs))</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  {</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">for</span> (CHISet::iterator cit = <a class="code" href="classSVF_1_1MemSSA.html#a24dd10cbd41df4f57d8d6fa9ca6a3083">getCHISet</a>(cs).begin(), ecit = <a class="code" href="classSVF_1_1MemSSA.html#a24dd10cbd41df4f57d8d6fa9ca6a3083">getCHISet</a>(cs).end();</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  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>  (*cit)->dump();</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  Out << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  last_is_chi = <span class="keyword">true</span>;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  }</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  last_is_chi = <span class="keyword">false</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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  {</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="keywordtype">bool</span> dump_preamble = <span class="keyword">false</span>;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <a class="code" href="classSVF_1_1MemSSA.html#a45f8ece590b091bd5ebf87f820f28f44">PAGEdgeList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a820e30118868947b62f0a558da5512fc">getPAGEdgesFromInst</a>(&inst);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">for</span>(PAGEdgeList::const_iterator bit = pagEdgeList.begin(), ebit= pagEdgeList.end();</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  bit!=ebit; ++bit)</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadPE.html">LoadPE</a>* load = SVFUtil::dyn_cast<LoadPE>(edge))</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  {</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <a class="code" href="classSVF_1_1MemSSA.html#a81bba824495a882b49e687683954b112">MUSet</a>& muSet = <a class="code" href="classSVF_1_1MemSSA.html#aea0fc1d2e5407f86e0211d8e253fa24e">getMUSet</a>(load);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">for</span>(MUSet::iterator it = muSet.begin(), eit = muSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordflow">if</span> (!dump_preamble && !last_is_chi)</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  {</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  Out << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  dump_preamble = <span class="keyword">true</span>;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  (*it)->dump();</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  }</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  Out << inst << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordtype">bool</span> has_chi = <span class="keyword">false</span>;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">for</span>(PAGEdgeList::const_iterator bit = pagEdgeList.begin(), ebit= pagEdgeList.end();</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  bit!=ebit; ++bit)</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  {</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StorePE.html">StorePE</a>* store = SVFUtil::dyn_cast<StorePE>(edge))</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_1MemSSA.html#af9cf084e3070456d8cca491e1391b0c4">CHISet</a>& chiSet = <a class="code" href="classSVF_1_1MemSSA.html#a24dd10cbd41df4f57d8d6fa9ca6a3083">getCHISet</a>(store);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">for</span>(CHISet::iterator it = chiSet.begin(), eit = chiSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  {</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  has_chi = <span class="keyword">true</span>;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  (*it)->dump();</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  }</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  }</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="keywordflow">if</span> (has_chi)</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  {</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  Out << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  last_is_chi = <span class="keyword">true</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">else</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  last_is_chi = <span class="keyword">false</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="l00715"></a><span class="lineno"> 715</span>  }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> </div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="comment">// dump return mu nodes</span></div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemSSA.html#a3400d9a921672b3872656acecc3eac9f">hasReturnMu</a>(fun))</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  {</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <a class="code" href="classSVF_1_1MemSSA.html#a81bba824495a882b49e687683954b112">MUSet</a> & return_mus = <a class="code" href="classSVF_1_1MemSSA.html#af8c38a7ff8da4206f19c038024606d93">getReturnMuSet</a>(fun);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordflow">for</span> (MUSet::iterator mu_it = return_mus.begin(); mu_it != return_mus.end(); mu_it++)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  (*mu_it)->dump();</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  }</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  }</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span> }</div><div class="ttc" id="classSVF_1_1MRVer_html"><div class="ttname"><a href="classSVF_1_1MRVer.html">SVF::MRVer</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00043">MSSAMuChi.h:43</a></div></div>
|
|
69
|
+
<a href="MemSSA_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">//===- MemSSA.cpp -- Base class of pointer analyses------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// Copyright (C) <2013-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"> * MemSSA.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="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>"</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="preprocessor">#include "<a class="code" href="MemPartition_8h.html">MSSA/MemPartition.h</a>"</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="preprocessor">#include "<a class="code" href="MemSSA_8h.html">MSSA/MemSSA.h</a>"</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#include "<a class="code" href="SVFGStat_8h.html">Graphs/SVFGStat.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> </div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MemSSA.html#a37dca8a7d155de4870358146d219b5e5">MemSSA::timeOfGeneratingMemRegions</a> = 0; </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MemSSA.html#a4d2418b7df74f23d8fd328f66e29f198">MemSSA::timeOfCreateMUCHI</a> = 0; </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MemSSA.html#a3c7b5fa73fdc7c805ee3673fbe812b44">MemSSA::timeOfInsertingPHI</a> = 0; </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> <span class="keywordtype">double</span> <a class="code" href="classSVF_1_1MemSSA.html#a97ccd5e0b9ab6144415e26bdf95cbabd">MemSSA::timeOfSSARenaming</a> = 0; </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00048"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a6bd57451370f5f4c92ce212be4cddd15"> 48</a></span> <a class="code" href="classSVF_1_1MemSSA.html#a6bd57451370f5f4c92ce212be4cddd15">MemSSA::MemSSA</a>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a>* p, <span class="keywordtype">bool</span> ptrOnlyMSSA) : df(nullptr),dt(nullptr)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a> = p;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((<a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">getAnalysisTy</a>()!=<a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85adb3d4cbd8c38c1c498bc51198626a790">PointerAnalysis::Default_PTA</a>)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  && <span class="stringliteral">"please specify a pointer analysis"</span>);</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>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a74b821736a04f89adb79d6fd5369cdc3">Options::MemPar</a> == MemPartition::Distinct)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1DistinctMRG.html">DistinctMRG</a>(<a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>, ptrOnlyMSSA);</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a74b821736a04f89adb79d6fd5369cdc3">Options::MemPar</a> == MemPartition::IntraDisjoint)</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1IntraDisjointMRG.html">IntraDisjointMRG</a>(<a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>, ptrOnlyMSSA);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a74b821736a04f89adb79d6fd5369cdc3">Options::MemPar</a> == MemPartition::InterDisjoint)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1InterDisjointMRG.html">InterDisjointMRG</a>(<a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>, ptrOnlyMSSA);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"unrecognised memory partition strategy"</span>);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span> </div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> </div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemSSAStat.html">MemSSAStat</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> </div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordtype">double</span> mrStart = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a">generateMRs</a>();</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <span class="keywordtype">double</span> mrEnd = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <a class="code" href="classSVF_1_1MemSSA.html#a37dca8a7d155de4870358146d219b5e5">timeOfGeneratingMemRegions</a> += (mrEnd - mrStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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> </div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a41b153f2f8f3a27be63750e73a290569"> 73</a></span> <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1MemSSA.html#a41b153f2f8f3a27be63750e73a290569">MemSSA::getPAG</a>()</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</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> </div><div class="line"><a name="l00081"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a11e1e9a74a6764131fc8aae27d8bde5e"> 81</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a11e1e9a74a6764131fc8aae27d8bde5e">MemSSA::setCurrentDFDT</a>(<a class="code" href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">DominanceFrontier</a>* f, <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a>* t)</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  <a class="code" href="classSVF_1_1MemSSA.html#ac0aeb79ec4f86f55c97bd397509acd05">df</a> = f;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <a class="code" href="classSVF_1_1MemSSA.html#a52b1598f44fe6a6e30095f596bf85cb0">dt</a> = t;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <a class="code" href="classSVF_1_1MemSSA.html#acf840b71b67cabe831f01f2d358f27fa">usedRegs</a>.clear();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <a class="code" href="classSVF_1_1MemSSA.html#add1d4ff17d0860906d2f5f7172176121">reg2BBMap</a>.clear();</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="l00092"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#ae56d1878046c119d1857727ca3609d74"> 92</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#ae56d1878046c119d1857727ca3609d74">MemSSA::buildMemSSA</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& fun, <a class="code" href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">DominanceFrontier</a>* f, <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a>* t)</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(&fun) && <span class="stringliteral">"we do not build memory ssa for external functions"</span>);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> </div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a385e9d80a013723304b329454d32e8b1">DMSSA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"Building Memory SSA for function "</span> << fun.<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>()</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  << <span class="stringliteral">" \n"</span>);</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> </div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <a class="code" href="classSVF_1_1MemSSA.html#a11e1e9a74a6764131fc8aae27d8bde5e">setCurrentDFDT</a>(f,t);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="keywordtype">double</span> muchiStart = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="classSVF_1_1MemSSA.html#a695adf83e8c40b9628b1866053f68033">createMUCHI</a>(fun);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  <span class="keywordtype">double</span> muchiEnd = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="classSVF_1_1MemSSA.html#a4d2418b7df74f23d8fd328f66e29f198">timeOfCreateMUCHI</a> += (muchiEnd - muchiStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="keywordtype">double</span> phiStart = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <a class="code" href="classSVF_1_1MemSSA.html#acc6f72d96cf29e36093ba08ea86b8983">insertPHI</a>(fun);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordtype">double</span> phiEnd = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1MemSSA.html#a3c7b5fa73fdc7c805ee3673fbe812b44">timeOfInsertingPHI</a> += (phiEnd - phiStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  <span class="keywordtype">double</span> renameStart = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  <a class="code" href="classSVF_1_1MemSSA.html#a16114eb55775f6ee812c1648dcaede0c">SSARename</a>(fun);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keywordtype">double</span> renameEnd = <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <a class="code" href="classSVF_1_1MemSSA.html#a97ccd5e0b9ab6144415e26bdf95cbabd">timeOfSSARenaming</a> += (renameEnd - renameStart)/<a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</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="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00126"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a695adf83e8c40b9628b1866053f68033"> 126</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a695adf83e8c40b9628b1866053f68033">MemSSA::createMUCHI</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& fun)</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> </div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> </div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a385e9d80a013723304b329454d32e8b1">DMSSA</a>,</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t creating mu chi for function "</span> << fun.<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>()</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  << <span class="stringliteral">"\n"</span>);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <span class="comment">// 1. create mu/chi</span></div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="comment">// insert a set of mus for memory regions at each load</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="comment">// inset a set of chis for memory regions at each store</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span> </div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  <span class="comment">// 2. find global names (region name before renaming) of each memory region,</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="comment">// collect used mrs in usedRegs, and collect its def basic block in reg2BBMap</span></div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <span class="comment">// in the form of mu(r) and r = chi (r)</span></div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="comment">// a) mu(r):</span></div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <span class="comment">// if(r \not\in varKills) global = global \cup r</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  <span class="comment">// b) r = chi(r):</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  <span class="comment">// if(r \not\in varKills) global = global \cup r</span></div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  <span class="comment">// varKills = varKills \cup r</span></div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="comment">// block(r) = block(r) \cup bb_{chi}</span></div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span> </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <a class="code" href="classSVF_1_1MemSSA.html#a66e693af7b37e4e58b4834898d6a34fa">BBList</a> reachableBBs;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a61b29238f1f32978c7b6aded4b73244d">getFunReachableBBs</a>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>(),<a class="code" href="classSVF_1_1MemSSA.html#a9741a8d0540ba4c27cb667590d246197">getDT</a>(fun),reachableBBs);</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>  <span class="keywordflow">for</span> (BBList::const_iterator iter = reachableBBs.begin(), eiter = reachableBBs.end();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  iter != eiter; ++iter)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = *iter;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <a class="code" href="classSVF_1_1MemSSA.html#ae64f97a984765a43f05df26b57a43a43">varKills</a>.clear();</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">for</span> (BasicBlock::const_iterator it = bb->begin(), eit = bb->end();</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  it != eit; ++it)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  {</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = &*it;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5">hasSVFStmtList</a>(inst))</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  {</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="classSVF_1_1MemSSA.html#a445d282890dbd2fb51e903255af1cc3e">SVFStmtList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(inst);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">for</span> (SVFStmtList::const_iterator bit = pagEdgeList.begin(),</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  ebit = pagEdgeList.end(); bit != ebit; ++bit)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* inst = *bit;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* load = SVFUtil::dyn_cast<LoadStmt>(inst))</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="classSVF_1_1MemSSA.html#adb8009633b4e3b69609790fa068b3f42">AddLoadMU</a>(bb, load, <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a19da5768681a21c52a6c43761814a157">getLoadMRSet</a>(load));</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* store = SVFUtil::dyn_cast<StoreStmt>(inst))</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <a class="code" href="classSVF_1_1MemSSA.html#a4e11797df16b0b612191607180acc0c5">AddStoreCHI</a>(bb, store, <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a364ad1e34d09a92cdc0cfe530c84880f">getStoreMRSet</a>(store));</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>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a8d8216a92140d982303f83ea424ddc91">isNonInstricCallSite</a>(inst))</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  {</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#aeed8bcf54d2a72c640e464e256249630">hasRefMRSet</a>(cs))</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <a class="code" href="classSVF_1_1MemSSA.html#a1aa05f81640286a796db0ded4e10c7ac">AddCallSiteMU</a>(cs,<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a7ede01d58bb2490ded5895ca5bd45948">getCallSiteRefMRSet</a>(cs));</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a8868281e5f5b5f3a83acf8568971ad40">hasModMRSet</a>(cs))</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <a class="code" href="classSVF_1_1MemSSA.html#ac6f2171f92e0bdd5dbdb58efed144c18">AddCallSiteCHI</a>(cs,<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#acb78098bf1fc8c3a80720a3dff3a0a1d">getCallSiteModMRSet</a>(cs));</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  }</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  }</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> </div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="comment">// create entry chi for this function including all memory regions</span></div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="comment">// initialize them with version 0 and 1 r_1 = chi (r_0)</span></div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">for</span> (MRSet::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#acf840b71b67cabe831f01f2d358f27fa">usedRegs</a>.begin(), eiter = <a class="code" href="classSVF_1_1MemSSA.html#acf840b71b67cabe831f01f2d358f27fa">usedRegs</a>.end();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  iter != eiter; ++iter)</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="classSVF_1_1MemRegion.html">MemRegion</a>* mr = *iter;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="comment">// initialize mem region version and stack for renaming phase</span></div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <a class="code" href="classSVF_1_1MemSSA.html#a22e2dd0fc78877bdedd207a40540a634">mr2CounterMap</a>[mr] = 0;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="classSVF_1_1MemSSA.html#ae4c7b17d8da8278dca362af79f9f268d">mr2VerStackMap</a>[mr].clear();</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="classSVF_1_1EntryCHI.html">ENTRYCHI</a>* chi = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemSSA.html#a6a20da24d82ace1888be49a2ae0f6bd5">ENTRYCHI</a>(&fun, mr);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  chi-><a class="code" href="classSVF_1_1MSSACHI.html#a245d8ee9e81ba4fe6f41533baf471331">setOpVer</a>(<a class="code" href="classSVF_1_1MemSSA.html#a381a35d48ce2f8e348ddbbb9ce526ca8">newSSAName</a>(mr,chi));</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  chi-><a class="code" href="classSVF_1_1MSSADEF.html#a343eb4c9515dfbbbdadaacf5500e5f05">setResVer</a>(<a class="code" href="classSVF_1_1MemSSA.html#a381a35d48ce2f8e348ddbbb9ce526ca8">newSSAName</a>(mr,chi));</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <a class="code" href="classSVF_1_1MemSSA.html#a59314f6ce17919574d687a08a38b55ec">funToEntryChiSetMap</a>[&fun].insert(chi);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span> </div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a7a7e06e90a215086696effb5f5537baf">functionDoesNotRet</a>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()) == <span class="keyword">false</span>)</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  {</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  <a class="code" href="classSVF_1_1RetMU.html">RETMU</a>* mu = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemSSA.html#a953a56a65ee36fd1c78b29179cd3f33a">RETMU</a>(&fun, mr);</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <a class="code" href="classSVF_1_1MemSSA.html#abae2396bf8a37a22be9365d368fe455c">funToReturnMuSetMap</a>[&fun].insert(mu);</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>  }</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> }</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> </div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="comment">/*</span></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="comment"> * Insert phi node</span></div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="comment"> */</span></div><div class="line"><a name="l00216"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#acc6f72d96cf29e36093ba08ea86b8983"> 216</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#acc6f72d96cf29e36093ba08ea86b8983">MemSSA::insertPHI</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& 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>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a385e9d80a013723304b329454d32e8b1">DMSSA</a>,</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t insert phi for function "</span> << fun.<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>() << <span class="stringliteral">"\n"</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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">DominanceFrontier</a>* <a class="code" href="classSVF_1_1MemSSA.html#ac0aeb79ec4f86f55c97bd397509acd05">df</a> = <a class="code" href="classSVF_1_1MemSSA.html#a36e9cf7394c3ece8a5f2f9bfc512956a">getDF</a>(fun);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="comment">// record whether a phi of mr has already been inserted into the bb.</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <a class="code" href="classSVF_1_1MemSSA.html#a4d4f7039c2972e671dc15b8c75abad14">BBToMRSetMap</a> bb2MRSetMap;</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> </div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="comment">// start inserting phi node</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">for</span> (MRSet::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#acf840b71b67cabe831f01f2d358f27fa">usedRegs</a>.begin(), eiter = <a class="code" href="classSVF_1_1MemSSA.html#acf840b71b67cabe831f01f2d358f27fa">usedRegs</a>.end();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  iter != eiter; ++iter)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* mr = *iter;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span> </div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <a class="code" href="classSVF_1_1MemSSA.html#a66e693af7b37e4e58b4834898d6a34fa">BBList</a> bbs = <a class="code" href="classSVF_1_1MemSSA.html#add1d4ff17d0860906d2f5f7172176121">reg2BBMap</a>[mr];</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">while</span> (!bbs.empty())</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* bb = bbs.back();</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  bbs.pop_back();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  DominanceFrontierBase::const_iterator it = df->find(const_cast<BasicBlock*>(bb));</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">if</span>(it == df->end())</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="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">"bb not in the dominance frontier map??"</span>);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  }</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">const</span> DominanceFrontierBase::DomSetType& domSet = it->second;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">for</span> (DominanceFrontierBase::DomSetType::const_iterator bit =</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  domSet.begin(); bit != domSet.end(); ++bit)</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>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* pbb = *bit;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">// if we never insert this phi node before</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <span class="keywordflow">if</span> (0 == bb2MRSetMap[pbb].count(mr))</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>  bb2MRSetMap[pbb].insert(mr);</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <span class="comment">// insert phi node</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <a class="code" href="classSVF_1_1MemSSA.html#a606aaf7a76ca71cb32adc9af7291ae6e">AddMSSAPHI</a>(pbb,mr);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>  <span class="comment">// continue to insert phi in its iterative dominate frontiers</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  bbs.push_back(pbb);</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>  }</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> </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> </div><div class="line"><a name="l00266"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a16114eb55775f6ee812c1648dcaede0c"> 266</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a16114eb55775f6ee812c1648dcaede0c">MemSSA::SSARename</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>& fun)</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> </div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a385e9d80a013723304b329454d32e8b1">DMSSA</a>,</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() << <span class="stringliteral">"\t ssa rename for function "</span> << fun.<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>() << <span class="stringliteral">"\n"</span>);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <a class="code" href="classSVF_1_1MemSSA.html#a271c20725d49dd65b95c062938ffde4c">SSARenameBB</a>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->getEntryBlock());</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> }</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a271c20725d49dd65b95c062938ffde4c"> 279</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a271c20725d49dd65b95c062938ffde4c">MemSSA::SSARenameBB</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb)</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> </div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>  <span class="comment">// record which mem region needs to pop stack</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <a class="code" href="classSVF_1_1MemSSA.html#a7c3fda6f082231350524c2d7c16f067e">MRVector</a> memRegs;</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>  <span class="comment">// rename phi result op</span></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="comment">// for each r = phi (...)</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>  <span class="comment">// rewrite r as new name</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemSSA.html#a552bb17f0435e012b7393fb641c19298">hasPHISet</a>(&bb))</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="classSVF_1_1MemSSA.html#a630be375832b1477989af85dce6760f3">RenamePhiRes</a>(<a class="code" href="classSVF_1_1MemSSA.html#a964f3fe39ece9a7b8b2033428b75a274">getPHISet</a>(&bb),memRegs);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="comment">// process mu and chi</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="comment">// for each mu(r)</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="comment">// rewrite r with top mrver of stack(r)</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="comment">// for each r = chi(r')</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <span class="comment">// rewrite r' with top mrver of stack(r)</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  <span class="comment">// rewrite r with new name</span></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">for</span> (BasicBlock::const_iterator it = bb.begin(), eit = bb.end();</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  it != eit; ++it)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = &*it;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a6f631290f3da7c308395eb6a9472d7a5">hasSVFStmtList</a>(inst))</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>  <a class="code" href="classSVF_1_1MemSSA.html#a445d282890dbd2fb51e903255af1cc3e">SVFStmtList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(inst);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">for</span>(SVFStmtList::const_iterator bit = pagEdgeList.begin(), ebit= pagEdgeList.end();</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  bit!=ebit; ++bit)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* inst = *bit;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* load = SVFUtil::dyn_cast<LoadStmt>(inst))</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="classSVF_1_1MemSSA.html#a2527b76b92dffa8f8513ebfdcc8d8133">RenameMuSet</a>(<a class="code" href="classSVF_1_1MemSSA.html#af4d11a0c7da0ddd7dff8d75a00279847">getMUSet</a>(load));</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* store = SVFUtil::dyn_cast<StoreStmt>(inst))</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <a class="code" href="classSVF_1_1MemSSA.html#a6066364112e665c33cbf2ec50ae1e3a8">RenameChiSet</a>(<a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(store),memRegs);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  }</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a8d8216a92140d982303f83ea424ddc91">isNonInstricCallSite</a>(inst))</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  {</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#aeed8bcf54d2a72c640e464e256249630">hasRefMRSet</a>(cs))</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  <a class="code" href="classSVF_1_1MemSSA.html#a2527b76b92dffa8f8513ebfdcc8d8133">RenameMuSet</a>(<a class="code" href="classSVF_1_1MemSSA.html#af4d11a0c7da0ddd7dff8d75a00279847">getMUSet</a>(cs));</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> </div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#a8868281e5f5b5f3a83acf8568971ad40">hasModMRSet</a>(cs))</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  <a class="code" href="classSVF_1_1MemSSA.html#a6066364112e665c33cbf2ec50ae1e3a8">RenameChiSet</a>(<a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(cs),memRegs);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  }</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#abd525a2e3b7b9167b61b2304cc2cbdf2">isReturn</a>(inst))</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  {</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <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>(bb.getParent());</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <a class="code" href="classSVF_1_1MemSSA.html#a2527b76b92dffa8f8513ebfdcc8d8133">RenameMuSet</a>(<a class="code" href="classSVF_1_1MemSSA.html#af8c38a7ff8da4206f19c038024606d93">getReturnMuSet</a>(fun));</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> </div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> </div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="comment">// fill phi operands of succ basic blocks</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">succ_const_iterator</a> sit = succ_begin(&bb), esit = succ_end(&bb);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  sit != esit; ++sit)</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  {</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* succ = *sit;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> pos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ae40e2e043b04ede541688ce61048fb4e">getBBPredecessorPos</a>(&bb, succ);</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemSSA.html#a552bb17f0435e012b7393fb641c19298">hasPHISet</a>(succ))</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  <a class="code" href="classSVF_1_1MemSSA.html#a0ed34f7a27db045c624c5db61d53132b">RenamePhiOps</a>(<a class="code" href="classSVF_1_1MemSSA.html#a964f3fe39ece9a7b8b2033428b75a274">getPHISet</a>(succ),pos,memRegs);</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  }</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> </div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="comment">// for succ basic block in dominator tree</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</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>(bb.getParent());</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="namespaceSVF.html#aecbb42b8e9d17fa0189c50dda9fd5fdd">DominatorTree</a>* <a class="code" href="classSVF_1_1MemSSA.html#a52b1598f44fe6a6e30095f596bf85cb0">dt</a> = <a class="code" href="classSVF_1_1MemSSA.html#a9741a8d0540ba4c27cb667590d246197">getDT</a>(*fun);</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a827d09974dc7bf0849f96823cc2fee89">DomTreeNode</a> *dtNode = dt->getNode(const_cast<BasicBlock*>(&bb)))</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>  {</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>  <span class="keywordflow">for</span> (DomTreeNode::iterator DI = dtNode->begin(), DE = dtNode->end();</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  DI != DE; ++DI)</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_1MemSSA.html#a271c20725d49dd65b95c062938ffde4c">SSARenameBB</a>(*((*DI)->getBlock()));</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  <span class="comment">// for each r = chi(..), and r = phi(..)</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  <span class="comment">// pop ver stack(r)</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keywordflow">while</span> (!memRegs.empty())</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* mr = memRegs.back();</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  memRegs.pop_back();</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <a class="code" href="classSVF_1_1MemSSA.html#ae4c7b17d8da8278dca362af79f9f268d">mr2VerStackMap</a>[mr].pop_back();</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  }</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> }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a381a35d48ce2f8e348ddbbb9ce526ca8"> 368</a></span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* <a class="code" href="classSVF_1_1MemSSA.html#a381a35d48ce2f8e348ddbbb9ce526ca8">MemSSA::newSSAName</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* mr, <a class="code" href="classSVF_1_1MSSADEF.html">MSSADEF</a>* def)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 != <a class="code" href="classSVF_1_1MemSSA.html#a22e2dd0fc78877bdedd207a40540a634">mr2CounterMap</a>.count(mr)</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  && <span class="stringliteral">"did not find initial version in map? "</span>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0 != <a class="code" href="classSVF_1_1MemSSA.html#ae4c7b17d8da8278dca362af79f9f268d">mr2VerStackMap</a>.count(mr)</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  && <span class="stringliteral">"did not find initial stack in map? "</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>  <a class="code" href="namespaceSVF.html#a39df0130e37e97db2ff7620bbb2a72f5">MRVERSION</a> version = <a class="code" href="classSVF_1_1MemSSA.html#a22e2dd0fc78877bdedd207a40540a634">mr2CounterMap</a>[mr];</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  <a class="code" href="classSVF_1_1MemSSA.html#a22e2dd0fc78877bdedd207a40540a634">mr2CounterMap</a>[mr] = version + 1;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>  <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* mrVer = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>(mr, version, def);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <a class="code" href="classSVF_1_1MemSSA.html#ae4c7b17d8da8278dca362af79f9f268d">mr2VerStackMap</a>[mr].push_back(mrVer);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">return</span> mrVer;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span> }</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a3d6096aeb4155444b532b02bb8559113"> 385</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a3d6096aeb4155444b532b02bb8559113">MemSSA::destroy</a>()</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> </div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keywordflow">for</span> (LoadToMUSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#a5cf94edea3a5c35b3c1d9c6ae4b5f9d6">load2MuSetMap</a>.begin(), eiter =</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <a class="code" href="classSVF_1_1MemSSA.html#a5cf94edea3a5c35b3c1d9c6ae4b5f9d6">load2MuSetMap</a>.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">for</span> (MUSet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>  }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> </div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>  <span class="keywordflow">for</span> (StoreToChiSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#a73d7465cf166d9ffa9d234d15edb375a">store2ChiSetMap</a>.begin(), eiter =</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <a class="code" href="classSVF_1_1MemSSA.html#a73d7465cf166d9ffa9d234d15edb375a">store2ChiSetMap</a>.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  {</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">for</span> (CHISet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>  {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> </div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keywordflow">for</span> (CallSiteToMUSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#aba54e534d18f68fbb97b26befd06ba1a">callsiteToMuSetMap</a>.begin(),</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  eiter = <a class="code" href="classSVF_1_1MemSSA.html#aba54e534d18f68fbb97b26befd06ba1a">callsiteToMuSetMap</a>.end(); iter != eiter; ++iter)</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">for</span> (MUSet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  iter->second.end(); it != eit; ++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>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>  }</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>  }</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> </div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <span class="keywordflow">for</span> (CallSiteToCHISetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#a1be5a6776c8785f26573b597881c8195">callsiteToChiSetMap</a>.begin(),</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  eiter = <a class="code" href="classSVF_1_1MemSSA.html#a1be5a6776c8785f26573b597881c8195">callsiteToChiSetMap</a>.end(); iter != eiter; ++iter)</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> (CHISet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>  {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>  <span class="keyword">delete</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="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">for</span> (FunToEntryChiSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#a59314f6ce17919574d687a08a38b55ec">funToEntryChiSetMap</a>.begin(),</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  eiter = <a class="code" href="classSVF_1_1MemSSA.html#a59314f6ce17919574d687a08a38b55ec">funToEntryChiSetMap</a>.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  <span class="keywordflow">for</span> (CHISet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  {</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>  }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>  }</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span> </div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  <span class="keywordflow">for</span> (FunToReturnMuSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#abae2396bf8a37a22be9365d368fe455c">funToReturnMuSetMap</a>.begin(),</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  eiter = <a class="code" href="classSVF_1_1MemSSA.html#abae2396bf8a37a22be9365d368fe455c">funToReturnMuSetMap</a>.end(); iter != eiter; ++iter)</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">for</span> (MUSet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  {</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  }</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>  }</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>  <span class="keywordflow">for</span> (BBToPhiSetMap::iterator iter = <a class="code" href="classSVF_1_1MemSSA.html#a190061a6f7423461f4292fc326330f23">bb2PhiSetMap</a>.begin(), eiter =</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>  <a class="code" href="classSVF_1_1MemSSA.html#a190061a6f7423461f4292fc326330f23">bb2PhiSetMap</a>.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  {</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  <span class="keywordflow">for</span> (PHISet::iterator it = iter->second.begin(), eit =</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  iter->second.end(); it != eit; ++it)</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>  {</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>  <span class="keyword">delete</span> *it;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span> </div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  <span class="keyword">delete</span> <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>;</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>  <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span> }</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span> </div><div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a89c40c8fad70f3aead6531261e5a3cc3"> 468</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a89c40c8fad70f3aead6531261e5a3cc3">MemSSA::performStat</a>()</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>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">printStat</a>())</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <a class="code" href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">stat</a>-><a class="code" href="classSVF_1_1MemSSAStat.html#abf3825b642cf115259ea21e5f7e28878">performStat</a>();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span> }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div><div class="line"><a name="l00477"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#aafc83f7f22ebf3b3683607440c488bef"> 477</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#aafc83f7f22ebf3b3683607440c488bef">MemSSA::getLoadMuNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span> <span class="keyword"></span>{</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  LoadToMUSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#a5cf94edea3a5c35b3c1d9c6ae4b5f9d6">load2MuSetMap</a>.begin();</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  LoadToMUSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#a5cf94edea3a5c35b3c1d9c6ae4b5f9d6">load2MuSetMap</a>.end();</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordflow">for</span> (; it != eit; it++)</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  {</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#a81bba824495a882b49e687683954b112">MUSet</a> & muSet = it->second;</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  num+= muSet.size();</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <span class="keywordflow">return</span> num;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span> }</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span> </div><div class="line"><a name="l00494"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#aa8c45b455e6fc60cab955534c3e50bfa"> 494</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#aa8c45b455e6fc60cab955534c3e50bfa">MemSSA::getStoreChiNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> <span class="keyword"></span>{</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>  StoreToChiSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#a73d7465cf166d9ffa9d234d15edb375a">store2ChiSetMap</a>.begin();</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>  StoreToChiSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#a73d7465cf166d9ffa9d234d15edb375a">store2ChiSetMap</a>.end();</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">for</span> (; it != eit; it++)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#af9cf084e3070456d8cca491e1391b0c4">CHISet</a>& chiSet = it->second;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  num += chiSet.size();</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>  }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>  <span class="keywordflow">return</span> num;</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="l00507"></a><span class="lineno"> 507</span> </div><div class="line"><a name="l00511"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a15272a4ed019d1c323d1826c1bedb70f"> 511</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#a15272a4ed019d1c323d1826c1bedb70f">MemSSA::getFunEntryChiNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span> <span class="keyword"></span>{</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  FunToEntryChiSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#a59314f6ce17919574d687a08a38b55ec">funToEntryChiSetMap</a>.begin();</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  FunToEntryChiSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#a59314f6ce17919574d687a08a38b55ec">funToEntryChiSetMap</a>.end();</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">for</span> (; it != eit; it++)</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>  {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#af9cf084e3070456d8cca491e1391b0c4">CHISet</a>& chiSet = it->second;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  num += chiSet.size();</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>  <span class="keywordflow">return</span> num;</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span> }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span> </div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div><div class="line"><a name="l00528"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a67175188232e08f5c5374f92ff61810f"> 528</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#a67175188232e08f5c5374f92ff61810f">MemSSA::getFunRetMuNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span> <span class="keyword"></span>{</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>  FunToReturnMuSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#abae2396bf8a37a22be9365d368fe455c">funToReturnMuSetMap</a>.begin();</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>  FunToReturnMuSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#abae2396bf8a37a22be9365d368fe455c">funToReturnMuSetMap</a>.end();</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>  <span class="keywordflow">for</span> (; it != eit; it++)</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#a81bba824495a882b49e687683954b112">MUSet</a> & muSet = it->second;</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>  num+= muSet.size();</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>  }</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>  <span class="keywordflow">return</span> num;</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span> }</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span> </div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span> </div><div class="line"><a name="l00545"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a9e8c5b85957485635d0f72c2f48bb8b5"> 545</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#a9e8c5b85957485635d0f72c2f48bb8b5">MemSSA::getCallSiteMuNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="keyword"></span>{</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  CallSiteToMUSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#aba54e534d18f68fbb97b26befd06ba1a">callsiteToMuSetMap</a>.begin();</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>  CallSiteToMUSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#aba54e534d18f68fbb97b26befd06ba1a">callsiteToMuSetMap</a>.end();</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  <span class="keywordflow">for</span> (; it != eit; it++)</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>  {</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#a81bba824495a882b49e687683954b112">MUSet</a> & muSet = it->second;</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  num+= muSet.size();</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>  <span class="keywordflow">return</span> num;</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> }</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span> </div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div><div class="line"><a name="l00562"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a2c65795ca63a53c833f5ac17a752b6dc"> 562</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#a2c65795ca63a53c833f5ac17a752b6dc">MemSSA::getCallSiteChiNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span> <span class="keyword"></span>{</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  CallSiteToCHISetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#a1be5a6776c8785f26573b597881c8195">callsiteToChiSetMap</a>.begin();</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  CallSiteToCHISetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#a1be5a6776c8785f26573b597881c8195">callsiteToChiSetMap</a>.end();</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  <span class="keywordflow">for</span> (; it != eit; it++)</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  {</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#af9cf084e3070456d8cca491e1391b0c4">CHISet</a> & chiSet = it->second;</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  num+= chiSet.size();</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  }</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordflow">return</span> num;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span> }</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span> </div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> </div><div class="line"><a name="l00579"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a9bb6512999cbf9c7c03153be77c8af20"> 579</a></span> <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1MemSSA.html#a9bb6512999cbf9c7c03153be77c8af20">MemSSA::getBBPhiNum</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span> <span class="keyword"></span>{</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> num = 0;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  BBToPhiSetMap::const_iterator it = <a class="code" href="classSVF_1_1MemSSA.html#a190061a6f7423461f4292fc326330f23">bb2PhiSetMap</a>.begin();</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  BBToPhiSetMap::const_iterator eit = <a class="code" href="classSVF_1_1MemSSA.html#a190061a6f7423461f4292fc326330f23">bb2PhiSetMap</a>.end();</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="keywordflow">for</span> (; it != eit; it++)</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  {</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemSSA.html#a8a5d3597f3dba9744e170cc8c32bf25f">PHISet</a> & phiSet = it->second;</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  num+= phiSet.size();</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="keywordflow">return</span> num;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span> }</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00595"></a><span class="lineno"><a class="line" href="classSVF_1_1MemSSA.html#a9f9ac433d9c9348ceb5be8893d814ebd"> 595</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1MemSSA.html#a9f9ac433d9c9348ceb5be8893d814ebd">MemSSA::dumpMSSA</a>(<a class="code" href="namespaceSVF.html#a424cc053c29ad7303699c529d1a2cc71">raw_ostream</a>& Out)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span> {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>  <a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* pag = <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>();</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span> </div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#a709371b13dcf500277f8bc275bdb23c7">SVFModule::iterator</a> fit = <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#ad8b71cebf46deaf60e2cd4f6d6bb9433">getModule</a>()-><a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), efit = <a class="code" href="classSVF_1_1MemSSA.html#a468e1481926df6865678b7232bb79bf3">pta</a>-><a class="code" href="classSVF_1_1PointerAnalysis.html#ad8b71cebf46deaf60e2cd4f6d6bb9433">getModule</a>()-><a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>();</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  fit != efit; ++fit)</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = *fit;</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#a4ac0e6b77fc9ccc18b269268b3cd046d">Options::MSSAFun</a>!=<span class="stringliteral">""</span> && <a class="code" href="classSVF_1_1Options.html#a4ac0e6b77fc9ccc18b269268b3cd046d">Options::MSSAFun</a>!=fun-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>())</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span> </div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>  Out << <span class="stringliteral">"==========FUNCTION: "</span> << fun-><a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>() << <span class="stringliteral">"==========\n"</span>;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="comment">// dump function entry chi nodes</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemSSA.html#aec75259d035e3b5589e6fcbbcdfe4b2c">hasFuncEntryChi</a>(fun))</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>  {</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <a class="code" href="classSVF_1_1MemSSA.html#af9cf084e3070456d8cca491e1391b0c4">CHISet</a> & entry_chis = <a class="code" href="classSVF_1_1MemSSA.html#a10743fe9c116ee624387c0473815b800">getFuncEntryChiSet</a>(fun);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  <span class="keywordflow">for</span> (CHISet::iterator chi_it = entry_chis.begin(); chi_it != entry_chis.end(); chi_it++)</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>  {</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>  (*chi_it)->dump();</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>  }</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span> </div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>  <span class="keywordflow">for</span> (Function::iterator bit = fun-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->begin(), ebit = fun-><a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()->end();</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>  bit != ebit; ++bit)</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>  <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>& bb = *bit;</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keywordflow">if</span> (bb.hasName())</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  Out << bb.getName() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  <a class="code" href="classSVF_1_1MemSSA.html#a8a5d3597f3dba9744e170cc8c32bf25f">PHISet</a>& phiSet = <a class="code" href="classSVF_1_1MemSSA.html#a964f3fe39ece9a7b8b2033428b75a274">getPHISet</a>(&bb);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">for</span>(PHISet::iterator pi = phiSet.begin(), epi = phiSet.end(); pi !=epi; ++pi)</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>  {</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>  (*pi)->dump();</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> </div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>  <span class="keywordtype">bool</span> last_is_chi = <span class="keyword">false</span>;</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>  <span class="keywordflow">for</span> (BasicBlock::iterator it = bb.begin(), eit = bb.end();</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>  it != eit; ++it)</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>  {</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>  <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>& inst = *it;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  <span class="keywordtype">bool</span> isAppCall = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8d8216a92140d982303f83ea424ddc91">isNonInstricCallSite</a>(&inst) && !<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(&inst);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keywordflow">if</span> (isAppCall || <a class="code" href="namespaceSVF_1_1SVFUtil.html#a93ac673b885633849fa484938405ca75">isHeapAllocExtCall</a>(&inst))</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>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs = pag-><a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-><a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(&inst);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#af5e356e82c3f93b65bd89908e0f465dc">hasMU</a>(cs))</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  {</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  <span class="keywordflow">if</span> (!last_is_chi)</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>  Out << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>  }</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>  <span class="keywordflow">for</span> (MUSet::iterator mit = <a class="code" href="classSVF_1_1MemSSA.html#af4d11a0c7da0ddd7dff8d75a00279847">getMUSet</a>(cs).begin(), emit = <a class="code" href="classSVF_1_1MemSSA.html#af4d11a0c7da0ddd7dff8d75a00279847">getMUSet</a>(cs).end();</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>  mit != emit; ++mit)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>  {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  (*mit)-><a class="code" href="classSVF_1_1ICFGNode.html#a3c193da05d6dee7313a141ae3ab43e97">dump</a>();</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  }</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>  }</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span> </div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  Out << inst << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span> </div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1MemSSA.html#abfb338ce36ad46a9654d50dd6e2b07f1">hasCHI</a>(cs))</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  {</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  <span class="keywordflow">for</span> (CHISet::iterator cit = <a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(cs).begin(), ecit = <a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(cs).end();</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  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>  (*cit)->dump();</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>  }</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  Out << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  last_is_chi = <span class="keyword">true</span>;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  }</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  last_is_chi = <span class="keyword">false</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>  <span class="keywordflow">else</span></div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>  {</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="keywordtype">bool</span> dump_preamble = <span class="keyword">false</span>;</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  <a class="code" href="classSVF_1_1MemSSA.html#a445d282890dbd2fb51e903255af1cc3e">SVFStmtList</a>& pagEdgeList = <a class="code" href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">mrGen</a>-><a class="code" href="classSVF_1_1MRGenerator.html#acc78a116ca0be01a359d1313b2ae603c">getPAGEdgesFromInst</a>(&inst);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">for</span>(SVFStmtList::const_iterator bit = pagEdgeList.begin(), ebit= pagEdgeList.end();</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  bit!=ebit; ++bit)</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  {</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* load = SVFUtil::dyn_cast<LoadStmt>(edge))</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  {</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <a class="code" href="classSVF_1_1MemSSA.html#a81bba824495a882b49e687683954b112">MUSet</a>& muSet = <a class="code" href="classSVF_1_1MemSSA.html#af4d11a0c7da0ddd7dff8d75a00279847">getMUSet</a>(load);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keywordflow">for</span>(MUSet::iterator it = muSet.begin(), eit = muSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  {</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  <span class="keywordflow">if</span> (!dump_preamble && !last_is_chi)</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  {</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  Out << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>  dump_preamble = <span class="keyword">true</span>;</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  }</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  (*it)->dump();</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  }</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  }</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  }</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  Out << inst << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span> </div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordtype">bool</span> has_chi = <span class="keyword">false</span>;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <span class="keywordflow">for</span>(SVFStmtList::const_iterator bit = pagEdgeList.begin(), ebit= pagEdgeList.end();</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  bit!=ebit; ++bit)</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>  {</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *bit;</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* store = SVFUtil::dyn_cast<StoreStmt>(edge))</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_1MemSSA.html#af9cf084e3070456d8cca491e1391b0c4">CHISet</a>& chiSet = <a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(store);</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordflow">for</span>(CHISet::iterator it = chiSet.begin(), eit = chiSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>  {</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>  has_chi = <span class="keyword">true</span>;</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  (*it)->dump();</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>  }</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>  }</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>  }</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>  <span class="keywordflow">if</span> (has_chi)</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>  {</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>  Out << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  last_is_chi = <span class="keyword">true</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">else</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  last_is_chi = <span class="keyword">false</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="l00715"></a><span class="lineno"> 715</span>  }</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span> </div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>  <span class="comment">// dump return mu nodes</span></div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1MemSSA.html#a3400d9a921672b3872656acecc3eac9f">hasReturnMu</a>(fun))</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  {</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  <a class="code" href="classSVF_1_1MemSSA.html#a81bba824495a882b49e687683954b112">MUSet</a> & return_mus = <a class="code" href="classSVF_1_1MemSSA.html#af8c38a7ff8da4206f19c038024606d93">getReturnMuSet</a>(fun);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  <span class="keywordflow">for</span> (MUSet::iterator mu_it = return_mus.begin(); mu_it != return_mus.end(); mu_it++)</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  {</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  (*mu_it)->dump();</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  }</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>  }</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>  }</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span> }</div><div class="ttc" id="classSVF_1_1MRVer_html"><div class="ttname"><a href="classSVF_1_1MRVer.html">SVF::MRVer</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00043">MSSAMuChi.h:43</a></div></div>
|
|
70
|
+
<div class="ttc" id="classSVF_1_1MemSSA_html_a2e656a50f8964fc3e99d1d436de64418"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">SVF::MemSSA::getCHISet</a></div><div class="ttdeci">CHISet & getCHISet(const StoreStmt *st)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00392">MemSSA.h:392</a></div></div>
|
|
70
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>
|
|
71
72
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a8868281e5f5b5f3a83acf8568971ad40"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a8868281e5f5b5f3a83acf8568971ad40">SVF::MRGenerator::hasModMRSet</a></div><div class="ttdeci">bool hasModMRSet(const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00455">MemRegion.h:455</a></div></div>
|
|
72
73
|
<div class="ttc" id="classSVF_1_1IntraDisjointMRG_html"><div class="ttname"><a href="classSVF_1_1IntraDisjointMRG.html">SVF::IntraDisjointMRG</a></div><div class="ttdef"><b>Definition:</b> <a href="MemPartition_8h_source.html#l00073">MemPartition.h:73</a></div></div>
|
|
@@ -76,7 +77,6 @@ $(function() {
|
|
|
76
77
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a37dca8a7d155de4870358146d219b5e5"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a37dca8a7d155de4870358146d219b5e5">SVF::MemSSA::timeOfGeneratingMemRegions</a></div><div class="ttdeci">static double timeOfGeneratingMemRegions</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00101">MemSSA.h:101</a></div></div>
|
|
77
78
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a36e9cf7394c3ece8a5f2f9bfc512956a"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a36e9cf7394c3ece8a5f2f9bfc512956a">SVF::MemSSA::getDF</a></div><div class="ttdeci">DominanceFrontier * getDF(const SVFFunction &)</div><div class="ttdoc">Get/set methods for dominace frontier/tree. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00292">MemSSA.h:292</a></div></div>
|
|
78
79
|
<div class="ttc" id="classSVF_1_1MemSSA_html_acf840b71b67cabe831f01f2d358f27fa"><div class="ttname"><a href="classSVF_1_1MemSSA.html#acf840b71b67cabe831f01f2d358f27fa">SVF::MemSSA::usedRegs</a></div><div class="ttdeci">MRSet usedRegs</div><div class="ttdoc">The following three set are used for prune SSA phi insertion. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00146">MemSSA.h:146</a></div></div>
|
|
79
|
-
<div class="ttc" id="classSVF_1_1MemSSA_html_a45f8ece590b091bd5ebf87f820f28f44"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a45f8ece590b091bd5ebf87f820f28f44">SVF::MemSSA::PAGEdgeList</a></div><div class="ttdeci">SVFIR::PAGEdgeList PAGEdgeList</div><div class="ttdoc">SVFIR edge list. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00097">MemSSA.h:97</a></div></div>
|
|
80
80
|
<div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
|
|
81
81
|
<div class="ttc" id="namespaceSVF_html_a424cc053c29ad7303699c529d1a2cc71"><div class="ttname"><a href="namespaceSVF.html#a424cc053c29ad7303699c529d1a2cc71">SVF::raw_ostream</a></div><div class="ttdeci">llvm::raw_ostream raw_ostream</div><div class="ttdoc">LLVM outputs. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00099">BasicTypes.h:99</a></div></div>
|
|
82
82
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a16114eb55775f6ee812c1648dcaede0c"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a16114eb55775f6ee812c1648dcaede0c">SVF::MemSSA::SSARename</a></div><div class="ttdeci">virtual void SSARename(const SVFFunction &fun)</div><div class="ttdoc">SSA rename for a function. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00266">MemSSA.cpp:266</a></div></div>
|
|
@@ -85,24 +85,23 @@ $(function() {
|
|
|
85
85
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a9741a8d0540ba4c27cb667590d246197"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a9741a8d0540ba4c27cb667590d246197">SVF::MemSSA::getDT</a></div><div class="ttdeci">DominatorTree * getDT(const SVFFunction &)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00296">MemSSA.h:296</a></div></div>
|
|
86
86
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a3d6096aeb4155444b532b02bb8559113"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a3d6096aeb4155444b532b02bb8559113">SVF::MemSSA::destroy</a></div><div class="ttdeci">void destroy()</div><div class="ttdoc">Release the memory. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00385">MemSSA.cpp:385</a></div></div>
|
|
87
87
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
88
|
+
<div class="ttc" id="classSVF_1_1MRGenerator_html_a364ad1e34d09a92cdc0cfe530c84880f"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a364ad1e34d09a92cdc0cfe530c84880f">SVF::MRGenerator::getStoreMRSet</a></div><div class="ttdeci">MRSet & getStoreMRSet(const StoreStmt *store)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00447">MemRegion.h:447</a></div></div>
|
|
88
89
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_ae40e2e043b04ede541688ce61048fb4e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ae40e2e043b04ede541688ce61048fb4e">SVF::SVFUtil::getBBPredecessorPos</a></div><div class="ttdeci">u32_t getBBPredecessorPos(const BasicBlock *BB, const BasicBlock *Pred)</div><div class="ttdoc">Get basic block predecessor positin. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00316">LLVMUtil.cpp:316</a></div></div>
|
|
89
90
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a9f9ac433d9c9348ceb5be8893d814ebd"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a9f9ac433d9c9348ceb5be8893d814ebd">SVF::MemSSA::dumpMSSA</a></div><div class="ttdeci">void dumpMSSA(raw_ostream &Out=SVFUtil::outs())</div><div class="ttdoc">Print Memory SSA. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00595">MemSSA.cpp:595</a></div></div>
|
|
90
91
|
<div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
|
|
91
92
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a4fc930040ec54eb60629da18fb6a4d04"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a4fc930040ec54eb60629da18fb6a4d04">SVF::MemSSA::stat</a></div><div class="ttdeci">MemSSAStat * stat</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00119">MemSSA.h:119</a></div></div>
|
|
92
93
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_aeed8bcf54d2a72c640e464e256249630"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#aeed8bcf54d2a72c640e464e256249630">SVF::MRGenerator::hasRefMRSet</a></div><div class="ttdeci">bool hasRefMRSet(const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00451">MemRegion.h:451</a></div></div>
|
|
93
94
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a964f3fe39ece9a7b8b2033428b75a274"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a964f3fe39ece9a7b8b2033428b75a274">SVF::MemSSA::getPHISet</a></div><div class="ttdeci">PHISet & getPHISet(const BasicBlock *bb)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00404">MemSSA.h:404</a></div></div>
|
|
94
|
-
<div class="ttc" id="classSVF_1_1MemSSA_html_aea0fc1d2e5407f86e0211d8e253fa24e"><div class="ttname"><a href="classSVF_1_1MemSSA.html#aea0fc1d2e5407f86e0211d8e253fa24e">SVF::MemSSA::getMUSet</a></div><div class="ttdeci">MUSet & getMUSet(const LoadPE *ld)</div><div class="ttdoc">Get methods of mu/chi/phi. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00388">MemSSA.h:388</a></div></div>
|
|
95
|
-
<div class="ttc" id="classSVF_1_1MemSSA_html_a9f4c84dbffb28eea74a0bc03fda9fc51"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a9f4c84dbffb28eea74a0bc03fda9fc51">SVF::MemSSA::AddLoadMU</a></div><div class="ttdeci">void AddLoadMU(const BasicBlock *bb, const LoadPE *load, const MRSet &mrSet)</div><div class="ttdoc">Add methods for mus/chis/phis. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00183">MemSSA.h:183</a></div></div>
|
|
96
|
-
<div class="ttc" id="classSVF_1_1StorePE_html"><div class="ttname"><a href="classSVF_1_1StorePE.html">SVF::StorePE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00591">SVFStatements.h:591</a></div></div>
|
|
97
95
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a4880571f57542afc50da506dfe273183"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a4880571f57542afc50da506dfe273183">SVF::PointerAnalysis::printStat</a></div><div class="ttdeci">bool printStat()</div><div class="ttdoc">Whether print statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00378">PointerAnalysis.h:378</a></div></div>
|
|
98
96
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a6bd57451370f5f4c92ce212be4cddd15"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a6bd57451370f5f4c92ce212be4cddd15">SVF::MemSSA::MemSSA</a></div><div class="ttdeci">MemSSA(BVDataPTAImpl *p, bool ptrOnlyMSSA)</div><div class="ttdoc">Constructor. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00048">MemSSA.cpp:48</a></div></div>
|
|
99
97
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a190061a6f7423461f4292fc326330f23"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a190061a6f7423461f4292fc326330f23">SVF::MemSSA::bb2PhiSetMap</a></div><div class="ttdeci">BBToPhiSetMap bb2PhiSetMap</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00134">MemSSA.h:134</a></div></div>
|
|
100
98
|
<div class="ttc" id="classSVF_1_1SVFValue_html_adc15c1f7a77158142156fba7524e89c9"><div class="ttname"><a href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">SVF::SVFValue::getName</a></div><div class="ttdeci">const llvm::StringRef getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00231">SVFBasicTypes.h:231</a></div></div>
|
|
101
99
|
<div class="ttc" id="classSVF_1_1Options_html_a4ac0e6b77fc9ccc18b269268b3cd046d"><div class="ttname"><a href="classSVF_1_1Options.html#a4ac0e6b77fc9ccc18b269268b3cd046d">SVF::Options::MSSAFun</a></div><div class="ttdeci">static const llvm::cl::opt< std ::string > MSSAFun</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00152">Options.h:152</a></div></div>
|
|
102
|
-
<div class="ttc" id="
|
|
100
|
+
<div class="ttc" id="classSVF_1_1MemSSA_html_adb8009633b4e3b69609790fa068b3f42"><div class="ttname"><a href="classSVF_1_1MemSSA.html#adb8009633b4e3b69609790fa068b3f42">SVF::MemSSA::AddLoadMU</a></div><div class="ttdeci">void AddLoadMU(const BasicBlock *bb, const LoadStmt *load, const MRSet &mrSet)</div><div class="ttdoc">Add methods for mus/chis/phis. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00183">MemSSA.h:183</a></div></div>
|
|
103
101
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a1aa05f81640286a796db0ded4e10c7ac"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a1aa05f81640286a796db0ded4e10c7ac">SVF::MemSSA::AddCallSiteMU</a></div><div class="ttdeci">void AddCallSiteMU(const CallBlockNode *cs, const MRSet &mrSet)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00193">MemSSA.h:193</a></div></div>
|
|
104
102
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac23f71c1307cda9cba44acc40059f0a3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac23f71c1307cda9cba44acc40059f0a3">SVF::PointerAnalysis::getAnalysisTy</a></div><div class="ttdeci">PTATY getAnalysisTy() const</div><div class="ttdoc">Type of pointer analysis. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00192">PointerAnalysis.h:192</a></div></div>
|
|
105
103
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a630be375832b1477989af85dce6760f3"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a630be375832b1477989af85dce6760f3">SVF::MemSSA::RenamePhiRes</a></div><div class="ttdeci">void RenamePhiRes(const PHISet &phiSet, MRVector &memRegs)</div><div class="ttdoc">Rename result (LHS) of phis. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00267">MemSSA.h:267</a></div></div>
|
|
104
|
+
<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>
|
|
106
105
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a4d4f7039c2972e671dc15b8c75abad14"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a4d4f7039c2972e671dc15b8c75abad14">SVF::MemSSA::BBToMRSetMap</a></div><div class="ttdeci">Map< const BasicBlock *, MRSet > BBToMRSetMap</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00088">MemSSA.h:88</a></div></div>
|
|
107
106
|
<div class="ttc" id="namespaceSVF_html_ab44d20f806be99699895260b14a942d7"><div class="ttname"><a href="namespaceSVF.html#ab44d20f806be99699895260b14a942d7">SVF::DominanceFrontier</a></div><div class="ttdeci">llvm::DominanceFrontier DominanceFrontier</div><div class="ttdoc">LLVM Dominators. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00196">BasicTypes.h:196</a></div></div>
|
|
108
107
|
<div class="ttc" id="namespaceSVF_html_a3436a988bf80c021cd8022fb445b66d5"><div class="ttname"><a href="namespaceSVF.html#a3436a988bf80c021cd8022fb445b66d5">SVF::succ_const_iterator</a></div><div class="ttdeci">llvm::succ_const_iterator succ_const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00209">BasicTypes.h:209</a></div></div>
|
|
@@ -115,7 +114,9 @@ $(function() {
|
|
|
115
114
|
<div class="ttc" id="classSVF_1_1MemSSA_html_af9cf084e3070456d8cca491e1391b0c4"><div class="ttname"><a href="classSVF_1_1MemSSA.html#af9cf084e3070456d8cca491e1391b0c4">SVF::MemSSA::CHISet</a></div><div class="ttdeci">Set< CHI * > CHISet</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00065">MemSSA.h:65</a></div></div>
|
|
116
115
|
<div class="ttc" id="classSVF_1_1RetMU_html"><div class="ttname"><a href="classSVF_1_1RetMU.html">SVF::RetMU</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00277">MSSAMuChi.h:277</a></div></div>
|
|
117
116
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a22e2dd0fc78877bdedd207a40540a634"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a22e2dd0fc78877bdedd207a40540a634">SVF::MemSSA::mr2CounterMap</a></div><div class="ttdeci">MemRegToCounterMap mr2CounterMap</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00140">MemSSA.h:140</a></div></div>
|
|
117
|
+
<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>
|
|
118
118
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a41b153f2f8f3a27be63750e73a290569"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a41b153f2f8f3a27be63750e73a290569">SVF::MemSSA::getPAG</a></div><div class="ttdeci">SVFIR * getPAG()</div><div class="ttdoc">Return SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00073">MemSSA.cpp:73</a></div></div>
|
|
119
|
+
<div class="ttc" id="classSVF_1_1MemSSA_html_af4d11a0c7da0ddd7dff8d75a00279847"><div class="ttname"><a href="classSVF_1_1MemSSA.html#af4d11a0c7da0ddd7dff8d75a00279847">SVF::MemSSA::getMUSet</a></div><div class="ttdeci">MUSet & getMUSet(const LoadStmt *ld)</div><div class="ttdoc">Get methods of mu/chi/phi. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00388">MemSSA.h:388</a></div></div>
|
|
119
120
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a381a35d48ce2f8e348ddbbb9ce526ca8"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a381a35d48ce2f8e348ddbbb9ce526ca8">SVF::MemSSA::newSSAName</a></div><div class="ttdeci">MRVer * newSSAName(const MemRegion *mr, MSSADEF *def)</div><div class="ttdoc">Get a new SSA name of a memory region. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00368">MemSSA.cpp:368</a></div></div>
|
|
120
121
|
<div class="ttc" id="classSVF_1_1MemSSA_html_ae56d1878046c119d1857727ca3609d74"><div class="ttname"><a href="classSVF_1_1MemSSA.html#ae56d1878046c119d1857727ca3609d74">SVF::MemSSA::buildMemSSA</a></div><div class="ttdeci">virtual void buildMemSSA(const SVFFunction &fun, DominanceFrontier *, DominatorTree *)</div><div class="ttdoc">We start from here. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00092">MemSSA.cpp:92</a></div></div>
|
|
121
122
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a0b182ac680cce0547dbe7714c870ca85adb3d4cbd8c38c1c498bc51198626a790"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85adb3d4cbd8c38c1c498bc51198626a790">SVF::PointerAnalysis::Default_PTA</a></div><div class="ttdoc">default pta without any analysis </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00094">PointerAnalysis.h:94</a></div></div>
|
|
@@ -133,6 +134,7 @@ $(function() {
|
|
|
133
134
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a81bba824495a882b49e687683954b112"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a81bba824495a882b49e687683954b112">SVF::MemSSA::MUSet</a></div><div class="ttdeci">Set< MU * > MUSet</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00064">MemSSA.h:64</a></div></div>
|
|
134
135
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a953a56a65ee36fd1c78b29179cd3f33a"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a953a56a65ee36fd1c78b29179cd3f33a">SVF::MemSSA::RETMU</a></div><div class="ttdeci">RetMU< Condition > RETMU</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00054">MemSSA.h:54</a></div></div>
|
|
135
136
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a66e693af7b37e4e58b4834898d6a34fa"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a66e693af7b37e4e58b4834898d6a34fa">SVF::MemSSA::BBList</a></div><div class="ttdeci">std::vector< const BasicBlock * > BBList</div><div class="ttdoc">For phi insertion. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00087">MemSSA.h:87</a></div></div>
|
|
137
|
+
<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#l00633">SVFStatements.h:633</a></div></div>
|
|
136
138
|
<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>
|
|
137
139
|
<div class="ttc" id="classSVF_1_1MSSADEF_html_a343eb4c9515dfbbbdadaacf5500e5f05"><div class="ttname"><a href="classSVF_1_1MSSADEF.html#a343eb4c9515dfbbbdadaacf5500e5f05">SVF::MSSADEF::setResVer</a></div><div class="ttdeci">void setResVer(MRVer *v)</div><div class="ttdoc">Set result operand ver. </div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00366">MSSAMuChi.h:366</a></div></div>
|
|
138
140
|
<div class="ttc" id="classSVF_1_1MemSSA_html_aec75259d035e3b5589e6fcbbcdfe4b2c"><div class="ttname"><a href="classSVF_1_1MemSSA.html#aec75259d035e3b5589e6fcbbcdfe4b2c">SVF::MemSSA::hasFuncEntryChi</a></div><div class="ttdeci">bool hasFuncEntryChi(const SVFFunction *fun) const</div><div class="ttdoc">Has function entry chi or return mu. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00367">MemSSA.h:367</a></div></div>
|
|
@@ -140,7 +142,6 @@ $(function() {
|
|
|
140
142
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a7ede01d58bb2490ded5895ca5bd45948"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a7ede01d58bb2490ded5895ca5bd45948">SVF::MRGenerator::getCallSiteRefMRSet</a></div><div class="ttdeci">MRSet & getCallSiteRefMRSet(const CallBlockNode *cs)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00459">MemRegion.h:459</a></div></div>
|
|
141
143
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a7a7e06e90a215086696effb5f5537baf"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a7a7e06e90a215086696effb5f5537baf">SVF::SVFUtil::functionDoesNotRet</a></div><div class="ttdeci">bool functionDoesNotRet(const Function *fun)</div><div class="ttdoc">Return true if the function has a return instruction reachable from function entry. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00088">LLVMUtil.cpp:88</a></div></div>
|
|
142
144
|
<div class="ttc" id="classSVF_1_1Options_html_a74b821736a04f89adb79d6fd5369cdc3"><div class="ttname"><a href="classSVF_1_1Options.html#a74b821736a04f89adb79d6fd5369cdc3">SVF::Options::MemPar</a></div><div class="ttdeci">static const llvm::cl::opt< MemSSA::MemPartition > MemPar</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00154">Options.h:154</a></div></div>
|
|
143
|
-
<div class="ttc" id="classSVF_1_1MRGenerator_html_a8832a53d8f6a5eb0a07551ca19c5513d"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a8832a53d8f6a5eb0a07551ca19c5513d">SVF::MRGenerator::hasPAGEdgeList</a></div><div class="ttdeci">bool hasPAGEdgeList(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>
|
|
144
145
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a4d2418b7df74f23d8fd328f66e29f198"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a4d2418b7df74f23d8fd328f66e29f198">SVF::MemSSA::timeOfCreateMUCHI</a></div><div class="ttdeci">static double timeOfCreateMUCHI</div><div class="ttdoc">Time for generating mu/chi for load/store/calls. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00102">MemSSA.h:102</a></div></div>
|
|
145
146
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a15272a4ed019d1c323d1826c1bedb70f"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a15272a4ed019d1c323d1826c1bedb70f">SVF::MemSSA::getFunEntryChiNum</a></div><div class="ttdeci">u32_t getFunEntryChiNum() const</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00511">MemSSA.cpp:511</a></div></div>
|
|
146
147
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a7c3fda6f082231350524c2d7c16f067e"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a7c3fda6f082231350524c2d7c16f067e">SVF::MemSSA::MRVector</a></div><div class="ttdeci">std::vector< const MemRegion * > MRVector</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00070">MemSSA.h:70</a></div></div>
|
|
@@ -161,8 +162,6 @@ $(function() {
|
|
|
161
162
|
<div class="ttc" id="classSVF_1_1DistinctMRG_html"><div class="ttname"><a href="classSVF_1_1DistinctMRG.html">SVF::DistinctMRG</a></div><div class="ttdef"><b>Definition:</b> <a href="MemPartition_8h_source.html#l00047">MemPartition.h:47</a></div></div>
|
|
162
163
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a9e8c5b85957485635d0f72c2f48bb8b5"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a9e8c5b85957485635d0f72c2f48bb8b5">SVF::MemSSA::getCallSiteMuNum</a></div><div class="ttdeci">u32_t getCallSiteMuNum() const</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00545">MemSSA.cpp:545</a></div></div>
|
|
163
164
|
<div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
|
|
164
|
-
<div class="ttc" id="classSVF_1_1LoadPE_html"><div class="ttname"><a href="classSVF_1_1LoadPE.html">SVF::LoadPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00628">SVFStatements.h:628</a></div></div>
|
|
165
|
-
<div class="ttc" id="classSVF_1_1MRGenerator_html_a820e30118868947b62f0a558da5512fc"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a820e30118868947b62f0a558da5512fc">SVF::MRGenerator::getPAGEdgesFromInst</a></div><div class="ttdeci">PAGEdgeList & 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>
|
|
166
165
|
<div class="ttc" id="classSVF_1_1MemSSAStat_html_abf3825b642cf115259ea21e5f7e28878"><div class="ttname"><a href="classSVF_1_1MemSSAStat.html#abf3825b642cf115259ea21e5f7e28878">SVF::MemSSAStat::performStat</a></div><div class="ttdeci">virtual void performStat()</div><div class="ttdef"><b>Definition:</b> <a href="SVFGStat_8cpp_source.html#l00073">SVFGStat.cpp:73</a></div></div>
|
|
167
166
|
<div class="ttc" id="classSVF_1_1MemSSA_html_aa8c45b455e6fc60cab955534c3e50bfa"><div class="ttname"><a href="classSVF_1_1MemSSA.html#aa8c45b455e6fc60cab955534c3e50bfa">SVF::MemSSA::getStoreChiNum</a></div><div class="ttdeci">u32_t getStoreChiNum() const</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00494">MemSSA.cpp:494</a></div></div>
|
|
168
167
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a97ccd5e0b9ab6144415e26bdf95cbabd"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a97ccd5e0b9ab6144415e26bdf95cbabd">SVF::MemSSA::timeOfSSARenaming</a></div><div class="ttdeci">static double timeOfSSARenaming</div><div class="ttdoc">Time for SSA rename. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00104">MemSSA.h:104</a></div></div>
|
|
@@ -171,7 +170,6 @@ $(function() {
|
|
|
171
170
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00069">LLVMModule.h:69</a></div></div>
|
|
172
171
|
<div class="ttc" id="classSVF_1_1SVFFunction_html_ac4ae917ae35ac6fca652fe2dd90a8ac2"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">SVF::SVFFunction::getLLVMFun</a></div><div class="ttdeci">Function * getLLVMFun() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00249">BasicTypes.h:249</a></div></div>
|
|
173
172
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a213ebe634bbdbe33460ccd941c1dc6a5"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a213ebe634bbdbe33460ccd941c1dc6a5">SVF::MemSSA::mrGen</a></div><div class="ttdeci">MRGenerator * mrGen</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00116">MemSSA.h:116</a></div></div>
|
|
174
|
-
<div class="ttc" id="classSVF_1_1MRGenerator_html_a5cf5ae60ad6028809088f3c842afde9d"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a5cf5ae60ad6028809088f3c842afde9d">SVF::MRGenerator::getLoadMRSet</a></div><div class="ttdeci">MRSet & getLoadMRSet(const LoadPE *load)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00443">MemRegion.h:443</a></div></div>
|
|
175
173
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a695adf83e8c40b9628b1866053f68033"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a695adf83e8c40b9628b1866053f68033">SVF::MemSSA::createMUCHI</a></div><div class="ttdeci">virtual void createMUCHI(const SVFFunction &fun)</div><div class="ttdoc">Create mu chi for candidate regions in a function. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00126">MemSSA.cpp:126</a></div></div>
|
|
176
174
|
<div class="ttc" id="classSVF_1_1MemSSAStat_html"><div class="ttname"><a href="classSVF_1_1MemSSAStat.html">SVF::MemSSAStat</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGStat_8h_source.html#l00048">SVFGStat.h:48</a></div></div>
|
|
177
175
|
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="ContextDDA_8h_source.html#l00016">ContextDDA.h:16</a></div></div>
|
|
@@ -180,27 +178,29 @@ $(function() {
|
|
|
180
178
|
<div class="ttc" id="classSVF_1_1MemSSA_html_af8c38a7ff8da4206f19c038024606d93"><div class="ttname"><a href="classSVF_1_1MemSSA.html#af8c38a7ff8da4206f19c038024606d93">SVF::MemSSA::getReturnMuSet</a></div><div class="ttdeci">MUSet & getReturnMuSet(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00380">MemSSA.h:380</a></div></div>
|
|
181
179
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a606aaf7a76ca71cb32adc9af7291ae6e"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a606aaf7a76ca71cb32adc9af7291ae6e">SVF::MemSSA::AddMSSAPHI</a></div><div class="ttdeci">void AddMSSAPHI(const BasicBlock *bb, const MRSet &mrSet)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00203">MemSSA.h:203</a></div></div>
|
|
182
180
|
<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#l00160">SVFModule.h:160</a></div></div>
|
|
181
|
+
<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#l00596">SVFStatements.h:596</a></div></div>
|
|
183
182
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a0ed34f7a27db045c624c5db61d53132b"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a0ed34f7a27db045c624c5db61d53132b">SVF::MemSSA::RenamePhiOps</a></div><div class="ttdeci">void RenamePhiOps(const PHISet &phiSet, u32_t pos, MRVector &)</div><div class="ttdoc">Rename operands (RHS) of phis. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00279">MemSSA.h:279</a></div></div>
|
|
184
183
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a52b1598f44fe6a6e30095f596bf85cb0"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a52b1598f44fe6a6e30095f596bf85cb0">SVF::MemSSA::dt</a></div><div class="ttdeci">DominatorTree * dt</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00118">MemSSA.h:118</a></div></div>
|
|
185
|
-
<div class="ttc" id="classSVF_1_1MemSSA_html_a24dd10cbd41df4f57d8d6fa9ca6a3083"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a24dd10cbd41df4f57d8d6fa9ca6a3083">SVF::MemSSA::getCHISet</a></div><div class="ttdeci">CHISet & getCHISet(const StorePE *st)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00392">MemSSA.h:392</a></div></div>
|
|
186
184
|
<div class="ttc" id="classSVF_1_1MemSSA_html_abae2396bf8a37a22be9365d368fe455c"><div class="ttname"><a href="classSVF_1_1MemSSA.html#abae2396bf8a37a22be9365d368fe455c">SVF::MemSSA::funToReturnMuSetMap</a></div><div class="ttdeci">FunToReturnMuSetMap funToReturnMuSetMap</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00137">MemSSA.h:137</a></div></div>
|
|
187
185
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8d8216a92140d982303f83ea424ddc91"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8d8216a92140d982303f83ea424ddc91">SVF::SVFUtil::isNonInstricCallSite</a></div><div class="ttdeci">bool isNonInstricCallSite(const Instruction *inst)</div><div class="ttdoc">Whether an instruction is a callsite in the application code, excluding llvm intrinsic calls...</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00206">SVFUtil.h:206</a></div></div>
|
|
188
186
|
<div class="ttc" id="classSVF_1_1SVFModule_html_a709371b13dcf500277f8bc275bdb23c7"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a709371b13dcf500277f8bc275bdb23c7">SVF::SVFModule::iterator</a></div><div class="ttdeci">FunctionSetType::iterator iterator</div><div class="ttdoc">Iterators type def. </div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00051">SVFModule.h:51</a></div></div>
|
|
189
187
|
<div class="ttc" id="classSVF_1_1MRGenerator_html_a4f65593325e4391333fa1b0bedbffc4a"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a4f65593325e4391333fa1b0bedbffc4a">SVF::MRGenerator::generateMRs</a></div><div class="ttdeci">virtual void generateMRs()</div><div class="ttdoc">Start generating memory regions. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00125">MemRegion.cpp:125</a></div></div>
|
|
190
188
|
<div class="ttc" id="classSVF_1_1MemRegion_html"><div class="ttname"><a href="classSVF_1_1MemRegion.html">SVF::MemRegion</a></div><div class="ttdoc">Memory Region class. </div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00051">MemRegion.h:51</a></div></div>
|
|
191
189
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a67175188232e08f5c5374f92ff61810f"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a67175188232e08f5c5374f92ff61810f">SVF::MemSSA::getFunRetMuNum</a></div><div class="ttdeci">u32_t getFunRetMuNum() const</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00528">MemSSA.cpp:528</a></div></div>
|
|
192
|
-
<div class="ttc" id="classSVF_1_1MRGenerator_html_ac409bbee6bf9deef7e31233a05054ee2"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#ac409bbee6bf9deef7e31233a05054ee2">SVF::MRGenerator::getStoreMRSet</a></div><div class="ttdeci">MRSet & getStoreMRSet(const StorePE *store)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00447">MemRegion.h:447</a></div></div>
|
|
193
190
|
<div class="ttc" id="classSVF_1_1InterDisjointMRG_html"><div class="ttname"><a href="classSVF_1_1InterDisjointMRG.html">SVF::InterDisjointMRG</a></div><div class="ttdef"><b>Definition:</b> <a href="MemPartition_8h_source.html#l00139">MemPartition.h:139</a></div></div>
|
|
194
191
|
<div class="ttc" id="classSVF_1_1MemSSA_html_aafc83f7f22ebf3b3683607440c488bef"><div class="ttname"><a href="classSVF_1_1MemSSA.html#aafc83f7f22ebf3b3683607440c488bef">SVF::MemSSA::getLoadMuNum</a></div><div class="ttdeci">u32_t getLoadMuNum() const</div><div class="ttdoc">Stat methods. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00477">MemSSA.cpp:477</a></div></div>
|
|
195
192
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_abd525a2e3b7b9167b61b2304cc2cbdf2"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#abd525a2e3b7b9167b61b2304cc2cbdf2">SVF::SVFUtil::isReturn</a></div><div class="ttdeci">bool isReturn(const Instruction *inst)</div><div class="ttdoc">Whether an instruction is a return instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00213">SVFUtil.h:213</a></div></div>
|
|
193
|
+
<div class="ttc" id="classSVF_1_1MemSSA_html_a4e11797df16b0b612191607180acc0c5"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a4e11797df16b0b612191607180acc0c5">SVF::MemSSA::AddStoreCHI</a></div><div class="ttdeci">void AddStoreCHI(const BasicBlock *bb, const StoreStmt *store, const MRSet &mrSet)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00188">MemSSA.h:188</a></div></div>
|
|
196
194
|
<div class="ttc" id="classSVF_1_1CallBlockNode_html"><div class="ttname"><a href="classSVF_1_1CallBlockNode.html">SVF::CallBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
|
|
197
195
|
<div class="ttc" id="classSVF_1_1MemSSA_html_ac6f2171f92e0bdd5dbdb58efed144c18"><div class="ttname"><a href="classSVF_1_1MemSSA.html#ac6f2171f92e0bdd5dbdb58efed144c18">SVF::MemSSA::AddCallSiteCHI</a></div><div class="ttdeci">void AddCallSiteCHI(const CallBlockNode *cs, const MRSet &mrSet)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00198">MemSSA.h:198</a></div></div>
|
|
198
196
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a8a5d3597f3dba9744e170cc8c32bf25f"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a8a5d3597f3dba9744e170cc8c32bf25f">SVF::MemSSA::PHISet</a></div><div class="ttdeci">Set< PHI * > PHISet</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00066">MemSSA.h:66</a></div></div>
|
|
199
197
|
<div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
|
|
200
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
198
|
+
<div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
|
|
201
199
|
<div class="ttc" id="classSVF_1_1MemSSA_html_ae4c7b17d8da8278dca362af79f9f268d"><div class="ttname"><a href="classSVF_1_1MemSSA.html#ae4c7b17d8da8278dca362af79f9f268d">SVF::MemSSA::mr2VerStackMap</a></div><div class="ttdeci">MemRegToVerStackMap mr2VerStackMap</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00139">MemSSA.h:139</a></div></div>
|
|
200
|
+
<div class="ttc" id="classSVF_1_1MemSSA_html_a445d282890dbd2fb51e903255af1cc3e"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a445d282890dbd2fb51e903255af1cc3e">SVF::MemSSA::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="MemSSA_8h_source.html#l00097">MemSSA.h:97</a></div></div>
|
|
202
201
|
<div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00149">SVFBasicTypes.h:149</a></div></div>
|
|
203
202
|
<div class="ttc" id="classSVF_1_1MemSSA_html_a3c7b5fa73fdc7c805ee3673fbe812b44"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a3c7b5fa73fdc7c805ee3673fbe812b44">SVF::MemSSA::timeOfInsertingPHI</a></div><div class="ttdeci">static double timeOfInsertingPHI</div><div class="ttdoc">Time for inserting phis. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00103">MemSSA.h:103</a></div></div>
|
|
203
|
+
<div class="ttc" id="classSVF_1_1MRGenerator_html_a19da5768681a21c52a6c43761814a157"><div class="ttname"><a href="classSVF_1_1MRGenerator.html#a19da5768681a21c52a6c43761814a157">SVF::MRGenerator::getLoadMRSet</a></div><div class="ttdeci">MRSet & getLoadMRSet(const LoadStmt *load)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8h_source.html#l00443">MemRegion.h:443</a></div></div>
|
|
204
204
|
<div class="ttc" id="classSVF_1_1MemSSA_html_acc6f72d96cf29e36093ba08ea86b8983"><div class="ttname"><a href="classSVF_1_1MemSSA.html#acc6f72d96cf29e36093ba08ea86b8983">SVF::MemSSA::insertPHI</a></div><div class="ttdeci">virtual void insertPHI(const SVFFunction &fun)</div><div class="ttdoc">Insert phi for candidate regions in a fucntion. </div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8cpp_source.html#l00216">MemSSA.cpp:216</a></div></div>
|
|
205
205
|
<div class="ttc" id="LLVMUtil_8h_html"><div class="ttname"><a href="LLVMUtil_8h.html">LLVMUtil.h</a></div></div>
|
|
206
206
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a547b3bc62de65b9dbfc6dee55c063dd7"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">SVF::LLVMModuleSet::getSVFFunction</a></div><div class="ttdeci">const SVFFunction * getSVFFunction(const Function *fun) const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00112">LLVMModule.h:112</a></div></div>
|