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.
Files changed (270) hide show
  1. package/SVF-doxygen/html/html/AndersenHCD_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +1 -1
  3. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +7 -7
  4. package/SVF-doxygen/html/html/AndersenSFR_8h_source.html +4 -4
  5. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +1 -1
  6. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +38 -38
  7. package/SVF-doxygen/html/html/Andersen_8h_source.html +6 -6
  8. package/SVF-doxygen/html/html/CSC_8cpp_source.html +2 -3
  9. package/SVF-doxygen/html/html/ConsGEdge_8h_source.html +3 -3
  10. package/SVF-doxygen/html/html/ConsGNode_8h_source.html +5 -5
  11. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +2 -2
  12. package/SVF-doxygen/html/html/ConsG_8h_source.html +4 -4
  13. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +6 -6
  14. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
  15. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
  16. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
  17. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +6 -6
  18. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +2 -2
  20. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +2 -2
  21. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
  22. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +3 -3
  23. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +6 -7
  25. package/SVF-doxygen/html/html/IRGraph_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/html/IRGraph_8h_source.html +1 -1
  27. package/SVF-doxygen/html/html/LocationSet_8cpp.html +1 -0
  28. package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +12 -15
  29. package/SVF-doxygen/html/html/LocationSet_8h.html +1 -1
  30. package/SVF-doxygen/html/html/LocationSet_8h_source.html +26 -40
  31. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +5 -5
  32. package/SVF-doxygen/html/html/OfflineConsG_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/html/PAGBuilderFromFile_8cpp_source.html +2 -2
  34. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +15 -15
  35. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +10 -10
  36. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +2 -2
  37. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +28 -29
  38. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +29 -29
  39. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +11 -3
  40. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +71 -70
  41. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +12 -12
  42. package/SVF-doxygen/html/html/SVFIR_8h_source.html +13 -13
  43. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +3 -3
  44. package/SVF-doxygen/html/html/SVFVariables_8cpp_source.html +2 -2
  45. package/SVF-doxygen/html/html/SVFVariables_8h.html +1 -1
  46. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +69 -69
  47. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +4 -4
  48. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  49. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +21 -21
  50. package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +1 -1
  51. package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +52 -63
  52. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +72 -79
  53. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +3 -3
  54. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  55. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +13 -13
  56. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8h_source.html +2 -2
  57. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
  58. package/SVF-doxygen/html/html/annotated.html +6 -6
  59. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +1 -1
  60. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +79 -79
  61. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +1 -1
  62. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +23 -24
  63. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +1 -1
  64. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +9 -9
  65. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +1 -1
  66. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +4 -4
  67. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +1 -1
  68. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +11 -11
  69. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +1 -1
  70. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +13 -13
  71. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
  72. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +13 -13
  73. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +1 -1
  74. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +11 -11
  75. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +1 -1
  76. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +17 -17
  77. package/SVF-doxygen/html/html/classSVF_1_1CSC.html +2 -3
  78. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +11 -11
  79. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +11 -11
  80. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar-members.html +56 -55
  81. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +44 -41
  82. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.png +0 -0
  83. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +1 -1
  84. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +7 -7
  85. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +3 -3
  86. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode-members.html +26 -26
  87. package/SVF-doxygen/html/html/classSVF_1_1ConstraintNode.html +43 -43
  88. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +9 -9
  90. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +3 -3
  91. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
  92. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +1 -1
  93. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +11 -11
  94. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +11 -11
  95. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +13 -13
  96. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +1 -1
  97. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +4 -4
  98. package/SVF-doxygen/html/html/classSVF_1_1FlattenedFieldInfo-members.html +85 -0
  99. package/SVF-doxygen/html/html/classSVF_1_1FlattenedFieldInfo.html +254 -0
  100. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +1 -1
  101. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +7 -7
  102. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +1 -1
  103. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +9 -9
  104. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +3 -3
  105. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +1 -1
  106. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +10 -10
  107. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
  108. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +22 -23
  109. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  110. package/SVF-doxygen/html/html/classSVF_1_1GepObjPN.html +3 -3
  111. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar-members.html +173 -0
  112. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +813 -0
  113. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.png +0 -0
  114. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +2 -2
  115. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator-members.html +1 -1
  116. package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +8 -8
  117. package/SVF-doxygen/html/html/classSVF_1_1LocationSet-members.html +17 -21
  118. package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +150 -326
  119. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +6 -6
  120. package/SVF-doxygen/html/html/classSVF_1_1MemObj.html +84 -84
  121. package/SVF-doxygen/html/html/classSVF_1_1NormalGepCGEdge.html +2 -2
  122. package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +2 -2
  123. package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +96 -96
  124. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +5 -5
  125. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.png +0 -0
  126. package/SVF-doxygen/html/html/classSVF_1_1PAGBuilderFromFile.html +2 -2
  127. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +15 -15
  128. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +1 -1
  129. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +75 -73
  130. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +11 -11
  131. package/SVF-doxygen/html/html/classSVF_1_1SVFIR-members.html +1 -1
  132. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +31 -31
  133. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder-members.html +57 -56
  134. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +301 -229
  135. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +4 -4
  136. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.png +0 -0
  137. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +4 -4
  138. package/SVF-doxygen/html/html/classSVF_1_1StInfo-members.html +11 -14
  139. package/SVF-doxygen/html/html/classSVF_1_1StInfo.html +70 -168
  140. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +1 -1
  141. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +4 -4
  142. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +30 -30
  143. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo-members.html +20 -24
  144. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +110 -291
  145. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
  146. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +1 -1
  147. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +9 -9
  148. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +18 -18
  149. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +11 -11
  150. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +1 -1
  151. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +3 -3
  152. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +3 -3
  153. package/SVF-doxygen/html/html/classes.html +6 -6
  154. package/SVF-doxygen/html/html/functions_a.html +13 -10
  155. package/SVF-doxygen/html/html/functions_b.html +1 -5
  156. package/SVF-doxygen/html/html/functions_c.html +19 -20
  157. package/SVF-doxygen/html/html/functions_d.html +1 -1
  158. package/SVF-doxygen/html/html/functions_e.html +0 -16
  159. package/SVF-doxygen/html/html/functions_f.html +21 -19
  160. package/SVF-doxygen/html/html/functions_func.html +15 -12
  161. package/SVF-doxygen/html/html/functions_func_c.html +16 -17
  162. package/SVF-doxygen/html/html/functions_func_d.html +1 -1
  163. package/SVF-doxygen/html/html/functions_func_e.html +2 -8
  164. package/SVF-doxygen/html/html/functions_func_f.html +4 -4
  165. package/SVF-doxygen/html/html/functions_func_g.html +36 -58
  166. package/SVF-doxygen/html/html/functions_func_i.html +11 -14
  167. package/SVF-doxygen/html/html/functions_func_r.html +3 -3
  168. package/SVF-doxygen/html/html/functions_func_s.html +6 -9
  169. package/SVF-doxygen/html/html/functions_func_t.html +1 -1
  170. package/SVF-doxygen/html/html/functions_func_w.html +1 -1
  171. package/SVF-doxygen/html/html/functions_g.html +41 -63
  172. package/SVF-doxygen/html/html/functions_i.html +6 -9
  173. package/SVF-doxygen/html/html/functions_l.html +4 -4
  174. package/SVF-doxygen/html/html/functions_n.html +4 -7
  175. package/SVF-doxygen/html/html/functions_o.html +25 -20
  176. package/SVF-doxygen/html/html/functions_p.html +12 -16
  177. package/SVF-doxygen/html/html/functions_r.html +4 -4
  178. package/SVF-doxygen/html/html/functions_s.html +15 -18
  179. package/SVF-doxygen/html/html/functions_t.html +1 -1
  180. package/SVF-doxygen/html/html/functions_type_e.html +0 -4
  181. package/SVF-doxygen/html/html/functions_type_o.html +3 -0
  182. package/SVF-doxygen/html/html/functions_v.html +3 -3
  183. package/SVF-doxygen/html/html/functions_vars_b.html +1 -5
  184. package/SVF-doxygen/html/html/functions_vars_c.html +1 -1
  185. package/SVF-doxygen/html/html/functions_vars_e.html +0 -6
  186. package/SVF-doxygen/html/html/functions_vars_f.html +9 -7
  187. package/SVF-doxygen/html/html/functions_vars_l.html +1 -1
  188. package/SVF-doxygen/html/html/functions_vars_n.html +0 -3
  189. package/SVF-doxygen/html/html/functions_vars_o.html +2 -2
  190. package/SVF-doxygen/html/html/functions_w.html +1 -1
  191. package/SVF-doxygen/html/html/hierarchy.html +64 -64
  192. package/SVF-doxygen/html/html/namespaceSVF.html +3 -3
  193. package/SVF-doxygen/html/html/search/all_1.js +3 -2
  194. package/SVF-doxygen/html/html/search/all_10.js +6 -6
  195. package/SVF-doxygen/html/html/search/all_12.js +3 -3
  196. package/SVF-doxygen/html/html/search/all_13.js +5 -6
  197. package/SVF-doxygen/html/html/search/all_14.js +6 -6
  198. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  199. package/SVF-doxygen/html/html/search/all_17.js +1 -1
  200. package/SVF-doxygen/html/html/search/all_2.js +2 -3
  201. package/SVF-doxygen/html/html/search/all_3.js +5 -5
  202. package/SVF-doxygen/html/html/search/all_4.js +1 -1
  203. package/SVF-doxygen/html/html/search/all_5.js +0 -5
  204. package/SVF-doxygen/html/html/search/all_6.js +6 -5
  205. package/SVF-doxygen/html/html/search/all_7.js +15 -23
  206. package/SVF-doxygen/html/html/search/all_9.js +2 -3
  207. package/SVF-doxygen/html/html/search/all_c.js +4 -4
  208. package/SVF-doxygen/html/html/search/all_e.js +1 -2
  209. package/SVF-doxygen/html/html/search/all_f.js +5 -4
  210. package/SVF-doxygen/html/html/search/classes_5.js +1 -1
  211. package/SVF-doxygen/html/html/search/classes_6.js +1 -1
  212. package/SVF-doxygen/html/html/search/functions_0.js +3 -2
  213. package/SVF-doxygen/html/html/search/functions_10.js +2 -3
  214. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  215. package/SVF-doxygen/html/html/search/functions_14.js +1 -1
  216. package/SVF-doxygen/html/html/search/functions_2.js +3 -3
  217. package/SVF-doxygen/html/html/search/functions_3.js +1 -1
  218. package/SVF-doxygen/html/html/search/functions_4.js +0 -2
  219. package/SVF-doxygen/html/html/search/functions_5.js +1 -1
  220. package/SVF-doxygen/html/html/search/functions_6.js +15 -23
  221. package/SVF-doxygen/html/html/search/functions_8.js +1 -2
  222. package/SVF-doxygen/html/html/search/functions_a.js +1 -1
  223. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  224. package/SVF-doxygen/html/html/search/functions_f.js +1 -1
  225. package/SVF-doxygen/html/html/search/typedefs_4.js +0 -1
  226. package/SVF-doxygen/html/html/search/typedefs_e.js +1 -0
  227. package/SVF-doxygen/html/html/search/variables_14.js +3 -3
  228. package/SVF-doxygen/html/html/search/variables_2.js +2 -3
  229. package/SVF-doxygen/html/html/search/variables_3.js +1 -1
  230. package/SVF-doxygen/html/html/search/variables_5.js +0 -2
  231. package/SVF-doxygen/html/html/search/variables_6.js +5 -4
  232. package/SVF-doxygen/html/html/search/variables_c.js +1 -1
  233. package/SVF-doxygen/html/html/search/variables_e.js +0 -1
  234. package/SVF-doxygen/html/html/search/variables_f.js +1 -1
  235. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  236. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01IRGraph_01_5_01_4.html +1 -1
  237. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01OfflineConsG_01_5_01_4.html +1 -1
  238. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1LocationSet_01_4.html +5 -5
  239. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  240. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  241. package/include/Graphs/ConsG.h +1 -1
  242. package/include/Graphs/ConsGEdge.h +1 -1
  243. package/include/MemoryModel/LocationSet.h +39 -126
  244. package/include/MemoryModel/PointerAnalysis.h +1 -1
  245. package/include/MemoryModel/SVFIR.h +2 -2
  246. package/include/MemoryModel/SVFStatements.h +1 -1
  247. package/include/MemoryModel/SVFVariables.h +17 -11
  248. package/include/MemoryModel/SymbolTableInfo.h +27 -31
  249. package/include/SVF-FE/SVFIRBuilder.h +6 -1
  250. package/include/Util/IRAnnotator.h +3 -3
  251. package/lib/DDA/ContextDDA.cpp +1 -1
  252. package/lib/Graphs/ConsG.cpp +1 -1
  253. package/lib/Graphs/IRGraph.cpp +1 -1
  254. package/lib/Graphs/OfflineConsG.cpp +1 -1
  255. package/lib/MemoryModel/LocationSet.cpp +53 -95
  256. package/lib/MemoryModel/PointerAnalysis.cpp +4 -2
  257. package/lib/MemoryModel/PointerAnalysisImpl.cpp +4 -4
  258. package/lib/MemoryModel/SVFIR.cpp +4 -4
  259. package/lib/MemoryModel/SVFVariables.cpp +2 -2
  260. package/lib/MemoryModel/SymbolTableInfo.cpp +44 -212
  261. package/lib/SABER/SaberSVFGBuilder.cpp +1 -1
  262. package/lib/SVF-FE/SVFIRBuilder.cpp +135 -7
  263. package/lib/SVF-FE/SymbolTableBuilder.cpp +4 -4
  264. package/lib/Util/TypeBasedHeapCloning.cpp +10 -10
  265. package/lib/WPA/Andersen.cpp +1 -5
  266. package/lib/WPA/AndersenSFR.cpp +2 -2
  267. package/lib/WPA/CSC.cpp +1 -1
  268. package/lib/WPA/FlowSensitiveTBHC.cpp +6 -6
  269. package/package.json +1 -1
  270. package/tools/Example/svf-ex.cpp +1 -2
@@ -66,17 +66,17 @@ $(function() {
66
66
  <div class="title">SVFIR.cpp</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="SVFIR_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- SVFIR.cpp -- IR of SVF ---------------------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * SVFIR.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: 31, 12, 2021</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFIR_8h.html">MemoryModel/SVFIR.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ICFGBuilder_8h.html">SVF-FE/ICFGBuilder.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">SVFIR::pag</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#abf511f82cdbf7a6d9b6da167aee57636"> 41</a></span>&#160;<a class="code" href="classSVF_1_1SVFIR.html#abf511f82cdbf7a6d9b6da167aee57636">SVFIR::SVFIR</a>(<span class="keywordtype">bool</span> buildFromFile) : <a class="code" href="classSVF_1_1IRGraph.html">IRGraph</a>(buildFromFile)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>();</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html">ICFGBuilder</a> builder(<a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a>);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; builder.<a class="code" href="classSVF_1_1ICFGBuilder.html#ae66565ee32fff4ef5f0157e867333250">build</a>(<a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a8436a7eede7b5ff5d9b80a0c951ea729"> 51</a></span>&#160;<a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a8436a7eede7b5ff5d9b80a0c951ea729">SVFIR::addAddrStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a0a9a0f650e864e89b7cbb3dc8c8aa197">SVFStmt::Addr</a>))</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;AddrStmt&gt;(edge);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* addrPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>(srcNode, dstNode);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(addrPE);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, addrPE);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> addrPE;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f"> 69</a></span>&#160;<a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f">SVFIR::addCopyStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;{</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad3469cdfb64f05163b5310b731b221da">SVFStmt::Copy</a>))</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;CopyStmt&gt;(edge);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>* copyPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>(srcNode, dstNode);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(copyPE);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, copyPE);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> copyPE;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;}</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#af6b4b35214d0e526dee13dadbb6326d0"> 87</a></span>&#160;<a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#af6b4b35214d0e526dee13dadbb6326d0">SVFIR::addPhiStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> res, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> opnd)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;{</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* opNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(opnd);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* resNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(res);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; PHINodeMap::iterator it = <a class="code" href="classSVF_1_1SVFIR.html#a41abf665421dbfaef508b1eba0c91fb9">phiNodeMap</a>.find(resNode);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span>(it == <a class="code" href="classSVF_1_1SVFIR.html#a41abf665421dbfaef508b1eba0c91fb9">phiNodeMap</a>.end()){</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>* phi = <span class="keyword">new</span> <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>(resNode, {opNode});</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(phi);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(opNode, resNode, phi);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a41abf665421dbfaef508b1eba0c91fb9">phiNodeMap</a>[resNode] = phi;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> phi;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; it-&gt;second-&gt;<a class="code" href="classSVF_1_1PhiStmt.html#ae20d273a8afe603395b6621f04e6cb65">addOpVar</a>(opNode);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a7eb14738f0cf08cc8b5c623c953db4ba"> 108</a></span>&#160;<a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a7eb14738f0cf08cc8b5c623c953db4ba">SVFIR::addCmpStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predicate)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* op1Node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(op1);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* op2Node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(op2);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(op1Node, dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a610d6662d1814cffbf23db29e7e620c0">SVFStmt::Cmp</a>, op2Node))</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;CmpStmt&gt;(edge);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; std::vector&lt;SVFVar*&gt; opnds = {op1Node, op2Node};</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>* cmp = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>(dstNode, opnds, predicate);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(cmp);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(op1Node, dstNode, cmp);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> cmp;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a955a2f93cf9eef857e40f19bc24edb2f"> 129</a></span>&#160;<a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a955a2f93cf9eef857e40f19bc24edb2f">SVFIR::addBinaryOPStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;{</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* op1Node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(op1);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* op2Node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(op2);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(op1Node, dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad58f5e59c55e1ffd23b83d16224fed13">SVFStmt::BinaryOp</a>, op2Node))</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;BinaryOPStmt&gt;(edge);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; std::vector&lt;SVFVar*&gt; opnds = {op1Node, op2Node};</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>* binaryOP = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>(dstNode, opnds, opcode);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(binaryOP);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(op1Node,dstNode, binaryOP);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">return</span> binaryOP;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;}</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a8abc436992aa3b6b636084ff5f9a8ef2"> 149</a></span>&#160;<a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a8abc436992aa3b6b636084ff5f9a8ef2">SVFIR::addUnaryOPStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad2a5e6fe0f2b5fefb53abb9e91c57688">SVFStmt::UnaryOp</a>))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;UnaryOPStmt&gt;(edge);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>* unaryOP = <span class="keyword">new</span> <a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>(srcNode, dstNode, opcode);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(unaryOP);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, unaryOP);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> unaryOP;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;}</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment">* Add BranchStmt</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4f0d318deff3b97a4bd5e7b9d53e42fd"> 167</a></span>&#160;<a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4f0d318deff3b97a4bd5e7b9d53e42fd">SVFIR::addBranchStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> br, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond, std::vector&lt;const ICFGNode*&gt; succs)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;{</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* brNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(br);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* condNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(cond);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(condNode,brNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad52703e3ec09b6a4f565e5d82279b6a3">SVFStmt::Branch</a>))</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;BranchStmt&gt;(edge);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* branch = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>(brNode, condNode, succs);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(branch);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(condNode,brNode, branch);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> branch;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;}</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3837804b2622baf7e6991aa993286e9e"> 185</a></span>&#160;<a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a3837804b2622baf7e6991aa993286e9e">SVFIR::addLoadStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;{</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a62ac8480c43fcc657c631ec0003b15d5">SVFStmt::Load</a>))</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;LoadStmt&gt;(edge);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* loadPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>(srcNode, dstNode);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(loadPE);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, loadPE);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">return</span> loadPE;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;}</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4b491e2d3eb5e041677decd73136c870"> 204</a></span>&#160;<a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4b491e2d3eb5e041677decd73136c870">SVFIR::addStoreStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntraBlockNode.html">IntraBlockNode</a>* curVal)</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;{</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">SVFStmt::Store</a>, curVal))</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;StoreStmt&gt;(edge);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* storePE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>(srcNode, dstNode, curVal);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(storePE);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, storePE);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">return</span> storePE;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;}</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a9e99fcf29016ef401f53491ec54a4053"> 222</a></span>&#160;<a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a9e99fcf29016ef401f53491ec54a4053">SVFIR::addCallPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>, cs))</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;CallPE&gt;(edge);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>(srcNode, dstNode, cs);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(callPE);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, callPE);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">return</span> callPE;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;}</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a12fef4ec0537b26947eb0ab10799f29f"> 240</a></span>&#160;<a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a12fef4ec0537b26947eb0ab10799f29f">SVFIR::addRetPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;{</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>, cs))</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;RetPE&gt;(edge);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>(srcNode, dstNode, cs);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(retPE);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, retPE);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">return</span> retPE;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;}</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a33df5f5d9b7de3846cf973135b04f513"> 258</a></span>&#160;<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a33df5f5d9b7de3846cf973135b04f513">SVFIR::addBlackHoleAddrStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;{</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#ad2d3db3e407a53956a5a59cc24eb8d40">Options::HandBlackHole</a>)</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a8436a7eede7b5ff5d9b80a0c951ea729">addAddrStmt</a>(<a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">getBlackHoleNode</a>(), node);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f">addCopyStmt</a>(<a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>(), node);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;}</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a787dc5aff6f7a7d8ec3a7a23d9f40a7e"> 269</a></span>&#160;<a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a787dc5aff6f7a7d8ec3a7a23d9f40a7e">SVFIR::addThreadForkPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;{</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd">SVFStmt::ThreadFork</a>, cs))</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;TDForkPE&gt;(edge);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* forkPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>(srcNode, dstNode, cs);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(forkPE);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, forkPE);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> forkPE;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;}</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4f64a1a266838ac72b66cca138ec57ca"> 287</a></span>&#160;<a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4f64a1a266838ac72b66cca138ec57ca">SVFIR::addThreadJoinPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;{</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a3c3f8883c2d3b50aef6331d5da97ffb0">SVFStmt::ThreadJoin</a>, cs))</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;TDJoinPE&gt;(edge);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* joinPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>(srcNode, dstNode, cs);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(joinPE);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, joinPE);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">return</span> joinPE;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;}</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a9eeab593b2f161ad268d27a7031aedbe"> 308</a></span>&#160;<a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a9eeab593b2f161ad268d27a7031aedbe">SVFIR::addGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls, <span class="keywordtype">bool</span> constGep)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;{</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">if</span> (!constGep || node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a71e4fd7a1271a17e971ed90044e6da24">hasIncomingVariantGepEdge</a>())</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; {</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aa96e20426d3ccb8dcaab6ee1ec759b6b">addVariantGepStmt</a>(src, dst);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; {</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a2a851ff7011e3bd71c36be5c7198a1f4">addNormalGepStmt</a>(src, dst, ls);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;}</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2a851ff7011e3bd71c36be5c7198a1f4"> 327</a></span>&#160;<a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a2a851ff7011e3bd71c36be5c7198a1f4">SVFIR::addNormalGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;{</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; baseLS = <a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(src);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* baseNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">getBaseValVar</a>(src));</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(baseNode, dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746">SVFStmt::NormalGep</a>))</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;NormalGepStmt&gt;(edge);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>* gepPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>(baseNode, dstNode, ls+baseLS);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(gepPE);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(baseNode, dstNode, gepPE);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">return</span> gepPE;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;}</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa96e20426d3ccb8dcaab6ee1ec759b6b"> 347</a></span>&#160;<a class="code" href="classSVF_1_1VariantGepStmt.html">VariantGepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#aa96e20426d3ccb8dcaab6ee1ec759b6b">SVFIR::addVariantGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;{</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* baseNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">getBaseValVar</a>(src));</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(baseNode, dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3a8902fc2aa68428e271012861a2a2">SVFStmt::VariantGep</a>))</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;VariantGepStmt&gt;(edge);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <a class="code" href="classSVF_1_1VariantGepStmt.html">VariantGepStmt</a>* gepPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VariantGepStmt.html">VariantGepStmt</a>(baseNode, dstNode);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(gepPE);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(baseNode, dstNode, gepPE);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">return</span> gepPE;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;}</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a9a702ceb8ba3851daef444f1ece3a2f8"> 369</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a9a702ceb8ba3851daef444f1ece3a2f8">SVFIR::addGepValNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* curInst,<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* gepVal, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fieldidx)</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = <a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">getBaseValVar</a>(<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(gepVal));</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="comment">//assert(findPAGNode(i) == false &amp;&amp; &quot;this node should not be created before&quot;);</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0==<a class="code" href="classSVF_1_1SVFIR.html#ad7bbe1abea55ed03c9b6c81891c0bd67">GepValObjMap</a>[curInst].count(std::make_pair(base, ls))</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; &amp;&amp; <span class="stringliteral">&quot;this node should not be created before&quot;</span>);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ad7bbe1abea55ed03c9b6c81891c0bd67">GepValObjMap</a>[curInst][std::make_pair(base, ls)] = i;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="classSVF_1_1GepValVar.html">GepValVar</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1GepValVar.html">GepValVar</a>(gepVal, i, ls, type, fieldidx);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a93bc14960cdd4eb345c64e9b79757ccf">addValNode</a>(gepVal, node, i);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;}</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ab3e37eab61e7899f950be7de5f4d7916"> 383</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">SVFIR::getGepObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;{</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a>* gepNode = SVFUtil::dyn_cast&lt;GepObjPN&gt;(node))</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(gepNode-&gt;getMemObj(), gepNode-&gt;getLocationSet() + ls);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FIObjVar.html">FIObjVar</a>* baseNode = SVFUtil::dyn_cast&lt;FIObjVar&gt;(node))</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(baseNode-&gt;getMemObj(), ls);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a>* baseNode = SVFUtil::dyn_cast&lt;DummyObjVar&gt;(node))</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(baseNode-&gt;getMemObj(), ls);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;new gep obj node kind?&quot;</span>);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> id;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;}</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101"> 405</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">SVFIR::getGepObjVar</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;{</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>())</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(obj);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> newLS = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee">getModulusOffset</a>(obj,ls);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="comment">// Base and first field are the same memory location.</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a8dc477d83a142a62b63207f6f240f224">Options::FirstFieldEqBase</a> &amp;&amp; newLS.<a class="code" href="classSVF_1_1LocationSet.html#ab85c3707152e03722bd631b2525f223e">getOffset</a>() == 0) <span class="keywordflow">return</span> base;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; NodeLocationSetMap::iterator iter = <a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>.find(std::make_pair(base, newLS));</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">if</span> (iter == <a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>.end())</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a1ac1e7752e98abff7054f4caa709260d">addGepObjNode</a>(obj, newLS);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">return</span> iter-&gt;second;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;}</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;</div><div class="line"><a name="l00429"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a1ac1e7752e98abff7054f4caa709260d"> 429</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a1ac1e7752e98abff7054f4caa709260d">SVFIR::addGepObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;{</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="comment">//assert(findPAGNode(i) == false &amp;&amp; &quot;this node should not be created before&quot;);</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0==<a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>.count(std::make_pair(base, ls))</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; &amp;&amp; <span class="stringliteral">&quot;this node should not be created before&quot;</span>);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepId = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-&gt;<a class="code" href="classSVF_1_1NodeIDAllocator.html#abaff066537f06c4891c199ebfc9624e3">allocateGepObjectId</a>(base, ls.<a class="code" href="classSVF_1_1LocationSet.html#ab85c3707152e03722bd631b2525f223e">getOffset</a>(), <a class="code" href="classSVF_1_1StInfo.html#ad6e599717952f8ccc2771cd72254b6b2">StInfo::getMaxFieldLimit</a>());</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>[std::make_pair(base, ls)] = gepId;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1GepObjPN.html">GepObjPN</a>(obj, gepId, ls);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252">memToFieldsMap</a>[base].set(gepId);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), node, gepId);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;}</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a06465449e58e14bfb1c3eee2c97d3242"> 446</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a06465449e58e14bfb1c3eee2c97d3242">SVFIR::addFIObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj)</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;{</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">//assert(findPAGNode(i) == false &amp;&amp; &quot;this node should not be created before&quot;);</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252">memToFieldsMap</a>[base].set(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>());</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="classSVF_1_1FIObjVar.html">FIObjVar</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FIObjVar.html">FIObjVar</a>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>(), obj);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), node, obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>());</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;}</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;</div><div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089"> 458</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">SVFIR::getAllFieldsObjVars</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj)</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;{</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252">memToFieldsMap</a>[base];</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;}</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a942072d153928e478c76e4b7f1fafa29"> 467</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">SVFIR::getAllFieldsObjVars</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;{</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;ObjVar&gt;(node) &amp;&amp; <span class="stringliteral">&quot;need an object node&quot;</span>);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* obj = SVFUtil::cast&lt;ObjVar&gt;(node);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(obj-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>());</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;}</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0"> 480</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">SVFIR::getFieldsAfterCollapse</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;{</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;ObjVar&gt;(node) &amp;&amp; <span class="stringliteral">&quot;need an object node&quot;</span>);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = SVFUtil::cast&lt;ObjVar&gt;(node)-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a4f5792216c6f38c32dac5074862ffc50">getMemObj</a>();</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">if</span>(mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>())</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> bs;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; bs.set(<a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(mem));</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">return</span> bs;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(mem);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;}</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc"> 500</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">SVFIR::getBaseValVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;{</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(nodeId);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746">SVFStmt::NormalGep</a>) || node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3a8902fc2aa68428e271012861a2a2">SVFStmt::VariantGep</a>))</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; ngeps = node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746">SVFStmt::NormalGep</a>);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; vgeps = node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3a8902fc2aa68428e271012861a2a2">SVFStmt::VariantGep</a>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(((ngeps.size()+vgeps.size())==1) &amp;&amp; <span class="stringliteral">&quot;one node can only be connected by at most one gep edge!&quot;</span>);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">if</span>(!ngeps.empty())</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; it = ngeps.begin();</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; it = vgeps.begin();</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;GepStmt&gt;(*it) &amp;&amp; <span class="stringliteral">&quot;not a gep edge??&quot;</span>);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">return</span> (*it)-&gt;getSrcID();</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">return</span> nodeId;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;}</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d"> 529</a></span>&#160;<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> <a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">SVFIR::getLocationSetFromBaseNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;{</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(nodeId);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; geps = node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746">SVFStmt::NormalGep</a>);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">if</span>(geps.empty())</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(0);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(geps.size()==1 &amp;&amp; <span class="stringliteral">&quot;one node can only be connected by at most one gep edge!&quot;</span>);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = *it;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;NormalGepStmt&gt;(edge) &amp;&amp; <span class="stringliteral">&quot;not a get edge??&quot;</span>);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>* gepEdge = SVFUtil::cast&lt;NormalGepStmt&gt;(edge);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">return</span> gepEdge-&gt;<a class="code" href="classSVF_1_1NormalGepStmt.html#a7bf625581c4852212bcea89562ea9cef">getLocationSet</a>();</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;}</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6834558be6987c91a3732154482c9567"> 548</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a6834558be6987c91a3732154482c9567">SVFIR::destroy</a>()</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;{</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;}</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841"> 557</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">SVFIR::print</a>()</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;{</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;-------------------SVFIR------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; addrs = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a0a9a0f650e864e89b7cbb3dc8c8aa197">SVFStmt::Addr</a>);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; addrs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; {</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Addr --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; }</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; copys = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad3469cdfb64f05163b5310b731b221da">SVFStmt::Copy</a>);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = copys.begin(), eiter =</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; copys.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Copy --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; calls = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = calls.begin(), eiter =</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; calls.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; {</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Call --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; }</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; rets = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = rets.begin(), eiter =</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; rets.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Ret --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; }</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; tdfks = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd">SVFStmt::ThreadFork</a>);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = tdfks.begin(), eiter =</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; tdfks.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- ThreadFork --&gt; &quot;</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; &lt;&lt; (*iter)-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; }</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; tdjns = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a3c3f8883c2d3b50aef6331d5da97ffb0">SVFStmt::ThreadJoin</a>);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = tdjns.begin(), eiter =</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; tdjns.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; {</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- ThreadJoin --&gt; &quot;</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; &lt;&lt; (*iter)-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; ngeps = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746">SVFStmt::NormalGep</a>);</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; ngeps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; {</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>* gep = SVFUtil::cast&lt;NormalGepStmt&gt;(*iter);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; gep-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>() &lt;&lt; <span class="stringliteral">&quot; -- NormalGep (&quot;</span> &lt;&lt; gep-&gt;<a class="code" href="classSVF_1_1NormalGepStmt.html#a904919192ddbd054381c3b863531ab10">getOffset</a>()</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; &lt;&lt; <span class="stringliteral">&quot;) --&gt; &quot;</span> &lt;&lt; gep-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; }</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; vgeps = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3a8902fc2aa68428e271012861a2a2">SVFStmt::VariantGep</a>);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = vgeps.begin(), eiter =</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; vgeps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- VariantGep --&gt; &quot;</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; &lt;&lt; (*iter)-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; loads = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a62ac8480c43fcc657c631ec0003b15d5">SVFStmt::Load</a>);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; loads.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Load --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; stores = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">SVFStmt::Store</a>);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; stores.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Store --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;}</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;</div><div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#af6a2c401d5c7582a4a958b1fe40838e5"> 646</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#af6a2c401d5c7582a4a958b1fe40838e5">SVFIR::initialiseCandidatePointers</a>()</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;{</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="comment">// collect candidate pointers for demand-driven analysis</span></div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> nIter = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; {</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = nIter-&gt;first;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="comment">// do not compute points-to for isolated node</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFIR.html#addc84dae75be8e8b9deccdb4360736d3">isValidPointer</a>(nodeId) == <span class="keyword">false</span>)</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#abd9f622b55839d6796ca2576f2323498">candidatePointers</a>.insert(nodeId);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; }</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;}</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;<span class="comment"> * If this is a dummy node or node does not have incoming edges we assume it is not a pointer here</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00662"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#addc84dae75be8e8b9deccdb4360736d3"> 662</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#addc84dae75be8e8b9deccdb4360736d3">SVFIR::isValidPointer</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)<span class="keyword"> const</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(nodeId);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">if</span> ((node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>().empty() &amp;&amp; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().empty()))</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">return</span> node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>();</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;}</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5c3b194ebada47baaccf0e9f3ab1a139"> 670</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a5c3b194ebada47baaccf0e9f3ab1a139">SVFIR::isValidTopLevelPtr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node)</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;{</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a60bed99a7fd939873118698b058ccc4a">isTopLevelPtr</a>())</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFIR.html#addc84dae75be8e8b9deccdb4360736d3">isValidPointer</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()) &amp;&amp; node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>())</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; {</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#afd690c09e01989e57899875ca97f0166">SVFUtil::ArgInNoCallerFunction</a>(node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()))</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; }</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;}</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;</div><div class="line"><a name="l00687"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2375f49c77f2285a6316e7540b051a0f"> 687</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a2375f49c77f2285a6316e7540b051a0f">SVFIR::handleBlackHole</a>(<span class="keywordtype">bool</span> b)</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;{</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <a class="code" href="classSVF_1_1Options.html#ad2d3db3e407a53956a5a59cc24eb8d40">Options::HandBlackHole</a> = b;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;}</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;</div><div class="ttc" id="classSVF_1_1IRGraph_html_a3ce34b9fcb651689bce44ab48fbcdff0"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">SVF::IRGraph::getBlackHoleNode</a></div><div class="ttdeci">NodeID getBlackHoleNode() const</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00144">IRGraph.h:144</a></div></div>
69
+ <a href="SVFIR_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- SVFIR.cpp -- IR of SVF ---------------------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * SVFIR.cpp</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: 31, 12, 2021</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Options_8h.html">Util/Options.h</a>&quot;</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFIR_8h.html">MemoryModel/SVFIR.h</a>&quot;</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="LLVMUtil_8h.html">SVF-FE/LLVMUtil.h</a>&quot;</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="ICFGBuilder_8h.html">SVF-FE/ICFGBuilder.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;<a class="code" href="classSVF_1_1SVFIR.html">SVFIR</a>* <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">SVFIR::pag</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#abf511f82cdbf7a6d9b6da167aee57636"> 41</a></span>&#160;<a class="code" href="classSVF_1_1SVFIR.html#abf511f82cdbf7a6d9b6da167aee57636">SVFIR::SVFIR</a>(<span class="keywordtype">bool</span> buildFromFile) : <a class="code" href="classSVF_1_1IRGraph.html">IRGraph</a>(buildFromFile)</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;{</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1ICFG.html">ICFG</a>();</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="classSVF_1_1ICFGBuilder.html">ICFGBuilder</a> builder(<a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a>);</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; builder.<a class="code" href="classSVF_1_1ICFGBuilder.html#ae66565ee32fff4ef5f0157e867333250">build</a>(<a class="code" href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">getModule</a>());</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;}</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a8436a7eede7b5ff5d9b80a0c951ea729"> 51</a></span>&#160;<a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a8436a7eede7b5ff5d9b80a0c951ea729">SVFIR::addAddrStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;{</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a0a9a0f650e864e89b7cbb3dc8c8aa197">SVFStmt::Addr</a>))</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;AddrStmt&gt;(edge);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; {</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>* addrPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1AddrStmt.html">AddrStmt</a>(srcNode, dstNode);</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(addrPE);</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, addrPE);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">return</span> addrPE;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;}</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f"> 69</a></span>&#160;<a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f">SVFIR::addCopyStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;{</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad3469cdfb64f05163b5310b731b221da">SVFStmt::Copy</a>))</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;CopyStmt&gt;(edge);</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; {</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>* copyPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CopyStmt.html">CopyStmt</a>(srcNode, dstNode);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(copyPE);</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, copyPE);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; <span class="keywordflow">return</span> copyPE;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; }</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;}</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#af6b4b35214d0e526dee13dadbb6326d0"> 87</a></span>&#160;<a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#af6b4b35214d0e526dee13dadbb6326d0">SVFIR::addPhiStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> res, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> opnd)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;{</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* opNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(opnd);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* resNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(res);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; PHINodeMap::iterator it = <a class="code" href="classSVF_1_1SVFIR.html#a41abf665421dbfaef508b1eba0c91fb9">phiNodeMap</a>.find(resNode);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="keywordflow">if</span>(it == <a class="code" href="classSVF_1_1SVFIR.html#a41abf665421dbfaef508b1eba0c91fb9">phiNodeMap</a>.end()){</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>* phi = <span class="keyword">new</span> <a class="code" href="classSVF_1_1PhiStmt.html">PhiStmt</a>(resNode, {opNode});</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(phi);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(opNode, resNode, phi);</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a41abf665421dbfaef508b1eba0c91fb9">phiNodeMap</a>[resNode] = phi;</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> phi;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="keywordflow">else</span>{</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; it-&gt;second-&gt;<a class="code" href="classSVF_1_1PhiStmt.html#ae20d273a8afe603395b6621f04e6cb65">addOpVar</a>(opNode);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;}</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a7eb14738f0cf08cc8b5c623c953db4ba"> 108</a></span>&#160;<a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a7eb14738f0cf08cc8b5c623c953db4ba">SVFIR::addCmpStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predicate)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160;{</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* op1Node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(op1);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* op2Node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(op2);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(op1Node, dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a610d6662d1814cffbf23db29e7e620c0">SVFStmt::Cmp</a>, op2Node))</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;CmpStmt&gt;(edge);</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; std::vector&lt;SVFVar*&gt; opnds = {op1Node, op2Node};</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>* cmp = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>(dstNode, opnds, predicate);</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(cmp);</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(op1Node, dstNode, cmp);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <span class="keywordflow">return</span> cmp;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; }</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a955a2f93cf9eef857e40f19bc24edb2f"> 129</a></span>&#160;<a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a955a2f93cf9eef857e40f19bc24edb2f">SVFIR::addBinaryOPStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode)</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;{</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* op1Node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(op1);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* op2Node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(op2);</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(op1Node, dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad58f5e59c55e1ffd23b83d16224fed13">SVFStmt::BinaryOp</a>, op2Node))</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;BinaryOPStmt&gt;(edge);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; std::vector&lt;SVFVar*&gt; opnds = {op1Node, op2Node};</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>* binaryOP = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>(dstNode, opnds, opcode);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(binaryOP);</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(op1Node,dstNode, binaryOP);</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; <span class="keywordflow">return</span> binaryOP;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;}</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a8abc436992aa3b6b636084ff5f9a8ef2"> 149</a></span>&#160;<a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a8abc436992aa3b6b636084ff5f9a8ef2">SVFIR::addUnaryOPStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode)</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;{</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad2a5e6fe0f2b5fefb53abb9e91c57688">SVFStmt::UnaryOp</a>))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;UnaryOPStmt&gt;(edge);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>* unaryOP = <span class="keyword">new</span> <a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>(srcNode, dstNode, opcode);</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(unaryOP);</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, unaryOP);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">return</span> unaryOP;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; }</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160;}</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160;<span class="comment">* Add BranchStmt</span></div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4f0d318deff3b97a4bd5e7b9d53e42fd"> 167</a></span>&#160;<a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4f0d318deff3b97a4bd5e7b9d53e42fd">SVFIR::addBranchStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> br, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond, std::vector&lt;const ICFGNode*&gt; succs)</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;{</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* brNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(br);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* condNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(cond);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(condNode,brNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad52703e3ec09b6a4f565e5d82279b6a3">SVFStmt::Branch</a>))</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;BranchStmt&gt;(edge);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>* branch = <span class="keyword">new</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a>(brNode, condNode, succs);</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(branch);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(condNode,brNode, branch);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">return</span> branch;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;}</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a3837804b2622baf7e6991aa993286e9e"> 185</a></span>&#160;<a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a3837804b2622baf7e6991aa993286e9e">SVFIR::addLoadStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160;{</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a62ac8480c43fcc657c631ec0003b15d5">SVFStmt::Load</a>))</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;LoadStmt&gt;(edge);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; {</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>* loadPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1LoadStmt.html">LoadStmt</a>(srcNode, dstNode);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(loadPE);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, loadPE);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">return</span> loadPE;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;}</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00204"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4b491e2d3eb5e041677decd73136c870"> 204</a></span>&#160;<a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4b491e2d3eb5e041677decd73136c870">SVFIR::addStoreStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1IntraBlockNode.html">IntraBlockNode</a>* curVal)</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160;{</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">SVFStmt::Store</a>, curVal))</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;StoreStmt&gt;(edge);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* storePE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>(srcNode, dstNode, curVal);</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(storePE);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, storePE);</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="keywordflow">return</span> storePE;</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160;}</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a9e99fcf29016ef401f53491ec54a4053"> 222</a></span>&#160;<a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a9e99fcf29016ef401f53491ec54a4053">SVFIR::addCallPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;{</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>, cs))</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;CallPE&gt;(edge);</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>(srcNode, dstNode, cs);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(callPE);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, callPE);</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">return</span> callPE;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; }</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;}</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a12fef4ec0537b26947eb0ab10799f29f"> 240</a></span>&#160;<a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a12fef4ec0537b26947eb0ab10799f29f">SVFIR::addRetPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;{</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>, cs))</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;RetPE&gt;(edge);</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; {</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>(srcNode, dstNode, cs);</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(retPE);</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, retPE);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">return</span> retPE;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;}</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a33df5f5d9b7de3846cf973135b04f513"> 258</a></span>&#160;<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a33df5f5d9b7de3846cf973135b04f513">SVFIR::addBlackHoleAddrStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> node)</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;{</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1Options.html#ad2d3db3e407a53956a5a59cc24eb8d40">Options::HandBlackHole</a>)</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a8436a7eede7b5ff5d9b80a0c951ea729">addAddrStmt</a>(<a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">getBlackHoleNode</a>(), node);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f">addCopyStmt</a>(<a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>(), node);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160;}</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a787dc5aff6f7a7d8ec3a7a23d9f40a7e"> 269</a></span>&#160;<a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a787dc5aff6f7a7d8ec3a7a23d9f40a7e">SVFIR::addThreadForkPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;{</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd">SVFStmt::ThreadFork</a>, cs))</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;TDForkPE&gt;(edge);</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; {</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>* forkPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1TDForkPE.html">TDForkPE</a>(srcNode, dstNode, cs);</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(forkPE);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, forkPE);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">return</span> forkPE;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160;}</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a4f64a1a266838ac72b66cca138ec57ca"> 287</a></span>&#160;<a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* <a class="code" href="classSVF_1_1SVFIR.html#a4f64a1a266838ac72b66cca138ec57ca">SVFIR::addThreadJoinPE</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cs)</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160;{</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* srcNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#a192e584440eb141e0d35d8fed671bbe0">hasLabeledEdge</a>(srcNode,dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a3c3f8883c2d3b50aef6331d5da97ffb0">SVFStmt::ThreadJoin</a>, cs))</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;TDJoinPE&gt;(edge);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; {</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>* joinPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1TDJoinPE.html">TDJoinPE</a>(srcNode, dstNode, cs);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(joinPE);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(srcNode,dstNode, joinPE);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">return</span> joinPE;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;}</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a9eeab593b2f161ad268d27a7031aedbe"> 308</a></span>&#160;<a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a9eeab593b2f161ad268d27a7031aedbe">SVFIR::addGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls, <span class="keywordtype">bool</span> constGep)</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160;{</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160;</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(src);</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <span class="keywordflow">if</span> (!constGep || node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a71e4fd7a1271a17e971ed90044e6da24">hasIncomingVariantGepEdge</a>())</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; {</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#aa96e20426d3ccb8dcaab6ee1ec759b6b">addVariantGepStmt</a>(src, dst);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; }</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; {</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a2a851ff7011e3bd71c36be5c7198a1f4">addNormalGepStmt</a>(src, dst, ls);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; }</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160;}</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div><div class="line"><a name="l00327"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2a851ff7011e3bd71c36be5c7198a1f4"> 327</a></span>&#160;<a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#a2a851ff7011e3bd71c36be5c7198a1f4">SVFIR::addNormalGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160;{</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; baseLS = <a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(src);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* baseNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">getBaseValVar</a>(src));</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(baseNode, dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746">SVFStmt::NormalGep</a>))</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;NormalGepStmt&gt;(edge);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>* gepPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>(baseNode, dstNode, ls+baseLS);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(gepPE);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(baseNode, dstNode, gepPE);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keywordflow">return</span> gepPE;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; }</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;}</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#aa96e20426d3ccb8dcaab6ee1ec759b6b"> 347</a></span>&#160;<a class="code" href="classSVF_1_1VariantGepStmt.html">VariantGepStmt</a>* <a class="code" href="classSVF_1_1SVFIR.html#aa96e20426d3ccb8dcaab6ee1ec759b6b">SVFIR::addVariantGepStmt</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst)</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160;{</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160;</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* baseNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">getBaseValVar</a>(src));</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* dstNode = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(dst);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = <a class="code" href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">hasNonlabeledEdge</a>(baseNode, dstNode, <a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3a8902fc2aa68428e271012861a2a2">SVFStmt::VariantGep</a>))</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordflow">return</span> SVFUtil::cast&lt;VariantGepStmt&gt;(edge);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <a class="code" href="classSVF_1_1VariantGepStmt.html">VariantGepStmt</a>* gepPE = <span class="keyword">new</span> <a class="code" href="classSVF_1_1VariantGepStmt.html">VariantGepStmt</a>(baseNode, dstNode);</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">addToStmt2TypeMap</a>(gepPE);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <a class="code" href="classSVF_1_1IRGraph.html#a722f32d0a0a3bafdd97fc74819d2621e">addEdge</a>(baseNode, dstNode, gepPE);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">return</span> gepPE;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;}</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a9a702ceb8ba3851daef444f1ece3a2f8"> 369</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a9a702ceb8ba3851daef444f1ece3a2f8">SVFIR::addGepValNode</a>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* curInst,<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* gepVal, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> i, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> fieldidx)</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160;{</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = <a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">getBaseValVar</a>(<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(gepVal));</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="comment">//assert(findPAGNode(i) == false &amp;&amp; &quot;this node should not be created before&quot;);</span></div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0==<a class="code" href="classSVF_1_1SVFIR.html#ad7bbe1abea55ed03c9b6c81891c0bd67">GepValObjMap</a>[curInst].count(std::make_pair(base, ls))</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; &amp;&amp; <span class="stringliteral">&quot;this node should not be created before&quot;</span>);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#ad7bbe1abea55ed03c9b6c81891c0bd67">GepValObjMap</a>[curInst][std::make_pair(base, ls)] = i;</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="classSVF_1_1GepValVar.html">GepValVar</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1GepValVar.html">GepValVar</a>(gepVal, i, ls, type, fieldidx);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a93bc14960cdd4eb345c64e9b79757ccf">addValNode</a>(gepVal, node, i);</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;}</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#ab3e37eab61e7899f950be7de5f4d7916"> 383</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">SVFIR::getGepObjVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160;{</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>* gepNode = SVFUtil::dyn_cast&lt;GepObjVar&gt;(node))</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(gepNode-&gt;getMemObj(), gepNode-&gt;getLocationSet() + ls);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FIObjVar.html">FIObjVar</a>* baseNode = SVFUtil::dyn_cast&lt;FIObjVar&gt;(node))</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(baseNode-&gt;getMemObj(), ls);</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DummyObjVar.html">DummyObjVar</a>* baseNode = SVFUtil::dyn_cast&lt;DummyObjVar&gt;(node))</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">getGepObjVar</a>(baseNode-&gt;getMemObj(), ls);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; {</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;new gep obj node kind?&quot;</span>);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> id;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160;}</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160;</div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101"> 405</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a20c0c65af266ac876cb722aee6e87101">SVFIR::getGepObjVar</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160;{</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keywordflow">if</span> (obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>())</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(obj);</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> newLS = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee">getModulusOffset</a>(obj,ls);</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="comment">// Base and first field are the same memory location.</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a8dc477d83a142a62b63207f6f240f224">Options::FirstFieldEqBase</a> &amp;&amp; newLS.<a class="code" href="classSVF_1_1LocationSet.html#ac098bc95299002b9016684fa7f2799ca">accumulateConstantOffset</a>() == 0) <span class="keywordflow">return</span> base;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; NodeLocationSetMap::iterator iter = <a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>.find(std::make_pair(base, newLS));</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keywordflow">if</span> (iter == <a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>.end())</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a1ac1e7752e98abff7054f4caa709260d">addGepObjNode</a>(obj, newLS);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">return</span> iter-&gt;second;</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160;}</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160;</div><div class="line"><a name="l00429"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a1ac1e7752e98abff7054f4caa709260d"> 429</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a1ac1e7752e98abff7054f4caa709260d">SVFIR::addGepObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj, <span class="keyword">const</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>&amp; ls)</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;{</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="comment">//assert(findPAGNode(i) == false &amp;&amp; &quot;this node should not be created before&quot;);</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0==<a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>.count(std::make_pair(base, ls))</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; &amp;&amp; <span class="stringliteral">&quot;this node should not be created before&quot;</span>);</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepId = <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-&gt;<a class="code" href="classSVF_1_1NodeIDAllocator.html#abaff066537f06c4891c199ebfc9624e3">allocateGepObjectId</a>(base, ls.<a class="code" href="classSVF_1_1LocationSet.html#ac098bc95299002b9016684fa7f2799ca">accumulateConstantOffset</a>(), <a class="code" href="classSVF_1_1StInfo.html#ad6e599717952f8ccc2771cd72254b6b2">StInfo::getMaxFieldLimit</a>());</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a148b51118eeba8117e033fea84b56be8">GepObjVarMap</a>[std::make_pair(base, ls)] = gepId;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1GepObjVar.html">GepObjVar</a>(obj, gepId, ls);</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252">memToFieldsMap</a>[base].set(gepId);</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), node, gepId);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160;}</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160;</div><div class="line"><a name="l00446"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a06465449e58e14bfb1c3eee2c97d3242"> 446</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a06465449e58e14bfb1c3eee2c97d3242">SVFIR::addFIObjNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj)</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160;{</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">//assert(findPAGNode(i) == false &amp;&amp; &quot;this node should not be created before&quot;);</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252">memToFieldsMap</a>[base].set(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>());</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <a class="code" href="classSVF_1_1FIObjVar.html">FIObjVar</a> *node = <span class="keyword">new</span> <a class="code" href="classSVF_1_1FIObjVar.html">FIObjVar</a>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>(), obj);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">getValue</a>(), node, obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>());</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160;}</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160;</div><div class="line"><a name="l00458"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089"> 458</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">SVFIR::getAllFieldsObjVars</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj)</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;{</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">getId</a>();</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252">memToFieldsMap</a>[base];</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160;}</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160;</div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a942072d153928e478c76e4b7f1fafa29"> 467</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">SVFIR::getAllFieldsObjVars</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160;{</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;ObjVar&gt;(node) &amp;&amp; <span class="stringliteral">&quot;need an object node&quot;</span>);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ObjVar.html">ObjVar</a>* obj = SVFUtil::cast&lt;ObjVar&gt;(node);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(obj-&gt;<a class="code" href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">getMemObj</a>());</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160;}</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0"> 480</a></span>&#160;<a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">SVFIR::getFieldsAfterCollapse</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;{</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;ObjVar&gt;(node) &amp;&amp; <span class="stringliteral">&quot;need an object node&quot;</span>);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = SVFUtil::cast&lt;ObjVar&gt;(node)-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a4f5792216c6f38c32dac5074862ffc50">getMemObj</a>();</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <span class="keywordflow">if</span>(mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">isFieldInsensitive</a>())</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; {</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> bs;</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; bs.set(<a class="code" href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">getFIObjVar</a>(mem));</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">return</span> bs;</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">getAllFieldsObjVars</a>(mem);</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160;}</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc"> 500</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">SVFIR::getBaseValVar</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;{</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(nodeId);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746">SVFStmt::NormalGep</a>) || node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">hasIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3a8902fc2aa68428e271012861a2a2">SVFStmt::VariantGep</a>))</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; ngeps = node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746">SVFStmt::NormalGep</a>);</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; vgeps = node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3a8902fc2aa68428e271012861a2a2">SVFStmt::VariantGep</a>);</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160;</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(((ngeps.size()+vgeps.size())==1) &amp;&amp; <span class="stringliteral">&quot;one node can only be connected by at most one gep edge!&quot;</span>);</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it;</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <span class="keywordflow">if</span>(!ngeps.empty())</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; it = ngeps.begin();</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; it = vgeps.begin();</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;GepStmt&gt;(*it) &amp;&amp; <span class="stringliteral">&quot;not a gep edge??&quot;</span>);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="keywordflow">return</span> (*it)-&gt;getSrcID();</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">return</span> nodeId;</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160;}</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d"> 529</a></span>&#160;<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> <a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">SVFIR::getLocationSetFromBaseNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;{</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(nodeId);</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; geps = node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">getIncomingEdges</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746">SVFStmt::NormalGep</a>);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">if</span>(geps.empty())</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(0);</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(geps.size()==1 &amp;&amp; <span class="stringliteral">&quot;one node can only be connected by at most one gep edge!&quot;</span>);</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">SVFStmt</a>* edge = *it;</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;NormalGepStmt&gt;(edge) &amp;&amp; <span class="stringliteral">&quot;not a get edge??&quot;</span>);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>* gepEdge = SVFUtil::cast&lt;NormalGepStmt&gt;(edge);</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">return</span> gepEdge-&gt;<a class="code" href="classSVF_1_1NormalGepStmt.html#a7bf625581c4852212bcea89562ea9cef">getLocationSet</a>();</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;}</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;</div><div class="line"><a name="l00548"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a6834558be6987c91a3732154482c9567"> 548</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a6834558be6987c91a3732154482c9567">SVFIR::destroy</a>()</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;{</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a>;</div><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">icfg</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160;}</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;</div><div class="line"><a name="l00557"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841"> 557</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">SVFIR::print</a>()</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160;{</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;-------------------SVFIR------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; addrs = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a0a9a0f650e864e89b7cbb3dc8c8aa197">SVFStmt::Addr</a>);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = addrs.begin(), eiter =</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; addrs.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; {</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Addr --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; }</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160;</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; copys = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad3469cdfb64f05163b5310b731b221da">SVFStmt::Copy</a>);</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = copys.begin(), eiter =</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; copys.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; {</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Copy --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; }</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; calls = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVFStmt::Call</a>);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = calls.begin(), eiter =</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; calls.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; {</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Call --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; }</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; rets = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a8d269a45adf13e69468f0357222ab2af">SVFStmt::Ret</a>);</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = rets.begin(), eiter =</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; rets.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; {</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Ret --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; }</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; tdfks = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd">SVFStmt::ThreadFork</a>);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = tdfks.begin(), eiter =</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; tdfks.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- ThreadFork --&gt; &quot;</span></div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; &lt;&lt; (*iter)-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; }</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; tdjns = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a3c3f8883c2d3b50aef6331d5da97ffb0">SVFStmt::ThreadJoin</a>);</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = tdjns.begin(), eiter =</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; tdjns.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; {</div><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- ThreadJoin --&gt; &quot;</span></div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; &lt;&lt; (*iter)-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; }</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160;</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; ngeps = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746">SVFStmt::NormalGep</a>);</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = ngeps.begin(), eiter =</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; ngeps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; {</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; <a class="code" href="classSVF_1_1NormalGepStmt.html">NormalGepStmt</a>* gep = SVFUtil::cast&lt;NormalGepStmt&gt;(*iter);</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; gep-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>() &lt;&lt; <span class="stringliteral">&quot; -- NormalGep (&quot;</span> &lt;&lt; gep-&gt;<a class="code" href="classSVF_1_1NormalGepStmt.html#a904919192ddbd054381c3b863531ab10">getOffset</a>()</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; &lt;&lt; <span class="stringliteral">&quot;) --&gt; &quot;</span> &lt;&lt; gep-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; }</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; vgeps = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a6b3a8902fc2aa68428e271012861a2a2">SVFStmt::VariantGep</a>);</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = vgeps.begin(), eiter =</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; vgeps.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; {</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- VariantGep --&gt; &quot;</span></div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; &lt;&lt; (*iter)-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; }</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; loads = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a62ac8480c43fcc657c631ec0003b15d5">SVFStmt::Load</a>);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = loads.begin(), eiter =</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; loads.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; {</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Load --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; }</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVFStmt::SVFStmtSetTy</a>&amp; stores = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae2006820c0d00482b85e7ae3adcb5744">getSVFStmtSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">SVFStmt::Store</a>);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">for</span> (SVFStmt::SVFStmtSetTy::iterator iter = stores.begin(), eiter =</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; stores.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; {</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; (*iter)-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot; -- Store --&gt; &quot;</span> &lt;&lt; (*iter)-&gt;getDstID()</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; }</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;----------------------------------------------------------\n&quot;</span>;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160;}</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;</div><div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#af6a2c401d5c7582a4a958b1fe40838e5"> 646</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#af6a2c401d5c7582a4a958b1fe40838e5">SVFIR::initialiseCandidatePointers</a>()</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;{</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="comment">// collect candidate pointers for demand-driven analysis</span></div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">iterator</a> nIter = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; {</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = nIter-&gt;first;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="comment">// do not compute points-to for isolated node</span></div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFIR.html#addc84dae75be8e8b9deccdb4360736d3">isValidPointer</a>(nodeId) == <span class="keyword">false</span>)</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <a class="code" href="classSVF_1_1SVFIR.html#abd9f622b55839d6796ca2576f2323498">candidatePointers</a>.insert(nodeId);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; }</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;}</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;<span class="comment"> * If this is a dummy node or node does not have incoming edges we assume it is not a pointer here</span></div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00662"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#addc84dae75be8e8b9deccdb4360736d3"> 662</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#addc84dae75be8e8b9deccdb4360736d3">SVFIR::isValidPointer</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)<span class="keyword"> const</span></div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = <a class="code" href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(nodeId);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <span class="keywordflow">if</span> ((node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>().empty() &amp;&amp; node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>().empty()))</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keywordflow">return</span> node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a3b61042079a6c9dc395f38925c6a1271">isPointer</a>();</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;}</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160;</div><div class="line"><a name="l00670"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a5c3b194ebada47baaccf0e9f3ab1a139"> 670</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1SVFIR.html#a5c3b194ebada47baaccf0e9f3ab1a139">SVFIR::isValidTopLevelPtr</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node)</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160;{</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">if</span> (node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a60bed99a7fd939873118698b058ccc4a">isTopLevelPtr</a>())</div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFIR.html#addc84dae75be8e8b9deccdb4360736d3">isValidPointer</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()) &amp;&amp; node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">hasValue</a>())</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; {</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#afd690c09e01989e57899875ca97f0166">SVFUtil::ArgInNoCallerFunction</a>(node-&gt;<a class="code" href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">getValue</a>()))</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; }</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;}</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;</div><div class="line"><a name="l00687"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIR.html#a2375f49c77f2285a6316e7540b051a0f"> 687</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classSVF_1_1SVFIR.html#a2375f49c77f2285a6316e7540b051a0f">SVFIR::handleBlackHole</a>(<span class="keywordtype">bool</span> b)</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;{</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <a class="code" href="classSVF_1_1Options.html#ad2d3db3e407a53956a5a59cc24eb8d40">Options::HandBlackHole</a> = b;</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160;}</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;</div><div class="ttc" id="classSVF_1_1IRGraph_html_a3ce34b9fcb651689bce44ab48fbcdff0"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a3ce34b9fcb651689bce44ab48fbcdff0">SVF::IRGraph::getBlackHoleNode</a></div><div class="ttdeci">NodeID getBlackHoleNode() const</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00144">IRGraph.h:144</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1AddrStmt_html"><div class="ttname"><a href="classSVF_1_1AddrStmt.html">SVF::AddrStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00197">SVFStatements.h:197</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&lt; SVFVar, SVFStmt &gt;::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_1SVFIR_html_a3c014227661d8976714772205611c252"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a3c014227661d8976714772205611c252">SVF::SVFIR::memToFieldsMap</a></div><div class="ttdeci">MemObjToFieldsMap memToFieldsMap</div><div class="ttdoc">Map a mem object id to all its fields. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00080">SVFIR.h:80</a></div></div>
73
- <div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00421">SymbolTableInfo.h:421</a></div></div>
73
+ <div class="ttc" id="classSVF_1_1MemObj_html"><div class="ttname"><a href="classSVF_1_1MemObj.html">SVF::MemObj</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00418">SymbolTableInfo.h:418</a></div></div>
74
74
  <div class="ttc" id="classSVF_1_1RetPE_html"><div class="ttname"><a href="classSVF_1_1RetPE.html">SVF::RetPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00850">SVFStatements.h:850</a></div></div>
75
75
  <div class="ttc" id="classSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9ad2a5e6fe0f2b5fefb53abb9e91c57688"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ad2a5e6fe0f2b5fefb53abb9e91c57688">SVF::SVFStmt::UnaryOp</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00056">SVFStatements.h:56</a></div></div>
76
76
  <div class="ttc" id="classSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a97ca16eba4c5f92e16388f0cdbcfcc00">SVF::SVFStmt::Call</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00056">SVFStatements.h:56</a></div></div>
77
77
  <div class="ttc" id="classSVF_1_1SVFIR_html_aaf86146b5e765d1f278b6d812bf913f5"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aaf86146b5e765d1f278b6d812bf913f5">SVF::SVFIR::pag</a></div><div class="ttdeci">static SVFIR * pag</div><div class="ttdoc">Singleton pattern here to enable instance of SVFIR can only be created once. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00087">SVFIR.h:87</a></div></div>
78
78
  <div class="ttc" id="classSVF_1_1SVFIR_html_abd9f622b55839d6796ca2576f2323498"><div class="ttname"><a href="classSVF_1_1SVFIR.html#abd9f622b55839d6796ca2576f2323498">SVF::SVFIR::candidatePointers</a></div><div class="ttdeci">OrderedNodeSet candidatePointers</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00092">SVFIR.h:92</a></div></div>
79
- <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a480a7565dcb5d9a94f4b0ffb44b127ee"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee">SVF::SymbolTableInfo::getModulusOffset</a></div><div class="ttdeci">virtual LocationSet getModulusOffset(const MemObj *obj, const LocationSet &amp;ls)</div><div class="ttdoc">Given an offset from a Gep Instruction, return it modulus offset by considering memory layout...</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00353">SymbolTableInfo.cpp:353</a></div></div>
79
+ <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a480a7565dcb5d9a94f4b0ffb44b127ee"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a480a7565dcb5d9a94f4b0ffb44b127ee">SVF::SymbolTableInfo::getModulusOffset</a></div><div class="ttdeci">virtual LocationSet getModulusOffset(const MemObj *obj, const LocationSet &amp;ls)</div><div class="ttdoc">Given an offset from a Gep Instruction, return it modulus offset by considering memory layout...</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00191">SymbolTableInfo.cpp:191</a></div></div>
80
80
  <div class="ttc" id="classSVF_1_1GenericNode_html_afc8b5f86d7795b6a0dfc0687d942d79b"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">SVF::GenericNode::getInEdges</a></div><div class="ttdeci">const GEdgeSetTy &amp; getInEdges() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00182">GenericGraph.h:182</a></div></div>
81
81
  <div class="ttc" id="classSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9a62ac8480c43fcc657c631ec0003b15d5"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a62ac8480c43fcc657c631ec0003b15d5">SVF::SVFStmt::Load</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00056">SVFStatements.h:56</a></div></div>
82
82
  <div class="ttc" id="classSVF_1_1SVFVar_html_a747b2c92c81d32fcd357e80d2d8fe7cc"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a747b2c92c81d32fcd357e80d2d8fe7cc">SVF::SVFVar::hasIncomingEdges</a></div><div class="ttdeci">bool hasIncomingEdges(SVFStmt::PEDGEK kind) const</div><div class="ttdoc">Has incoming SVFIR statements (edges) </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00173">SVFVariables.h:173</a></div></div>
@@ -101,7 +101,7 @@ $(function() {
101
101
  <div class="ttc" id="classSVF_1_1SVFVar_html"><div class="ttname"><a href="classSVF_1_1SVFVar.html">SVF::SVFVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00046">SVFVariables.h:46</a></div></div>
102
102
  <div class="ttc" id="classSVF_1_1ObjVar_html"><div class="ttname"><a href="classSVF_1_1ObjVar.html">SVF::ObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00317">SVFVariables.h:317</a></div></div>
103
103
  <div class="ttc" id="classSVF_1_1SVFIR_html_a787dc5aff6f7a7d8ec3a7a23d9f40a7e"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a787dc5aff6f7a7d8ec3a7a23d9f40a7e">SVF::SVFIR::addThreadForkPE</a></div><div class="ttdeci">TDForkPE * addThreadForkPE(NodeID src, NodeID dst, const CallBlockNode *cs)</div><div class="ttdoc">Add Thread fork edge for parameter passing. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00269">SVFIR.cpp:269</a></div></div>
104
- <div class="ttc" id="classSVF_1_1DummyObjVar_html"><div class="ttname"><a href="classSVF_1_1DummyObjVar.html">SVF::DummyObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00693">SVFVariables.h:693</a></div></div>
104
+ <div class="ttc" id="classSVF_1_1DummyObjVar_html"><div class="ttname"><a href="classSVF_1_1DummyObjVar.html">SVF::DummyObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00699">SVFVariables.h:699</a></div></div>
105
105
  <div class="ttc" id="classSVF_1_1SVFIR_html_af6b4b35214d0e526dee13dadbb6326d0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#af6b4b35214d0e526dee13dadbb6326d0">SVF::SVFIR::addPhiStmt</a></div><div class="ttdeci">PhiStmt * addPhiStmt(NodeID res, NodeID opnd)</div><div class="ttdoc">Add phi node information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00087">SVFIR.cpp:87</a></div></div>
106
106
  <div class="ttc" id="classSVF_1_1SVFIR_html_a33df5f5d9b7de3846cf973135b04f513"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a33df5f5d9b7de3846cf973135b04f513">SVF::SVFIR::addBlackHoleAddrStmt</a></div><div class="ttdeci">SVFStmt * addBlackHoleAddrStmt(NodeID node)</div><div class="ttdoc">Set a pointer points-to black hole (e.g. int2ptr) </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00258">SVFIR.cpp:258</a></div></div>
107
107
  <div class="ttc" id="classSVF_1_1ObjVar_html_a6a4feb73b54e602407e35eeb09f55930"><div class="ttname"><a href="classSVF_1_1ObjVar.html#a6a4feb73b54e602407e35eeb09f55930">SVF::ObjVar::getMemObj</a></div><div class="ttdeci">const MemObj * getMemObj() const</div><div class="ttdoc">Return memory object. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00357">SVFVariables.h:357</a></div></div>
@@ -143,7 +143,8 @@ $(function() {
143
143
  <div class="ttc" id="classSVF_1_1SVFIR_html_addc84dae75be8e8b9deccdb4360736d3"><div class="ttname"><a href="classSVF_1_1SVFIR.html#addc84dae75be8e8b9deccdb4360736d3">SVF::SVFIR::isValidPointer</a></div><div class="ttdeci">bool isValidPointer(NodeID nodeId) const</div><div class="ttdoc">Whether a node is a valid pointer. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00662">SVFIR.cpp:662</a></div></div>
144
144
  <div class="ttc" id="classSVF_1_1NormalGepStmt_html_a7bf625581c4852212bcea89562ea9cef"><div class="ttname"><a href="classSVF_1_1NormalGepStmt.html#a7bf625581c4852212bcea89562ea9cef">SVF::NormalGepStmt::getLocationSet</a></div><div class="ttdeci">const LocationSet &amp; getLocationSet() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00748">SVFStatements.h:748</a></div></div>
145
145
  <div class="ttc" id="classSVF_1_1PhiStmt_html_ae20d273a8afe603395b6621f04e6cb65"><div class="ttname"><a href="classSVF_1_1PhiStmt.html#ae20d273a8afe603395b6621f04e6cb65">SVF::PhiStmt::addOpVar</a></div><div class="ttdeci">void addOpVar(SVFVar *op)</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00369">SVFStatements.h:369</a></div></div>
146
- <div class="ttc" id="classSVF_1_1StInfo_html_ad6e599717952f8ccc2771cd72254b6b2"><div class="ttname"><a href="classSVF_1_1StInfo.html#ad6e599717952f8ccc2771cd72254b6b2">SVF::StInfo::getMaxFieldLimit</a></div><div class="ttdeci">static u32_t getMaxFieldLimit()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00541">SymbolTableInfo.h:541</a></div></div>
146
+ <div class="ttc" id="classSVF_1_1StInfo_html_ad6e599717952f8ccc2771cd72254b6b2"><div class="ttname"><a href="classSVF_1_1StInfo.html#ad6e599717952f8ccc2771cd72254b6b2">SVF::StInfo::getMaxFieldLimit</a></div><div class="ttdeci">static u32_t getMaxFieldLimit()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00534">SymbolTableInfo.h:534</a></div></div>
147
+ <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>
147
148
  <div class="ttc" id="classSVF_1_1SVFVar_html_a1ace69053c2c4436fd78d5624bd0086a"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a1ace69053c2c4436fd78d5624bd0086a">SVF::SVFVar::hasValue</a></div><div class="ttdeci">bool hasValue() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00110">SVFVariables.h:110</a></div></div>
148
149
  <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a267169023fc4f8dd66b145f7231fec11"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SVF::SymbolTableInfo::SymbolInfo</a></div><div class="ttdeci">static SymbolTableInfo * SymbolInfo()</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis. ...</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00059">SymbolTableInfo.cpp:59</a></div></div>
149
150
  <div class="ttc" id="classSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9a3c3f8883c2d3b50aef6331d5da97ffb0"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a3c3f8883c2d3b50aef6331d5da97ffb0">SVF::SVFStmt::ThreadJoin</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00056">SVFStatements.h:56</a></div></div>
@@ -151,7 +152,7 @@ $(function() {
151
152
  <div class="ttc" id="classSVF_1_1SVFVar_html_afaa33caa8d2a306f6741d9d066243e40"><div class="ttname"><a href="classSVF_1_1SVFVar.html#afaa33caa8d2a306f6741d9d066243e40">SVF::SVFVar::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get/has methods of the components. </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00094">SVFVariables.h:94</a></div></div>
152
153
  <div class="ttc" id="classSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9ac2089ffeab3f27354b2094758c805746">SVF::SVFStmt::NormalGep</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00056">SVFStatements.h:56</a></div></div>
153
154
  <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 &amp; 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>
154
- <div class="ttc" id="classSVF_1_1FIObjVar_html"><div class="ttname"><a href="classSVF_1_1FIObjVar.html">SVF::FIObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00527">SVFVariables.h:527</a></div></div>
155
+ <div class="ttc" id="classSVF_1_1FIObjVar_html"><div class="ttname"><a href="classSVF_1_1FIObjVar.html">SVF::FIObjVar</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00533">SVFVariables.h:533</a></div></div>
155
156
  <div class="ttc" id="classSVF_1_1TDForkPE_html"><div class="ttname"><a href="classSVF_1_1TDForkPE.html">SVF::TDForkPE</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00902">SVFStatements.h:902</a></div></div>
156
157
  <div class="ttc" id="classSVF_1_1SVFIR_html_a2a851ff7011e3bd71c36be5c7198a1f4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2a851ff7011e3bd71c36be5c7198a1f4">SVF::SVFIR::addNormalGepStmt</a></div><div class="ttdeci">NormalGepStmt * addNormalGepStmt(NodeID src, NodeID dst, const LocationSet &amp;ls)</div><div class="ttdoc">Add Offset(Gep) edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00327">SVFIR.cpp:327</a></div></div>
157
158
  <div class="ttc" id="classSVF_1_1SVFIR_html_a7276e82b4648ed0e1b3d1b8b37b24089"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a7276e82b4648ed0e1b3d1b8b37b24089">SVF::SVFIR::getAllFieldsObjVars</a></div><div class="ttdeci">NodeBS &amp; getAllFieldsObjVars(const MemObj *obj)</div><div class="ttdoc">Get all fields of an object. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00458">SVFIR.cpp:458</a></div></div>
@@ -163,8 +164,7 @@ $(function() {
163
164
  <div class="ttc" id="classSVF_1_1SVFVar_html_a76964ef7d4842a469d7720881499d8a6"><div class="ttname"><a href="classSVF_1_1SVFVar.html#a76964ef7d4842a469d7720881499d8a6">SVF::SVFVar::getIncomingEdges</a></div><div class="ttdeci">SVFStmt::SVFStmtSetTy &amp; getIncomingEdges(SVFStmt::PEDGEK kind)</div><div class="ttdoc">Get incoming SVFIR statements (edges) </div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00161">SVFVariables.h:161</a></div></div>
164
165
  <div class="ttc" id="classSVF_1_1SVFIR_html_a9e99fcf29016ef401f53491ec54a4053"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a9e99fcf29016ef401f53491ec54a4053">SVF::SVFIR::addCallPE</a></div><div class="ttdeci">CallPE * addCallPE(NodeID src, NodeID dst, const CallBlockNode *cs)</div><div class="ttdoc">Add Call edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00222">SVFIR.cpp:222</a></div></div>
165
166
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_afd690c09e01989e57899875ca97f0166"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#afd690c09e01989e57899875ca97f0166">SVF::SVFUtil::ArgInNoCallerFunction</a></div><div class="ttdeci">bool ArgInNoCallerFunction(const Value *val)</div><div class="ttdoc">Return true if the argument in a function does not have a caller. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00490">LLVMUtil.h:490</a></div></div>
166
- <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>
167
- <div class="ttc" id="classSVF_1_1MemObj_html_a41d85883d44ad77832b020455951c6fc"><div class="ttname"><a href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">SVF::MemObj::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive() const</div><div class="ttdoc">Return true if its field limit is 0. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00817">SymbolTableInfo.cpp:817</a></div></div>
167
+ <div class="ttc" id="classSVF_1_1MemObj_html_a41d85883d44ad77832b020455951c6fc"><div class="ttname"><a href="classSVF_1_1MemObj.html#a41d85883d44ad77832b020455951c6fc">SVF::MemObj::isFieldInsensitive</a></div><div class="ttdeci">bool isFieldInsensitive() const</div><div class="ttdoc">Return true if its field limit is 0. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00649">SymbolTableInfo.cpp:649</a></div></div>
168
168
  <div class="ttc" id="classSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9a375b956af2119d7abca8f1995f7701fd">SVF::SVFStmt::ThreadFork</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00056">SVFStatements.h:56</a></div></div>
169
169
  <div class="ttc" id="classSVF_1_1Options_html_ad2d3db3e407a53956a5a59cc24eb8d40"><div class="ttname"><a href="classSVF_1_1Options.html#ad2d3db3e407a53956a5a59cc24eb8d40">SVF::Options::HandBlackHole</a></div><div class="ttdeci">static llvm::cl::opt&lt; bool &gt; HandBlackHole</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00112">Options.h:112</a></div></div>
170
170
  <div class="ttc" id="classSVF_1_1SVFIR_html_a2878e202045b7f2c817185e8bf95d354"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2878e202045b7f2c817185e8bf95d354">SVF::SVFIR::getFIObjVar</a></div><div class="ttdeci">NodeID getFIObjVar(const MemObj *obj) const</div><div class="ttdoc">Get a field-insensitive obj SVFIR node according to a mem obj. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00377">SVFIR.h:377</a></div></div>
@@ -175,12 +175,11 @@ $(function() {
175
175
  <div class="ttc" id="classSVF_1_1SVFIR_html_a9a702ceb8ba3851daef444f1ece3a2f8"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a9a702ceb8ba3851daef444f1ece3a2f8">SVF::SVFIR::addGepValNode</a></div><div class="ttdeci">NodeID addGepValNode(const Value *curInst, const Value *val, const LocationSet &amp;ls, NodeID i, const Type *type, u32_t fieldidx)</div><div class="ttdoc">Add a temp field value node, this method can only invoked by getGepValVar. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00369">SVFIR.cpp:369</a></div></div>
176
176
  <div class="ttc" id="classSVF_1_1SVFStmt_html_a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">SVF::SVFStmt::Store</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00056">SVFStatements.h:56</a></div></div>
177
177
  <div class="ttc" id="classSVF_1_1SVFIR_html_abe8aa0d325b35dd59ce4a7f302760e51"><div class="ttname"><a href="classSVF_1_1SVFIR.html#abe8aa0d325b35dd59ce4a7f302760e51">SVF::SVFIR::icfg</a></div><div class="ttdeci">ICFG * icfg</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00093">SVFIR.h:93</a></div></div>
178
- <div class="ttc" id="classSVF_1_1MemObj_html_a3ab6f65ffbf6442daac4d3f70f2d3cb1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">SVF::MemObj::getId</a></div><div class="ttdeci">SymID getId() const</div><div class="ttdoc">Get the memory object id. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00451">SymbolTableInfo.h:451</a></div></div>
178
+ <div class="ttc" id="classSVF_1_1MemObj_html_a3ab6f65ffbf6442daac4d3f70f2d3cb1"><div class="ttname"><a href="classSVF_1_1MemObj.html#a3ab6f65ffbf6442daac4d3f70f2d3cb1">SVF::MemObj::getId</a></div><div class="ttdeci">SymID getId() const</div><div class="ttdoc">Get the memory object id. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00448">SymbolTableInfo.h:448</a></div></div>
179
179
  <div class="ttc" id="classSVF_1_1NodeIDAllocator_html_a2bd3ca30fc9669d9a0327544bdb4557b"><div class="ttname"><a href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">SVF::NodeIDAllocator::get</a></div><div class="ttdeci">static NodeIDAllocator * get(void)</div><div class="ttdoc">Return (singleton) allocator. </div><div class="ttdef"><b>Definition:</b> <a href="NodeIDAllocator_8cpp_source.html#l00025">NodeIDAllocator.cpp:25</a></div></div>
180
- <div class="ttc" id="classSVF_1_1GepObjPN_html"><div class="ttname"><a href="classSVF_1_1GepObjPN.html">SVF::GepObjPN</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFVariables_8h_source.html#l00451">SVFVariables.h:451</a></div></div>
181
180
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
182
181
  <div class="ttc" id="classSVF_1_1SVFIR_html_a7eb14738f0cf08cc8b5c623c953db4ba"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a7eb14738f0cf08cc8b5c623c953db4ba">SVF::SVFIR::addCmpStmt</a></div><div class="ttdeci">CmpStmt * addCmpStmt(NodeID op1, NodeID op2, NodeID dst, u32_t predict)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00108">SVFIR.cpp:108</a></div></div>
183
- <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>
182
+ <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>
184
183
  <div class="ttc" id="namespaceSVF_html_a740396763e377643790c8b803ab3e4ea"><div class="ttname"><a href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">SVF::NodeBS</a></div><div class="ttdeci">llvm::SparseBitVector NodeBS</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00086">SVFBasicTypes.h:86</a></div></div>
185
184
  <div class="ttc" id="classSVF_1_1SVFIR_html_a3837804b2622baf7e6991aa993286e9e"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a3837804b2622baf7e6991aa993286e9e">SVF::SVFIR::addLoadStmt</a></div><div class="ttdeci">LoadStmt * addLoadStmt(NodeID src, NodeID dst)</div><div class="ttdoc">Add Load edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00185">SVFIR.cpp:185</a></div></div>
186
185
  <div class="ttc" id="classSVF_1_1SVFIR_html_a292b5a477c1f87777730b591c271e523"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a292b5a477c1f87777730b591c271e523">SVF::SVFIR::addToStmt2TypeMap</a></div><div class="ttdeci">void addToStmt2TypeMap(SVFStmt *edge)</div><div class="ttdoc">Map a SVFStatement type to a set of corresponding SVF statements. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00482">SVFIR.h:482</a></div></div>
@@ -188,7 +187,7 @@ $(function() {
188
187
  <div class="ttc" id="classSVF_1_1IRGraph_html_abe0ab797a3da420e4d2f9136d64fb407"><div class="ttname"><a href="classSVF_1_1IRGraph.html#abe0ab797a3da420e4d2f9136d64fb407">SVF::IRGraph::hasNonlabeledEdge</a></div><div class="ttdeci">SVFStmt * hasNonlabeledEdge(SVFVar *src, SVFVar *dst, SVFStmt::PEDGEK kind)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8cpp_source.html#l00059">IRGraph.cpp:59</a></div></div>
189
188
  <div class="ttc" id="classSVF_1_1SVFIR_html_ad6e18f520f6b559f2304002792f6b701"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ad6e18f520f6b559f2304002792f6b701">SVF::SVFIR::getModule</a></div><div class="ttdeci">SVFModule * getModule()</div><div class="ttdoc">Get LLVM Module. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00155">SVFIR.h:155</a></div></div>
190
189
  <div class="ttc" id="classSVF_1_1SVFIR_html_ad7bbe1abea55ed03c9b6c81891c0bd67"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ad7bbe1abea55ed03c9b6c81891c0bd67">SVF::SVFIR::GepValObjMap</a></div><div class="ttdeci">GepValueVarMap GepValObjMap</div><div class="ttdoc">Map a pair&lt;base,off&gt; to a gep value node id. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00078">SVFIR.h:78</a></div></div>
191
- <div class="ttc" id="classSVF_1_1MemObj_html_a4da54ef60231d2e6c26669226b99d2f3"><div class="ttname"><a href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">SVF::MemObj::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get the reference value to this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00445">SymbolTableInfo.h:445</a></div></div>
190
+ <div class="ttc" id="classSVF_1_1MemObj_html_a4da54ef60231d2e6c26669226b99d2f3"><div class="ttname"><a href="classSVF_1_1MemObj.html#a4da54ef60231d2e6c26669226b99d2f3">SVF::MemObj::getValue</a></div><div class="ttdeci">const Value * getValue() const</div><div class="ttdoc">Get the reference value to this object. </div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00442">SymbolTableInfo.h:442</a></div></div>
192
191
  <div class="ttc" id="classSVF_1_1SVFIR_html_a41abf665421dbfaef508b1eba0c91fb9"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a41abf665421dbfaef508b1eba0c91fb9">SVF::SVFIR::phiNodeMap</a></div><div class="ttdeci">PHINodeMap phiNodeMap</div><div class="ttdoc">A set of phi copy edges. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00082">SVFIR.h:82</a></div></div>
193
192
  <div class="ttc" id="classSVF_1_1BinaryOPStmt_html"><div class="ttname"><a href="classSVF_1_1BinaryOPStmt.html">SVF::BinaryOPStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00429">SVFStatements.h:429</a></div></div>
194
193
  <div class="ttc" id="classSVF_1_1SVFIR_html_a06465449e58e14bfb1c3eee2c97d3242"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a06465449e58e14bfb1c3eee2c97d3242">SVF::SVFIR::addFIObjNode</a></div><div class="ttdeci">NodeID addFIObjNode(const MemObj *obj)</div><div class="ttdoc">Add a field-insensitive node, this method can only invoked by getFIGepObjNode. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00446">SVFIR.cpp:446</a></div></div>
@@ -197,6 +196,7 @@ $(function() {
197
196
  <div class="ttc" id="classSVF_1_1SVFIR_html_a12fef4ec0537b26947eb0ab10799f29f"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a12fef4ec0537b26947eb0ab10799f29f">SVF::SVFIR::addRetPE</a></div><div class="ttdeci">RetPE * addRetPE(NodeID src, NodeID dst, const CallBlockNode *cs)</div><div class="ttdoc">Add Return edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00240">SVFIR.cpp:240</a></div></div>
198
197
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph&lt; SVFVar, SVFStmt &gt;::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00387">GenericGraph.h:387</a></div></div>
199
198
  <div class="ttc" id="classSVF_1_1SVFIR_html_a4f0d318deff3b97a4bd5e7b9d53e42fd"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a4f0d318deff3b97a4bd5e7b9d53e42fd">SVF::SVFIR::addBranchStmt</a></div><div class="ttdeci">BranchStmt * addBranchStmt(NodeID br, NodeID cond, std::vector&lt; const ICFGNode *&gt; succs)</div><div class="ttdoc">Add BranchStmt. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00167">SVFIR.cpp:167</a></div></div>
199
+ <div class="ttc" id="classSVF_1_1LocationSet_html_ac098bc95299002b9016684fa7f2799ca"><div class="ttname"><a href="classSVF_1_1LocationSet.html#ac098bc95299002b9016684fa7f2799ca">SVF::LocationSet::accumulateConstantOffset</a></div><div class="ttdeci">Size_t accumulateConstantOffset() const</div><div class="ttdoc">Get methods. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00154">LocationSet.h:154</a></div></div>
200
200
  <div class="ttc" id="classSVF_1_1SVFIR_html"><div class="ttname"><a href="classSVF_1_1SVFIR.html">SVF::SVFIR</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00043">SVFIR.h:43</a></div></div>
201
201
  <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 &amp;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>
202
202
  <div class="ttc" id="classSVF_1_1SVFIR_html_a42d1e2f0213fb6e54c56cc0695b57cb0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a42d1e2f0213fb6e54c56cc0695b57cb0">SVF::SVFIR::getFieldsAfterCollapse</a></div><div class="ttdeci">NodeBS getFieldsAfterCollapse(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00480">SVFIR.cpp:480</a></div></div>