svf-tools 1.0.327 → 1.0.331
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/AndersenHCD_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +7 -7
- package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +4 -4
- package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +38 -38
- package/SVF-doxygen/html/html/Andersen_8h_source.html +6 -6
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +2 -3
- package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +3 -3
- package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/ConsG_8h_source.html +4 -4
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +6 -6
- package/SVF-doxygen/html/html/FSMPTA_8cpp_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 +3 -3
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +6 -7
- package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/IRGraph_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8cpp.html +1 -0
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +12 -15
- package/SVF-doxygen/html/html/LocationSet_8h.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8h_source.html +26 -40
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +5 -5
- package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +10 -10
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +28 -29
- package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +29 -29
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +11 -3
- package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +71 -70
- package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +12 -12
- package/SVF-doxygen/html/html/SVFIR_8h_source.html +13 -13
- package/SVF-doxygen/html/html/SVFStatements_8h_source.html +3 -3
- package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFVariables_8h.html +1 -1
- package/SVF-doxygen/html/html/SVFVariables_8h_source.html +69 -69
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +4 -4
- package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +21 -21
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +52 -63
- package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +72 -79
- 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/TypeBasedHeapCloning_8h_source.html +2 -2
- package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/annotated.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +79 -79
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +23 -24
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +2 -3
- package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +56 -55
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +44 -41
- package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +3 -3
- 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 +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +13 -13
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlattenedFieldInfo-members.html +85 -0
- package/SVF-doxygen/html/html/classSVF_1_1FlattenedFieldInfo.html +254 -0
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +10 -10
- package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +22 -23
- package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +173 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +813 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +8 -8
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +17 -21
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +150 -326
- package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +6 -6
- package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +84 -84
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +96 -96
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1ObjVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +15 -15
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +75 -73
- package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +31 -31
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +57 -56
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +301 -229
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SVFVar.png +0 -0
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1StInfo-members.html +11 -14
- package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +70 -168
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +30 -30
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +20 -24
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +110 -291
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +9 -9
- package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +18 -18
- package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +3 -3
- package/SVF-doxygen/html/html/classes.html +6 -6
- package/SVF-doxygen/html/html/functions_a.html +13 -10
- package/SVF-doxygen/html/html/functions_b.html +1 -5
- package/SVF-doxygen/html/html/functions_c.html +19 -20
- package/SVF-doxygen/html/html/functions_d.html +1 -1
- package/SVF-doxygen/html/html/functions_e.html +0 -16
- package/SVF-doxygen/html/html/functions_f.html +21 -19
- package/SVF-doxygen/html/html/functions_func.html +15 -12
- package/SVF-doxygen/html/html/functions_func_c.html +16 -17
- package/SVF-doxygen/html/html/functions_func_d.html +1 -1
- package/SVF-doxygen/html/html/functions_func_e.html +2 -8
- package/SVF-doxygen/html/html/functions_func_f.html +4 -4
- package/SVF-doxygen/html/html/functions_func_g.html +36 -58
- package/SVF-doxygen/html/html/functions_func_i.html +11 -14
- package/SVF-doxygen/html/html/functions_func_r.html +3 -3
- package/SVF-doxygen/html/html/functions_func_s.html +6 -9
- package/SVF-doxygen/html/html/functions_func_t.html +1 -1
- package/SVF-doxygen/html/html/functions_func_w.html +1 -1
- package/SVF-doxygen/html/html/functions_g.html +41 -63
- package/SVF-doxygen/html/html/functions_i.html +6 -9
- package/SVF-doxygen/html/html/functions_l.html +4 -4
- package/SVF-doxygen/html/html/functions_n.html +4 -7
- package/SVF-doxygen/html/html/functions_o.html +25 -20
- package/SVF-doxygen/html/html/functions_p.html +12 -16
- package/SVF-doxygen/html/html/functions_r.html +4 -4
- package/SVF-doxygen/html/html/functions_s.html +15 -18
- package/SVF-doxygen/html/html/functions_t.html +1 -1
- package/SVF-doxygen/html/html/functions_type_e.html +0 -4
- package/SVF-doxygen/html/html/functions_type_o.html +3 -0
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_b.html +1 -5
- package/SVF-doxygen/html/html/functions_vars_c.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_e.html +0 -6
- package/SVF-doxygen/html/html/functions_vars_f.html +9 -7
- package/SVF-doxygen/html/html/functions_vars_l.html +1 -1
- package/SVF-doxygen/html/html/functions_vars_n.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_o.html +2 -2
- package/SVF-doxygen/html/html/functions_w.html +1 -1
- package/SVF-doxygen/html/html/hierarchy.html +64 -64
- package/SVF-doxygen/html/html/namespaceSVF.html +3 -3
- package/SVF-doxygen/html/html/search/all_1.js +3 -2
- package/SVF-doxygen/html/html/search/all_10.js +6 -6
- package/SVF-doxygen/html/html/search/all_12.js +3 -3
- package/SVF-doxygen/html/html/search/all_13.js +5 -6
- package/SVF-doxygen/html/html/search/all_14.js +6 -6
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_17.js +1 -1
- package/SVF-doxygen/html/html/search/all_2.js +2 -3
- package/SVF-doxygen/html/html/search/all_3.js +5 -5
- package/SVF-doxygen/html/html/search/all_4.js +1 -1
- package/SVF-doxygen/html/html/search/all_5.js +0 -5
- package/SVF-doxygen/html/html/search/all_6.js +6 -5
- package/SVF-doxygen/html/html/search/all_7.js +15 -23
- package/SVF-doxygen/html/html/search/all_9.js +2 -3
- package/SVF-doxygen/html/html/search/all_c.js +4 -4
- package/SVF-doxygen/html/html/search/all_e.js +1 -2
- package/SVF-doxygen/html/html/search/all_f.js +5 -4
- package/SVF-doxygen/html/html/search/classes_5.js +1 -1
- package/SVF-doxygen/html/html/search/classes_6.js +1 -1
- package/SVF-doxygen/html/html/search/functions_0.js +3 -2
- package/SVF-doxygen/html/html/search/functions_10.js +2 -3
- package/SVF-doxygen/html/html/search/functions_11.js +1 -1
- package/SVF-doxygen/html/html/search/functions_14.js +1 -1
- package/SVF-doxygen/html/html/search/functions_2.js +3 -3
- package/SVF-doxygen/html/html/search/functions_3.js +1 -1
- package/SVF-doxygen/html/html/search/functions_4.js +0 -2
- package/SVF-doxygen/html/html/search/functions_5.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +15 -23
- package/SVF-doxygen/html/html/search/functions_8.js +1 -2
- package/SVF-doxygen/html/html/search/functions_a.js +1 -1
- package/SVF-doxygen/html/html/search/functions_e.js +1 -1
- package/SVF-doxygen/html/html/search/functions_f.js +1 -1
- package/SVF-doxygen/html/html/search/typedefs_4.js +0 -1
- package/SVF-doxygen/html/html/search/typedefs_e.js +1 -0
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_2.js +2 -3
- package/SVF-doxygen/html/html/search/variables_3.js +1 -1
- package/SVF-doxygen/html/html/search/variables_5.js +0 -2
- package/SVF-doxygen/html/html/search/variables_6.js +5 -4
- package/SVF-doxygen/html/html/search/variables_c.js +1 -1
- package/SVF-doxygen/html/html/search/variables_e.js +0 -1
- package/SVF-doxygen/html/html/search/variables_f.js +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
- package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +5 -5
- 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/Graphs/ConsG.h +1 -1
- package/include/Graphs/ConsGEdge.h +1 -1
- package/include/MemoryModel/LocationSet.h +39 -126
- package/include/MemoryModel/PointerAnalysis.h +1 -1
- package/include/MemoryModel/SVFIR.h +2 -2
- package/include/MemoryModel/SVFStatements.h +1 -1
- package/include/MemoryModel/SVFVariables.h +17 -11
- package/include/MemoryModel/SymbolTableInfo.h +27 -31
- package/include/SVF-FE/SVFIRBuilder.h +6 -1
- package/include/Util/IRAnnotator.h +3 -3
- package/lib/DDA/ContextDDA.cpp +1 -1
- package/lib/Graphs/ConsG.cpp +1 -1
- package/lib/Graphs/IRGraph.cpp +1 -1
- package/lib/Graphs/OfflineConsG.cpp +1 -1
- package/lib/MemoryModel/LocationSet.cpp +53 -95
- package/lib/MemoryModel/PointerAnalysis.cpp +4 -2
- package/lib/MemoryModel/PointerAnalysisImpl.cpp +4 -4
- package/lib/MemoryModel/SVFIR.cpp +4 -4
- package/lib/MemoryModel/SVFVariables.cpp +2 -2
- package/lib/MemoryModel/SymbolTableInfo.cpp +44 -212
- package/lib/SABER/SaberSVFGBuilder.cpp +1 -1
- package/lib/SVF-FE/SVFIRBuilder.cpp +135 -7
- package/lib/SVF-FE/SymbolTableBuilder.cpp +4 -4
- package/lib/Util/TypeBasedHeapCloning.cpp +10 -10
- package/lib/WPA/Andersen.cpp +1 -5
- package/lib/WPA/AndersenSFR.cpp +2 -2
- package/lib/WPA/CSC.cpp +1 -1
- package/lib/WPA/FlowSensitiveTBHC.cpp +6 -6
- package/package.json +1 -1
- package/tools/Example/svf-ex.cpp +1 -2
|
@@ -186,7 +186,7 @@ $(function() {
|
|
|
186
186
|
<div class="ttc" id="classSVF_1_1PointsTo_html"><div class="ttname"><a href="classSVF_1_1PointsTo.html">SVF::PointsTo</a></div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00027">PointsTo.h:27</a></div></div>
|
|
187
187
|
<div class="ttc" id="classSVF_1_1PointsTo_html_a84eca4c7fc833f8ca4d119cd4da08ca8"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a84eca4c7fc833f8ca4d119cd4da08ca8">SVF::PointsTo::setCurrentBestNodeMapping</a></div><div class="ttdeci">static void setCurrentBestNodeMapping(MappingPtr newCurrentBestNodeMapping, MappingPtr newCurrentBestReverseNodeMapping)</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00355">PointsTo.cpp:355</a></div></div>
|
|
188
188
|
<div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00149">SVFBasicTypes.h:149</a></div></div>
|
|
189
|
-
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a431ec4f85eb0f029e5740b92fd9ceb32"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">SVF::PointerAnalysis::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialization of a pointer analysis, including building symbol table and SVFIR etc. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#
|
|
189
|
+
<div class="ttc" id="classSVF_1_1PointerAnalysis_html_a431ec4f85eb0f029e5740b92fd9ceb32"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a431ec4f85eb0f029e5740b92fd9ceb32">SVF::PointerAnalysis::initialize</a></div><div class="ttdeci">virtual void initialize()</div><div class="ttdoc">Initialization of a pointer analysis, including building symbol table and SVFIR etc. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8cpp_source.html#l00113">PointerAnalysis.cpp:113</a></div></div>
|
|
190
190
|
<div class="ttc" id="classSVF_1_1PointsTo_html_a8f741cdffbf3c5fe0f602cdca677dee6"><div class="ttname"><a href="classSVF_1_1PointsTo.html#a8f741cdffbf3c5fe0f602cdca677dee6">SVF::PointsTo::end</a></div><div class="ttdeci">const_iterator end(void) const</div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8h_source.html#l00128">PointsTo.h:128</a></div></div>
|
|
191
191
|
<div class="ttc" id="classSVF_1_1FlowSensitive_html_a94dc671f524ed3ed00f5a54b13f18e18"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a94dc671f524ed3ed00f5a54b13f18e18">SVF::FlowSensitive::countAliases</a></div><div class="ttdeci">virtual void countAliases(Set< std::pair< NodeID, NodeID >> cmp, unsigned *mayAliases, unsigned *noAliases)</div><div class="ttdoc">Fills may/noAliases for the location/pointer pairs in cmp. </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00888">FlowSensitive.cpp:888</a></div></div>
|
|
192
192
|
<div class="ttc" id="classSVF_1_1NodeIDAllocator_1_1Clusterer_html_a36b25188130f4c21d145c950a70d616f"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator_1_1Clusterer.html#a36b25188130f4c21d145c950a70d616f">SVF::NodeIDAllocator::Clusterer::getReverseNodeMapping</a></div><div class="ttdeci">static std::vector< NodeID > getReverseNodeMapping(const std::vector< NodeID > &nodeMapping)</div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00387">NodeIDAllocator.cpp:387</a></div></div>
|
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">IRAnnotator.h</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="IRAnnotator_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Annotator.h</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"> * Created on: March 22, 2021</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Author: Nicholas Tsom</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#ifndef IRANNOTATOR_H_</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#define IRANNOTATOR_H_</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "<a class="code" href="SVFIR_8h.html">MemoryModel/SVFIR.h</a>"</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include "<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>"</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "llvm/IR/Metadata.h"</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> {</div><div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html"> 22</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1IRAnnotator.html">IRAnnotator</a></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#aa54df3d6c0c20c26be90bb68546dc93d"> 25</a></span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa54df3d6c0c20c26be90bb68546dc93d">IRAnnotator</a>():</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>(nullptr),</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>(nullptr)</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_1IRAnnotator.html#a6e0454ebd200005fd161cf6a2a0e1c26"> 29</a></span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a6e0454ebd200005fd161cf6a2a0e1c26">~IRAnnotator</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"><a class="line" href="classSVF_1_1IRAnnotator.html#a1dfd230ddbc751ddf6833a6dc22b84f7"> 31</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a1dfd230ddbc751ddf6833a6dc22b84f7">processAndersenResults</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> *pag, <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> *<a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>, <span class="keywordtype">bool</span> writeFlag)</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>  this->ptsTo = <a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a> = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</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>  <span class="comment">// Add a named metadata node used to check whether or not </span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="comment">// this IR has been annotated with Andersen information</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getOrInsertNamedMetadata(<span class="stringliteral">"SVFIR-Annotated"</span>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != pag-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">auto</span> nodeId = it->first;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">auto</span> pagNode = it->second;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">auto</span> gepNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a>>(pagNode);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">if</span> (gepNode && writeFlag)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a9499823922861d3d150daa41f6f5dd6b">writePAGgepNode</a>(nodeId, gepNode);</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pagNode->hasValue())</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a067fe6d76b3b11bbb726e2b40e723f78">processPAGNode</a>(pagNode->getValue(), nodeId, writeFlag);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</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> (!writeFlag)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a7f69afba3424c615736bffe2469d9a20">readPAGgepNodes</a>(pag);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="comment">// Write the PAGgepNode to the IR such that metadata name is the SVFIR node id and the operands</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="comment">// are its base node's id and location offset</span></div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a9499823922861d3d150daa41f6f5dd6b"> 64</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a9499823922861d3d150daa41f6f5dd6b">writePAGgepNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> nodeId, <a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a>* gepNode)</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>  <span class="keyword">auto</span> baseNodeId = gepNode-><a class="code" href="classSVF_1_1GepObjPN.html#aefa0383972a9c68e487ccf989a7e500c">getBaseNode</a>();</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">auto</span> locationSetOffset = gepNode-><a class="code" href="classSVF_1_1GepObjPN.html#aeb05e3a512e89c7af36c675e0efeec7e">getLocationSet</a>().<a class="code" href="classSVF_1_1LocationSet.html#ab85c3707152e03722bd631b2525f223e">getOffset</a>();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getContext();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  llvm::SmallVector<llvm::Metadata *, 32> operands;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  operands.push_back(llvm::MDString::get(context, std::to_string(baseNodeId)));</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  operands.push_back(llvm::MDString::get(context, std::to_string(locationSetOffset)));</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>  llvm::MDTuple *metadata = llvm::MDTuple::get(context, operands);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  std::string label = <span class="stringliteral">"gepnode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getOrInsertNamedMetadata(label)->addOperand(metadata);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</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>  <span class="comment">// Reads the PAGGepNodes in the annotated IR and creates a new SVFIR Node based on the</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="comment">// data contained in the operands of the metadata node</span></div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a7f69afba3424c615736bffe2469d9a20"> 82</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a7f69afba3424c615736bffe2469d9a20">readPAGgepNodes</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> *pag)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->named_metadata_begin(); it != <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->named_metadata_end(); ++it)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  std::string label = it->getName().str();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  std::string toErase = <span class="stringliteral">"gepnode-"</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">SVF::Size_t</a> pos = label.find(toErase);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">if</span> (pos == std::string::npos)</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">continue</span>;</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>  label.erase(pos, toErase.length());</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> nodeId = std::stoi(label);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">auto</span> mdNode = it->getOperand(0);</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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> baseNodeId = std::stoi(llvm::cast<llvm::MDString>(mdNode->getOperand(0))->getString().str());</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">SVF::Size_t</a> locationSetOffset = std::stoi(llvm::cast<llvm::MDString>(mdNode->getOperand(1))->getString().str());</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> locationSet = <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(locationSetOffset);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> gepnodeId = pag-><a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(baseNodeId, locationSet);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(nodeId == gepnodeId && <span class="stringliteral">"nodeId != gepnodeId"</span>);</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>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="comment">// Deduce the LLVM value's type, and process the metadata accordingly</span></div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a067fe6d76b3b11bbb726e2b40e723f78"> 109</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a067fe6d76b3b11bbb726e2b40e723f78">processPAGNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *value, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> nodeId, <span class="keywordtype">bool</span> writeFlag)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">if</span> (<span class="keyword">auto</span> instruction = const_cast<Instruction *>(SVFUtil::dyn_cast<Instruction>(value)))</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a9ed32d75937cc2da63cf95fbc477c66a">processInstructionNode</a>(instruction, nodeId, writeFlag);</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> argument = const_cast<Argument *>(SVFUtil::dyn_cast<Argument>(value)))</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a79ce14045e7321569b95cff0b4800c08">processArgumentNode</a>(argument, nodeId, writeFlag);</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">function</span> = const_cast<Function *>(SVFUtil::dyn_cast<Function>(value)))</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a31cbc6e5c63442cdbab3eea1b7b5393f">processFunctionNode</a>(<span class="keyword">function</span>, nodeId, writeFlag);</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">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> globalVar = const_cast<GlobalVariable *>(SVFUtil::dyn_cast<GlobalVariable>(value)))</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>  <a class="code" href="classSVF_1_1IRAnnotator.html#ac0aa0266a7284a46ad62211fb595d663">processGlobalVarNode</a>(globalVar, nodeId, writeFlag);</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> basicBlock = const_cast<BasicBlock *>(SVFUtil::dyn_cast<BasicBlock>(value)))</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a6da6bf2db9dd582739e621aefc72025f">processBasicBlockNode</a>(basicBlock, nodeId, writeFlag);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> constant = const_cast<Constant *>(SVFUtil::dyn_cast<Constant>(value)))</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a0a26b250269a2e38a5507d68fdbe03f4">processConstantNode</a>(nodeId, writeFlag);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> inlineAsm = const_cast<llvm::InlineAsm *>(SVFUtil::dyn_cast<llvm::InlineAsm>(value)))</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>  <a class="code" href="classSVF_1_1IRAnnotator.html#ad7bc258f3a6201d06f80b3c4422536b2">processInlineAsmNode</a>(inlineAsm, nodeId, writeFlag);</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">else</span></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>  std::cout << <span class="stringliteral">"Value is NOT a Instruction, Argument, Function, GlobalVariable, BasicBlock, Constant or InlineAsm"</span> << std::endl;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << *value << <span class="stringliteral">"\n"</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"><a class="line" href="classSVF_1_1IRAnnotator.html#a9ed32d75937cc2da63cf95fbc477c66a"> 146</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a9ed32d75937cc2da63cf95fbc477c66a">processInstructionNode</a>(<a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *instruction, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</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>  std::string label = <span class="stringliteral">"inode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span> (writeFlag)</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>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = instruction->getContext();</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  instruction->setMetadata(label, mdNodePts);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keyword">auto</span> mdNode = instruction->getMetadata(label);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at instruction"</span>);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(nodeId, mdNode);</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"><a class="line" href="classSVF_1_1IRAnnotator.html#a79ce14045e7321569b95cff0b4800c08"> 164</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a79ce14045e7321569b95cff0b4800c08">processArgumentNode</a>(<a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a> *argument, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</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>  std::string label = <span class="stringliteral">"anode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = argument->getContext();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  argument->getParent()->setMetadata(label, mdNodePts);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">auto</span> mdNode = argument->getParent()->getMetadata(label);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at argument"</span>);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(nodeId, mdNode);</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> </div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a31cbc6e5c63442cdbab3eea1b7b5393f"> 182</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a31cbc6e5c63442cdbab3eea1b7b5393f">processFunctionNode</a>(<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *<span class="keyword">function</span>, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  std::string label = <span class="stringliteral">"fnode-"</span> + std::to_string(nodeId);</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="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = <span class="keyword">function</span>->getContext();</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keyword">function</span>->setMetadata(label, mdNodePts);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keyword">auto</span> mdNode = <span class="keyword">function</span>->getMetadata(label);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at function"</span>);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(nodeId, mdNode);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#ac0aa0266a7284a46ad62211fb595d663"> 200</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#ac0aa0266a7284a46ad62211fb595d663">processGlobalVarNode</a>(<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *globalVar, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  std::string label = <span class="stringliteral">"gnode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = globalVar->getContext();</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  globalVar->setMetadata(label, mdNodePts);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">else</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="keyword">auto</span> mdNode = globalVar->getMetadata(label);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at instruction"</span>);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(nodeId, mdNode);</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"> 217</span> </div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a6da6bf2db9dd582739e621aefc72025f"> 218</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a6da6bf2db9dd582739e621aefc72025f">processBasicBlockNode</a>(<a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *basicBlock, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  std::string label = <span class="stringliteral">"bnode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">if</span> (writeFlag)</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>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = basicBlock->getContext();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  basicBlock->getParent()->setMetadata(label, mdNodePts);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keyword">auto</span> mdNode = basicBlock->getParent()->getMetadata(label);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at basicBlock"</span>);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(nodeId, mdNode);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a0a26b250269a2e38a5507d68fdbe03f4"> 236</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a0a26b250269a2e38a5507d68fdbe03f4">processConstantNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</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>  std::string label = <span class="stringliteral">"cnode-"</span> + std::to_string(nodeId);</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="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getContext();</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getOrInsertNamedMetadata(label)->addOperand(mdNodePts);</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="keyword">auto</span> mdNode = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getNamedMetadata(label);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at instruction"</span>);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#af48723d319bbe2ecfd0c4777c1c92dc1">addAndersenNamedMetdata</a>(nodeId, mdNode);</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>  }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#ad7bc258f3a6201d06f80b3c4422536b2"> 254</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#ad7bc258f3a6201d06f80b3c4422536b2">processInlineAsmNode</a>(llvm::InlineAsm *inlineAsm, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  std::string label = <span class="stringliteral">"iAsmnode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getContext();</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getOrInsertNamedMetadata(label)->addOperand(mdNodePts);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">auto</span> mdNode = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getNamedMetadata(label);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at inlineAsm"</span>);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#af48723d319bbe2ecfd0c4777c1c92dc1">addAndersenNamedMetdata</a>(nodeId, mdNode);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227"> 272</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *mdNode)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span> (mdNode)</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < mdNode->getNumOperands(); i++)</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keyword">auto</span> anderNodeIdStr = llvm::cast<llvm::MDString>(mdNode->getOperand(i))->getString().str();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">auto</span> anderNodeId = <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a>(std::stoul(anderNodeIdStr));</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(nodeId, anderNodeId);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  }</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</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> </div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#af48723d319bbe2ecfd0c4777c1c92dc1"> 285</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#af48723d319bbe2ecfd0c4777c1c92dc1">addAndersenNamedMetdata</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <a class="code" href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">NamedMDNode</a> *mdNode)</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">if</span> (mdNode)</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="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < mdNode->getNumOperands(); i++)</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keyword">auto</span> node = mdNode->getOperand(i);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < node->getNumOperands(); j++)</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keyword">auto</span> anderNodeIdStr = llvm::cast<llvm::MDString>(node->getOperand(j))->getString().str();</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keyword">auto</span> anderNodeId = <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a>(std::stoul(anderNodeIdStr));</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(nodeId, anderNodeId);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</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> </div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441"> 303</a></span>  <span class="keyword">inline</span> llvm::MDTuple* <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  llvm::SmallVector<llvm::Metadata *, 32> operands;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keyword">auto</span> &ptTo = <a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(nodeId);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> p : ptTo)</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>  operands.push_back(llvm::MDString::get(context, std::to_string(p)));</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">return</span> llvm::MDTuple::get(context, operands);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b"> 314</a></span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5"> 315</a></span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> *<a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> };</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> } <span class="comment">// End namespace SVF</span></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="preprocessor">#endif </span><span class="comment">/* IRANNOTATOR_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00042">PointerAnalysisImpl.h:42</a></div></div>
|
|
69
|
+
<a href="IRAnnotator_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Annotator.h</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"> * Created on: March 22, 2021</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Author: Nicholas Tsom</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#ifndef IRANNOTATOR_H_</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#define IRANNOTATOR_H_</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="preprocessor">#include "<a class="code" href="SVFIR_8h.html">MemoryModel/SVFIR.h</a>"</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="preprocessor">#include "<a class="code" href="PointerAnalysisImpl_8h.html">MemoryModel/PointerAnalysisImpl.h</a>"</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="preprocessor">#include "<a class="code" href="SVFUtil_8h.html">Util/SVFUtil.h</a>"</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="preprocessor">#include "llvm/IR/Metadata.h"</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> </div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> </div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> {</div><div class="line"><a name="l00022"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html"> 22</a></span> <span class="keyword">class </span><a class="code" href="classSVF_1_1IRAnnotator.html">IRAnnotator</a></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> {</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#aa54df3d6c0c20c26be90bb68546dc93d"> 25</a></span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa54df3d6c0c20c26be90bb68546dc93d">IRAnnotator</a>():</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>(nullptr),</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>(nullptr)</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_1IRAnnotator.html#a6e0454ebd200005fd161cf6a2a0e1c26"> 29</a></span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a6e0454ebd200005fd161cf6a2a0e1c26">~IRAnnotator</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"><a class="line" href="classSVF_1_1IRAnnotator.html#a1dfd230ddbc751ddf6833a6dc22b84f7"> 31</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a1dfd230ddbc751ddf6833a6dc22b84f7">processAndersenResults</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> *pag, <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> *<a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>, <span class="keywordtype">bool</span> writeFlag)</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>  this->ptsTo = <a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a> = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-><a class="code" href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">getMainLLVMModule</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>  <span class="comment">// Add a named metadata node used to check whether or not </span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  <span class="comment">// this IR has been annotated with Andersen information</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  <span class="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getOrInsertNamedMetadata(<span class="stringliteral">"SVFIR-Annotated"</span>);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> </div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = pag-><a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != pag-><a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  {</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keyword">auto</span> nodeId = it->first;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  <span class="keyword">auto</span> pagNode = it->second;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  <span class="keyword">auto</span> gepNode = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>>(pagNode);</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> </div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  <span class="keywordflow">if</span> (gepNode && writeFlag)</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a958e9af846c882ef3eeba4d71ff7ef7d">writePAGgepNode</a>(nodeId, gepNode);</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (pagNode->hasValue())</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a067fe6d76b3b11bbb726e2b40e723f78">processPAGNode</a>(pagNode->getValue(), nodeId, writeFlag);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  }</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> (!writeFlag)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a7f69afba3424c615736bffe2469d9a20">readPAGgepNodes</a>(pag);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> </div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="comment">// Write the PAGgepNode to the IR such that metadata name is the SVFIR node id and the operands</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="comment">// are its base node's id and location offset</span></div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a958e9af846c882ef3eeba4d71ff7ef7d"> 64</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a958e9af846c882ef3eeba4d71ff7ef7d">writePAGgepNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> nodeId, <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>* gepNode)</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>  <span class="keyword">auto</span> baseNodeId = gepNode-><a class="code" href="classSVF_1_1GepObjVar.html#a4c5e346db61f7e04c15bf8527d8eff3c">getBaseNode</a>();</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keyword">auto</span> locationSetOffset = gepNode-><a class="code" href="classSVF_1_1GepObjVar.html#aae0159e4e93e3607e425933b8ce0a66c">getOffset</a>();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getContext();</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  llvm::SmallVector<llvm::Metadata *, 32> operands;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  operands.push_back(llvm::MDString::get(context, std::to_string(baseNodeId)));</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  operands.push_back(llvm::MDString::get(context, std::to_string(locationSetOffset)));</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>  llvm::MDTuple *metadata = llvm::MDTuple::get(context, operands);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  std::string label = <span class="stringliteral">"gepnode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span> </div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getOrInsertNamedMetadata(label)->addOperand(metadata);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</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>  <span class="comment">// Reads the PAGGepNodes in the annotated IR and creates a new SVFIR Node based on the</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="comment">// data contained in the operands of the metadata node</span></div><div class="line"><a name="l00082"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a7f69afba3424c615736bffe2469d9a20"> 82</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a7f69afba3424c615736bffe2469d9a20">readPAGgepNodes</a>(<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a> *pag)</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->named_metadata_begin(); it != <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->named_metadata_end(); ++it)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  std::string label = it->getName().str();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  std::string toErase = <span class="stringliteral">"gepnode-"</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">SVF::Size_t</a> pos = label.find(toErase);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  <span class="keywordflow">if</span> (pos == std::string::npos)</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">continue</span>;</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>  label.erase(pos, toErase.length());</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> nodeId = std::stoi(label);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keyword">auto</span> mdNode = it->getOperand(0);</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>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> baseNodeId = std::stoi(llvm::cast<llvm::MDString>(mdNode->getOperand(0))->getString().str());</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">SVF::Size_t</a> locationSetOffset = std::stoi(llvm::cast<llvm::MDString>(mdNode->getOperand(1))->getString().str());</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> </div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> locationSet = <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(locationSetOffset);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> gepnodeId = pag-><a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(baseNodeId, locationSet);</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span> </div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(nodeId == gepnodeId && <span class="stringliteral">"nodeId != gepnodeId"</span>);</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>  }</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span> </div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  <span class="comment">// Deduce the LLVM value's type, and process the metadata accordingly</span></div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a067fe6d76b3b11bbb726e2b40e723f78"> 109</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a067fe6d76b3b11bbb726e2b40e723f78">processPAGNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *value, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> nodeId, <span class="keywordtype">bool</span> writeFlag)</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  {</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">if</span> (<span class="keyword">auto</span> instruction = const_cast<Instruction *>(SVFUtil::dyn_cast<Instruction>(value)))</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a9ed32d75937cc2da63cf95fbc477c66a">processInstructionNode</a>(instruction, nodeId, writeFlag);</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> argument = const_cast<Argument *>(SVFUtil::dyn_cast<Argument>(value)))</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a79ce14045e7321569b95cff0b4800c08">processArgumentNode</a>(argument, nodeId, writeFlag);</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">function</span> = const_cast<Function *>(SVFUtil::dyn_cast<Function>(value)))</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  {</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a31cbc6e5c63442cdbab3eea1b7b5393f">processFunctionNode</a>(<span class="keyword">function</span>, nodeId, writeFlag);</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">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> globalVar = const_cast<GlobalVariable *>(SVFUtil::dyn_cast<GlobalVariable>(value)))</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>  <a class="code" href="classSVF_1_1IRAnnotator.html#ac0aa0266a7284a46ad62211fb595d663">processGlobalVarNode</a>(globalVar, nodeId, writeFlag);</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>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> basicBlock = const_cast<BasicBlock *>(SVFUtil::dyn_cast<BasicBlock>(value)))</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  {</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a6da6bf2db9dd582739e621aefc72025f">processBasicBlockNode</a>(basicBlock, nodeId, writeFlag);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> constant = const_cast<Constant *>(SVFUtil::dyn_cast<Constant>(value)))</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a0a26b250269a2e38a5507d68fdbe03f4">processConstantNode</a>(nodeId, writeFlag);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  }</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> inlineAsm = const_cast<llvm::InlineAsm *>(SVFUtil::dyn_cast<llvm::InlineAsm>(value)))</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>  <a class="code" href="classSVF_1_1IRAnnotator.html#ad7bc258f3a6201d06f80b3c4422536b2">processInlineAsmNode</a>(inlineAsm, nodeId, writeFlag);</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">else</span></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>  std::cout << <span class="stringliteral">"Value is NOT a Instruction, Argument, Function, GlobalVariable, BasicBlock, Constant or InlineAsm"</span> << std::endl;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() << *value << <span class="stringliteral">"\n"</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"><a class="line" href="classSVF_1_1IRAnnotator.html#a9ed32d75937cc2da63cf95fbc477c66a"> 146</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a9ed32d75937cc2da63cf95fbc477c66a">processInstructionNode</a>(<a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *instruction, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</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>  std::string label = <span class="stringliteral">"inode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  </div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">if</span> (writeFlag)</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>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = instruction->getContext();</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  instruction->setMetadata(label, mdNodePts);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  {</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keyword">auto</span> mdNode = instruction->getMetadata(label);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at instruction"</span>);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(nodeId, mdNode);</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"><a class="line" href="classSVF_1_1IRAnnotator.html#a79ce14045e7321569b95cff0b4800c08"> 164</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a79ce14045e7321569b95cff0b4800c08">processArgumentNode</a>(<a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a> *argument, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</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>  std::string label = <span class="stringliteral">"anode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  </div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <span class="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = argument->getContext();</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  argument->getParent()->setMetadata(label, mdNodePts);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keyword">auto</span> mdNode = argument->getParent()->getMetadata(label);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at argument"</span>);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(nodeId, mdNode);</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> </div><div class="line"><a name="l00182"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a31cbc6e5c63442cdbab3eea1b7b5393f"> 182</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a31cbc6e5c63442cdbab3eea1b7b5393f">processFunctionNode</a>(<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *<span class="keyword">function</span>, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  {</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  std::string label = <span class="stringliteral">"fnode-"</span> + std::to_string(nodeId);</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="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = <span class="keyword">function</span>->getContext();</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keyword">function</span>->setMetadata(label, mdNodePts);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keyword">auto</span> mdNode = <span class="keyword">function</span>->getMetadata(label);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at function"</span>);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(nodeId, mdNode);</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  }</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span> </div><div class="line"><a name="l00200"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#ac0aa0266a7284a46ad62211fb595d663"> 200</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#ac0aa0266a7284a46ad62211fb595d663">processGlobalVarNode</a>(<a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *globalVar, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  std::string label = <span class="stringliteral">"gnode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  </div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  {</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = globalVar->getContext();</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  globalVar->setMetadata(label, mdNodePts);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">else</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="keyword">auto</span> mdNode = globalVar->getMetadata(label);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at instruction"</span>);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(nodeId, mdNode);</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"> 217</span> </div><div class="line"><a name="l00218"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a6da6bf2db9dd582739e621aefc72025f"> 218</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a6da6bf2db9dd582739e621aefc72025f">processBasicBlockNode</a>(<a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *basicBlock, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  std::string label = <span class="stringliteral">"bnode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  </div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">if</span> (writeFlag)</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>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = basicBlock->getContext();</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  basicBlock->getParent()->setMetadata(label, mdNodePts);</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keyword">auto</span> mdNode = basicBlock->getParent()->getMetadata(label);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at basicBlock"</span>);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(nodeId, mdNode);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  }</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> </div><div class="line"><a name="l00236"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a0a26b250269a2e38a5507d68fdbe03f4"> 236</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#a0a26b250269a2e38a5507d68fdbe03f4">processConstantNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</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>  std::string label = <span class="stringliteral">"cnode-"</span> + std::to_string(nodeId);</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="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getContext();</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getOrInsertNamedMetadata(label)->addOperand(mdNodePts);</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="keyword">auto</span> mdNode = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getNamedMetadata(label);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at instruction"</span>);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#af48723d319bbe2ecfd0c4777c1c92dc1">addAndersenNamedMetdata</a>(nodeId, mdNode);</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>  }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> </div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#ad7bc258f3a6201d06f80b3c4422536b2"> 254</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#ad7bc258f3a6201d06f80b3c4422536b2">processInlineAsmNode</a>(llvm::InlineAsm *inlineAsm, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <span class="keywordtype">bool</span> writeFlag)</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>  {</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>  std::string label = <span class="stringliteral">"iAsmnode-"</span> + std::to_string(nodeId);</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>  </div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordflow">if</span> (writeFlag)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>  {</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>  <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getContext();</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>  <span class="keyword">auto</span> mdNodePts = <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(nodeId, context);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getOrInsertNamedMetadata(label)->addOperand(mdNodePts);</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>  }</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>  {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>  <span class="keyword">auto</span> mdNode = <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>->getNamedMetadata(label);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mdNode != <span class="keyword">nullptr</span> && <span class="stringliteral">"Failed to retrive valid node id at inlineAsm"</span>);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#af48723d319bbe2ecfd0c4777c1c92dc1">addAndersenNamedMetdata</a>(nodeId, mdNode);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>  }</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  }</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227"> 272</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">addAndersenMetadata</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <a class="code" href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">MDNode</a> *mdNode)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>  {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>  <span class="keywordflow">if</span> (mdNode)</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>  {</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < mdNode->getNumOperands(); i++)</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>  {</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  <span class="keyword">auto</span> anderNodeIdStr = llvm::cast<llvm::MDString>(mdNode->getOperand(i))->getString().str();</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>  <span class="keyword">auto</span> anderNodeId = <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a>(std::stoul(anderNodeIdStr));</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(nodeId, anderNodeId);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>  }</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>  }</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> </div><div class="line"><a name="l00285"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#af48723d319bbe2ecfd0c4777c1c92dc1"> 285</a></span>  <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1IRAnnotator.html#af48723d319bbe2ecfd0c4777c1c92dc1">addAndersenNamedMetdata</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <a class="code" href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">NamedMDNode</a> *mdNode)</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>  {</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>  <span class="keywordflow">if</span> (mdNode)</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="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < mdNode->getNumOperands(); i++)</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>  <span class="keyword">auto</span> node = mdNode->getOperand(i);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> </div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j < node->getNumOperands(); j++)</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>  <span class="keyword">auto</span> anderNodeIdStr = llvm::cast<llvm::MDString>(node->getOperand(j))->getString().str();</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>  <span class="keyword">auto</span> anderNodeId = <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a>(std::stoul(anderNodeIdStr));</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>  <a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#af68485a2208553579f9c2e4b2cb20cff">addPts</a>(nodeId, anderNodeId);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>  }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  }</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> </div><div class="line"><a name="l00303"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441"> 303</a></span>  <span class="keyword">inline</span> llvm::MDTuple* <a class="code" href="classSVF_1_1IRAnnotator.html#a08a3ad9b6d872a70b1480f1beed49441">getMdNodePts</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a> &nodeId, <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &context)</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>  {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>  llvm::SmallVector<llvm::Metadata *, 32> operands;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>  <span class="keyword">auto</span> &ptTo = <a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>-><a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(nodeId);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>  <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span> p : ptTo)</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>  operands.push_back(llvm::MDString::get(context, std::to_string(p)));</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>  }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>  <span class="keywordflow">return</span> llvm::MDTuple::get(context, operands);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>  }</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> </div><div class="line"><a name="l00314"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b"> 314</a></span>  <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* <a class="code" href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">mainModule</a>;</div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5"> 315</a></span>  <a class="code" href="classSVF_1_1BVDataPTAImpl.html">BVDataPTAImpl</a> *<a class="code" href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">ptsTo</a>;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> </div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> };</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> } <span class="comment">// End namespace SVF</span></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="preprocessor">#endif </span><span class="comment">/* IRANNOTATOR_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="classSVF_1_1BVDataPTAImpl_html"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html">SVF::BVDataPTAImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00042">PointerAnalysisImpl.h:42</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1IRAnnotator_html_a1dfd230ddbc751ddf6833a6dc22b84f7"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#a1dfd230ddbc751ddf6833a6dc22b84f7">SVF::IRAnnotator::processAndersenResults</a></div><div class="ttdeci">void processAndersenResults(SVFIR *pag, BVDataPTAImpl *ptsTo, bool writeFlag)</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00031">IRAnnotator.h:31</a></div></div>
|
|
71
71
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00361">GenericGraph.h:361</a></div></div>
|
|
72
72
|
<div class="ttc" id="classSVF_1_1IRAnnotator_html_a31cbc6e5c63442cdbab3eea1b7b5393f"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#a31cbc6e5c63442cdbab3eea1b7b5393f">SVF::IRAnnotator::processFunctionNode</a></div><div class="ttdeci">void processFunctionNode(Function *function, const SVF::NodeID &nodeId, bool writeFlag)</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00182">IRAnnotator.h:182</a></div></div>
|
|
@@ -77,10 +77,9 @@ $(function() {
|
|
|
77
77
|
<div class="ttc" id="namespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00083">BasicTypes.h:83</a></div></div>
|
|
78
78
|
<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>
|
|
79
79
|
<div class="ttc" id="classSVF_1_1IRAnnotator_html_a6da6bf2db9dd582739e621aefc72025f"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#a6da6bf2db9dd582739e621aefc72025f">SVF::IRAnnotator::processBasicBlockNode</a></div><div class="ttdeci">void processBasicBlockNode(BasicBlock *basicBlock, const SVF::NodeID &nodeId, bool writeFlag)</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00218">IRAnnotator.h:218</a></div></div>
|
|
80
|
+
<div class="ttc" id="classSVF_1_1GepObjVar_html_aae0159e4e93e3607e425933b8ce0a66c"><div class="ttname"><a href="classSVF_1_1GepObjVar.html#aae0159e4e93e3607e425933b8ce0a66c">SVF::GepObjVar::getOffset</a></div><div class="ttdeci">u32_t getOffset() const</div><div class="ttdoc">offset of the mem object </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00495">SVFVariables.h:495</a></div></div>
|
|
80
81
|
<div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
|
|
81
82
|
<div class="ttc" id="SVFIR_8h_html"><div class="ttname"><a href="SVFIR_8h.html">SVFIR.h</a></div></div>
|
|
82
|
-
<div class="ttc" id="classSVF_1_1IRAnnotator_html_a9499823922861d3d150daa41f6f5dd6b"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#a9499823922861d3d150daa41f6f5dd6b">SVF::IRAnnotator::writePAGgepNode</a></div><div class="ttdeci">void writePAGgepNode(SVF::NodeID nodeId, GepObjPN *gepNode)</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00064">IRAnnotator.h:64</a></div></div>
|
|
83
|
-
<div class="ttc" id="classSVF_1_1GepObjPN_html_aefa0383972a9c68e487ccf989a7e500c"><div class="ttname"><a href="classSVF_1_1GepObjPN.html#aefa0383972a9c68e487ccf989a7e500c">SVF::GepObjPN::getBaseNode</a></div><div class="ttdeci">NodeID getBaseNode(void) const</div><div class="ttdoc">Return the base object from which this GEP node came from. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00501">SVFVariables.h:501</a></div></div>
|
|
84
83
|
<div class="ttc" id="classSVF_1_1IRAnnotator_html_aa36cd38b0518a9c9a3b57cea9b07b227"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#aa36cd38b0518a9c9a3b57cea9b07b227">SVF::IRAnnotator::addAndersenMetadata</a></div><div class="ttdeci">void addAndersenMetadata(const SVF::NodeID &nodeId, MDNode *mdNode)</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00272">IRAnnotator.h:272</a></div></div>
|
|
85
84
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_a9fe3fa15a6a0ec25864cb8439a45596e"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#a9fe3fa15a6a0ec25864cb8439a45596e">SVF::LLVMModuleSet::getMainLLVMModule</a></div><div class="ttdeci">Module * getMainLLVMModule() const</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00193">LLVMModule.h:193</a></div></div>
|
|
86
85
|
<div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
|
|
@@ -97,17 +96,18 @@ $(function() {
|
|
|
97
96
|
<div class="ttc" id="namespaceSVF_html_a58cdfbc4160cae08745b67844ac29801"><div class="ttname"><a href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">SVF::Argument</a></div><div class="ttdeci">llvm::Argument Argument</div><div class="ttdoc">LLVM Aliases and constants. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00122">BasicTypes.h:122</a></div></div>
|
|
98
97
|
<div class="ttc" id="classSVF_1_1IRAnnotator_html_a01462e9ee84f490514598c68e8c9557b"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#a01462e9ee84f490514598c68e8c9557b">SVF::IRAnnotator::mainModule</a></div><div class="ttdeci">Module * mainModule</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00314">IRAnnotator.h:314</a></div></div>
|
|
99
98
|
<div class="ttc" id="classSVF_1_1IRAnnotator_html_a7f69afba3424c615736bffe2469d9a20"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#a7f69afba3424c615736bffe2469d9a20">SVF::IRAnnotator::readPAGgepNodes</a></div><div class="ttdeci">void readPAGgepNodes(SVFIR *pag)</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00082">IRAnnotator.h:82</a></div></div>
|
|
99
|
+
<div class="ttc" id="classSVF_1_1GepObjVar_html"><div class="ttname"><a href="classSVF_1_1GepObjVar.html">SVF::GepObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00451">SVFVariables.h:451</a></div></div>
|
|
100
100
|
<div class="ttc" id="classSVF_1_1IRAnnotator_html_ad7bc258f3a6201d06f80b3c4422536b2"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#ad7bc258f3a6201d06f80b3c4422536b2">SVF::IRAnnotator::processInlineAsmNode</a></div><div class="ttdeci">void processInlineAsmNode(llvm::InlineAsm *inlineAsm, const SVF::NodeID &nodeId, bool writeFlag)</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00254">IRAnnotator.h:254</a></div></div>
|
|
101
101
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
102
102
|
<div class="ttc" id="PointerAnalysisImpl_8h_html"><div class="ttname"><a href="PointerAnalysisImpl_8h.html">PointerAnalysisImpl.h</a></div></div>
|
|
103
103
|
<div class="ttc" id="classSVF_1_1IRAnnotator_html_afd8770eee0c14386c407cae026ce87b5"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#afd8770eee0c14386c407cae026ce87b5">SVF::IRAnnotator::ptsTo</a></div><div class="ttdeci">BVDataPTAImpl * ptsTo</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00315">IRAnnotator.h:315</a></div></div>
|
|
104
|
+
<div class="ttc" id="classSVF_1_1IRAnnotator_html_a958e9af846c882ef3eeba4d71ff7ef7d"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#a958e9af846c882ef3eeba4d71ff7ef7d">SVF::IRAnnotator::writePAGgepNode</a></div><div class="ttdeci">void writePAGgepNode(SVF::NodeID nodeId, GepObjVar *gepNode)</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00064">IRAnnotator.h:64</a></div></div>
|
|
104
105
|
<div class="ttc" id="namespaceSVF_html_ad3d3cec1813411f039211c86236f7adb"><div class="ttname"><a href="namespaceSVF.html#ad3d3cec1813411f039211c86236f7adb">SVF::MDNode</a></div><div class="ttdeci">llvm::MDNode MDNode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00143">BasicTypes.h:143</a></div></div>
|
|
105
106
|
<div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00069">LLVMModule.h:69</a></div></div>
|
|
106
|
-
<div class="ttc" id="classSVF_1_1LocationSet_html_ab85c3707152e03722bd631b2525f223e"><div class="ttname"><a href="classSVF_1_1LocationSet.html#ab85c3707152e03722bd631b2525f223e">SVF::LocationSet::getOffset</a></div><div class="ttdeci">Size_t getOffset() const</div><div class="ttdoc">Get methods. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00193">LocationSet.h:193</a></div></div>
|
|
107
107
|
<div class="ttc" id="namespaceSVF_html_affba423b674a0aba723e33101826e297"><div class="ttname"><a href="namespaceSVF.html#affba423b674a0aba723e33101826e297">SVF::LLVMContext</a></div><div class="ttdeci">llvm::LLVMContext LLVMContext</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00074">BasicTypes.h:74</a></div></div>
|
|
108
|
+
<div class="ttc" id="classSVF_1_1GepObjVar_html_a4c5e346db61f7e04c15bf8527d8eff3c"><div class="ttname"><a href="classSVF_1_1GepObjVar.html#a4c5e346db61f7e04c15bf8527d8eff3c">SVF::GepObjVar::getBaseNode</a></div><div class="ttdeci">NodeID getBaseNode(void) const</div><div class="ttdoc">Return the base object from which this GEP node came from. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00507">SVFVariables.h:507</a></div></div>
|
|
108
109
|
<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>
|
|
109
|
-
<div class="ttc" id="
|
|
110
|
-
<div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00093">LocationSet.h:93</a></div></div>
|
|
110
|
+
<div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00072">LocationSet.h:72</a></div></div>
|
|
111
111
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
112
112
|
<div class="ttc" id="classSVF_1_1IRAnnotator_html_a6e0454ebd200005fd161cf6a2a0e1c26"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#a6e0454ebd200005fd161cf6a2a0e1c26">SVF::IRAnnotator::~IRAnnotator</a></div><div class="ttdeci">~IRAnnotator()</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00029">IRAnnotator.h:29</a></div></div>
|
|
113
113
|
<div class="ttc" id="namespaceSVF_html_a3011dbac9102f044ad5f36a4ad3d4a71"><div class="ttname"><a href="namespaceSVF.html#a3011dbac9102f044ad5f36a4ad3d4a71">SVF::NamedMDNode</a></div><div class="ttdeci">llvm::NamedMDNode NamedMDNode</div><div class="ttdoc">LLVM metadata. </div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00141">BasicTypes.h:141</a></div></div>
|
|
@@ -116,7 +116,6 @@ $(function() {
|
|
|
116
116
|
<div class="ttc" id="classSVF_1_1IRAnnotator_html_aa54df3d6c0c20c26be90bb68546dc93d"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html#aa54df3d6c0c20c26be90bb68546dc93d">SVF::IRAnnotator::IRAnnotator</a></div><div class="ttdeci">IRAnnotator()</div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00025">IRAnnotator.h:25</a></div></div>
|
|
117
117
|
<div class="ttc" id="classSVF_1_1SVFIR_html_a20c0c65af266ac876cb722aee6e87101"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">SVF::SVFIR::getGepObjVar</a></div><div class="ttdeci">NodeID getGepObjVar(const MemObj *obj, const LocationSet &ls)</div><div class="ttdoc">Get a field SVFIR Object node according to base mem obj and offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00405">SVFIR.cpp:405</a></div></div>
|
|
118
118
|
<div class="ttc" id="classSVF_1_1IRAnnotator_html"><div class="ttname"><a href="classSVF_1_1IRAnnotator.html">SVF::IRAnnotator</a></div><div class="ttdef"><b>Definition:</b> <a href="IRAnnotator_8h_source.html#l00022">IRAnnotator.h:22</a></div></div>
|
|
119
|
-
<div class="ttc" id="classSVF_1_1GepObjPN_html_aeb05e3a512e89c7af36c675e0efeec7e"><div class="ttname"><a href="classSVF_1_1GepObjPN.html#aeb05e3a512e89c7af36c675e0efeec7e">SVF::GepObjPN::getLocationSet</a></div><div class="ttdeci">const LocationSet & getLocationSet() const</div><div class="ttdoc">offset of the mem object </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00489">SVFVariables.h:489</a></div></div>
|
|
120
119
|
<div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
|
|
121
120
|
</div><!-- fragment --></div><!-- contents -->
|
|
122
121
|
<!-- start footer part -->
|