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,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">FlowSensitiveTBHC.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="FlowSensitiveTBHC_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">//===- FlowSensitiveTBHC.cpp -- flow-sensitive type filter ------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">/*</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * FlowSensitiveTBHC.cpp</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Created on: Oct 08, 2019</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * Author: Mohamad Barbar</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> */</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "<a class="code" href="DCHG_8h.html">SVF-FE/DCHG.h</a>"</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include "<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>"</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "<a class="code" href="FlowSensitiveTBHC_8h.html">WPA/FlowSensitiveTBHC.h</a>"</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "<a class="code" href="WPAStat_8h.html">WPA/WPAStat.h</a>"</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>"</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>"</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="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abb0d8712ec0f9d6ae4e4e0971eac07f4"> 20</a></span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abb0d8712ec0f9d6ae4e4e0971eac07f4">FlowSensitiveTBHC::FlowSensitiveTBHC</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> type) : <a class="code" href="classSVF_1_1FlowSensitive.html">FlowSensitive</a>(_pag, type), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html">TypeBasedHeapCloning</a>(this)</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="comment">// Using `this` as the argument for TypeBasedHeapCloning is okay. As PointerAnalysis, it's</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="comment">// already constructed. TypeBasedHeapCloning also doesn't use pta in the constructor so it</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="comment">// just needs to be allocated, which it is.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a734e01c66832346c61d4cda38db84f4a">allReuse</a> = <a class="code" href="classSVF_1_1Options.html#a930ed87e35ba7502f9d00be6f17f902f">Options::TBHCAllReuse</a>;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ac7ed9100533dc399c71cdf017bfa2462">storeReuse</a> = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a734e01c66832346c61d4cda38db84f4a">allReuse</a> || <a class="code" href="classSVF_1_1Options.html#a10cc9fa1d4e553865343d635cf84592e">Options::TBHCStoreReuse</a>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abcab6281cced08d90c92d67d43a37c2c"> 29</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abcab6281cced08d90c92d67d43a37c2c">FlowSensitiveTBHC::analyze</a>()</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a267f7198600dde3054feb40def7a6681">FlowSensitive::analyze</a>();</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a4c5fb70aafc3a589b7b1e82ba8f61a6f"> 34</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a4c5fb70aafc3a589b7b1e82ba8f61a6f">FlowSensitiveTBHC::initialize</a>()</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>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">PointerAnalysis::initialize</a>();</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a> = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">AndersenWaveDiff::createAndersenWaveDiff</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>());</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a> = <a class="code" href="classSVF_1_1FlowSensitive.html#a76f6f19ac2b58ab4a10a2d7e6e24e42a">memSSA</a>.<a class="code" href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">buildFullSVFG</a>(ander);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="classSVF_1_1WPASolver.html#aa04deb39cd024c051f30ac43d1d62b34">setGraph</a>(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a88f9752372eabb71f47f13a89e4d6d9c">FlowSensitiveStat</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a>>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ae2cc7cd0803dbd90639140e71b06b1b5">getCHGraph</a>());</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dchg != <span class="keyword">nullptr</span> && <span class="stringliteral">"FSTBHC: DCHGraph required!"</span>);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aaaf50870e50b45b44d4ecaaaab662770">TypeBasedHeapCloning::setDCHG</a>(dchg);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0890235fa3725c23435ea3245c52c038">TypeBasedHeapCloning::setPAG</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// Populates loadGeps.</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a80052c89d1a9f54cfbf8f9790110899d">determineWhichGepsAreLoads</a>();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a3564d6ad7e12e0a833b4cea203a809e4"> 52</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a3564d6ad7e12e0a833b4cea203a809e4">FlowSensitiveTBHC::finalize</a>(<span class="keywordtype">void</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>  <a class="code" href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3">FlowSensitive::finalize</a>();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">// ^ Will print call graph and alias stats.</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a3550ea3f087ec557a6fe076bc443b05d">print_stat</a>)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a1a7b51e7d959795c00383721b013834d">dumpStats</a>();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="comment">// getDFPTDataTy()->dumpPTData();</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae42ec334a7dfc96a5ead2d2845ca3b22">validateTBHCTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a7e8b3f6843e5ea75fd189162d2cd60a5">svfMod</a>);</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"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a81ce8b1e98db245d3f4ccf189ca11e47"> 64</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a81ce8b1e98db245d3f4ccf189ca11e47">FlowSensitiveTBHC::backPropagate</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> clone)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *cloneObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(clone);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(cloneObj && <span class="stringliteral">"FSTBHC: clone does not exist in SVFIR?"</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *originalObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(clone));</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(cloneObj && <span class="stringliteral">"FSTBHC: original object does not exist in SVFIR?"</span>);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="comment">// Check the original object too because when reuse of a gep occurs, the new object</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="comment">// is an FI object.</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CloneGepObjPN>(cloneObj) || SVFUtil::isa<GepObjPN>(originalObj))</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// Since getGepObjClones is updated, some GEP nodes need to be redone.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &retrievers = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#acd6ade2b73c19d1eb7faf0e457becba6">gepToSVFGRetrievers</a>[<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(clone)];</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> r : retrievers)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(r);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<CloneFIObjPN>(cloneObj) || SVFUtil::isa<CloneDummyObjPN>(cloneObj))</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_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a5681d78630ca8770dd493ef3841ec683">getAllocationSite</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(clone)));</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"FSTBHC: unexpected object type?"</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a83a4defe2bcb1c99c66aea8c8325d5fd"> 91</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a83a4defe2bcb1c99c66aea8c8325d5fd">FlowSensitiveTBHC::propAlongIndirectEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* edge)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// Get points-to targets may be used by next SVFG node.</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">// Propagate points-to set for node used in dst.</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> & pts = edge-><a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="comment">// Since the base Andersen's analysis does NOT perform type-based heap cloning,</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// it uses only the base objects; we want to account for clones too.</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> edgePtsAndClones;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="comment">// TODO: the conditional bool may be unnecessary.</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="comment">// Adding all clones is redundant, and introduces too many calls to propVarPts...</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="comment">// This introduces performance and precision penalties.</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="comment">// We should filter out according to src.</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordtype">bool</span> isStore = <span class="keyword">false</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *tildet = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> storePts;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a> *store = SVFUtil::dyn_cast<StoreSVFGNode>(src))</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  tildet = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(store);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  isStore = <span class="keyword">true</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  storePts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(store->getPAGDstNodeID());</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(src-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span> (!filterSet.test(o))</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  edgePtsAndClones.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c : <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">getClones</a>(o))</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">if</span> (!isStore)</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">if</span> (!filterSet.test(c))</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  edgePtsAndClones.set(c);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">if</span> (storePts.<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(c) && !filterSet.test(c))</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  edgePtsAndClones.set(c);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a> *gep = SVFUtil::dyn_cast<GepObjPN>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o)))</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="comment">// Want the geps which are at the same "level" as this one (same mem obj, same offset).</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &geps = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad043ab95900849a5a894ca4bada4e032">getGepObjsFromMemObj</a>(gep->getMemObj(), gep->getLocationSet().getOffset());</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> g : geps)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *gepType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(g);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">if</span> (!isStore || gepType || <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(tildet, gepType))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">if</span> (!filterSet.test(g))</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  edgePtsAndClones.set(g);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : edgePtsAndClones)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91">propVarPtsFromSrcToDst</a>(o, src, dst))</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#af90d2ccb01402c5ca9d7a059f345c816">isFIObjNode</a>(o))</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &allFields = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a96089e24ef6aaa7f7d30c50a64d5042f">getAllFieldsObjNode</a>(o);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> f : allFields)</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="classSVF_1_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91">propVarPtsFromSrcToDst</a>(f, src, dst))</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a15b8610fd7456d158a9e640c69d401a0"> 184</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a15b8610fd7456d158a9e640c69d401a0">FlowSensitiveTBHC::propAlongDirectEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1DirectSVFGEdge.html">DirectSVFGEdge</a>* edge)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">// If this is an actual-param or formal-ret, top-level pointer's pts must be</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="comment">// propagated from src to dst.</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmSVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmSVFGNode>(src))</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">if</span> (!ap->getParam()->isPointer()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  changed = <a class="code" href="classSVF_1_1FlowSensitive.html#a3574977acd161925cadcb05de6d3247d">propagateFromAPToFP</a>(ap, dst);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetSVFGNode</a>* fp = SVFUtil::dyn_cast<FormalRetSVFGNode>(src))</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">if</span> (!fp->getRet()->isPointer()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  changed = <a class="code" href="classSVF_1_1FlowSensitive.html#a3abffe1434386b1ce349fbed0cfe0967">propagateFromFRToAR</a>(fp, dst);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">else</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>  <span class="comment">// Direct SVFG edge links between def and use of a top-level pointer.</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="comment">// There's no points-to information propagated along direct edge.</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="comment">// Since the top-level pointer's value has been changed at src node,</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="comment">// return TRUE to put dst node into the work list.</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  changed = <span class="keyword">true</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>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#ae086de68233375be42185f0af706687a">directPropaTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abce5580e93cba1e591a0bac4e9070816"> 217</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abce5580e93cba1e591a0bac4e9070816">FlowSensitiveTBHC::processAddr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrVFGNode.html">AddrSVFGNode</a>* addr)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcID = addr-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstID = addr-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a38f3ed35185addf701d4401bfdd5f29b">addrTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">if</span> (!addr-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordtype">bool</span> changed = <a class="code" href="classSVF_1_1FlowSensitive.html#abb37c5e4e6fa4742e8dbcf397aea086e">FlowSensitive::processAddr</a>(addr);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *objType;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(srcID))</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  objType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(srcID))</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>  <span class="comment">// Probably constants that have been merged into one.</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="comment">// We make it undefined even though it's technically a global</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="comment">// to keep in line with SVF's design.</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// This will end up splitting into one for each type of constant.</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  objType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">// Stack/global.</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  objType = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(addr);</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> </div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6">setType</a>(srcID, objType);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0">setAllocationSite</a>(srcID, addr-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="comment">// All the typed versions of srcID. This handles back-propagation.</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &clones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">getClones</a>(srcID);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c : clones)</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>  changed = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(dstID, c) || changed;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="comment">// No need for typing these are all clones; they are all typed.</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="l00263"></a><span class="lineno"> 263</span>  end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a38f3ed35185addf701d4401bfdd5f29b">addrTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">return</span> changed;</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"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abf96f7329d8c50dcd75da048548d2c85"> 269</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abf96f7329d8c50dcd75da048548d2c85">FlowSensitiveTBHC::processGep</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepVFGNode.html">GepSVFGNode</a>* gep)</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="comment">// Copy of that in FlowSensitive.cpp + some changes.</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> q = gep-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *tildet = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(gep);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">if</span> (tildet != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>)</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  {</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordtype">bool</span> reuse = <a class="code" href="classSVF_1_1Options.html#a930ed87e35ba7502f9d00be6f17f902f">Options::TBHCAllReuse</a> || (<a class="code" href="classSVF_1_1Options.html#a10cc9fa1d4e553865343d635cf84592e">Options::TBHCStoreReuse</a> && !<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ad5b294dacf51a89306df9a22c6799bad">gepIsLoad</a>(gep-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()));</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  changed = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">init</a>(gep-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), q, tildet, reuse, <span class="keyword">true</span>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (!gep-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>())</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="keywordflow">return</span> changed;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  }</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& qPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(q);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(gep-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> tmpDstPts;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> oq : qPts)</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  {</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">if</span> (filterSet.<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(oq)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a59a9c7b8a7ec392ac609f10c8dac8d7f">TypeBasedHeapCloning::isBlkObjOrConstantObj</a>(oq))</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(oq);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">if</span> (SVFUtil::isa<VariantGepPE>(gep-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()))</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(oq);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  tmpDstPts.set(oq);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(oq);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">if</span> (t && (t->getTag() == dwarf::DW_TAG_array_type || t->getTag() == dwarf::DW_TAG_pointer_type))</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> fieldClones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133">getGepObjClones</a>(oq, 1);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fc : fieldClones)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#acd6ade2b73c19d1eb7faf0e457becba6">gepToSVFGRetrievers</a>[<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(fc)].set(gep-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  tmpDstPts.set(fc);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepPE.html">NormalGepPE</a>* normalGep = SVFUtil::dyn_cast<NormalGepPE>(gep-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()))</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *baseType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(oq);</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="comment">// Drop down to field insensitive.</span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">if</span> (baseType == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(oq);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fiObj = oq;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  tmpDstPts.set(fiObj);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">DCHGraph::isAgg</a>(baseType) && baseType->getTag() != dwarf::DW_TAG_array_type</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  && normalGep->getLocationSet().getOffset() >= <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-><a class="code" href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e">getNumFields</a>(baseType))</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>  <span class="comment">// If the field offset is too high for this object, it is killed. It seems that a</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">// clone was made on this GEP but this is not the base (e.g. base->f1->f2), and SVF</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="comment">// expects to operate on the base (hence the large offset). The base will have been</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="comment">// cloned at another GEP and back-propagated, thus it'll reach here safe and sound.</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="comment">// We ignore arrays/pointers because those are array accesses/pointer arithmetic we</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="comment">// assume are correct.</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="comment">// Obviously, non-aggregates cannot have their fields taken so they are spurious.</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  filterSet.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(oq);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="comment">// Operate on the field and all its clones.</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> fieldClones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133">getGepObjClones</a>(oq, normalGep->getLocationSet().getOffset());</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fc : fieldClones)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#acd6ade2b73c19d1eb7faf0e457becba6">gepToSVFGRetrievers</a>[<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(fc)].set(gep-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  tmpDstPts.set(fc);</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>  }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"FSTBHC: new gep edge?"</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>  }</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a282126e5b67ed4e19aa40c81180b8290">gepTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  changed = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2">unionPts</a>(gep-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), tmpDstPts) || changed;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">return</span> changed;</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"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a42c8023e0e60e8701ec197b3d775b423"> 367</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a42c8023e0e60e8701ec197b3d775b423">FlowSensitiveTBHC::processLoad</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* load)</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *tildet = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(load);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">if</span> (tildet != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>)</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>  changed = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">init</a>(load-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(), tildet, <a class="code" href="classSVF_1_1Options.html#a930ed87e35ba7502f9d00be6f17f902f">Options::TBHCAllReuse</a>);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="comment">// We want to perform the initialisation for non-pointer nodes but not process the load.</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">if</span> (!load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>())</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar = load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& srcPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(load-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="comment">// unionPtsFromIn is going to call getOriginalObj on ptd anyway.</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="comment">// This results in fewer loop iterations. o_t, o_s --> o.</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> srcOriginalObjs;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> s : srcPts)</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">if</span> (filterSet.test(s)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(s) || <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a07716ca7f769f704a80ccee1a6ad7ee2">isNonPointerObj</a>(s)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  srcOriginalObjs.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(s));</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> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd : srcOriginalObjs)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="comment">// filterSet tests happened while building srcOriginalObjs.</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ad53c6aebdcfa9fa334ccff4c68efa8ae">unionPtsFromIn</a>(load, ptd, dstVar))</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#af90d2ccb01402c5ca9d7a059f345c816">isFIObjNode</a>(ptd))</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &allFields = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a96089e24ef6aaa7f7d30c50a64d5042f">getAllFieldsObjNode</a>(ptd);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> f : allFields)</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ad53c6aebdcfa9fa334ccff4c68efa8ae">unionPtsFromIn</a>(load, f, dstVar))</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  }</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  }</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>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#aab4f70210eb1e6447a24697d3b459067">loadTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#ac937e0e388071bbf94a477e1880663eb"> 422</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ac937e0e388071bbf94a477e1880663eb">FlowSensitiveTBHC::processStore</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store)</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="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *tildet = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(store);</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">if</span> (tildet != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>)</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  changed = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">init</a>(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), tildet, <a class="code" href="classSVF_1_1Options.html#a930ed87e35ba7502f9d00be6f17f902f">Options::TBHCAllReuse</a> || <a class="code" href="classSVF_1_1Options.html#a10cc9fa1d4e553865343d635cf84592e">Options::TBHCStoreReuse</a>);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="comment">// Like processLoad: we want to perform initialisation for non-pointers but not the store.</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">if</span> (!store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>())</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>  <span class="comment">// Pass through and return because there may be some pointer nodes</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="comment">// relying on this node's parents.</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  changed = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a7e4ae809b40d55448de0103746254158">updateAllDFOutFromIn</a>(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), 0, <span class="keyword">false</span>);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> & dstPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">if</span> (dstPts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">return</span> changed;</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> </div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>()).<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd : dstPts)</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  {</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordflow">if</span> (filterSet.<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(ptd)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(ptd) || <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a07716ca7f769f704a80ccee1a6ad7ee2">isNonPointerObj</a>(ptd))</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#adee98278cf3944e0b2b22e34aaecc4c5">unionPtsFromTop</a>(store, store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(), ptd))</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  }</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> </div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a82b76087363b26fbe749653935569de7">storeTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keywordtype">double</span> updateStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="comment">// also merge the DFInSet to DFOutSet.</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment"></span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> singleton;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keywordtype">bool</span> isSU = <a class="code" href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2">isStrongUpdate</a>(store, singleton);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordflow">if</span> (isSU)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">svfgHasSU</a>.set(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitive.html#a8ebe4342c1496b906ee1b6450558c3e8">strongUpdateOutFromIn</a>(store, singleton))</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">svfgHasSU</a>.reset(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitive.html#ab492c283e2264b4cbd4c192e805b7750">weakUpdateOutFromIn</a>(store))</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordtype">double</span> updateEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#af5a94d14096ae2bbc47b3b3b9f723226">updateTime</a> += (updateEnd - updateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div><div class="line"><a name="l00497"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a0eb8335dd45b35b20d34c981b86b059c"> 497</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a0eb8335dd45b35b20d34c981b86b059c">FlowSensitiveTBHC::processPhi</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PHIVFGNode.html">PHISVFGNode</a>* phi)</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> {</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">if</span> (!phi-><a class="code" href="classSVF_1_1PHIVFGNode.html#a103e55e670ce614cabc13b8dc5b17b91">isPTANode</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa36fd1387e948e83107431179d819067">FlowSensitive::processPhi</a>(phi);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00506"></a><span class="lineno"><a class="line" href="FlowSensitiveTBHC_8cpp.html#af72d866f4ffed004e104b686d4f94cb3"> 506</a></span> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="FlowSensitiveTBHC_8cpp.html#af72d866f4ffed004e104b686d4f94cb3">getVTInitType</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyVFGNode.html">CopySVFGNode</a> *copy, <a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span> {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">if</span> (copy-><a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>() == <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = copy-><a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *mdNode = inst->getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#a02b3f4190d325c921922c25e319dc8d9">cppUtil::ctir::vtInitMDName</a>);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keywordflow">if</span> (mdNode == <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *type = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a>>(mdNode);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type != <span class="keyword">nullptr</span> && <span class="stringliteral">"TBHC: bad ctir.vt.init metadata"</span>);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">return</span> dchg-><a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> }</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div><div class="line"><a name="l00519"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#ab6525ac133151692176a03227f81bcac"> 519</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ab6525ac133151692176a03227f81bcac">FlowSensitiveTBHC::processCopy</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyVFGNode.html">CopySVFGNode</a>* copy)</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="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *vtInitType = <a class="code" href="FlowSensitiveTBHC_8cpp.html#af72d866f4ffed004e104b686d4f94cb3">getVTInitType</a>(copy, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordflow">if</span> (vtInitType != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">// Setting the virtual table pointer.</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  changed = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">init</a>(copy-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), copy-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(), vtInitType, <span class="keyword">true</span>);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa401cc90de4e1c6842f08a43a28c5aa1">FlowSensitive::processCopy</a>(copy) || changed;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> }</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div><div class="line"><a name="l00532"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a96089e24ef6aaa7f7d30c50a64d5042f"> 532</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a96089e24ef6aaa7f7d30c50a64d5042f">FlowSensitiveTBHC::getAllFieldsObjNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afe416f9ec57923f34ef1db3890a3f9e1">getGepObjs</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div><div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#acb11d6879836e27195c85ca882df6d17"> 537</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#acb11d6879836e27195c85ca882df6d17">FlowSensitiveTBHC::updateInFromIn</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="comment">// IN sets are only based on the original object.</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a88cf9cd48ee5c1b8b3c71b379f23ab6b">updateDFInFromIn</a>(srcStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(srcVar),</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  dstStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(dstVar));</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> }</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div><div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#ab9615acdb43219c39f40e886f5baf803"> 544</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ab9615acdb43219c39f40e886f5baf803">FlowSensitiveTBHC::updateInFromOut</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="comment">// OUT/IN sets only have original objects.</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a2ec4fb73d87f10c86fac34b3500532b3">updateDFInFromOut</a>(srcStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(srcVar),</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  dstStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(dstVar));</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> }</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div><div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#ad53c6aebdcfa9fa334ccff4c68efa8ae"> 551</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ad53c6aebdcfa9fa334ccff4c68efa8ae">FlowSensitiveTBHC::unionPtsFromIn</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* stmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="comment">// IN sets only have original objects.</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#aaa6f67ff5daf7d71a3ad62316a7dd872">updateTLVPts</a>(stmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(srcVar), dstVar);</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#adee98278cf3944e0b2b22e34aaecc4c5"> 557</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#adee98278cf3944e0b2b22e34aaecc4c5">FlowSensitiveTBHC::unionPtsFromTop</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* stmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> {</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="comment">// OUT sets only have original objects.</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a09bc4b7eef592af2c2c84b60029b5b52">updateATVPts</a>(srcVar, stmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(dstVar));</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> }</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div><div class="line"><a name="l00563"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#aab08c9a0527138599e58e72f69071ecb"> 563</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#aab08c9a0527138599e58e72f69071ecb">FlowSensitiveTBHC::propDFInToIn</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> {</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="comment">// IN sets are only based on the original object.</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a506a2be8f909663d59245254bddea00b">updateAllDFInFromIn</a>(srcStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(srcVar),</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  dstStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(dstVar));</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> </div><div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abf5cca7e8332930c8f6adbfdb6f72629"> 570</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abf5cca7e8332930c8f6adbfdb6f72629">FlowSensitiveTBHC::propDFOutToIn</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</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="comment">// OUT/IN sets only have original objects.</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a96a5d7e867095b3c215c73599fd31c19">updateAllDFInFromOut</a>(srcStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(srcVar),</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  dstStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(dstVar));</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> </div><div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a80052c89d1a9f54cfbf8f9790110899d"> 577</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a80052c89d1a9f54cfbf8f9790110899d">FlowSensitiveTBHC::determineWhichGepsAreLoads</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFG::iterator</a> nI = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nI != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nI)</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  {</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *svfgNode = nI->second;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a> *gep = SVFUtil::dyn_cast<GepSVFGNode>(svfgNode))</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="comment">// Only care about ctir nodes - they have the reuse problem.</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(gep))</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  {</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordtype">bool</span> isLoad = <span class="keyword">true</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a> *e : gep->getOutEdges())</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  {</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *dst = e->getDstNode();</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="comment">// Loop on itself - don't care.</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">if</span> (gep == dst) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span> </div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<LoadSVFGNode>(dst))</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>  isLoad = <span class="keyword">false</span>;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  }</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  }</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="keywordflow">if</span> (isLoad)</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  {</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a5c96229c2da784a3db98ecbdd3137434">loadGeps</a>.set(gep->getId());</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>  }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div><div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#ad5b294dacf51a89306df9a22c6799bad"> 611</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ad5b294dacf51a89306df9a22c6799bad">FlowSensitiveTBHC::gepIsLoad</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gep)</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>  <span class="comment">// Handles when gep is not even a GEP; loadGeps only contains GEPs.</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a5c96229c2da784a3db98ecbdd3137434">loadGeps</a>.test(gep);</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"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a2c47ba37bd250be455a21d1f0049d556"> 617</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a2c47ba37bd250be455a21d1f0049d556">FlowSensitiveTBHC::getRawCTirMetadata</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *s)</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span> {</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a> *stmt = SVFUtil::dyn_cast<StmtSVFGNode>(s))</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  {</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *v = stmt->getInst() ? stmt->getInst() : stmt->getPAGEdge()->getValue();</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordflow">if</span> (v != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  {</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">TypeBasedHeapCloning::getRawCTirMetadata</a>(v);</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>  }</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span> }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div><div class="line"><a name="l00631"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7"> 631</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">FlowSensitiveTBHC::getTypeFromCTirMetadata</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *s)</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>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a> *stmt = SVFUtil::dyn_cast<StmtSVFGNode>(s))</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  {</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *v = stmt->getInst();</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keywordflow">if</span> (v != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8">TypeBasedHeapCloning::getTypeFromCTirMetadata</a>(v);</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>  }</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>  <span class="keywordflow">return</span> <span class="keyword">nullptr</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> </div><div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a3af0297eb75ac4009433be44bb286d30"> 645</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a3af0297eb75ac4009433be44bb286d30">FlowSensitiveTBHC::expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& expandedPts)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span> {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  expandedPts = pts;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</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>  expandedPts |= <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a96089e24ef6aaa7f7d30c50a64d5042f">getAllFieldsObjNode</a>(o);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a> *gepObj = SVFUtil::dyn_cast<GepObjPN>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o)))</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>  expandedPts |= <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a96089e24ef6aaa7f7d30c50a64d5042f">getAllFieldsObjNode</a>(o);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  o = gepObj->getBaseNode();</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  }</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  }</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span> }</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span> </div><div class="line"><a name="l00659"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abe784dfae06a7c1943b8f0a18bd79f14"> 659</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abe784dfae06a7c1943b8f0a18bd79f14">FlowSensitiveTBHC::countAliases</a>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a><std::pair<NodeID, NodeID>> cmp, <span class="keywordtype">unsigned</span> *mayAliases, <span class="keywordtype">unsigned</span> *noAliases)</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span> {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<std::pair<NodeID, NodeID></a>, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>> filteredPts;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">for</span> (std::pair<NodeID, NodeID> locP : cmp)</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(locP.first);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(locP.second);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &ptsFiltered = filteredPts[locP];</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="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  {</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">if</span> (filterSet.<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(o)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  ptsFiltered.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">for</span> (std::pair<NodeID, NodeID> locPA : cmp)</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &aPts = filteredPts[locPA];</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keywordflow">for</span> (std::pair<NodeID, NodeID> locPB : cmp)</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  {</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">if</span> (locPB == locPA) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &bPts = filteredPts[locPB];</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span> </div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">switch</span> (<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(aPts, bPts))</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  {</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">case</span> llvm::AliasResult::NoAlias:</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  ++(*noAliases);</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">case</span> llvm::AliasResult::MayAlias:</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  ++(*mayAliases);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="stringliteral">"Not May/NoAlias?"</span>);</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  }</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>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> </div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span> }</div><div class="ttc" id="FlowSensitiveTBHC_8h_html"><div class="ttname"><a href="FlowSensitiveTBHC_8h.html">FlowSensitiveTBHC.h</a></div></div>
|
|
69
|
+
<a href="FlowSensitiveTBHC_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">//===- FlowSensitiveTBHC.cpp -- flow-sensitive type filter ------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> </div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">/*</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * FlowSensitiveTBHC.cpp</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> *</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> * Created on: Oct 08, 2019</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment"> * Author: Mohamad Barbar</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment"> */</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> </div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="preprocessor">#include "<a class="code" href="Options_8h.html">Util/Options.h</a>"</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "<a class="code" href="DCHG_8h.html">SVF-FE/DCHG.h</a>"</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include "<a class="code" href="CPPUtil_8h.html">SVF-FE/CPPUtil.h</a>"</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "<a class="code" href="FlowSensitiveTBHC_8h.html">WPA/FlowSensitiveTBHC.h</a>"</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "<a class="code" href="WPAStat_8h.html">WPA/WPAStat.h</a>"</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="preprocessor">#include "<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>"</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="preprocessor">#include "<a class="code" href="PointsTo_8h.html">MemoryModel/PointsTo.h</a>"</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="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> </div><div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abb0d8712ec0f9d6ae4e4e0971eac07f4"> 20</a></span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abb0d8712ec0f9d6ae4e4e0971eac07f4">FlowSensitiveTBHC::FlowSensitiveTBHC</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* _pag, <a class="code" href="classSVF_1_1PointerAnalysis.html#a0b182ac680cce0547dbe7714c870ca85">PTATY</a> type) : <a class="code" href="classSVF_1_1FlowSensitive.html">FlowSensitive</a>(_pag, type), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html">TypeBasedHeapCloning</a>(this)</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> {</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  <span class="comment">// Using `this` as the argument for TypeBasedHeapCloning is okay. As PointerAnalysis, it's</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <span class="comment">// already constructed. TypeBasedHeapCloning also doesn't use pta in the constructor so it</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <span class="comment">// just needs to be allocated, which it is.</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a734e01c66832346c61d4cda38db84f4a">allReuse</a> = <a class="code" href="classSVF_1_1Options.html#a930ed87e35ba7502f9d00be6f17f902f">Options::TBHCAllReuse</a>;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ac7ed9100533dc399c71cdf017bfa2462">storeReuse</a> = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a734e01c66832346c61d4cda38db84f4a">allReuse</a> || <a class="code" href="classSVF_1_1Options.html#a10cc9fa1d4e553865343d635cf84592e">Options::TBHCStoreReuse</a>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> }</div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> </div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abcab6281cced08d90c92d67d43a37c2c"> 29</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abcab6281cced08d90c92d67d43a37c2c">FlowSensitiveTBHC::analyze</a>()</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a267f7198600dde3054feb40def7a6681">FlowSensitive::analyze</a>();</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> }</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> </div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a4c5fb70aafc3a589b7b1e82ba8f61a6f"> 34</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a4c5fb70aafc3a589b7b1e82ba8f61a6f">FlowSensitiveTBHC::initialize</a>()</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>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">PointerAnalysis::initialize</a>();</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a> = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a48ff6fc4badc79ad3204ae9bd95cc540">AndersenWaveDiff::createAndersenWaveDiff</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">getPAG</a>());</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a> = <a class="code" href="classSVF_1_1FlowSensitive.html#a76f6f19ac2b58ab4a10a2d7e6e24e42a">memSSA</a>.<a class="code" href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">buildFullSVFG</a>(ander);</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="classSVF_1_1WPASolver.html#aa04deb39cd024c051f30ac43d1d62b34">setGraph</a>(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a88f9752372eabb71f47f13a89e4d6d9c">FlowSensitiveStat</a>(<span class="keyword">this</span>);</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a> = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a>>(<a class="code" href="classSVF_1_1PointerAnalysis.html#ae2cc7cd0803dbd90639140e71b06b1b5">getCHGraph</a>());</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dchg != <span class="keyword">nullptr</span> && <span class="stringliteral">"FSTBHC: DCHGraph required!"</span>);</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> </div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aaaf50870e50b45b44d4ecaaaab662770">TypeBasedHeapCloning::setDCHG</a>(dchg);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a0890235fa3725c23435ea3245c52c038">TypeBasedHeapCloning::setPAG</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>);</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> </div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  <span class="comment">// Populates loadGeps.</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a80052c89d1a9f54cfbf8f9790110899d">determineWhichGepsAreLoads</a>();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> }</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> </div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a3564d6ad7e12e0a833b4cea203a809e4"> 52</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a3564d6ad7e12e0a833b4cea203a809e4">FlowSensitiveTBHC::finalize</a>(<span class="keywordtype">void</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>  <a class="code" href="classSVF_1_1FlowSensitive.html#afed358369102f01f6fe88b1433e704c3">FlowSensitive::finalize</a>();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="comment">// ^ Will print call graph and alias stats.</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span> </div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a3550ea3f087ec557a6fe076bc443b05d">print_stat</a>)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a1a7b51e7d959795c00383721b013834d">dumpStats</a>();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  <span class="comment">// getDFPTDataTy()->dumpPTData();</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae42ec334a7dfc96a5ead2d2845ca3b22">validateTBHCTests</a>(<a class="code" href="classSVF_1_1PointerAnalysis.html#a7e8b3f6843e5ea75fd189162d2cd60a5">svfMod</a>);</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"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a81ce8b1e98db245d3f4ccf189ca11e47"> 64</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a81ce8b1e98db245d3f4ccf189ca11e47">FlowSensitiveTBHC::backPropagate</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> clone)</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> {</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *cloneObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(clone);</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(cloneObj && <span class="stringliteral">"FSTBHC: clone does not exist in SVFIR?"</span>);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <a class="code" href="classSVF_1_1SVFVar.html">PAGNode</a> *originalObj = <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(clone));</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(cloneObj && <span class="stringliteral">"FSTBHC: original object does not exist in SVFIR?"</span>);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="comment">// Check the original object too because when reuse of a gep occurs, the new object</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="comment">// is an FI object.</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CloneGepObjVar>(cloneObj) || SVFUtil::isa<GepObjPN>(originalObj))</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  <span class="comment">// Since getGepObjClones is updated, some GEP nodes need to be redone.</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &retrievers = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#acd6ade2b73c19d1eb7faf0e457becba6">gepToSVFGRetrievers</a>[<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(clone)];</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> r : retrievers)</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(r);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  }</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<CloneFIObjVar>(cloneObj) || SVFUtil::isa<CloneDummyObjVar>(cloneObj))</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_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a5681d78630ca8770dd493ef3841ec683">getAllocationSite</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(clone)));</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  }</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"FSTBHC: unexpected object type?"</span>);</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span> }</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span> </div><div class="line"><a name="l00091"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a83a4defe2bcb1c99c66aea8c8325d5fd"> 91</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a83a4defe2bcb1c99c66aea8c8325d5fd">FlowSensitiveTBHC::propAlongIndirectEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* edge)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span> {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> </div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> </div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>  <span class="comment">// Get points-to targets may be used by next SVFG node.</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <span class="comment">// Propagate points-to set for node used in dst.</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> & pts = edge-><a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>();</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> </div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <span class="comment">// Since the base Andersen's analysis does NOT perform type-based heap cloning,</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  <span class="comment">// it uses only the base objects; we want to account for clones too.</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> edgePtsAndClones;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span> </div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <span class="comment">// TODO: the conditional bool may be unnecessary.</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="comment">// Adding all clones is redundant, and introduces too many calls to propVarPts...</span></div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="comment">// This introduces performance and precision penalties.</span></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  <span class="comment">// We should filter out according to src.</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordtype">bool</span> isStore = <span class="keyword">false</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *tildet = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> storePts;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a> *store = SVFUtil::dyn_cast<StoreSVFGNode>(src))</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  {</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  tildet = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(store);</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  isStore = <span class="keyword">true</span>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  storePts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(store->getPAGDstNodeID());</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  }</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span> </div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(src-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  {</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  <span class="keywordflow">if</span> (!filterSet.test(o))</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  edgePtsAndClones.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c : <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">getClones</a>(o))</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <span class="keywordflow">if</span> (!isStore)</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  {</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  <span class="keywordflow">if</span> (!filterSet.test(c))</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  edgePtsAndClones.set(c);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  }</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  }</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <span class="keywordflow">if</span> (storePts.<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(c) && !filterSet.test(c))</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  {</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  edgePtsAndClones.set(c);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>  }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>  }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span> </div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a> *gep = SVFUtil::dyn_cast<GepObjPN>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o)))</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  {</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  <span class="comment">// Want the geps which are at the same "level" as this one (same mem obj, same offset).</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &geps = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ad043ab95900849a5a894ca4bada4e032">getGepObjsFromMemObj</a>(gep->getMemObj(), gep->getLocationSet().getOffset());</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> g : geps)</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  {</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *gepType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(g);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">if</span> (!isStore || gepType || <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#add00f1c20a524c0be903af679bd6f638">isBase</a>(tildet, gepType))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">if</span> (!filterSet.test(g))</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  edgePtsAndClones.set(g);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  }</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  }</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span> </div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : edgePtsAndClones)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91">propVarPtsFromSrcToDst</a>(o, src, dst))</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> </div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#af90d2ccb01402c5ca9d7a059f345c816">isFIObjNode</a>(o))</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &allFields = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a56dc95bb4b6d48f82c87c6280237990a">getAllFieldsObjVars</a>(o);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> f : allFields)</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="classSVF_1_1FlowSensitive.html#ae571767cc5936cf631a44976d8277e91">propVarPtsFromSrcToDst</a>(f, src, dst))</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  }</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span> </div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span> }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> </div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a15b8610fd7456d158a9e640c69d401a0"> 184</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a15b8610fd7456d158a9e640c69d401a0">FlowSensitiveTBHC::propAlongDirectEdge</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1DirectSVFGEdge.html">DirectSVFGEdge</a>* edge)</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span> {</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span> </div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* src = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>();</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="comment">// If this is an actual-param or formal-ret, top-level pointer's pts must be</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="comment">// propagated from src to dst.</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1ActualParmVFGNode.html">ActualParmSVFGNode</a>* ap = SVFUtil::dyn_cast<ActualParmSVFGNode>(src))</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  {</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">if</span> (!ap->getParam()->isPointer()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  changed = <a class="code" href="classSVF_1_1FlowSensitive.html#a3574977acd161925cadcb05de6d3247d">propagateFromAPToFP</a>(ap, dst);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FormalRetVFGNode.html">FormalRetSVFGNode</a>* fp = SVFUtil::dyn_cast<FormalRetSVFGNode>(src))</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">if</span> (!fp->getRet()->isPointer()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  changed = <a class="code" href="classSVF_1_1FlowSensitive.html#a3abffe1434386b1ce349fbed0cfe0967">propagateFromFRToAR</a>(fp, dst);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordflow">else</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>  <span class="comment">// Direct SVFG edge links between def and use of a top-level pointer.</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <span class="comment">// There's no points-to information propagated along direct edge.</span></div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="comment">// Since the top-level pointer's value has been changed at src node,</span></div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="comment">// return TRUE to put dst node into the work list.</span></div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  changed = <span class="keyword">true</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>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#ae086de68233375be42185f0af706687a">directPropaTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span> }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span> </div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abce5580e93cba1e591a0bac4e9070816"> 217</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abce5580e93cba1e591a0bac4e9070816">FlowSensitiveTBHC::processAddr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrVFGNode.html">AddrSVFGNode</a>* addr)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span> {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span> </div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcID = addr-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstID = addr-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> </div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a38f3ed35185addf701d4401bfdd5f29b">addrTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span> </div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">if</span> (!addr-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span> </div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordtype">bool</span> changed = <a class="code" href="classSVF_1_1FlowSensitive.html#abb37c5e4e6fa4742e8dbcf397aea086e">FlowSensitive::processAddr</a>(addr);</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span> </div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span> </div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *objType;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#ae6ea391ac44dffeb6899bb44323c5361">isHeapMemObj</a>(srcID))</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  {</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  objType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(srcID))</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>  <span class="comment">// Probably constants that have been merged into one.</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="comment">// We make it undefined even though it's technically a global</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="comment">// to keep in line with SVF's design.</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="comment">// This will end up splitting into one for each type of constant.</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  objType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>  {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>  <span class="comment">// Stack/global.</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  objType = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(addr);</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> </div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac51cd735739a2499196a87323172a6a6">setType</a>(srcID, objType);</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>  <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a006243a1416f4950de254d0d62ba40b0">setAllocationSite</a>(srcID, addr-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> </div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  <span class="comment">// All the typed versions of srcID. This handles back-propagation.</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &clones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#af127bed600087b1ace26088a76ca8998">getClones</a>(srcID);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> c : clones)</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>  changed = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(dstID, c) || changed;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <span class="comment">// No need for typing these are all clones; they are all typed.</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="l00263"></a><span class="lineno"> 263</span>  end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a38f3ed35185addf701d4401bfdd5f29b">addrTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keywordflow">return</span> changed;</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"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abf96f7329d8c50dcd75da048548d2c85"> 269</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abf96f7329d8c50dcd75da048548d2c85">FlowSensitiveTBHC::processGep</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepVFGNode.html">GepSVFGNode</a>* gep)</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span> {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>  <span class="comment">// Copy of that in FlowSensitive.cpp + some changes.</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> q = gep-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> </div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *tildet = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(gep);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keywordflow">if</span> (tildet != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>)</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  {</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <span class="keywordtype">bool</span> reuse = <a class="code" href="classSVF_1_1Options.html#a930ed87e35ba7502f9d00be6f17f902f">Options::TBHCAllReuse</a> || (<a class="code" href="classSVF_1_1Options.html#a10cc9fa1d4e553865343d635cf84592e">Options::TBHCStoreReuse</a> && !<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ad5b294dacf51a89306df9a22c6799bad">gepIsLoad</a>(gep-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()));</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  changed = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">init</a>(gep-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), q, tildet, reuse, <span class="keyword">true</span>);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> </div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>  <span class="keywordflow">if</span> (!gep-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>())</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="keywordflow">return</span> changed;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  }</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& qPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(q);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(gep-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> tmpDstPts;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> oq : qPts)</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  {</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="keywordflow">if</span> (filterSet.<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(oq)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a59a9c7b8a7ec392ac609f10c8dac8d7f">TypeBasedHeapCloning::isBlkObjOrConstantObj</a>(oq))</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  tmpDstPts.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(oq);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordflow">if</span> (SVFUtil::isa<VariantGepStmt>(gep-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()))</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>  {</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(oq);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  tmpDstPts.set(oq);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *t = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(oq);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">if</span> (t && (t->getTag() == dwarf::DW_TAG_array_type || t->getTag() == dwarf::DW_TAG_pointer_type))</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> fieldClones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133">getGepObjClones</a>(oq, 1);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fc : fieldClones)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#acd6ade2b73c19d1eb7faf0e457becba6">gepToSVFGRetrievers</a>[<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(fc)].set(gep-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>  tmpDstPts.set(fc);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>  }</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>  }</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>* normalGep = SVFUtil::dyn_cast<NormalGepStmt>(gep-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()))</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>  {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *baseType = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a219edef6c013a953ed12ee3c56bde6de">getType</a>(oq);</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="comment">// Drop down to field insensitive.</span></div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <span class="keywordflow">if</span> (baseType == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <a class="code" href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">setObjFieldInsensitive</a>(oq);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fiObj = oq;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  tmpDstPts.set(fiObj);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span> </div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DCHGraph.html#a9d2be5aec5216cbc1d1709b41f79c44b">DCHGraph::isAgg</a>(baseType) && baseType->getTag() != dwarf::DW_TAG_array_type</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  && normalGep->getLocationSet().getOffset() >= <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>-><a class="code" href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e">getNumFields</a>(baseType))</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>  <span class="comment">// If the field offset is too high for this object, it is killed. It seems that a</span></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  <span class="comment">// clone was made on this GEP but this is not the base (e.g. base->f1->f2), and SVF</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="comment">// expects to operate on the base (hence the large offset). The base will have been</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>  <span class="comment">// cloned at another GEP and back-propagated, thus it'll reach here safe and sound.</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  <span class="comment">// We ignore arrays/pointers because those are array accesses/pointer arithmetic we</span></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="comment">// assume are correct.</span></div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  <span class="comment">// Obviously, non-aggregates cannot have their fields taken so they are spurious.</span></div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  filterSet.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(oq);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>  {</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="comment">// Operate on the field and all its clones.</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> fieldClones = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aa175b5db473eb57c03b6f908791d1133">getGepObjClones</a>(oq, normalGep->getLocationSet().getOffset());</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> fc : fieldClones)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#acd6ade2b73c19d1eb7faf0e457becba6">gepToSVFGRetrievers</a>[<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(fc)].set(gep-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>  tmpDstPts.set(fc);</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>  }</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  }</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>  {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"FSTBHC: new gep edge?"</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>  }</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>  }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a282126e5b67ed4e19aa40c81180b8290">gepTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> </div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  changed = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#ae7073c07bfd7912f888d54d4652c7cc2">unionPts</a>(gep-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), tmpDstPts) || changed;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">return</span> changed;</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"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a42c8023e0e60e8701ec197b3d775b423"> 367</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a42c8023e0e60e8701ec197b3d775b423">FlowSensitiveTBHC::processLoad</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* load)</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>  <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> </div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *tildet = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(load);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keywordflow">if</span> (tildet != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>)</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>  changed = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">init</a>(load-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(), tildet, <a class="code" href="classSVF_1_1Options.html#a930ed87e35ba7502f9d00be6f17f902f">Options::TBHCAllReuse</a>);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>  }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> </div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  <span class="comment">// We want to perform the initialisation for non-pointer nodes but not process the load.</span></div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">if</span> (!load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>())</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  }</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> </div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar = load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> </div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& srcPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(load-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>());</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(load-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="comment">// unionPtsFromIn is going to call getOriginalObj on ptd anyway.</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="comment">// This results in fewer loop iterations. o_t, o_s --> o.</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> srcOriginalObjs;</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> s : srcPts)</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>  <span class="keywordflow">if</span> (filterSet.test(s)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(s) || <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a07716ca7f769f704a80ccee1a6ad7ee2">isNonPointerObj</a>(s)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>  srcOriginalObjs.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(s));</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> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd : srcOriginalObjs)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="comment">// filterSet tests happened while building srcOriginalObjs.</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ad53c6aebdcfa9fa334ccff4c68efa8ae">unionPtsFromIn</a>(load, ptd, dstVar))</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> </div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#af90d2ccb01402c5ca9d7a059f345c816">isFIObjNode</a>(ptd))</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>  {</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> &allFields = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a56dc95bb4b6d48f82c87c6280237990a">getAllFieldsObjVars</a>(ptd);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> f : allFields)</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>  {</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ad53c6aebdcfa9fa334ccff4c68efa8ae">unionPtsFromIn</a>(load, f, dstVar))</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  }</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>  }</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>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#aab4f70210eb1e6447a24697d3b459067">loadTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#ac937e0e388071bbf94a477e1880663eb"> 422</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ac937e0e388071bbf94a477e1880663eb">FlowSensitiveTBHC::processStore</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store)</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="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *tildet = <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(store);</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>  <span class="keywordflow">if</span> (tildet != <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">undefType</a>)</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>  {</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  changed = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">init</a>(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(), tildet, <a class="code" href="classSVF_1_1Options.html#a930ed87e35ba7502f9d00be6f17f902f">Options::TBHCAllReuse</a> || <a class="code" href="classSVF_1_1Options.html#a10cc9fa1d4e553865343d635cf84592e">Options::TBHCStoreReuse</a>);</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>  }</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span> </div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>  <span class="comment">// Like processLoad: we want to perform initialisation for non-pointers but not the store.</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>  <span class="keywordflow">if</span> (!store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a4dd7615f42971da9b6ec1dc04f0ec4e6">getPAGEdge</a>()-><a class="code" href="classSVF_1_1SVFStmt.html#a0b6c03af568b70903da6b200ac86c951">isPTAEdge</a>())</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>  <span class="comment">// Pass through and return because there may be some pointer nodes</span></div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>  <span class="comment">// relying on this node's parents.</span></div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>  changed = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a7e4ae809b40d55448de0103746254158">updateAllDFOutFromIn</a>(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), 0, <span class="keyword">false</span>);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>  }</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span> </div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> & dstPts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>());</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span> </div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>  <span class="keywordflow">if</span> (dstPts.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>  {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>  <span class="keywordflow">return</span> changed;</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> </div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>  changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>()).<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>() == <span class="keyword">false</span>)</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>  {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptd : dstPts)</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>  {</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>  <span class="keywordflow">if</span> (filterSet.<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(ptd)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span> </div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(ptd) || <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1SVFIR.html#a07716ca7f769f704a80ccee1a6ad7ee2">isNonPointerObj</a>(ptd))</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>  <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span> </div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#adee98278cf3944e0b2b22e34aaecc4c5">unionPtsFromTop</a>(store, store-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(), ptd))</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>  }</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> </div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a82b76087363b26fbe749653935569de7">storeTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span> </div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>  <span class="keywordtype">double</span> updateStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>  <span class="comment">// also merge the DFInSet to DFOutSet.</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span> <span class="comment"></span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> singleton;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>  <span class="keywordtype">bool</span> isSU = <a class="code" href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2">isStrongUpdate</a>(store, singleton);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>  <span class="keywordflow">if</span> (isSU)</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">svfgHasSU</a>.set(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitive.html#a8ebe4342c1496b906ee1b6450558c3e8">strongUpdateOutFromIn</a>(store, singleton))</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  }</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">svfgHasSU</a>.reset(store-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitive.html#ab492c283e2264b4cbd4c192e805b7750">weakUpdateOutFromIn</a>(store))</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>  changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>  }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>  <span class="keywordtype">double</span> updateEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-><a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>  <a class="code" href="classSVF_1_1FlowSensitive.html#af5a94d14096ae2bbc47b3b3b9f723226">updateTime</a> += (updateEnd - updateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span> </div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>  <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span> }</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span> </div><div class="line"><a name="l00497"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a0eb8335dd45b35b20d34c981b86b059c"> 497</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a0eb8335dd45b35b20d34c981b86b059c">FlowSensitiveTBHC::processPhi</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PHIVFGNode.html">PHISVFGNode</a>* phi)</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span> {</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</span>  <span class="keywordflow">if</span> (!phi-><a class="code" href="classSVF_1_1PHIVFGNode.html#a103e55e670ce614cabc13b8dc5b17b91">isPTANode</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa36fd1387e948e83107431179d819067">FlowSensitive::processPhi</a>(phi);</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span> }</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span> </div><div class="line"><a name="l00506"></a><span class="lineno"><a class="line" href="FlowSensitiveTBHC_8cpp.html#af72d866f4ffed004e104b686d4f94cb3"> 506</a></span> <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="FlowSensitiveTBHC_8cpp.html#af72d866f4ffed004e104b686d4f94cb3">getVTInitType</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyVFGNode.html">CopySVFGNode</a> *copy, <a class="code" href="classSVF_1_1DCHGraph.html">DCHGraph</a> *<a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>)</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span> {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>  <span class="keywordflow">if</span> (copy-><a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>() == <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *inst = copy-><a class="code" href="classSVF_1_1StmtVFGNode.html#aae94dd9031a6662d509627e602aef532">getInst</a>();</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span> </div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *mdNode = inst->getMetadata(<a class="code" href="namespaceSVF_1_1cppUtil_1_1ctir.html#a02b3f4190d325c921922c25e319dc8d9">cppUtil::ctir::vtInitMDName</a>);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>  <span class="keywordflow">if</span> (mdNode == <span class="keyword">nullptr</span>) <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span> </div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *type = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a>>(mdNode);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(type != <span class="keyword">nullptr</span> && <span class="stringliteral">"TBHC: bad ctir.vt.init metadata"</span>);</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>  <span class="keywordflow">return</span> dchg-><a class="code" href="classSVF_1_1DCHGraph.html#a079feacdcc3783f4a9108a3b2d2aed2c">getCanonicalType</a>(type);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span> }</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span> </div><div class="line"><a name="l00519"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#ab6525ac133151692176a03227f81bcac"> 519</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ab6525ac133151692176a03227f81bcac">FlowSensitiveTBHC::processCopy</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CopyVFGNode.html">CopySVFGNode</a>* copy)</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="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *vtInitType = <a class="code" href="FlowSensitiveTBHC_8cpp.html#af72d866f4ffed004e104b686d4f94cb3">getVTInitType</a>(copy, <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a465e67781977e83526df7e36d576e539">dchg</a>);</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>  <span class="keywordflow">if</span> (vtInitType != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>  {</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>  <span class="comment">// Setting the virtual table pointer.</span></div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>  changed = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a34064efe336ada815b31050f683c7ce1">init</a>(copy-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), copy-><a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(), vtInitType, <span class="keyword">true</span>);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>  }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span> </div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1FlowSensitive.html#aa401cc90de4e1c6842f08a43a28c5aa1">FlowSensitive::processCopy</a>(copy) || changed;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span> }</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span> </div><div class="line"><a name="l00532"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a56dc95bb4b6d48f82c87c6280237990a"> 532</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>& <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a56dc95bb4b6d48f82c87c6280237990a">FlowSensitiveTBHC::getAllFieldsObjVars</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span> {</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#afe416f9ec57923f34ef1db3890a3f9e1">getGepObjs</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span> }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span> </div><div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#acb11d6879836e27195c85ca882df6d17"> 537</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#acb11d6879836e27195c85ca882df6d17">FlowSensitiveTBHC::updateInFromIn</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span> {</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>  <span class="comment">// IN sets are only based on the original object.</span></div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a88cf9cd48ee5c1b8b3c71b379f23ab6b">updateDFInFromIn</a>(srcStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(srcVar),</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>  dstStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(dstVar));</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span> }</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span> </div><div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#ab9615acdb43219c39f40e886f5baf803"> 544</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ab9615acdb43219c39f40e886f5baf803">FlowSensitiveTBHC::updateInFromOut</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span> {</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>  <span class="comment">// OUT/IN sets only have original objects.</span></div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a2ec4fb73d87f10c86fac34b3500532b3">updateDFInFromOut</a>(srcStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(srcVar),</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>  dstStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(dstVar));</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span> }</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span> </div><div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#ad53c6aebdcfa9fa334ccff4c68efa8ae"> 551</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ad53c6aebdcfa9fa334ccff4c68efa8ae">FlowSensitiveTBHC::unionPtsFromIn</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* stmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span> {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>  <span class="comment">// IN sets only have original objects.</span></div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#aaa6f67ff5daf7d71a3ad62316a7dd872">updateTLVPts</a>(stmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(srcVar), dstVar);</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span> }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span> </div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#adee98278cf3944e0b2b22e34aaecc4c5"> 557</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#adee98278cf3944e0b2b22e34aaecc4c5">FlowSensitiveTBHC::unionPtsFromTop</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* stmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span> {</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>  <span class="comment">// OUT sets only have original objects.</span></div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a09bc4b7eef592af2c2c84b60029b5b52">updateATVPts</a>(srcVar, stmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(dstVar));</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span> }</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span> </div><div class="line"><a name="l00563"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#aab08c9a0527138599e58e72f69071ecb"> 563</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#aab08c9a0527138599e58e72f69071ecb">FlowSensitiveTBHC::propDFInToIn</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span> {</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>  <span class="comment">// IN sets are only based on the original object.</span></div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a506a2be8f909663d59245254bddea00b">updateAllDFInFromIn</a>(srcStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(srcVar),</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>  dstStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(dstVar));</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> </div><div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abf5cca7e8332930c8f6adbfdb6f72629"> 570</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abf5cca7e8332930c8f6adbfdb6f72629">FlowSensitiveTBHC::propDFOutToIn</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcVar, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dstStmt, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstVar)</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="comment">// OUT/IN sets only have original objects.</span></div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1BVDataPTAImpl.html#a642613e98982259183d3f34a97f05502">getDFPTDataTy</a>()-><a class="code" href="classSVF_1_1DFPTData.html#a96a5d7e867095b3c215c73599fd31c19">updateAllDFInFromOut</a>(srcStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(srcVar),</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  dstStmt-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>(), <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#aeea7089c6f54b44f0509d41686b649f6">getOriginalObj</a>(dstVar));</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span> }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span> </div><div class="line"><a name="l00577"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a80052c89d1a9f54cfbf8f9790110899d"> 577</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a80052c89d1a9f54cfbf8f9790110899d">FlowSensitiveTBHC::determineWhichGepsAreLoads</a>(<span class="keywordtype">void</span>)</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span> {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFG::iterator</a> nI = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nI != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nI)</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>  {</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *svfgNode = nI->second;</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a> *gep = SVFUtil::dyn_cast<GepSVFGNode>(svfgNode))</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  {</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>  <span class="comment">// Only care about ctir nodes - they have the reuse problem.</span></div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">getTypeFromCTirMetadata</a>(gep))</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  {</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>  <span class="keywordtype">bool</span> isLoad = <span class="keyword">true</span>;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a> *e : gep->getOutEdges())</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  {</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>  <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *dst = e->getDstNode();</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span> </div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  <span class="comment">// Loop on itself - don't care.</span></div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>  <span class="keywordflow">if</span> (gep == dst) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span> </div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>  <span class="keywordflow">if</span> (!SVFUtil::isa<LoadSVFGNode>(dst))</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>  isLoad = <span class="keyword">false</span>;</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  }</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>  }</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="keywordflow">if</span> (isLoad)</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>  {</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a5c96229c2da784a3db98ecbdd3137434">loadGeps</a>.set(gep->getId());</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>  }</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  }</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span> }</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span> </div><div class="line"><a name="l00611"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#ad5b294dacf51a89306df9a22c6799bad"> 611</a></span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#ad5b294dacf51a89306df9a22c6799bad">FlowSensitiveTBHC::gepIsLoad</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gep)</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>  <span class="comment">// Handles when gep is not even a GEP; loadGeps only contains GEPs.</span></div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a5c96229c2da784a3db98ecbdd3137434">loadGeps</a>.test(gep);</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"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a2c47ba37bd250be455a21d1f0049d556"> 617</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a2c47ba37bd250be455a21d1f0049d556">FlowSensitiveTBHC::getRawCTirMetadata</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *s)</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span> {</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a> *stmt = SVFUtil::dyn_cast<StmtSVFGNode>(s))</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>  {</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *v = stmt->getInst() ? stmt->getInst() : stmt->getPAGEdge()->getValue();</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>  <span class="keywordflow">if</span> (v != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>  {</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">TypeBasedHeapCloning::getRawCTirMetadata</a>(v);</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>  }</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span> </div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>  <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span> }</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span> </div><div class="line"><a name="l00631"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7"> 631</a></span> <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad127b0ad478640ede3d426e3a58d2632">DIType</a> *<a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">FlowSensitiveTBHC::getTypeFromCTirMetadata</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *s)</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>  <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a> *stmt = SVFUtil::dyn_cast<StmtSVFGNode>(s))</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>  {</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>  <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *v = stmt->getInst();</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>  <span class="keywordflow">if</span> (v != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>  {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>  <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ac4565775cced4444ba007e310c4a02d8">TypeBasedHeapCloning::getTypeFromCTirMetadata</a>(v);</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>  }</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>  <span class="keywordflow">return</span> <span class="keyword">nullptr</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> </div><div class="line"><a name="l00645"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#a3af0297eb75ac4009433be44bb286d30"> 645</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a3af0297eb75ac4009433be44bb286d30">FlowSensitiveTBHC::expandFIObjs</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& pts, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>& expandedPts)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span> {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>  expandedPts = pts;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</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>  expandedPts |= <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a56dc95bb4b6d48f82c87c6280237990a">getAllFieldsObjVars</a>(o);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>  <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a> *gepObj = SVFUtil::dyn_cast<GepObjPN>(<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-><a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(o)))</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>  expandedPts |= <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#a56dc95bb4b6d48f82c87c6280237990a">getAllFieldsObjVars</a>(o);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>  o = gepObj->getBaseNode();</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>  }</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>  }</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span> }</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span> </div><div class="line"><a name="l00659"></a><span class="lineno"><a class="line" href="classSVF_1_1FlowSensitiveTBHC.html#abe784dfae06a7c1943b8f0a18bd79f14"> 659</a></span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1FlowSensitiveTBHC.html#abe784dfae06a7c1943b8f0a18bd79f14">FlowSensitiveTBHC::countAliases</a>(<a class="code" href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">Set</a><std::pair<NodeID, NodeID>> cmp, <span class="keywordtype">unsigned</span> *mayAliases, <span class="keywordtype">unsigned</span> *noAliases)</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span> {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>  <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map<std::pair<NodeID, NodeID></a>, <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>> filteredPts;</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>  <span class="keywordflow">for</span> (std::pair<NodeID, NodeID> locP : cmp)</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>  {</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &filterSet = <a class="code" href="classSVF_1_1TypeBasedHeapCloning.html#ae520e0551e63223a908f92a6b9667356">getFilterSet</a>(locP.first);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &pts = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(locP.second);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>  <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &ptsFiltered = filteredPts[locP];</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="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : pts)</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>  {</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>  <span class="keywordflow">if</span> (filterSet.<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(o)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>  ptsFiltered.<a class="code" href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">set</a>(o);</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>  }</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>  }</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span> </div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>  <span class="keywordflow">for</span> (std::pair<NodeID, NodeID> locPA : cmp)</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  {</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &aPts = filteredPts[locPA];</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>  <span class="keywordflow">for</span> (std::pair<NodeID, NodeID> locPB : cmp)</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>  {</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>  <span class="keywordflow">if</span> (locPB == locPA) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &bPts = filteredPts[locPB];</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span> </div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>  <span class="keywordflow">switch</span> (<a class="code" href="classSVF_1_1BVDataPTAImpl.html#ad06fbd9a51499c668662b533eeb2e4ac">alias</a>(aPts, bPts))</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>  {</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>  <span class="keywordflow">case</span> llvm::AliasResult::NoAlias:</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>  ++(*noAliases);</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>  <span class="keywordflow">case</span> llvm::AliasResult::MayAlias:</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>  ++(*mayAliases);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="stringliteral">"Not May/NoAlias?"</span>);</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>  }</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>  }</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span> </div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span> }</div><div class="ttc" id="FlowSensitiveTBHC_8h_html"><div class="ttname"><a href="FlowSensitiveTBHC_8h.html">FlowSensitiveTBHC.h</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1FlowSensitiveTBHC_html_a3564d6ad7e12e0a833b4cea203a809e4"><div class="ttname"><a href="classSVF_1_1FlowSensitiveTBHC.html#a3564d6ad7e12e0a833b4cea203a809e4">SVF::FlowSensitiveTBHC::finalize</a></div><div class="ttdeci">virtual void finalize() override</div><div class="ttdoc">Finalize analysis. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitiveTBHC_8cpp_source.html#l00052">FlowSensitiveTBHC.cpp:52</a></div></div>
|
|
71
71
|
<div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1DCHGraph_html_a0788694fbff155949fc4f4d6487c223e"><div class="ttname"><a href="classSVF_1_1DCHGraph.html#a0788694fbff155949fc4f4d6487c223e">SVF::DCHGraph::getNumFields</a></div><div class="ttdeci">unsigned getNumFields(const DIType *base)</div><div class="ttdef"><b>Definition:</b> <a href="DCHG_8h_source.html#l00335">DCHG.h:335</a></div></div>
|
|
@@ -90,7 +90,6 @@ $(function() {
|
|
|
90
90
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_aa401cc90de4e1c6842f08a43a28c5aa1"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aa401cc90de4e1c6842f08a43a28c5aa1">SVF::FlowSensitive::processCopy</a></div><div class="ttdeci">virtual bool processCopy(const CopySVFGNode *copy)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00435">FlowSensitive.cpp:435</a></div></div>
|
|
91
91
|
<div class="ttc" id="classSVF_1_1SVFGBuilder_html_a54a713e3989597b11cee70864d0197bd"><div class="ttname"><a href="classSVF_1_1SVFGBuilder.html#a54a713e3989597b11cee70864d0197bd">SVF::SVFGBuilder::buildFullSVFG</a></div><div class="ttdeci">SVFG * buildFullSVFG(BVDataPTAImpl *pta)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGBuilder_8cpp_source.html#l00054">SVFGBuilder.cpp:54</a></div></div>
|
|
92
92
|
<div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_afe416f9ec57923f34ef1db3890a3f9e1"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#afe416f9ec57923f34ef1db3890a3f9e1">SVF::TypeBasedHeapCloning::getGepObjs</a></div><div class="ttdeci">const NodeBS & getGepObjs(NodeID base)</div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00137">TypeBasedHeapCloning.cpp:137</a></div></div>
|
|
93
|
-
<div class="ttc" id="classSVF_1_1FlowSensitiveTBHC_html_a96089e24ef6aaa7f7d30c50a64d5042f"><div class="ttname"><a href="classSVF_1_1FlowSensitiveTBHC.html#a96089e24ef6aaa7f7d30c50a64d5042f">SVF::FlowSensitiveTBHC::getAllFieldsObjNode</a></div><div class="ttdeci">virtual const NodeBS & getAllFieldsObjNode(NodeID id) override</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitiveTBHC_8cpp_source.html#l00532">FlowSensitiveTBHC.cpp:532</a></div></div>
|
|
94
93
|
<div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
|
|
95
94
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a42a7e39e0e15576742f8ba7c32579ea2"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2">SVF::FlowSensitive::isStrongUpdate</a></div><div class="ttdeci">bool isStrongUpdate(const SVFGNode *node, NodeID &singleton)</div><div class="ttdoc">Return TRUE if this is a strong update STORE statement. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00626">FlowSensitive.cpp:626</a></div></div>
|
|
96
95
|
<div class="ttc" id="classSVF_1_1AndersenWaveDiff_html"><div class="ttname"><a href="classSVF_1_1AndersenWaveDiff.html">SVF::AndersenWaveDiff</a></div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00419">Andersen.h:419</a></div></div>
|
|
@@ -117,7 +116,7 @@ $(function() {
|
|
|
117
116
|
<div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map< Key, Value, Hash, KeyEqual, Allocator > Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00100">SVFBasicTypes.h:100</a></div></div>
|
|
118
117
|
<div class="ttc" id="classSVF_1_1FlowSensitiveTBHC_html_a15b8610fd7456d158a9e640c69d401a0"><div class="ttname"><a href="classSVF_1_1FlowSensitiveTBHC.html#a15b8610fd7456d158a9e640c69d401a0">SVF::FlowSensitiveTBHC::propAlongDirectEdge</a></div><div class="ttdeci">virtual bool propAlongDirectEdge(const DirectSVFGEdge *edge) override</div><div class="ttdoc">Propagate points-to information along a DIRECT SVFG edge. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitiveTBHC_8cpp_source.html#l00184">FlowSensitiveTBHC.cpp:184</a></div></div>
|
|
119
118
|
<div class="ttc" id="classSVF_1_1FlowSensitiveTBHC_html_a3af0297eb75ac4009433be44bb286d30"><div class="ttname"><a href="classSVF_1_1FlowSensitiveTBHC.html#a3af0297eb75ac4009433be44bb286d30">SVF::FlowSensitiveTBHC::expandFIObjs</a></div><div class="ttdeci">virtual void expandFIObjs(const PointsTo &pts, PointsTo &expandedPts) override</div><div class="ttdoc">Expand FI objects. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitiveTBHC_8cpp_source.html#l00645">FlowSensitiveTBHC.cpp:645</a></div></div>
|
|
120
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_a5d15e4b09784f438568ebe61f8aa5156"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">SVF::SVFIR::isConstantObj</a></div><div class="ttdeci">bool isConstantObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
119
|
+
<div class="ttc" id="classSVF_1_1SVFIR_html_a5d15e4b09784f438568ebe61f8aa5156"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">SVF::SVFIR::isConstantObj</a></div><div class="ttdeci">bool isConstantObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00408">SVFIR.h:408</a></div></div>
|
|
121
120
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a88f9752372eabb71f47f13a89e4d6d9c"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a88f9752372eabb71f47f13a89e4d6d9c">SVF::FlowSensitive::FlowSensitiveStat</a></div><div class="ttdeci">friend class FlowSensitiveStat</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00051">FlowSensitive.h:51</a></div></div>
|
|
122
121
|
<div class="ttc" id="classSVF_1_1PointsTo_html_af61271fefa574c39f405fdfee59a8b3f"><div class="ttname"><a href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">SVF::PointsTo::test</a></div><div class="ttdeci">bool test(u32_t n) const</div><div class="ttdoc">Returns true if n is in this set. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00125">PointsTo.cpp:125</a></div></div>
|
|
123
122
|
<div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a6363466e64eee4405806568d26206d2e"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a6363466e64eee4405806568d26206d2e">SVF::TypeBasedHeapCloning::undefType</a></div><div class="ttdeci">static const DIType * undefType</div><div class="ttdoc">The undefined type (•); void. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8h_source.html#l00027">TypeBasedHeapCloning.h:27</a></div></div>
|
|
@@ -149,7 +148,6 @@ $(function() {
|
|
|
149
148
|
<div class="ttc" id="classSVF_1_1FlowSensitiveTBHC_html_abcab6281cced08d90c92d67d43a37c2c"><div class="ttname"><a href="classSVF_1_1FlowSensitiveTBHC.html#abcab6281cced08d90c92d67d43a37c2c">SVF::FlowSensitiveTBHC::analyze</a></div><div class="ttdeci">virtual void analyze() override</div><div class="ttdoc">Flow sensitive analysis with FSTBHC. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitiveTBHC_8cpp_source.html#l00029">FlowSensitiveTBHC.cpp:29</a></div></div>
|
|
150
149
|
<div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
|
|
151
150
|
<div class="ttc" id="classSVF_1_1FlowSensitiveTBHC_html_a045ffbf7eea276d154be2cf883ea71f7"><div class="ttname"><a href="classSVF_1_1FlowSensitiveTBHC.html#a045ffbf7eea276d154be2cf883ea71f7">SVF::FlowSensitiveTBHC::getTypeFromCTirMetadata</a></div><div class="ttdeci">const DIType * getTypeFromCTirMetadata(const SVFGNode *)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitiveTBHC_8cpp_source.html#l00631">FlowSensitiveTBHC.cpp:631</a></div></div>
|
|
152
|
-
<div class="ttc" id="classSVF_1_1NormalGepPE_html"><div class="ttname"><a href="classSVF_1_1NormalGepPE.html">SVF::NormalGepPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00704">SVFStatements.h:704</a></div></div>
|
|
153
151
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_ac5683fe2e24b393ccc5cb6d8bc92cf2b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#ac5683fe2e24b393ccc5cb6d8bc92cf2b">SVF::PointerAnalysis::setObjFieldInsensitive</a></div><div class="ttdeci">void setObjFieldInsensitive(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00365">PointerAnalysis.h:365</a></div></div>
|
|
154
152
|
<div class="ttc" id="classSVF_1_1PointsTo_html_ac4688413177b49b37dbbfd3ed188d59b"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty(void) const</div><div class="ttdoc">Returns true if set is empty. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00094">PointsTo.cpp:94</a></div></div>
|
|
155
153
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a240219c2dc4f5cc5f85445e18c79b83b"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a240219c2dc4f5cc5f85445e18c79b83b">SVF::PointerAnalysis::getPAG</a></div><div class="ttdeci">SVFIR * getPAG() const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00205">PointerAnalysis.h:205</a></div></div>
|
|
@@ -170,6 +168,7 @@ $(function() {
|
|
|
170
168
|
<div class="ttc" id="classSVF_1_1FlowSensitiveTBHC_html_abf5cca7e8332930c8f6adbfdb6f72629"><div class="ttname"><a href="classSVF_1_1FlowSensitiveTBHC.html#abf5cca7e8332930c8f6adbfdb6f72629">SVF::FlowSensitiveTBHC::propDFOutToIn</a></div><div class="ttdeci">virtual bool propDFOutToIn(const SVFGNode *srcStmt, NodeID srcVar, const SVFGNode *dstStmt, NodeID dstVar) override</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitiveTBHC_8cpp_source.html#l00570">FlowSensitiveTBHC.cpp:570</a></div></div>
|
|
171
169
|
<div class="ttc" id="classSVF_1_1GenericEdge_html_ab47ca533c415841ef75456cbad439589"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">SVF::GenericEdge::getSrcNode</a></div><div class="ttdeci">NodeType * getSrcNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00085">GenericGraph.h:85</a></div></div>
|
|
172
170
|
<div class="ttc" id="classSVF_1_1PointsTo_html_ab196d86cfb48d1c5d27a0c03c7497afa"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ab196d86cfb48d1c5d27a0c03c7497afa">SVF::PointsTo::set</a></div><div class="ttdeci">void set(u32_t n)</div><div class="ttdoc">Inserts n in the set. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00149">PointsTo.cpp:149</a></div></div>
|
|
171
|
+
<div class="ttc" id="classSVF_1_1FlowSensitiveTBHC_html_a56dc95bb4b6d48f82c87c6280237990a"><div class="ttname"><a href="classSVF_1_1FlowSensitiveTBHC.html#a56dc95bb4b6d48f82c87c6280237990a">SVF::FlowSensitiveTBHC::getAllFieldsObjVars</a></div><div class="ttdeci">virtual const NodeBS & getAllFieldsObjVars(NodeID id) override</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitiveTBHC_8cpp_source.html#l00532">FlowSensitiveTBHC.cpp:532</a></div></div>
|
|
173
172
|
<div class="ttc" id="classSVF_1_1TypeBasedHeapCloning_html_a21d2fd8bbef0c6f6ddddb5387569a7fa"><div class="ttname"><a href="classSVF_1_1TypeBasedHeapCloning.html#a21d2fd8bbef0c6f6ddddb5387569a7fa">SVF::TypeBasedHeapCloning::getRawCTirMetadata</a></div><div class="ttdeci">static const MDNode * getRawCTirMetadata(const Value *)</div><div class="ttdoc">Returns raw ctir metadata of a Value. Returns null if it doesn&#39;t exist. </div><div class="ttdef"><b>Definition:</b> <a href="TypeBasedHeapCloning_8cpp_source.html#l00483">TypeBasedHeapCloning.cpp:483</a></div></div>
|
|
174
173
|
<div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00176">SVFBasicTypes.h:176</a></div></div>
|
|
175
174
|
<div class="ttc" id="classSVF_1_1DFPTData_html_a09bc4b7eef592af2c2c84b60029b5b52"><div class="ttname"><a href="classSVF_1_1DFPTData.html#a09bc4b7eef592af2c2c84b60029b5b52">SVF::DFPTData::updateATVPts</a></div><div class="ttdeci">virtual bool updateATVPts(const Key &srcVar, LocID dstLoc, const Key &dstVar)=0</div><div class="ttdoc">Update address-taken variables OUT[dstLoc:dstVar] with points-to of top-level pointers. </div></div>
|
|
@@ -190,6 +189,7 @@ $(function() {
|
|
|
190
189
|
<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>
|
|
191
190
|
<div class="ttc" id="classSVF_1_1PHIVFGNode_html_a103e55e670ce614cabc13b8dc5b17b91"><div class="ttname"><a href="classSVF_1_1PHIVFGNode.html#a103e55e670ce614cabc13b8dc5b17b91">SVF::PHIVFGNode::isPTANode</a></div><div class="ttdeci">bool isPTANode() const</div><div class="ttdoc">Whether this phi node is of pointer type (used for pointer analysis). </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00638">VFGNode.h:638</a></div></div>
|
|
192
191
|
<div class="ttc" id="classSVF_1_1FlowSensitiveTBHC_html_a2c47ba37bd250be455a21d1f0049d556"><div class="ttname"><a href="classSVF_1_1FlowSensitiveTBHC.html#a2c47ba37bd250be455a21d1f0049d556">SVF::FlowSensitiveTBHC::getRawCTirMetadata</a></div><div class="ttdeci">static const MDNode * getRawCTirMetadata(const SVFGNode *)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitiveTBHC_8cpp_source.html#l00617">FlowSensitiveTBHC.cpp:617</a></div></div>
|
|
192
|
+
<div class="ttc" id="classSVF_1_1NormalGepStmt_html"><div class="ttname"><a href="classSVF_1_1NormalGepStmt.html">SVF::NormalGepStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00709">SVFStatements.h:709</a></div></div>
|
|
193
193
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_af90d2ccb01402c5ca9d7a059f345c816"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#af90d2ccb01402c5ca9d7a059f345c816">SVF::PointerAnalysis::isFIObjNode</a></div><div class="ttdeci">bool isFIObjNode(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00345">PointerAnalysis.h:345</a></div></div>
|
|
194
194
|
<div class="ttc" id="classSVF_1_1GepObjPN_html"><div class="ttname"><a href="classSVF_1_1GepObjPN.html">SVF::GepObjPN</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00451">SVFVariables.h:451</a></div></div>
|
|
195
195
|
<div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
|
|
@@ -209,7 +209,7 @@ $(function() {
|
|
|
209
209
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_adc7f5c71efb9cd1bec4f5ca9127654c3"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">SVF::PointerAnalysis::pag</a></div><div class="ttdeci">static SVFIR * pag</div><div class="ttdoc">SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00147">PointerAnalysis.h:147</a></div></div>
|
|
210
210
|
<div class="ttc" id="classSVF_1_1IndirectSVFGEdge_html"><div class="ttname"><a href="classSVF_1_1IndirectSVFGEdge.html">SVF::IndirectSVFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGEdge_8h_source.html#l00042">SVFGEdge.h:42</a></div></div>
|
|
211
211
|
<div class="ttc" id="classSVF_1_1FormalRetVFGNode_html"><div class="ttname"><a href="classSVF_1_1FormalRetVFGNode.html">SVF::FormalRetVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l01004">VFGNode.h:1004</a></div></div>
|
|
212
|
-
<div class="ttc" id="classSVF_1_1SVFIR_html_a07716ca7f769f704a80ccee1a6ad7ee2"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a07716ca7f769f704a80ccee1a6ad7ee2">SVF::SVFIR::isNonPointerObj</a></div><div class="ttdeci">bool isNonPointerObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#
|
|
212
|
+
<div class="ttc" id="classSVF_1_1SVFIR_html_a07716ca7f769f704a80ccee1a6ad7ee2"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a07716ca7f769f704a80ccee1a6ad7ee2">SVF::SVFIR::isNonPointerObj</a></div><div class="ttdeci">bool isNonPointerObj(NodeID id) const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00414">SVFIR.h:414</a></div></div>
|
|
213
213
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a82b76087363b26fbe749653935569de7"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a82b76087363b26fbe749653935569de7">SVF::FlowSensitive::storeTime</a></div><div class="ttdeci">double storeTime</div><div class="ttdoc">time of store edges </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00316">FlowSensitive.h:316</a></div></div>
|
|
214
214
|
<div class="ttc" id="FlowSensitiveTBHC_8cpp_html_af72d866f4ffed004e104b686d4f94cb3"><div class="ttname"><a href="FlowSensitiveTBHC_8cpp.html#af72d866f4ffed004e104b686d4f94cb3">getVTInitType</a></div><div class="ttdeci">static const DIType * getVTInitType(const CopySVFGNode *copy, DCHGraph *dchg)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitiveTBHC_8cpp_source.html#l00506">FlowSensitiveTBHC.cpp:506</a></div></div>
|
|
215
215
|
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a3550ea3f087ec557a6fe076bc443b05d"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a3550ea3f087ec557a6fe076bc443b05d">SVF::PointerAnalysis::print_stat</a></div><div class="ttdeci">bool print_stat</div><div class="ttdoc">User input flags. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00139">PointerAnalysis.h:139</a></div></div>
|