svf-tools 1.0.828 → 1.0.830

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 (398) hide show
  1. package/SVF-doxygen/html/AccessPath_8cpp_source.html +225 -224
  2. package/SVF-doxygen/html/AccessPath_8h_source.html +11 -11
  3. package/SVF-doxygen/html/AndersenSFR_8cpp_source.html +1 -1
  4. package/SVF-doxygen/html/Andersen_8cpp_source.html +1 -1
  5. package/SVF-doxygen/html/BasicTypes_8h.html +2 -0
  6. package/SVF-doxygen/html/BasicTypes_8h_source.html +123 -121
  7. package/SVF-doxygen/html/CFLAlias_8cpp_source.html +1 -1
  8. package/SVF-doxygen/html/CFLGraphBuilder_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/CHGBuilder_8cpp_source.html +11 -11
  10. package/SVF-doxygen/html/ConsG_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/ConsG_8h_source.html +1 -1
  12. package/SVF-doxygen/html/ContextDDA_8cpp_source.html +1 -1
  13. package/SVF-doxygen/html/ContextDDA_8h_source.html +1 -1
  14. package/SVF-doxygen/html/CxtStmt_8h_source.html +1 -1
  15. package/SVF-doxygen/html/DCHG_8cpp_source.html +12 -12
  16. package/SVF-doxygen/html/DCHG_8h_source.html +5 -5
  17. package/SVF-doxygen/html/DDAClient_8cpp_source.html +2 -2
  18. package/SVF-doxygen/html/DDAStat_8cpp_source.html +1 -1
  19. package/SVF-doxygen/html/DDAVFSolver_8h_source.html +4 -4
  20. package/SVF-doxygen/html/FlowDDA_8cpp_source.html +1 -1
  21. package/SVF-doxygen/html/FlowDDA_8h_source.html +1 -1
  22. package/SVF-doxygen/html/FlowSensitiveStat_8cpp_source.html +1 -1
  23. package/SVF-doxygen/html/ICFGBuilder_8cpp_source.html +1 -1
  24. package/SVF-doxygen/html/ICFG_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/IRGraph_8h_source.html +2 -2
  26. package/SVF-doxygen/html/LLVMModule_8cpp_source.html +145 -144
  27. package/SVF-doxygen/html/LLVMModule_8h_source.html +3 -3
  28. package/SVF-doxygen/html/LLVMUtil_8cpp_source.html +1135 -1037
  29. package/SVF-doxygen/html/LLVMUtil_8h.html +8 -5
  30. package/SVF-doxygen/html/LLVMUtil_8h_source.html +418 -415
  31. package/SVF-doxygen/html/LockResultValidator_8cpp_source.html +1 -1
  32. package/SVF-doxygen/html/MHP_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/MTAAnnotator_8cpp_source.html +1 -1
  34. package/SVF-doxygen/html/MemRegion_8cpp_source.html +3 -3
  35. package/SVF-doxygen/html/MemSSA_8cpp_source.html +1 -1
  36. package/SVF-doxygen/html/PointerAnalysisImpl_8cpp_source.html +4 -4
  37. package/SVF-doxygen/html/PointerAnalysis_8cpp_source.html +363 -362
  38. package/SVF-doxygen/html/PointerAnalysis_8h_source.html +13 -13
  39. package/SVF-doxygen/html/SVFIR2ConsExeState_8cpp_source.html +7 -7
  40. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +11 -10
  41. package/SVF-doxygen/html/SVFIRBuilder_8cpp_source.html +927 -924
  42. package/SVF-doxygen/html/SVFIRBuilder_8h_source.html +35 -34
  43. package/SVF-doxygen/html/SVFIRExtAPI_8cpp_source.html +2 -2
  44. package/SVF-doxygen/html/SVFIR_8cpp_source.html +1 -1
  45. package/SVF-doxygen/html/SVFIR_8h_source.html +1 -1
  46. package/SVF-doxygen/html/SVFStat_8cpp_source.html +12 -12
  47. package/SVF-doxygen/html/SVFStatements_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/SVFStatements_8h_source.html +2 -2
  49. package/SVF-doxygen/html/SVFType_8cpp_source.html +38 -37
  50. package/SVF-doxygen/html/SVFType_8h_source.html +5 -5
  51. package/SVF-doxygen/html/SVFValue_8cpp_source.html +1 -1
  52. package/SVF-doxygen/html/SVFValue_8h_source.html +1 -1
  53. package/SVF-doxygen/html/SVFVariables_8cpp_source.html +1 -1
  54. package/SVF-doxygen/html/SVFVariables_8h_source.html +1 -1
  55. package/SVF-doxygen/html/SaberSVFGBuilder_8cpp_source.html +1 -1
  56. package/SVF-doxygen/html/Steensgaard_8cpp_source.html +1 -1
  57. package/SVF-doxygen/html/SymbolTableBuilder_8cpp_source.html +651 -640
  58. package/SVF-doxygen/html/SymbolTableBuilder_8h_source.html +18 -18
  59. package/SVF-doxygen/html/SymbolTableInfo_8cpp_source.html +339 -338
  60. package/SVF-doxygen/html/SymbolTableInfo_8h_source.html +33 -33
  61. package/SVF-doxygen/html/ThreadCallGraph_8cpp_source.html +1 -1
  62. package/SVF-doxygen/html/VersionedFlowSensitiveStat_8cpp_source.html +1 -1
  63. package/SVF-doxygen/html/classSVF_1_1AccessPath-members.html +3 -3
  64. package/SVF-doxygen/html/classSVF_1_1AccessPath.html +236 -235
  65. package/SVF-doxygen/html/classSVF_1_1ActualINSVFGNode.html +1 -1
  66. package/SVF-doxygen/html/classSVF_1_1ActualOUTSVFGNode.html +1 -1
  67. package/SVF-doxygen/html/classSVF_1_1AddrStmt.html +1 -1
  68. package/SVF-doxygen/html/classSVF_1_1AliasDDAClient.html +1 -1
  69. package/SVF-doxygen/html/classSVF_1_1Andersen.html +1 -1
  70. package/SVF-doxygen/html/classSVF_1_1AndersenSFR.html +1 -1
  71. package/SVF-doxygen/html/classSVF_1_1BVDataPTAImpl.html +4 -4
  72. package/SVF-doxygen/html/classSVF_1_1BinaryOPStmt.html +1 -1
  73. package/SVF-doxygen/html/classSVF_1_1BinaryOPVFGNode.html +1 -1
  74. package/SVF-doxygen/html/classSVF_1_1BranchStmt.html +1 -1
  75. package/SVF-doxygen/html/classSVF_1_1CFLAlias.html +3 -3
  76. package/SVF-doxygen/html/classSVF_1_1CHGBuilder.html +11 -11
  77. package/SVF-doxygen/html/classSVF_1_1CallCFGEdge.html +1 -1
  78. package/SVF-doxygen/html/classSVF_1_1CallPE.html +1 -1
  79. package/SVF-doxygen/html/classSVF_1_1CmpStmt.html +1 -1
  80. package/SVF-doxygen/html/classSVF_1_1CmpVFGNode.html +1 -1
  81. package/SVF-doxygen/html/classSVF_1_1ContextDDA.html +2 -2
  82. package/SVF-doxygen/html/classSVF_1_1CopyStmt.html +1 -1
  83. package/SVF-doxygen/html/classSVF_1_1CxtStmt.html +1 -1
  84. package/SVF-doxygen/html/classSVF_1_1CxtThread.html +1 -1
  85. package/SVF-doxygen/html/classSVF_1_1CxtThreadStmt.html +1 -1
  86. package/SVF-doxygen/html/classSVF_1_1DCHGraph.html +12 -12
  87. package/SVF-doxygen/html/classSVF_1_1DDAStat.html +1 -1
  88. package/SVF-doxygen/html/classSVF_1_1DDAVFSolver.html +1 -1
  89. package/SVF-doxygen/html/classSVF_1_1DoubleFreeChecker.html +1 -1
  90. package/SVF-doxygen/html/classSVF_1_1FIObjVar.html +1 -1
  91. package/SVF-doxygen/html/classSVF_1_1FlowDDA.html +2 -2
  92. package/SVF-doxygen/html/classSVF_1_1FlowSensitive.html +1 -1
  93. package/SVF-doxygen/html/classSVF_1_1FlowSensitiveStat.html +1 -1
  94. package/SVF-doxygen/html/classSVF_1_1ForkJoinAnalysis.html +1 -1
  95. package/SVF-doxygen/html/classSVF_1_1FunptrDDAClient.html +1 -1
  96. package/SVF-doxygen/html/classSVF_1_1GepObjVar.html +2 -2
  97. package/SVF-doxygen/html/classSVF_1_1GepStmt.html +3 -3
  98. package/SVF-doxygen/html/classSVF_1_1GepValVar.html +1 -1
  99. package/SVF-doxygen/html/classSVF_1_1ICFG.html +1 -1
  100. package/SVF-doxygen/html/classSVF_1_1ICFGBuilder.html +1 -1
  101. package/SVF-doxygen/html/classSVF_1_1IRGraph.html +2 -2
  102. package/SVF-doxygen/html/classSVF_1_1InterMSSAPHISVFGNode.html +1 -1
  103. package/SVF-doxygen/html/classSVF_1_1InterPHIVFGNode.html +1 -1
  104. package/SVF-doxygen/html/classSVF_1_1IntraCFGEdge.html +1 -1
  105. package/SVF-doxygen/html/classSVF_1_1IntraICFGNode.html +1 -1
  106. package/SVF-doxygen/html/classSVF_1_1IntraPHIVFGNode.html +1 -1
  107. package/SVF-doxygen/html/classSVF_1_1LLVMModuleSet.html +141 -140
  108. package/SVF-doxygen/html/classSVF_1_1LeakChecker.html +1 -1
  109. package/SVF-doxygen/html/classSVF_1_1LoadStmt.html +1 -1
  110. package/SVF-doxygen/html/classSVF_1_1LockResultValidator.html +1 -1
  111. package/SVF-doxygen/html/classSVF_1_1MHP.html +1 -1
  112. package/SVF-doxygen/html/classSVF_1_1MRGenerator.html +3 -3
  113. package/SVF-doxygen/html/classSVF_1_1MTAAnnotator.html +1 -1
  114. package/SVF-doxygen/html/classSVF_1_1MTAResultValidator.html +1 -1
  115. package/SVF-doxygen/html/classSVF_1_1MemObj.html +121 -121
  116. package/SVF-doxygen/html/classSVF_1_1MemSSA.html +1 -1
  117. package/SVF-doxygen/html/classSVF_1_1ObjTypeInfo.html +29 -30
  118. package/SVF-doxygen/html/classSVF_1_1ObjVar.html +2 -2
  119. package/SVF-doxygen/html/classSVF_1_1PHIVFGNode.html +1 -1
  120. package/SVF-doxygen/html/classSVF_1_1PhiStmt.html +1 -1
  121. package/SVF-doxygen/html/classSVF_1_1PointerAnalysis.html +342 -341
  122. package/SVF-doxygen/html/classSVF_1_1RetCFGEdge.html +1 -1
  123. package/SVF-doxygen/html/classSVF_1_1RetPE.html +1 -1
  124. package/SVF-doxygen/html/classSVF_1_1SVFArrayType.html +4 -4
  125. package/SVF-doxygen/html/classSVF_1_1SVFFunctionType.html +4 -4
  126. package/SVF-doxygen/html/classSVF_1_1SVFIR.html +1 -1
  127. package/SVF-doxygen/html/classSVF_1_1SVFIR2ConsExeState.html +6 -6
  128. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +11 -10
  129. package/SVF-doxygen/html/classSVF_1_1SVFIRBuilder.html +868 -864
  130. package/SVF-doxygen/html/classSVF_1_1SVFIntegerType.html +7 -7
  131. package/SVF-doxygen/html/classSVF_1_1SVFOtherType.html +4 -4
  132. package/SVF-doxygen/html/classSVF_1_1SVFPointerType.html +3 -2
  133. package/SVF-doxygen/html/classSVF_1_1SVFStat.html +12 -12
  134. package/SVF-doxygen/html/classSVF_1_1SVFStructType.html +4 -4
  135. package/SVF-doxygen/html/classSVF_1_1SVFValue.html +23 -23
  136. package/SVF-doxygen/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
  137. package/SVF-doxygen/html/classSVF_1_1SelectStmt.html +1 -1
  138. package/SVF-doxygen/html/classSVF_1_1Steensgaard.html +1 -1
  139. package/SVF-doxygen/html/classSVF_1_1StoreStmt.html +1 -1
  140. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder-members.html +1 -1
  141. package/SVF-doxygen/html/classSVF_1_1SymbolTableBuilder.html +642 -629
  142. package/SVF-doxygen/html/classSVF_1_1SymbolTableInfo.html +125 -124
  143. package/SVF-doxygen/html/classSVF_1_1TCT.html +1 -1
  144. package/SVF-doxygen/html/classSVF_1_1TDForkPE.html +1 -1
  145. package/SVF-doxygen/html/classSVF_1_1TDJoinPE.html +1 -1
  146. package/SVF-doxygen/html/classSVF_1_1ThreadCallGraph.html +1 -1
  147. package/SVF-doxygen/html/classSVF_1_1TypeAnalysis.html +2 -2
  148. package/SVF-doxygen/html/classSVF_1_1UnaryOPStmt.html +1 -1
  149. package/SVF-doxygen/html/classSVF_1_1UnaryOPVFGNode.html +1 -1
  150. package/SVF-doxygen/html/classSVF_1_1ValVar.html +1 -1
  151. package/SVF-doxygen/html/classSVF_1_1VersionedFlowSensitiveStat.html +1 -1
  152. package/SVF-doxygen/html/functions_a.html +1 -1
  153. package/SVF-doxygen/html/functions_func.html +1 -1
  154. package/SVF-doxygen/html/functions_func_g.html +10 -10
  155. package/SVF-doxygen/html/functions_func_p.html +1 -1
  156. package/SVF-doxygen/html/functions_g.html +6 -6
  157. package/SVF-doxygen/html/functions_r.html +2 -2
  158. package/SVF-doxygen/html/functions_s.html +5 -5
  159. package/SVF-doxygen/html/functions_t.html +7 -7
  160. package/SVF-doxygen/html/functions_v.html +3 -1
  161. package/SVF-doxygen/html/functions_w.html +8 -8
  162. package/SVF-doxygen/html/menudata.js +0 -1
  163. package/SVF-doxygen/html/namespaceSVF.html +43 -25
  164. package/SVF-doxygen/html/namespaceSVF_1_1LLVMUtil.html +1280 -1152
  165. package/SVF-doxygen/html/namespacemembers_d.html +7 -1
  166. package/SVF-doxygen/html/namespacemembers_func_d.html +7 -1
  167. package/SVF-doxygen/html/namespacemembers_func_g.html +7 -4
  168. package/SVF-doxygen/html/namespacemembers_g.html +11 -5
  169. package/SVF-doxygen/html/namespacemembers_l.html +0 -3
  170. package/SVF-doxygen/html/namespacemembers_type_g.html +3 -0
  171. package/SVF-doxygen/html/search/all_1.js +1 -1
  172. package/SVF-doxygen/html/search/all_10.js +324 -324
  173. package/SVF-doxygen/html/search/all_11.js +223 -223
  174. package/SVF-doxygen/html/search/all_12.js +553 -553
  175. package/SVF-doxygen/html/search/all_13.js +192 -192
  176. package/SVF-doxygen/html/search/all_14.js +67 -67
  177. package/SVF-doxygen/html/search/all_15.js +167 -167
  178. package/SVF-doxygen/html/search/all_16.js +63 -63
  179. package/SVF-doxygen/html/search/all_17.js +1 -1
  180. package/SVF-doxygen/html/search/all_18.js +1 -1
  181. package/SVF-doxygen/html/search/all_19.js +11 -11
  182. package/SVF-doxygen/html/search/all_1a.js +172 -172
  183. package/SVF-doxygen/html/search/all_4.js +8 -6
  184. package/SVF-doxygen/html/search/all_5.js +119 -119
  185. package/SVF-doxygen/html/search/all_6.js +226 -226
  186. package/SVF-doxygen/html/search/all_7.js +1048 -1046
  187. package/SVF-doxygen/html/search/all_8.js +198 -198
  188. package/SVF-doxygen/html/search/all_9.js +607 -607
  189. package/SVF-doxygen/html/search/all_a.js +46 -46
  190. package/SVF-doxygen/html/search/all_b.js +26 -26
  191. package/SVF-doxygen/html/search/all_c.js +115 -116
  192. package/SVF-doxygen/html/search/all_d.js +198 -198
  193. package/SVF-doxygen/html/search/all_e.js +207 -207
  194. package/SVF-doxygen/html/search/all_f.js +116 -116
  195. package/SVF-doxygen/html/search/classes_0.js +26 -26
  196. package/SVF-doxygen/html/search/classes_1.js +9 -9
  197. package/SVF-doxygen/html/search/classes_10.js +73 -73
  198. package/SVF-doxygen/html/search/classes_11.js +15 -15
  199. package/SVF-doxygen/html/search/classes_12.js +2 -2
  200. package/SVF-doxygen/html/search/classes_13.js +10 -10
  201. package/SVF-doxygen/html/search/classes_14.js +14 -14
  202. package/SVF-doxygen/html/search/classes_15.js +1 -1
  203. package/SVF-doxygen/html/search/classes_2.js +80 -80
  204. package/SVF-doxygen/html/search/classes_3.js +37 -37
  205. package/SVF-doxygen/html/search/classes_4.js +9 -9
  206. package/SVF-doxygen/html/search/classes_5.js +28 -28
  207. package/SVF-doxygen/html/search/classes_6.js +104 -104
  208. package/SVF-doxygen/html/search/classes_7.js +34 -34
  209. package/SVF-doxygen/html/search/classes_8.js +56 -56
  210. package/SVF-doxygen/html/search/classes_9.js +1 -1
  211. package/SVF-doxygen/html/search/classes_a.js +12 -12
  212. package/SVF-doxygen/html/search/classes_b.js +29 -29
  213. package/SVF-doxygen/html/search/classes_c.js +6 -6
  214. package/SVF-doxygen/html/search/classes_d.js +18 -18
  215. package/SVF-doxygen/html/search/classes_e.js +36 -36
  216. package/SVF-doxygen/html/search/classes_f.js +25 -25
  217. package/SVF-doxygen/html/search/defines_0.js +3 -3
  218. package/SVF-doxygen/html/search/defines_1.js +2 -2
  219. package/SVF-doxygen/html/search/defines_2.js +30 -30
  220. package/SVF-doxygen/html/search/defines_3.js +21 -21
  221. package/SVF-doxygen/html/search/defines_4.js +2 -2
  222. package/SVF-doxygen/html/search/defines_5.js +4 -4
  223. package/SVF-doxygen/html/search/defines_6.js +2 -2
  224. package/SVF-doxygen/html/search/defines_7.js +5 -5
  225. package/SVF-doxygen/html/search/defines_8.js +11 -11
  226. package/SVF-doxygen/html/search/defines_9.js +9 -9
  227. package/SVF-doxygen/html/search/defines_a.js +2 -2
  228. package/SVF-doxygen/html/search/defines_b.js +1 -1
  229. package/SVF-doxygen/html/search/defines_c.js +3 -3
  230. package/SVF-doxygen/html/search/defines_d.js +2 -2
  231. package/SVF-doxygen/html/search/defines_e.js +7 -7
  232. package/SVF-doxygen/html/search/defines_f.js +3 -3
  233. package/SVF-doxygen/html/search/enums_0.js +3 -3
  234. package/SVF-doxygen/html/search/enums_1.js +2 -2
  235. package/SVF-doxygen/html/search/enums_10.js +1 -1
  236. package/SVF-doxygen/html/search/enums_11.js +1 -1
  237. package/SVF-doxygen/html/search/enums_2.js +8 -8
  238. package/SVF-doxygen/html/search/enums_3.js +1 -1
  239. package/SVF-doxygen/html/search/enums_4.js +3 -3
  240. package/SVF-doxygen/html/search/enums_5.js +1 -1
  241. package/SVF-doxygen/html/search/enums_6.js +2 -2
  242. package/SVF-doxygen/html/search/enums_7.js +2 -2
  243. package/SVF-doxygen/html/search/enums_8.js +4 -4
  244. package/SVF-doxygen/html/search/enums_9.js +1 -1
  245. package/SVF-doxygen/html/search/enums_a.js +1 -1
  246. package/SVF-doxygen/html/search/enums_b.js +7 -7
  247. package/SVF-doxygen/html/search/enums_c.js +1 -1
  248. package/SVF-doxygen/html/search/enums_d.js +4 -4
  249. package/SVF-doxygen/html/search/enums_e.js +2 -2
  250. package/SVF-doxygen/html/search/enums_f.js +4 -4
  251. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  252. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  253. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  254. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  255. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  256. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  257. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  258. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  259. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  260. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  261. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  262. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  263. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  264. package/SVF-doxygen/html/search/enumvalues_7.js +9 -9
  265. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  266. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  267. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  268. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  269. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  270. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  271. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  272. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  273. package/SVF-doxygen/html/search/files_0.js +13 -13
  274. package/SVF-doxygen/html/search/files_1.js +7 -7
  275. package/SVF-doxygen/html/search/files_10.js +8 -8
  276. package/SVF-doxygen/html/search/files_11.js +8 -8
  277. package/SVF-doxygen/html/search/files_12.js +2 -2
  278. package/SVF-doxygen/html/search/files_2.js +55 -55
  279. package/SVF-doxygen/html/search/files_3.js +14 -14
  280. package/SVF-doxygen/html/search/files_4.js +5 -5
  281. package/SVF-doxygen/html/search/files_5.js +13 -13
  282. package/SVF-doxygen/html/search/files_6.js +9 -9
  283. package/SVF-doxygen/html/search/files_7.js +14 -14
  284. package/SVF-doxygen/html/search/files_8.js +13 -13
  285. package/SVF-doxygen/html/search/files_9.js +18 -18
  286. package/SVF-doxygen/html/search/files_a.js +3 -3
  287. package/SVF-doxygen/html/search/files_b.js +2 -2
  288. package/SVF-doxygen/html/search/files_c.js +20 -20
  289. package/SVF-doxygen/html/search/files_d.js +4 -4
  290. package/SVF-doxygen/html/search/files_e.js +62 -62
  291. package/SVF-doxygen/html/search/files_f.js +8 -8
  292. package/SVF-doxygen/html/search/functions_0.js +13 -13
  293. package/SVF-doxygen/html/search/functions_1.js +360 -360
  294. package/SVF-doxygen/html/search/functions_10.js +140 -140
  295. package/SVF-doxygen/html/search/functions_11.js +139 -139
  296. package/SVF-doxygen/html/search/functions_12.js +288 -288
  297. package/SVF-doxygen/html/search/functions_13.js +59 -59
  298. package/SVF-doxygen/html/search/functions_14.js +39 -39
  299. package/SVF-doxygen/html/search/functions_15.js +71 -71
  300. package/SVF-doxygen/html/search/functions_16.js +32 -32
  301. package/SVF-doxygen/html/search/functions_17.js +3 -3
  302. package/SVF-doxygen/html/search/functions_18.js +172 -172
  303. package/SVF-doxygen/html/search/functions_2.js +89 -89
  304. package/SVF-doxygen/html/search/functions_3.js +258 -258
  305. package/SVF-doxygen/html/search/functions_4.js +78 -76
  306. package/SVF-doxygen/html/search/functions_5.js +53 -53
  307. package/SVF-doxygen/html/search/functions_6.js +60 -60
  308. package/SVF-doxygen/html/search/functions_7.js +857 -856
  309. package/SVF-doxygen/html/search/functions_8.js +149 -149
  310. package/SVF-doxygen/html/search/functions_9.js +423 -423
  311. package/SVF-doxygen/html/search/functions_a.js +30 -30
  312. package/SVF-doxygen/html/search/functions_b.js +2 -2
  313. package/SVF-doxygen/html/search/functions_c.js +25 -26
  314. package/SVF-doxygen/html/search/functions_d.js +79 -79
  315. package/SVF-doxygen/html/search/functions_e.js +35 -35
  316. package/SVF-doxygen/html/search/functions_f.js +56 -56
  317. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  318. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  319. package/SVF-doxygen/html/search/related_0.js +2 -2
  320. package/SVF-doxygen/html/search/related_1.js +2 -2
  321. package/SVF-doxygen/html/search/related_2.js +2 -2
  322. package/SVF-doxygen/html/search/related_3.js +2 -2
  323. package/SVF-doxygen/html/search/related_4.js +2 -2
  324. package/SVF-doxygen/html/search/related_5.js +1 -1
  325. package/SVF-doxygen/html/search/related_6.js +2 -2
  326. package/SVF-doxygen/html/search/related_7.js +4 -4
  327. package/SVF-doxygen/html/search/related_8.js +2 -2
  328. package/SVF-doxygen/html/search/related_9.js +4 -4
  329. package/SVF-doxygen/html/search/related_a.js +19 -19
  330. package/SVF-doxygen/html/search/related_b.js +4 -4
  331. package/SVF-doxygen/html/search/related_c.js +2 -2
  332. package/SVF-doxygen/html/search/related_d.js +12 -12
  333. package/SVF-doxygen/html/search/related_e.js +2 -2
  334. package/SVF-doxygen/html/search/related_f.js +2 -2
  335. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  336. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  337. package/SVF-doxygen/html/search/typedefs_10.js +61 -61
  338. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  339. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  340. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  341. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  342. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  343. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  344. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  345. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  346. package/SVF-doxygen/html/search/typedefs_6.js +56 -55
  347. package/SVF-doxygen/html/search/typedefs_7.js +44 -44
  348. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  349. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  350. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  351. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  352. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  353. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  354. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  355. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  356. package/SVF-doxygen/html/search/variables_0.js +151 -151
  357. package/SVF-doxygen/html/search/variables_1.js +75 -75
  358. package/SVF-doxygen/html/search/variables_10.js +97 -97
  359. package/SVF-doxygen/html/search/variables_11.js +44 -44
  360. package/SVF-doxygen/html/search/variables_12.js +92 -92
  361. package/SVF-doxygen/html/search/variables_13.js +76 -76
  362. package/SVF-doxygen/html/search/variables_14.js +14 -14
  363. package/SVF-doxygen/html/search/variables_15.js +48 -48
  364. package/SVF-doxygen/html/search/variables_16.js +9 -9
  365. package/SVF-doxygen/html/search/variables_17.js +1 -1
  366. package/SVF-doxygen/html/search/variables_18.js +2 -2
  367. package/SVF-doxygen/html/search/variables_2.js +38 -38
  368. package/SVF-doxygen/html/search/variables_3.js +142 -142
  369. package/SVF-doxygen/html/search/variables_4.js +55 -55
  370. package/SVF-doxygen/html/search/variables_5.js +37 -37
  371. package/SVF-doxygen/html/search/variables_6.js +66 -66
  372. package/SVF-doxygen/html/search/variables_7.js +34 -34
  373. package/SVF-doxygen/html/search/variables_8.js +7 -7
  374. package/SVF-doxygen/html/search/variables_9.js +78 -78
  375. package/SVF-doxygen/html/search/variables_a.js +4 -4
  376. package/SVF-doxygen/html/search/variables_b.js +10 -10
  377. package/SVF-doxygen/html/search/variables_c.js +45 -45
  378. package/SVF-doxygen/html/search/variables_d.js +56 -56
  379. package/SVF-doxygen/html/search/variables_e.js +123 -123
  380. package/SVF-doxygen/html/search/variables_f.js +30 -30
  381. package/SVF-doxygen/html/structSVF_1_1DOTGraphTraits_3_01ConstraintGraph_01_5_01_4.html +1 -1
  382. package/SVF-doxygen/html/svf-ex_8cpp.html +1 -1
  383. package/SVF-doxygen/html/svf-ex_8cpp_source.html +1 -1
  384. package/package.json +1 -1
  385. package/svf/include/MemoryModel/AccessPath.h +2 -2
  386. package/svf/lib/AbstractExecution/SVFIR2ConsExeState.cpp +2 -2
  387. package/svf/lib/AbstractExecution/SVFIR2ItvExeState.cpp +4 -4
  388. package/svf/lib/MemoryModel/AccessPath.cpp +6 -5
  389. package/svf/lib/MemoryModel/PointerAnalysis.cpp +1 -0
  390. package/svf/lib/SVFIR/SVFType.cpp +1 -0
  391. package/svf/lib/SVFIR/SymbolTableInfo.cpp +2 -1
  392. package/svf-llvm/include/SVF-LLVM/BasicTypes.h +1 -0
  393. package/svf-llvm/include/SVF-LLVM/LLVMUtil.h +11 -8
  394. package/svf-llvm/include/SVF-LLVM/SymbolTableBuilder.h +1 -1
  395. package/svf-llvm/lib/LLVMModule.cpp +1 -0
  396. package/svf-llvm/lib/LLVMUtil.cpp +112 -18
  397. package/svf-llvm/lib/SVFIRBuilder.cpp +3 -1
  398. package/svf-llvm/lib/SymbolTableBuilder.cpp +21 -9
@@ -310,7 +310,7 @@ $(function() {
310
310
  <div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160;<span class="comment"> e.g. field_idx = getelementptr i8, %struct_type %p, i64 1</span></div>
311
311
  <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160;<span class="comment"></span> </div>
312
312
  <div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;<span class="comment">*/</span></div>
313
- <div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a04d688ae4f93354327a6c0ad4f255ade"> 260</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SVFIRBuilder::inferFieldIdxFromByteOffset(<span class="keyword">const</span> llvm::GEPOperator* gepOp, <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a> *dl, <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; ap, <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> idx)</div>
313
+ <div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a04d688ae4f93354327a6c0ad4f255ade"> 260</a></span>&#160;<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> SVFIRBuilder::inferFieldIdxFromByteOffset(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a893c345ff98bb2808ae905cf9f3671c5">llvm::GEPOperator</a>* gepOp, <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a> *dl, <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; ap, <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> idx)</div>
314
314
  <div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160;{</div>
315
315
  <div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">return</span> 0;</div>
316
316
  <div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160;}</div>
@@ -319,7 +319,7 @@ $(function() {
319
319
  <div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;{</div>
320
320
  <div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; assert(V);</div>
321
321
  <div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; </div>
322
- <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">const</span> llvm::GEPOperator *gepOp = SVFUtil::dyn_cast&lt;const llvm::GEPOperator&gt;(V);</div>
322
+ <div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a893c345ff98bb2808ae905cf9f3671c5">llvm::GEPOperator</a> *gepOp = SVFUtil::dyn_cast&lt;const llvm::GEPOperator&gt;(V);</div>
323
323
  <div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a> * dataLayout = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">getDataLayout</a>(LLVMModuleSet::getLLVMModuleSet()-&gt;getMainLLVMModule());</div>
324
324
  <div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; llvm::APInt byteOffset(dataLayout-&gt;getIndexSizeInBits(gepOp-&gt;getPointerAddressSpace()),0,<span class="keyword">true</span>);</div>
325
325
  <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keywordflow">if</span>(gepOp &amp;&amp; dataLayout &amp;&amp; gepOp-&gt;accumulateConstantOffset(*dataLayout,byteOffset))</div>
@@ -365,952 +365,955 @@ $(function() {
365
365
  <div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="comment">// If it&#39;s a non-constant offset access</span></div>
366
366
  <div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="comment">// If its point-to target is struct or array, it&#39;s likely an array accessing (%result = gep %struct.A* %a, i32 %non-const-index)</span></div>
367
367
  <div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="comment">// If its point-to target is single value (pointer arithmetic), then it&#39;s a variant gep (%result = gep i8* %p, i32 %non-const-index)</span></div>
368
- <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span>(!op &amp;&amp; gepTy-&gt;isPointerTy() &amp;&amp; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">getPtrElementType</a>(SVFUtil::dyn_cast&lt;PointerType&gt;(gepTy))-&gt;isSingleValueType())</div>
369
- <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; isConst = <span class="keyword">false</span>;</div>
370
- <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; </div>
371
- <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="comment">// The actual index</span></div>
372
- <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="comment">//s32_t idx = op-&gt;getSExtValue();</span></div>
373
- <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; </div>
374
- <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="comment">// For pointer arithmetic we ignore the byte offset</span></div>
375
- <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="comment">// consider using inferFieldIdxFromByteOffset(geopOp,dataLayout,ap,idx)?</span></div>
376
- <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// ap.setFldIdx(ap.getConstantFieldIdx() + inferFieldIdxFromByteOffset(geopOp,idx));</span></div>
377
- <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; }</div>
378
- <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; }</div>
379
- <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keywordflow">return</span> isConst;</div>
380
- <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160;}</div>
381
- <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; </div>
382
- <div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7"> 338</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::processCE(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div>
383
- <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160;{</div>
384
- <div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* ref = SVFUtil::dyn_cast&lt;Constant&gt;(val))</div>
385
- <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; {</div>
386
- <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* gepce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5fc50624b5fe83b676b14bec4b99685">isGepConstantExpr</a>(ref))</div>
387
- <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div>
388
- <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle gep constant expression &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
389
- <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = gepce-&gt;getOperand(0);</div>
390
- <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// handle recursive constant express case (gep (bitcast (gep X 1)) 1)</span></div>
391
- <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; processCE(opnd);</div>
392
- <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">auto</span> &amp;GEPOp = llvm::cast&lt;llvm::GEPOperator&gt;(*gepce);</div>
393
- <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *pType = GEPOp.getSourceElementType();</div>
394
- <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(0, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(pType));</div>
395
- <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordtype">bool</span> constGep = computeGepOffset(gepce, ap);</div>
396
- <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="comment">// must invoke pag methods here, otherwise it will be a dead recursion cycle</span></div>
397
- <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
398
- <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
399
- <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; setCurrentLocation(gepce, <span class="keyword">nullptr</span>);</div>
400
- <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">/*</span></div>
401
- <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;<span class="comment"> * The gep edge created are like constexpr (same edge may appear at multiple callsites)</span></div>
402
- <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;<span class="comment"> * so bb/inst of this edge may be rewritten several times, we treat it as global here.</span></div>
403
- <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="comment"> */</span></div>
404
- <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; addGepEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gepce)), ap, constGep);</div>
405
- <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; setCurrentLocation(cval, cbb);</div>
406
- <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</div>
407
- <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* castce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#af983b0e1fbd371d8672e8f03f63084fc">isCastConstantExpr</a>(ref))</div>
408
- <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div>
409
- <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle cast constant expression &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
410
- <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = castce-&gt;getOperand(0);</div>
411
- <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; processCE(opnd);</div>
412
- <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
413
- <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
414
- <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; setCurrentLocation(castce, <span class="keyword">nullptr</span>);</div>
415
- <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; addCopyEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(castce)));</div>
416
- <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; setCurrentLocation(cval, cbb);</div>
417
- <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div>
418
- <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* selectce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ae59b0dc7f29dbd2018e819f77465f66e">isSelectConstantExpr</a>(ref))</div>
419
- <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; {</div>
420
- <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle select constant expression &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
421
- <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src1 = selectce-&gt;getOperand(1);</div>
422
- <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src2 = selectce-&gt;getOperand(2);</div>
423
- <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; processCE(src1);</div>
424
- <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; processCE(src2);</div>
425
- <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
426
- <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
427
- <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; setCurrentLocation(selectce, <span class="keyword">nullptr</span>);</div>
428
- <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(selectce-&gt;getOperand(0)));</div>
429
- <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc1 = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(src1));</div>
430
- <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc2 = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(src2));</div>
431
- <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nres = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(selectce));</div>
432
- <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; addSelectStmt(nres,nsrc1, nsrc2, cond);</div>
433
- <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; setCurrentLocation(cval, cbb);</div>
434
- <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div>
435
- <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="comment">// if we meet a int2ptr, then it points-to black hole</span></div>
436
- <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* int2Ptrce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#adfa4a4e6d13004d14137d9168bd32463">isInt2PtrConstantExpr</a>(ref))</div>
437
- <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; {</div>
438
- <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; addGlobalBlackHoleAddrEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(int2Ptrce)), int2Ptrce);</div>
439
- <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; }</div>
440
- <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* ptr2Intce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2834d135a2385efff783e6e22d2eff1f">isPtr2IntConstantExpr</a>(ref))</div>
441
- <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div>
442
- <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = ptr2Intce-&gt;getOperand(0);</div>
443
- <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; processCE(opnd);</div>
444
- <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
445
- <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
446
- <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; setCurrentLocation(ptr2Intce, <span class="keyword">nullptr</span>);</div>
447
- <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; addCopyEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ptr2Intce)));</div>
448
- <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; setCurrentLocation(cval, cbb);</div>
449
- <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</div>
450
- <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a946a2b51b848c45c6c52f03581ee05b8">isTruncConstantExpr</a>(ref) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa0b3e34188f721ff7145e47cb607c79a">isCmpConstantExpr</a>(ref))</div>
451
- <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; {</div>
452
- <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="comment">// we don&#39;t handle trunc and cmp instruction for now</span></div>
453
- <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
454
- <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
455
- <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
456
- <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
457
- <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; addBlackHoleAddrEdge(dst);</div>
458
- <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; setCurrentLocation(cval, cbb);</div>
459
- <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; }</div>
460
- <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a35b36394af726c679fe2c1b6051db7c4">isBinaryConstantExpr</a>(ref))</div>
461
- <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; {</div>
462
- <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="comment">// we don&#39;t handle binary constant expression like add(x,y) now</span></div>
463
- <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
464
- <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
465
- <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
466
- <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
467
- <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; addBlackHoleAddrEdge(dst);</div>
468
- <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; setCurrentLocation(cval, cbb);</div>
469
- <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div>
470
- <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a215cc9fd716798bbb7f96f5b64e01349">isUnaryConstantExpr</a>(ref))</div>
471
- <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div>
472
- <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="comment">// we don&#39;t handle unary constant expression like fneg(x) now</span></div>
473
- <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
474
- <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
475
- <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
476
- <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
477
- <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; addBlackHoleAddrEdge(dst);</div>
478
- <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; setCurrentLocation(cval, cbb);</div>
479
- <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div>
480
- <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantAggregate&gt;(ref))</div>
481
- <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; {</div>
482
- <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="comment">// we don&#39;t handle constant aggregate like constant vectors</span></div>
483
- <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div>
484
- <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(ref))</div>
485
- <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div>
486
- <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
487
- <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <span class="comment">// is treated as constant data object for now, see LLVMUtil.h:397, SymbolTableInfo.cpp:674 and SVFIRBuilder.cpp:183-194</span></div>
488
- <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
489
- <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
490
- <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
491
- <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
492
- <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), dst);</div>
493
- <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; setCurrentLocation(cval, cbb);</div>
494
- <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div>
495
- <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">else</span></div>
496
- <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; {</div>
497
- <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantExpr&gt;(val))</div>
498
- <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;we don&#39;t handle all other constant expression for now!&quot;</span>);</div>
499
- <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div>
500
- <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div>
501
- <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;}</div>
502
- <div class="line"><a name="l00463"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#af4e2ec8dee9fca167e20b01cc10b56fd"> 463</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> SVFIRBuilder::getGlobalVarField(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* tpy)</div>
503
- <div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160;{</div>
504
- <div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; </div>
505
- <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <span class="comment">// if the global variable do not have any field needs to be initialized</span></div>
506
- <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> == 0 &amp;&amp; gvar-&gt;getInitializer()-&gt;getType()-&gt;isSingleValueType())</div>
507
- <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div>
508
- <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">return</span> getValueNode(gvar);</div>
509
- <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; }</div>
510
- <div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordflow">else</span></div>
511
- <div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; {</div>
512
- <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">return</span> getGepValVar(gvar, <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>), tpy);</div>
513
- <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div>
514
- <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160;}</div>
515
- <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; </div>
516
- <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;<span class="comment">/*For global variable initialization</span></div>
517
- <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160;<span class="comment"> * Give a simple global variable</span></div>
518
- <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="comment"> * int x = 10; // store 10 x (constant, non pointer) |</span></div>
519
- <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="comment"> * int *y = &amp;x; // store x y (pointer type)</span></div>
520
- <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="comment"> * Given a struct</span></div>
521
- <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment"> * struct Z { int s; int *t;};</span></div>
522
- <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment"> * Global initialization:</span></div>
523
- <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment"> * struct Z z = {10,&amp;x}; // store x z.t (struct type)</span></div>
524
- <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="comment"> * struct Z *m = &amp;z; // store z m (pointer type)</span></div>
525
- <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment"> * struct Z n = {10,&amp;z.s}; // store z.s n , &amp;z.s constant expression (constant expression)</span></div>
526
- <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment"> */</span></div>
527
- <div class="line"><a name="l00490"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250"> 490</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::InitialGlobal(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar, <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C,</div>
528
- <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>)</div>
529
- <div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;{</div>
530
- <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;global &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gvar)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; constant initializer: &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(C)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
531
- <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isSingleValueType())</div>
532
- <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; {</div>
533
- <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(C);</div>
534
- <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="comment">// get the field value if it is available, otherwise we create a dummy field node.</span></div>
535
- <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
536
- <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> field = getGlobalVarField(gvar, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()));</div>
537
- <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; </div>
538
- <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GlobalVariable, Function&gt;(C))</div>
539
- <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; {</div>
540
- <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
541
- <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; addStoreEdge(src, field);</div>
542
- <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; }</div>
543
- <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(C))</div>
544
- <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div>
545
- <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="comment">// add gep edge of C1 itself is a constant expression</span></div>
546
- <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; processCE(C);</div>
547
- <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
548
- <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; addStoreEdge(src, field);</div>
549
- <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; }</div>
550
- <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(C))</div>
551
- <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; {</div>
552
- <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
553
- <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="comment">// is treated as constant data object for now, see LLVMUtil.h:397, SymbolTableInfo.cpp:674 and SVFIRBuilder.cpp:183-194</span></div>
554
- <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; processCE(C);</div>
555
- <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
556
- <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), src);</div>
557
- <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div>
558
- <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">else</span></div>
559
- <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; {</div>
560
- <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
561
- <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; addStoreEdge(src, field);</div>
562
- <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isPtrOrPtrVectorTy() &amp;&amp; src != pag-&gt;getNullPtr())</div>
563
- <div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; addCopyEdge(pag-&gt;getNullPtr(), src);</div>
564
- <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div>
565
- <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div>
566
- <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantArray, ConstantStruct&gt;(C))</div>
567
- <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; {</div>
568
- <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">LLVMUtil::isValVtbl</a>(gvar) &amp;&amp; !Options::VtableInSVFIR())</div>
569
- <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">return</span>;</div>
570
- <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0, e = C-&gt;getNumOperands(); i != e; i++)</div>
571
- <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; {</div>
572
- <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = pag-&gt;getSymbolInfo()-&gt;getFlattenedElemIdx(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()), i);</div>
573
- <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; InitialGlobal(gvar, SVFUtil::cast&lt;Constant&gt;(C-&gt;getOperand(i)), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</div>
574
- <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; }</div>
575
- <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; }</div>
576
- <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">ConstantData</a>* data = SVFUtil::dyn_cast&lt;ConstantData&gt;(C))</div>
577
- <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div>
578
- <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">if</span>(Options::ModelConsts())</div>
579
- <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div>
580
- <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a>* seq = SVFUtil::dyn_cast&lt;ConstantDataSequential&gt;(data))</div>
581
- <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div>
582
- <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; seq-&gt;getNumElements(); i++)</div>
583
- <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; {</div>
584
- <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = pag-&gt;getSymbolInfo()-&gt;getFlattenedElemIdx(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()), i);</div>
585
- <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* ct = seq-&gt;getElementAsConstant(i);</div>
586
- <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; InitialGlobal(gvar, ct, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</div>
587
- <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; }</div>
588
- <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; }</div>
589
- <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">else</span></div>
590
- <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div>
591
- <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; assert((SVFUtil::isa&lt;ConstantAggregateZero, UndefValue&gt;(data)) &amp;&amp; <span class="stringliteral">&quot;Single value type data should have been handled!&quot;</span>);</div>
592
- <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; }</div>
593
- <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; }</div>
594
- <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; }</div>
595
- <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keywordflow">else</span></div>
596
- <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; {</div>
597
- <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="comment">//TODO:assert(SVFUtil::isa&lt;ConstantVector&gt;(C),&quot;what else do we have&quot;);</span></div>
598
- <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; }</div>
599
- <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160;}</div>
600
- <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; </div>
601
- <div class="line"><a name="l00568"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8"> 568</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGlobal(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div>
602
- <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160;{</div>
603
- <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; </div>
604
- <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M : LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMModules())</div>
605
- <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {</div>
606
- <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">for</span> (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I)</div>
607
- <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; {</div>
608
- <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar = &amp;*I;</div>
609
- <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = getValueNode(gvar);</div>
610
- <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(gvar);</div>
611
- <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; </div>
612
- <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
613
- <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; addAddrEdge(obj, idx);</div>
614
- <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; </div>
615
- <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">if</span> (gvar-&gt;hasInitializer())</div>
616
- <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; {</div>
617
- <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C = gvar-&gt;getInitializer();</div>
618
- <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global var node &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gvar)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
619
- <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; InitialGlobal(gvar, C, 0);</div>
620
- <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</div>
621
- <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; }</div>
622
- <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; </div>
623
- <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; </div>
624
- <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I)</div>
625
- <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; {</div>
626
- <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = &amp;*I;</div>
627
- <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = getValueNode(fun);</div>
628
- <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(fun);</div>
629
- <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; </div>
630
- <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global function node &quot;</span> &lt;&lt; fun-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
631
- <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; setCurrentLocation(fun, <span class="keyword">nullptr</span>);</div>
632
- <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; addAddrEdge(obj, idx);</div>
633
- <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; }</div>
634
- <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; </div>
635
- <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <span class="comment">// Handle global aliases (due to linkage of multiple bc files), e.g., @x = internal alias @y. We need to add a copy from y to x.</span></div>
636
- <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keywordflow">for</span> (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); I != E; I++)</div>
637
- <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; {</div>
638
- <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a>* alias = &amp;*I;</div>
639
- <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias));</div>
640
- <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias-&gt;getAliasee()));</div>
641
- <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; processCE(alias-&gt;getAliasee());</div>
642
- <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; setCurrentLocation(alias, <span class="keyword">nullptr</span>);</div>
643
- <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; addCopyEdge(src,dst);</div>
644
- <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; }</div>
645
- <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; }</div>
646
- <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;}</div>
647
- <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; </div>
648
- <div class="line"><a name="l00621"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4be150eb37b75e4c081dfe38429f2089"> 621</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitAllocaInst(<a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a> &amp;inst)</div>
649
- <div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;{</div>
650
- <div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; </div>
651
- <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// AllocaInst should always be a pointer type</span></div>
652
- <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
653
- <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; </div>
654
- <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process alloca &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
655
- <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
656
- <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; </div>
657
- <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getObjectNode(&amp;inst);</div>
368
+ <div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">if</span>(!op &amp;&amp; gepTy-&gt;isPointerTy() &amp;&amp; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a4b5d4c7ca2c580ace7305bfed58ffce8">LLVMUtil::getPointeeType</a>(V)-&gt;isSingleValueType())</div>
369
+ <div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div>
370
+ <div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; isConst = <span class="keyword">false</span>;</div>
371
+ <div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; }</div>
372
+ <div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; </div>
373
+ <div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="comment">// The actual index</span></div>
374
+ <div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="comment">//s32_t idx = op-&gt;getSExtValue();</span></div>
375
+ <div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; </div>
376
+ <div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// For pointer arithmetic we ignore the byte offset</span></div>
377
+ <div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="comment">// consider using inferFieldIdxFromByteOffset(geopOp,dataLayout,ap,idx)?</span></div>
378
+ <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="comment">// ap.setFldIdx(ap.getConstantFieldIdx() + inferFieldIdxFromByteOffset(geopOp,idx));</span></div>
379
+ <div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div>
380
+ <div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div>
381
+ <div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> isConst;</div>
382
+ <div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;}</div>
383
+ <div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; </div>
384
+ <div class="line"><a name="l00340"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7"> 340</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::processCE(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val)</div>
385
+ <div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160;{</div>
386
+ <div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* ref = SVFUtil::dyn_cast&lt;Constant&gt;(val))</div>
387
+ <div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; {</div>
388
+ <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* gepce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ab5fc50624b5fe83b676b14bec4b99685">isGepConstantExpr</a>(ref))</div>
389
+ <div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; {</div>
390
+ <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle gep constant expression &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
391
+ <div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = gepce-&gt;getOperand(0);</div>
392
+ <div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="comment">// handle recursive constant express case (gep (bitcast (gep X 1)) 1)</span></div>
393
+ <div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; processCE(opnd);</div>
394
+ <div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keyword">auto</span> &amp;GEPOp = llvm::cast&lt;llvm::GEPOperator&gt;(*gepce);</div>
395
+ <div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *pType = GEPOp.getSourceElementType();</div>
396
+ <div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(0, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(pType));</div>
397
+ <div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <span class="keywordtype">bool</span> constGep = computeGepOffset(gepce, ap);</div>
398
+ <div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="comment">// must invoke pag methods here, otherwise it will be a dead recursion cycle</span></div>
399
+ <div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
400
+ <div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
401
+ <div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; setCurrentLocation(gepce, <span class="keyword">nullptr</span>);</div>
402
+ <div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="comment">/*</span></div>
403
+ <div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;<span class="comment"> * The gep edge created are like constexpr (same edge may appear at multiple callsites)</span></div>
404
+ <div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160;<span class="comment"> * so bb/inst of this edge may be rewritten several times, we treat it as global here.</span></div>
405
+ <div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;<span class="comment"> */</span></div>
406
+ <div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; addGepEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gepce)), ap, constGep);</div>
407
+ <div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; setCurrentLocation(cval, cbb);</div>
408
+ <div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div>
409
+ <div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* castce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#af983b0e1fbd371d8672e8f03f63084fc">isCastConstantExpr</a>(ref))</div>
410
+ <div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; {</div>
411
+ <div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle cast constant expression &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
412
+ <div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = castce-&gt;getOperand(0);</div>
413
+ <div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; processCE(opnd);</div>
414
+ <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
415
+ <div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
416
+ <div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; setCurrentLocation(castce, <span class="keyword">nullptr</span>);</div>
417
+ <div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; addCopyEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(castce)));</div>
418
+ <div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; setCurrentLocation(cval, cbb);</div>
419
+ <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div>
420
+ <div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* selectce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ae59b0dc7f29dbd2018e819f77465f66e">isSelectConstantExpr</a>(ref))</div>
421
+ <div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; {</div>
422
+ <div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle select constant expression &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
423
+ <div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src1 = selectce-&gt;getOperand(1);</div>
424
+ <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src2 = selectce-&gt;getOperand(2);</div>
425
+ <div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; processCE(src1);</div>
426
+ <div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; processCE(src2);</div>
427
+ <div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
428
+ <div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
429
+ <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; setCurrentLocation(selectce, <span class="keyword">nullptr</span>);</div>
430
+ <div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(selectce-&gt;getOperand(0)));</div>
431
+ <div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc1 = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(src1));</div>
432
+ <div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc2 = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(src2));</div>
433
+ <div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nres = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(selectce));</div>
434
+ <div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; addSelectStmt(nres,nsrc1, nsrc2, cond);</div>
435
+ <div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; setCurrentLocation(cval, cbb);</div>
436
+ <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; }</div>
437
+ <div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// if we meet a int2ptr, then it points-to black hole</span></div>
438
+ <div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* int2Ptrce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#adfa4a4e6d13004d14137d9168bd32463">isInt2PtrConstantExpr</a>(ref))</div>
439
+ <div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; {</div>
440
+ <div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; addGlobalBlackHoleAddrEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(int2Ptrce)), int2Ptrce);</div>
441
+ <div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; }</div>
442
+ <div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">ConstantExpr</a>* ptr2Intce = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a2834d135a2385efff783e6e22d2eff1f">isPtr2IntConstantExpr</a>(ref))</div>
443
+ <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; {</div>
444
+ <div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = ptr2Intce-&gt;getOperand(0);</div>
445
+ <div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; processCE(opnd);</div>
446
+ <div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
447
+ <div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
448
+ <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; setCurrentLocation(ptr2Intce, <span class="keyword">nullptr</span>);</div>
449
+ <div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; addCopyEdge(pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(opnd)), pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ptr2Intce)));</div>
450
+ <div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; setCurrentLocation(cval, cbb);</div>
451
+ <div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div>
452
+ <div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a946a2b51b848c45c6c52f03581ee05b8">isTruncConstantExpr</a>(ref) || <a class="code" href="namespaceSVF_1_1LLVMUtil.html#aa0b3e34188f721ff7145e47cb607c79a">isCmpConstantExpr</a>(ref))</div>
453
+ <div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; {</div>
454
+ <div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <span class="comment">// we don&#39;t handle trunc and cmp instruction for now</span></div>
455
+ <div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
456
+ <div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
457
+ <div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
458
+ <div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
459
+ <div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; addBlackHoleAddrEdge(dst);</div>
460
+ <div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; setCurrentLocation(cval, cbb);</div>
461
+ <div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div>
462
+ <div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a35b36394af726c679fe2c1b6051db7c4">isBinaryConstantExpr</a>(ref))</div>
463
+ <div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; {</div>
464
+ <div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="comment">// we don&#39;t handle binary constant expression like add(x,y) now</span></div>
465
+ <div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
466
+ <div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
467
+ <div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
468
+ <div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
469
+ <div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; addBlackHoleAddrEdge(dst);</div>
470
+ <div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; setCurrentLocation(cval, cbb);</div>
471
+ <div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; }</div>
472
+ <div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a215cc9fd716798bbb7f96f5b64e01349">isUnaryConstantExpr</a>(ref))</div>
473
+ <div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; {</div>
474
+ <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; <span class="comment">// we don&#39;t handle unary constant expression like fneg(x) now</span></div>
475
+ <div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
476
+ <div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
477
+ <div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
478
+ <div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
479
+ <div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; addBlackHoleAddrEdge(dst);</div>
480
+ <div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; setCurrentLocation(cval, cbb);</div>
481
+ <div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; }</div>
482
+ <div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantAggregate&gt;(ref))</div>
483
+ <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {</div>
484
+ <div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="comment">// we don&#39;t handle constant aggregate like constant vectors</span></div>
485
+ <div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; }</div>
486
+ <div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(ref))</div>
487
+ <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; {</div>
488
+ <div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
489
+ <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="comment">// is treated as constant data object for now, see LLVMUtil.h:397, SymbolTableInfo.cpp:674 and SVFIRBuilder.cpp:183-194</span></div>
490
+ <div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
491
+ <div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
492
+ <div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; setCurrentLocation(ref, <span class="keyword">nullptr</span>);</div>
493
+ <div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(ref));</div>
494
+ <div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), dst);</div>
495
+ <div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; setCurrentLocation(cval, cbb);</div>
496
+ <div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; }</div>
497
+ <div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">else</span></div>
498
+ <div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; {</div>
499
+ <div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantExpr&gt;(val))</div>
500
+ <div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;we don&#39;t handle all other constant expression for now!&quot;</span>);</div>
501
+ <div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div>
502
+ <div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; }</div>
503
+ <div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;}</div>
504
+ <div class="line"><a name="l00465"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#af4e2ec8dee9fca167e20b01cc10b56fd"> 465</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> SVFIRBuilder::getGlobalVarField(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar, <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* tpy)</div>
505
+ <div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160;{</div>
506
+ <div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; </div>
507
+ <div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="comment">// if the global variable do not have any field needs to be initialized</span></div>
508
+ <div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> == 0 &amp;&amp; gvar-&gt;getInitializer()-&gt;getType()-&gt;isSingleValueType())</div>
509
+ <div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; {</div>
510
+ <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">return</span> getValueNode(gvar);</div>
511
+ <div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; }</div>
512
+ <div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="keywordflow">else</span></div>
513
+ <div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; {</div>
514
+ <div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">return</span> getGepValVar(gvar, <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(<a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>), tpy);</div>
515
+ <div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div>
516
+ <div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;}</div>
517
+ <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; </div>
518
+ <div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160;<span class="comment">/*For global variable initialization</span></div>
519
+ <div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160;<span class="comment"> * Give a simple global variable</span></div>
520
+ <div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160;<span class="comment"> * int x = 10; // store 10 x (constant, non pointer) |</span></div>
521
+ <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160;<span class="comment"> * int *y = &amp;x; // store x y (pointer type)</span></div>
522
+ <div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160;<span class="comment"> * Given a struct</span></div>
523
+ <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160;<span class="comment"> * struct Z { int s; int *t;};</span></div>
524
+ <div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160;<span class="comment"> * Global initialization:</span></div>
525
+ <div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;<span class="comment"> * struct Z z = {10,&amp;x}; // store x z.t (struct type)</span></div>
526
+ <div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160;<span class="comment"> * struct Z *m = &amp;z; // store z m (pointer type)</span></div>
527
+ <div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160;<span class="comment"> * struct Z n = {10,&amp;z.s}; // store z.s n , &amp;z.s constant expression (constant expression)</span></div>
528
+ <div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;<span class="comment"> */</span></div>
529
+ <div class="line"><a name="l00492"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250"> 492</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::InitialGlobal(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar, <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C,</div>
530
+ <div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>)</div>
531
+ <div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;{</div>
532
+ <div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;global &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gvar)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; constant initializer: &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(C)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
533
+ <div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isSingleValueType())</div>
534
+ <div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; {</div>
535
+ <div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(C);</div>
536
+ <div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="comment">// get the field value if it is available, otherwise we create a dummy field node.</span></div>
537
+ <div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
538
+ <div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> field = getGlobalVarField(gvar, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a>, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()));</div>
539
+ <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; </div>
540
+ <div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GlobalVariable, Function&gt;(C))</div>
541
+ <div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div>
542
+ <div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
543
+ <div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; addStoreEdge(src, field);</div>
544
+ <div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div>
545
+ <div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(C))</div>
546
+ <div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; {</div>
547
+ <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="comment">// add gep edge of C1 itself is a constant expression</span></div>
548
+ <div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; processCE(C);</div>
549
+ <div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
550
+ <div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; addStoreEdge(src, field);</div>
551
+ <div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; }</div>
552
+ <div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(C))</div>
553
+ <div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; {</div>
554
+ <div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div>
555
+ <div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <span class="comment">// is treated as constant data object for now, see LLVMUtil.h:397, SymbolTableInfo.cpp:674 and SVFIRBuilder.cpp:183-194</span></div>
556
+ <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; processCE(C);</div>
557
+ <div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
558
+ <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; addAddrEdge(pag-&gt;getConstantNode(), src);</div>
559
+ <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; }</div>
560
+ <div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="keywordflow">else</span></div>
561
+ <div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; {</div>
562
+ <div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; setCurrentLocation(C, <span class="keyword">nullptr</span>);</div>
563
+ <div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; addStoreEdge(src, field);</div>
564
+ <div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isPtrOrPtrVectorTy() &amp;&amp; src != pag-&gt;getNullPtr())</div>
565
+ <div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; addCopyEdge(pag-&gt;getNullPtr(), src);</div>
566
+ <div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div>
567
+ <div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; }</div>
568
+ <div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantArray, ConstantStruct&gt;(C))</div>
569
+ <div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; {</div>
570
+ <div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">LLVMUtil::isValVtbl</a>(gvar) &amp;&amp; !Options::VtableInSVFIR())</div>
571
+ <div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">return</span>;</div>
572
+ <div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0, e = C-&gt;getNumOperands(); i != e; i++)</div>
573
+ <div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; {</div>
574
+ <div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = pag-&gt;getSymbolInfo()-&gt;getFlattenedElemIdx(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()), i);</div>
575
+ <div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; InitialGlobal(gvar, SVFUtil::cast&lt;Constant&gt;(C-&gt;getOperand(i)), <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</div>
576
+ <div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; }</div>
577
+ <div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; }</div>
578
+ <div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">ConstantData</a>* data = SVFUtil::dyn_cast&lt;ConstantData&gt;(C))</div>
579
+ <div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; {</div>
580
+ <div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <span class="keywordflow">if</span>(Options::ModelConsts())</div>
581
+ <div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; {</div>
582
+ <div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a8ad3aa124fabddc2fdd07c50403d70a9">ConstantDataSequential</a>* seq = SVFUtil::dyn_cast&lt;ConstantDataSequential&gt;(data))</div>
583
+ <div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; {</div>
584
+ <div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; seq-&gt;getNumElements(); i++)</div>
585
+ <div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; {</div>
586
+ <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = pag-&gt;getSymbolInfo()-&gt;getFlattenedElemIdx(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(C-&gt;getType()), i);</div>
587
+ <div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* ct = seq-&gt;getElementAsConstant(i);</div>
588
+ <div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; InitialGlobal(gvar, ct, <a class="code" href="cJSON_8cpp.html#a95bf816579e97b6f33bdb5e25ed6d5de">offset</a> + off);</div>
589
+ <div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; }</div>
590
+ <div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div>
591
+ <div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">else</span></div>
592
+ <div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; {</div>
593
+ <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; assert((SVFUtil::isa&lt;ConstantAggregateZero, UndefValue&gt;(data)) &amp;&amp; <span class="stringliteral">&quot;Single value type data should have been handled!&quot;</span>);</div>
594
+ <div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; }</div>
595
+ <div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; }</div>
596
+ <div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; }</div>
597
+ <div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">else</span></div>
598
+ <div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; {</div>
599
+ <div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="comment">//TODO:assert(SVFUtil::isa&lt;ConstantVector&gt;(C),&quot;what else do we have&quot;);</span></div>
600
+ <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; }</div>
601
+ <div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;}</div>
602
+ <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; </div>
603
+ <div class="line"><a name="l00570"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8"> 570</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGlobal(<a class="code" href="classSVF_1_1SVFModule.html">SVFModule</a>* svfModule)</div>
604
+ <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;{</div>
605
+ <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; </div>
606
+ <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M : LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMModules())</div>
607
+ <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; {</div>
608
+ <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <span class="keywordflow">for</span> (Module::global_iterator I = M.global_begin(), E = M.global_end(); I != E; ++I)</div>
609
+ <div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; {</div>
610
+ <div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar = &amp;*I;</div>
611
+ <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = getValueNode(gvar);</div>
612
+ <div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(gvar);</div>
613
+ <div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; </div>
614
+ <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; setCurrentLocation(gvar, <span class="keyword">nullptr</span>);</div>
615
+ <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; addAddrEdge(obj, idx);</div>
616
+ <div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; </div>
617
+ <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <span class="keywordflow">if</span> (gvar-&gt;hasInitializer())</div>
618
+ <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; {</div>
619
+ <div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C = gvar-&gt;getInitializer();</div>
620
+ <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global var node &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(gvar)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
621
+ <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; InitialGlobal(gvar, C, 0);</div>
622
+ <div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; }</div>
623
+ <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; }</div>
624
+ <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; </div>
625
+ <div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; </div>
626
+ <div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="keywordflow">for</span> (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I)</div>
627
+ <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div>
628
+ <div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* fun = &amp;*I;</div>
629
+ <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = getValueNode(fun);</div>
630
+ <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = getObjectNode(fun);</div>
631
+ <div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; </div>
632
+ <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global function node &quot;</span> &lt;&lt; fun-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
633
+ <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; setCurrentLocation(fun, <span class="keyword">nullptr</span>);</div>
634
+ <div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; addAddrEdge(obj, idx);</div>
635
+ <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; }</div>
636
+ <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; </div>
637
+ <div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="comment">// Handle global aliases (due to linkage of multiple bc files), e.g., @x = internal alias @y. We need to add a copy from y to x.</span></div>
638
+ <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="keywordflow">for</span> (Module::alias_iterator I = M.alias_begin(), E = M.alias_end(); I != E; I++)</div>
639
+ <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; {</div>
640
+ <div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">GlobalAlias</a>* alias = &amp;*I;</div>
641
+ <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias));</div>
642
+ <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = pag-&gt;getValueNode(LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(alias-&gt;getAliasee()));</div>
643
+ <div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; processCE(alias-&gt;getAliasee());</div>
644
+ <div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; setCurrentLocation(alias, <span class="keyword">nullptr</span>);</div>
645
+ <div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; addCopyEdge(src,dst);</div>
646
+ <div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; }</div>
647
+ <div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; }</div>
648
+ <div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;}</div>
649
+ <div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; </div>
650
+ <div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4be150eb37b75e4c081dfe38429f2089"> 623</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitAllocaInst(<a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a> &amp;inst)</div>
651
+ <div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;{</div>
652
+ <div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; </div>
653
+ <div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <span class="comment">// AllocaInst should always be a pointer type</span></div>
654
+ <div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
655
+ <div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; </div>
656
+ <div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process alloca &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
657
+ <div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
658
658
  <div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; </div>
659
- <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; addAddrEdge(src, dst);</div>
659
+ <div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getObjectNode(&amp;inst);</div>
660
660
  <div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; </div>
661
- <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;}</div>
661
+ <div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; addAddrEdge(src, dst);</div>
662
662
  <div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; </div>
663
- <div class="line"><a name="l00639"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aade60fa102a29f332af36a8615c75471"> 639</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitPHINode(<a class="code" href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">PHINode</a> &amp;inst)</div>
664
- <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;{</div>
665
- <div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; </div>
666
- <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process phi &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
663
+ <div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;}</div>
664
+ <div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; </div>
665
+ <div class="line"><a name="l00641"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aade60fa102a29f332af36a8615c75471"> 641</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitPHINode(<a class="code" href="namespaceSVF.html#ac8d4990439af7a2ecca7e15383119674">PHINode</a> &amp;inst)</div>
666
+ <div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160;{</div>
667
667
  <div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; </div>
668
- <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
668
+ <div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process phi &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
669
669
  <div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; </div>
670
- <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumIncomingValues(); ++i)</div>
671
- <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; {</div>
672
- <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = inst.getIncomingValue(i);</div>
673
- <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* incomingInst = SVFUtil::dyn_cast&lt;Instruction&gt;(val);</div>
674
- <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keywordtype">bool</span> matched = (incomingInst == <span class="keyword">nullptr</span> ||</div>
675
- <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; incomingInst-&gt;getFunction() == inst.getFunction());</div>
676
- <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; (void) matched; <span class="comment">// Suppress warning of unused variable under release build</span></div>
677
- <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; assert(matched &amp;&amp; <span class="stringliteral">&quot;incomingInst&#39;s Function incorrect&quot;</span>);</div>
678
- <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* predInst = &amp;inst.getIncomingBlock(i)-&gt;back();</div>
679
- <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(predInst);</div>
680
- <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfPrevInst);</div>
681
- <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(val);</div>
682
- <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; addPhiStmt(dst,src,icfgNode);</div>
683
- <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; }</div>
684
- <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160;}</div>
685
- <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; </div>
686
- <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;<span class="comment">/*</span></div>
687
- <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;<span class="comment"> * Visit load instructions</span></div>
688
- <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;<span class="comment"> */</span></div>
689
- <div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a17638b08f85d4543e663eeb739915bdc"> 665</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitLoadInst(<a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a> &amp;inst)</div>
690
- <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;{</div>
691
- <div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process load &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
692
- <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; </div>
693
- <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
670
+ <div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
671
+ <div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; </div>
672
+ <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumIncomingValues(); ++i)</div>
673
+ <div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div>
674
+ <div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = inst.getIncomingValue(i);</div>
675
+ <div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* incomingInst = SVFUtil::dyn_cast&lt;Instruction&gt;(val);</div>
676
+ <div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <span class="keywordtype">bool</span> matched = (incomingInst == <span class="keyword">nullptr</span> ||</div>
677
+ <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; incomingInst-&gt;getFunction() == inst.getFunction());</div>
678
+ <div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; (void) matched; <span class="comment">// Suppress warning of unused variable under release build</span></div>
679
+ <div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; assert(matched &amp;&amp; <span class="stringliteral">&quot;incomingInst&#39;s Function incorrect&quot;</span>);</div>
680
+ <div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* predInst = &amp;inst.getIncomingBlock(i)-&gt;back();</div>
681
+ <div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfPrevInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(predInst);</div>
682
+ <div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfPrevInst);</div>
683
+ <div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(val);</div>
684
+ <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; addPhiStmt(dst,src,icfgNode);</div>
685
+ <div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; }</div>
686
+ <div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;}</div>
687
+ <div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; </div>
688
+ <div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;<span class="comment">/*</span></div>
689
+ <div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;<span class="comment"> * Visit load instructions</span></div>
690
+ <div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160;<span class="comment"> */</span></div>
691
+ <div class="line"><a name="l00667"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a17638b08f85d4543e663eeb739915bdc"> 667</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitLoadInst(<a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a> &amp;inst)</div>
692
+ <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;{</div>
693
+ <div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process load &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
694
694
  <div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; </div>
695
- <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</div>
695
+ <div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
696
696
  <div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; </div>
697
- <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; addLoadEdge(src, dst);</div>
698
- <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;}</div>
699
- <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; </div>
700
- <div class="line"><a name="l00679"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a51d75ff7f490ddfef3d4f8779872633c"> 679</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitStoreInst(<a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> &amp;inst)</div>
701
- <div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160;{</div>
702
- <div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="comment">// StoreInst itself should always not be a pointer type</span></div>
703
- <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
704
- <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; </div>
705
- <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process store &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
697
+ <div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</div>
698
+ <div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; </div>
699
+ <div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; addLoadEdge(src, dst);</div>
700
+ <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160;}</div>
701
+ <div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; </div>
702
+ <div class="line"><a name="l00681"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a51d75ff7f490ddfef3d4f8779872633c"> 681</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitStoreInst(<a class="code" href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">StoreInst</a> &amp;inst)</div>
703
+ <div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160;{</div>
704
+ <div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="comment">// StoreInst itself should always not be a pointer type</span></div>
705
+ <div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
706
706
  <div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; </div>
707
- <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(inst.getPointerOperand());</div>
707
+ <div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process store &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
708
708
  <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; </div>
709
- <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getValueOperand());</div>
709
+ <div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(inst.getPointerOperand());</div>
710
710
  <div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; </div>
711
- <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; addStoreEdge(src, dst);</div>
711
+ <div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getValueOperand());</div>
712
712
  <div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; </div>
713
- <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160;}</div>
713
+ <div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; addStoreEdge(src, dst);</div>
714
714
  <div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; </div>
715
- <div class="line"><a name="l00697"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4a945eafd262f81b4f9cc1fa61b57371"> 697</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGetElementPtrInst(<a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a> &amp;inst)</div>
716
- <div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;{</div>
717
- <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; </div>
718
- <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
719
- <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="comment">// GetElementPtrInst should always be a pointer or a vector contains pointers</span></div>
720
- <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="comment">// for now we don&#39;t handle vector type here</span></div>
721
- <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;VectorType&gt;(inst.getType()))</div>
722
- <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; {</div>
723
- <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; addBlackHoleAddrEdge(dst);</div>
724
- <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">return</span>;</div>
725
- <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; }</div>
726
- <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; </div>
727
- <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
715
+ <div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160;}</div>
716
+ <div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; </div>
717
+ <div class="line"><a name="l00699"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4a945eafd262f81b4f9cc1fa61b57371"> 699</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitGetElementPtrInst(<a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a> &amp;inst)</div>
718
+ <div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;{</div>
719
+ <div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; </div>
720
+ <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
721
+ <div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="comment">// GetElementPtrInst should always be a pointer or a vector contains pointers</span></div>
722
+ <div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="comment">// for now we don&#39;t handle vector type here</span></div>
723
+ <div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;VectorType&gt;(inst.getType()))</div>
724
+ <div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; {</div>
725
+ <div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; addBlackHoleAddrEdge(dst);</div>
726
+ <div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">return</span>;</div>
727
+ <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; }</div>
728
728
  <div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; </div>
729
- <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process gep &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
729
+ <div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; assert(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
730
730
  <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; </div>
731
- <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</div>
731
+ <div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process gep &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
732
732
  <div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; </div>
733
- <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(0, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(inst.getSourceElementType()));</div>
734
- <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <span class="keywordtype">bool</span> constGep = computeGepOffset(&amp;inst, ap);</div>
735
- <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; addGepEdge(src, dst, ap, constGep);</div>
736
- <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;}</div>
737
- <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; </div>
738
- <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;<span class="comment">/*</span></div>
739
- <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160;<span class="comment"> * Visit cast instructions</span></div>
740
- <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;<span class="comment"> */</span></div>
741
- <div class="line"><a name="l00723"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#acf5a61d45c1abc1206f6e6c813f8634b"> 723</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCastInst(<a class="code" href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">CastInst</a> &amp;inst)</div>
742
- <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;{</div>
743
- <div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; </div>
744
- <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process cast &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
745
- <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
746
- <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; </div>
747
- <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;IntToPtrInst&gt;(&amp;inst))</div>
748
- <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div>
749
- <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; addBlackHoleAddrEdge(dst);</div>
750
- <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; }</div>
751
- <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">else</span></div>
752
- <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; {</div>
753
- <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
754
- <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(opnd-&gt;getType()))</div>
755
- <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; opnd = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(opnd);</div>
756
- <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; </div>
757
- <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
758
- <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; addCopyEdge(src, dst);</div>
759
- <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; }</div>
760
- <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;}</div>
761
- <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; </div>
762
- <div class="line"><a name="l00747"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aeb5f3cc92ef2d146c7c9cc86375b4c1e"> 747</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBinaryOperator(<a class="code" href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">BinaryOperator</a> &amp;inst)</div>
763
- <div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;{</div>
764
- <div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
765
- <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for BinaryOperator?&quot;</span>);</div>
766
- <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
767
- <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
768
- <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
769
- <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
770
- <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
771
- <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; addBinaryOPEdge(op1Node, op2Node, dst, opcode);</div>
772
- <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;}</div>
773
- <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; </div>
774
- <div class="line"><a name="l00762"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae80891bb2a162b3ad24fa7cf6380df30"> 762</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitUnaryOperator(<a class="code" href="namespaceSVF.html#a292a6e8c5b4f2023b5575879c57eca62">UnaryOperator</a> &amp;inst)</div>
775
- <div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160;{</div>
776
- <div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
777
- <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; assert(inst.getNumOperands() == 1 &amp;&amp; <span class="stringliteral">&quot;not one operand for Unary instruction?&quot;</span>);</div>
778
- <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
779
- <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
780
- <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
781
- <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; addUnaryOPEdge(src, dst, opcode);</div>
782
- <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;}</div>
783
- <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; </div>
784
- <div class="line"><a name="l00775"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac61e0c5f667ebeb4788d07253e6a733c"> 775</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCmpInst(<a class="code" href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">CmpInst</a> &amp;inst)</div>
785
- <div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160;{</div>
786
- <div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
787
- <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for compare instruction?&quot;</span>);</div>
788
- <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
789
- <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
790
- <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
791
- <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
792
- <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predicate = inst.getPredicate();</div>
793
- <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; addCmpEdge(op1Node, op2Node, dst, predicate);</div>
794
- <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;}</div>
795
- <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; </div>
796
- <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; </div>
797
- <div class="line"><a name="l00791"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc836736ea16d99921c0e734cf0a3c72"> 791</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSelectInst(<a class="code" href="namespaceSVF.html#ab7fac9d4a4839be445c89777e21bc307">SelectInst</a> &amp;inst)</div>
798
- <div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160;{</div>
799
- <div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; </div>
800
- <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process select &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
733
+ <div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(inst.getPointerOperand());</div>
734
+ <div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; </div>
735
+ <div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> ap(0, LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFType(inst.getSourceElementType()));</div>
736
+ <div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordtype">bool</span> constGep = computeGepOffset(&amp;inst, ap);</div>
737
+ <div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; addGepEdge(src, dst, ap, constGep);</div>
738
+ <div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160;}</div>
739
+ <div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; </div>
740
+ <div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160;<span class="comment">/*</span></div>
741
+ <div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;<span class="comment"> * Visit cast instructions</span></div>
742
+ <div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;<span class="comment"> */</span></div>
743
+ <div class="line"><a name="l00725"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#acf5a61d45c1abc1206f6e6c813f8634b"> 725</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCastInst(<a class="code" href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">CastInst</a> &amp;inst)</div>
744
+ <div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160;{</div>
745
+ <div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; </div>
746
+ <div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process cast &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
747
+ <div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
748
+ <div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; </div>
749
+ <div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;IntToPtrInst&gt;(&amp;inst))</div>
750
+ <div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; {</div>
751
+ <div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; addBlackHoleAddrEdge(dst);</div>
752
+ <div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; }</div>
753
+ <div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">else</span></div>
754
+ <div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; {</div>
755
+ <div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
756
+ <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(opnd-&gt;getType()))</div>
757
+ <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; opnd = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(opnd);</div>
758
+ <div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; </div>
759
+ <div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
760
+ <div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; addCopyEdge(src, dst);</div>
761
+ <div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; }</div>
762
+ <div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160;}</div>
763
+ <div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; </div>
764
+ <div class="line"><a name="l00749"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aeb5f3cc92ef2d146c7c9cc86375b4c1e"> 749</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBinaryOperator(<a class="code" href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">BinaryOperator</a> &amp;inst)</div>
765
+ <div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;{</div>
766
+ <div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
767
+ <div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for BinaryOperator?&quot;</span>);</div>
768
+ <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
769
+ <div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
770
+ <div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
771
+ <div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
772
+ <div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
773
+ <div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; addBinaryOPEdge(op1Node, op2Node, dst, opcode);</div>
774
+ <div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160;}</div>
775
+ <div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; </div>
776
+ <div class="line"><a name="l00764"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae80891bb2a162b3ad24fa7cf6380df30"> 764</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitUnaryOperator(<a class="code" href="namespaceSVF.html#a292a6e8c5b4f2023b5575879c57eca62">UnaryOperator</a> &amp;inst)</div>
777
+ <div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;{</div>
778
+ <div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
779
+ <div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; assert(inst.getNumOperands() == 1 &amp;&amp; <span class="stringliteral">&quot;not one operand for Unary instruction?&quot;</span>);</div>
780
+ <div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div>
781
+ <div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
782
+ <div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div>
783
+ <div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; addUnaryOPEdge(src, dst, opcode);</div>
784
+ <div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;}</div>
785
+ <div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; </div>
786
+ <div class="line"><a name="l00777"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac61e0c5f667ebeb4788d07253e6a733c"> 777</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCmpInst(<a class="code" href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">CmpInst</a> &amp;inst)</div>
787
+ <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160;{</div>
788
+ <div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
789
+ <div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; assert(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for compare instruction?&quot;</span>);</div>
790
+ <div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div>
791
+ <div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = getValueNode(op1);</div>
792
+ <div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div>
793
+ <div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = getValueNode(op2);</div>
794
+ <div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predicate = inst.getPredicate();</div>
795
+ <div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; addCmpEdge(op1Node, op2Node, dst, predicate);</div>
796
+ <div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;}</div>
797
+ <div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; </div>
798
+ <div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; </div>
799
+ <div class="line"><a name="l00793"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc836736ea16d99921c0e734cf0a3c72"> 793</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSelectInst(<a class="code" href="namespaceSVF.html#ab7fac9d4a4839be445c89777e21bc307">SelectInst</a> &amp;inst)</div>
800
+ <div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;{</div>
801
801
  <div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; </div>
802
- <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
803
- <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src1 = getValueNode(inst.getTrueValue());</div>
804
- <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src2 = getValueNode(inst.getFalseValue());</div>
805
- <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
806
- <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; addSelectStmt(dst,src1,src2, cond);</div>
807
- <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160;}</div>
808
- <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; </div>
809
- <div class="line"><a name="l00804"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a421708269d991987d8d4e93cec750a8d"> 804</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallInst(<a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> &amp;i)</div>
810
- <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160;{</div>
811
- <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; visitCallSite(&amp;i);</div>
812
- <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;}</div>
813
- <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; </div>
814
- <div class="line"><a name="l00809"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a39577da11f4b85066988f105e3c18d7c"> 809</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitInvokeInst(<a class="code" href="namespaceSVF.html#a56cb9d6d1e05f6c31bfe1a4045bc8b5f">InvokeInst</a> &amp;i)</div>
815
- <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;{</div>
816
- <div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; visitCallSite(&amp;i);</div>
817
- <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;}</div>
818
- <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; </div>
819
- <div class="line"><a name="l00814"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a62da871a2bace42fa96baf8b9862d4db"> 814</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallBrInst(<a class="code" href="namespaceSVF.html#ac6b6710585fc6667858ccfd4311b6ab5">CallBrInst</a> &amp;i)</div>
820
- <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160;{</div>
821
- <div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; visitCallSite(&amp;i);</div>
822
- <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;}</div>
823
- <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; </div>
824
- <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;<span class="comment">/*</span></div>
825
- <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;<span class="comment"> * Visit callsites</span></div>
826
- <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;<span class="comment"> */</span></div>
827
- <div class="line"><a name="l00822"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5aa87f9ea35b30b4b4797f8a7f9f293c"> 822</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallSite(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
828
- <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;{</div>
829
- <div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; </div>
830
- <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <span class="comment">// skip llvm intrinsics</span></div>
831
- <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">isIntrinsicInst</a>(cs))</div>
832
- <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="keywordflow">return</span>;</div>
833
- <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; </div>
834
- <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
802
+ <div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process select &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
803
+ <div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; </div>
804
+ <div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
805
+ <div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src1 = getValueNode(inst.getTrueValue());</div>
806
+ <div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src2 = getValueNode(inst.getFalseValue());</div>
807
+ <div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
808
+ <div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; addSelectStmt(dst,src1,src2, cond);</div>
809
+ <div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;}</div>
810
+ <div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; </div>
811
+ <div class="line"><a name="l00806"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a421708269d991987d8d4e93cec750a8d"> 806</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallInst(<a class="code" href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">CallInst</a> &amp;i)</div>
812
+ <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160;{</div>
813
+ <div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; visitCallSite(&amp;i);</div>
814
+ <div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;}</div>
815
+ <div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; </div>
816
+ <div class="line"><a name="l00811"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a39577da11f4b85066988f105e3c18d7c"> 811</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitInvokeInst(<a class="code" href="namespaceSVF.html#a56cb9d6d1e05f6c31bfe1a4045bc8b5f">InvokeInst</a> &amp;i)</div>
817
+ <div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;{</div>
818
+ <div class="line"><a name="l00813"></a><span class="lineno"> 813</span>&#160; visitCallSite(&amp;i);</div>
819
+ <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;}</div>
820
+ <div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; </div>
821
+ <div class="line"><a name="l00816"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a62da871a2bace42fa96baf8b9862d4db"> 816</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallBrInst(<a class="code" href="namespaceSVF.html#ac6b6710585fc6667858ccfd4311b6ab5">CallBrInst</a> &amp;i)</div>
822
+ <div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160;{</div>
823
+ <div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; visitCallSite(&amp;i);</div>
824
+ <div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160;}</div>
825
+ <div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; </div>
826
+ <div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160;<span class="comment">/*</span></div>
827
+ <div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;<span class="comment"> * Visit callsites</span></div>
828
+ <div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;<span class="comment"> */</span></div>
829
+ <div class="line"><a name="l00824"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5aa87f9ea35b30b4b4797f8a7f9f293c"> 824</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitCallSite(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
830
+ <div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160;{</div>
831
+ <div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; </div>
832
+ <div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; <span class="comment">// skip llvm intrinsics</span></div>
833
+ <div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1LLVMUtil.html#a003b769751b93b94bdb011bd704cfde1">isIntrinsicInst</a>(cs))</div>
834
+ <div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; <span class="keywordflow">return</span>;</div>
835
835
  <div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; </div>
836
- <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
837
- <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process callsite &quot;</span> &lt;&lt; svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
838
- <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; </div>
839
- <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
840
- <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;getICFG()-&gt;getRetICFGNode(svfcall);</div>
841
- <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; </div>
842
- <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; pag-&gt;addCallSite(callBlockNode);</div>
836
+ <div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
837
+ <div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; </div>
838
+ <div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
839
+ <div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process callsite &quot;</span> &lt;&lt; svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
840
+ <div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; </div>
841
+ <div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlockNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
842
+ <div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retBlockNode = pag-&gt;getICFG()-&gt;getRetICFGNode(svfcall);</div>
843
843
  <div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; </div>
844
- <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; cs-&gt;arg_size(); i++)</div>
845
- <div class="line"><a name="l00841"></a><span class="lineno"> 841</span>&#160; pag-&gt;addCallSiteArgs(callBlockNode,pag-&gt;getGNode(getValueNode(cs-&gt;getArgOperand(i))));</div>
846
- <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; </div>
847
- <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keywordflow">if</span>(!cs-&gt;getType()-&gt;isVoidTy())</div>
848
- <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; pag-&gt;addCallSiteRets(retBlockNode,pag-&gt;getGNode(getValueNode(cs)));</div>
849
- <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; </div>
850
- <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad56c48be3ba6ebb95416623256524097">LLVMUtil::getCallee</a>(cs))</div>
851
- <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; {</div>
852
- <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">LLVMUtil::getDefFunForMultipleModule</a>(callee);</div>
853
- <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
854
- <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(svfcallee))</div>
855
- <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; {</div>
856
- <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; handleExtCall(cs, svfcallee);</div>
857
- <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; }</div>
858
- <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; <span class="keywordflow">else</span></div>
859
- <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; {</div>
860
- <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; handleDirectCall(cs, callee);</div>
861
- <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; }</div>
862
- <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; }</div>
863
- <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; <span class="keywordflow">else</span></div>
864
- <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; {</div>
865
- <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="comment">//If the callee was not identified as a function (null F), this is indirect.</span></div>
866
- <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; handleIndCall(cs);</div>
867
- <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; }</div>
868
- <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160;}</div>
869
- <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; </div>
870
- <div class="line"><a name="l00869"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aca31431b70e2fb360caa1140e29c0c9d"> 869</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitReturnInst(<a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a> &amp;inst)</div>
871
- <div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160;{</div>
872
- <div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; </div>
873
- <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <span class="comment">// ReturnInst itself should always not be a pointer type</span></div>
874
- <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
875
- <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; </div>
876
- <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process return &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
844
+ <div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160; pag-&gt;addCallSite(callBlockNode);</div>
845
+ <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; </div>
846
+ <div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; cs-&gt;arg_size(); i++)</div>
847
+ <div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; pag-&gt;addCallSiteArgs(callBlockNode,pag-&gt;getGNode(getValueNode(cs-&gt;getArgOperand(i))));</div>
848
+ <div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; </div>
849
+ <div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; <span class="keywordflow">if</span>(!cs-&gt;getType()-&gt;isVoidTy())</div>
850
+ <div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; pag-&gt;addCallSiteRets(retBlockNode,pag-&gt;getGNode(getValueNode(cs)));</div>
851
+ <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; </div>
852
+ <div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#ad56c48be3ba6ebb95416623256524097">LLVMUtil::getCallee</a>(cs))</div>
853
+ <div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; {</div>
854
+ <div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; callee = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">LLVMUtil::getDefFunForMultipleModule</a>(callee);</div>
855
+ <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
856
+ <div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(svfcallee))</div>
857
+ <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; {</div>
858
+ <div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; handleExtCall(cs, svfcallee);</div>
859
+ <div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; }</div>
860
+ <div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <span class="keywordflow">else</span></div>
861
+ <div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; {</div>
862
+ <div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; handleDirectCall(cs, callee);</div>
863
+ <div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div>
864
+ <div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; }</div>
865
+ <div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keywordflow">else</span></div>
866
+ <div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160; {</div>
867
+ <div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; <span class="comment">//If the callee was not identified as a function (null F), this is indirect.</span></div>
868
+ <div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; handleIndCall(cs);</div>
869
+ <div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; }</div>
870
+ <div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;}</div>
871
+ <div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; </div>
872
+ <div class="line"><a name="l00871"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#aca31431b70e2fb360caa1140e29c0c9d"> 871</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitReturnInst(<a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a> &amp;inst)</div>
873
+ <div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160;{</div>
874
+ <div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; </div>
875
+ <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="comment">// ReturnInst itself should always not be a pointer type</span></div>
876
+ <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; assert(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div>
877
877
  <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>&#160; </div>
878
- <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = inst.getReturnValue())</div>
879
- <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; {</div>
880
- <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(inst.getParent()-&gt;getParent());</div>
881
- <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; </div>
882
- <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rnF = getReturnNode(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
883
- <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = getValueNode(src);</div>
884
- <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(&amp;inst);</div>
885
- <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfInst);</div>
886
- <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="comment">//vnS may be null if src is a null ptr</span></div>
887
- <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; addPhiStmt(rnF,vnS,icfgNode);</div>
888
- <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; }</div>
889
- <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;}</div>
890
- <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; </div>
891
- <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160; </div>
892
- <div class="line"><a name="l00899"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7a17ca95a5435b498fc875eb9a290800"> 899</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractValueInst(<a class="code" href="namespaceSVF.html#ace1fd4c32134018e2f6d5da193524986">ExtractValueInst</a> &amp;inst)</div>
893
- <div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160;{</div>
894
- <div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
895
- <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; addBlackHoleAddrEdge(dst);</div>
896
- <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160;}</div>
897
- <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; </div>
898
- <div class="line"><a name="l00913"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac6b24fcbd1e1b31141c27167d49a56ec"> 913</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractElementInst(<a class="code" href="namespaceSVF.html#afb88c4d723dd7c51bdfc7ba5893cb356">ExtractElementInst</a> &amp;inst)</div>
899
- <div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;{</div>
900
- <div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
901
- <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; addBlackHoleAddrEdge(dst);</div>
902
- <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160;}</div>
903
- <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; </div>
904
- <div class="line"><a name="l00923"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4ad832691784cf4cb93017792ea3d9af"> 923</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBranchInst(<a class="code" href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">BranchInst</a> &amp;inst)</div>
905
- <div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160;{</div>
906
- <div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
907
- <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond;</div>
908
- <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="keywordflow">if</span> (inst.isConditional())</div>
909
- <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; cond = getValueNode(inst.getCondition());</div>
910
- <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">else</span></div>
911
- <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; cond = pag-&gt;getNullPtr();</div>
912
- <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; </div>
913
- <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; assert(inst.getNumSuccessors() &lt;= 2 &amp;&amp; <span class="stringliteral">&quot;if/else has more than two branches?&quot;</span>);</div>
878
+ <div class="line"><a name="l00877"></a><span class="lineno"> 877</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process return &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(&amp;inst)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
879
+ <div class="line"><a name="l00878"></a><span class="lineno"> 878</span>&#160; </div>
880
+ <div class="line"><a name="l00879"></a><span class="lineno"> 879</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* src = inst.getReturnValue())</div>
881
+ <div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; {</div>
882
+ <div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a> = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(inst.getParent()-&gt;getParent());</div>
883
+ <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; </div>
884
+ <div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rnF = getReturnNode(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
885
+ <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = getValueNode(src);</div>
886
+ <div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(&amp;inst);</div>
887
+ <div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfInst);</div>
888
+ <div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; <span class="comment">//vnS may be null if src is a null ptr</span></div>
889
+ <div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160; addPhiStmt(rnF,vnS,icfgNode);</div>
890
+ <div class="line"><a name="l00889"></a><span class="lineno"> 889</span>&#160; }</div>
891
+ <div class="line"><a name="l00890"></a><span class="lineno"> 890</span>&#160;}</div>
892
+ <div class="line"><a name="l00891"></a><span class="lineno"> 891</span>&#160; </div>
893
+ <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>&#160; </div>
894
+ <div class="line"><a name="l00901"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7a17ca95a5435b498fc875eb9a290800"> 901</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractValueInst(<a class="code" href="namespaceSVF.html#ace1fd4c32134018e2f6d5da193524986">ExtractValueInst</a> &amp;inst)</div>
895
+ <div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160;{</div>
896
+ <div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
897
+ <div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; addBlackHoleAddrEdge(dst);</div>
898
+ <div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160;}</div>
899
+ <div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; </div>
900
+ <div class="line"><a name="l00915"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac6b24fcbd1e1b31141c27167d49a56ec"> 915</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitExtractElementInst(<a class="code" href="namespaceSVF.html#afb88c4d723dd7c51bdfc7ba5893cb356">ExtractElementInst</a> &amp;inst)</div>
901
+ <div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160;{</div>
902
+ <div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
903
+ <div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; addBlackHoleAddrEdge(dst);</div>
904
+ <div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160;}</div>
905
+ <div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; </div>
906
+ <div class="line"><a name="l00925"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a4ad832691784cf4cb93017792ea3d9af"> 925</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitBranchInst(<a class="code" href="namespaceSVF.html#ac9a05dd7ab16e998625037aa242cd30f">BranchInst</a> &amp;inst)</div>
907
+ <div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160;{</div>
908
+ <div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
909
+ <div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond;</div>
910
+ <div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">if</span> (inst.isConditional())</div>
911
+ <div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; cond = getValueNode(inst.getCondition());</div>
912
+ <div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="keywordflow">else</span></div>
913
+ <div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; cond = pag-&gt;getNullPtr();</div>
914
914
  <div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; </div>
915
- <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
916
- <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumSuccessors(); ++i)</div>
917
- <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; {</div>
918
- <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;inst.getSuccessor(i)-&gt;front();</div>
919
- <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
920
- <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfSuccInst);</div>
921
- <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; successors.push_back(std::make_pair(icfgNode, 1-i));</div>
922
- <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; }</div>
923
- <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; addBranchStmt(brinst, cond,successors);</div>
924
- <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160;}</div>
925
- <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; </div>
926
- <div class="line"><a name="l00945"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a83bc9c1dbc95156a68f139ff16faca2a"> 945</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSwitchInst(<a class="code" href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SwitchInst</a> &amp;inst)</div>
927
- <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160;{</div>
928
- <div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
929
- <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
930
- <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; </div>
931
- <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
915
+ <div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; assert(inst.getNumSuccessors() &lt;= 2 &amp;&amp; <span class="stringliteral">&quot;if/else has more than two branches?&quot;</span>);</div>
916
+ <div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; </div>
917
+ <div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
918
+ <div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumSuccessors(); ++i)</div>
919
+ <div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; {</div>
920
+ <div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;inst.getSuccessor(i)-&gt;front();</div>
921
+ <div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
922
+ <div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfSuccInst);</div>
923
+ <div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; successors.push_back(std::make_pair(icfgNode, 1-i));</div>
924
+ <div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; }</div>
925
+ <div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; addBranchStmt(brinst, cond,successors);</div>
926
+ <div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160;}</div>
927
+ <div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; </div>
928
+ <div class="line"><a name="l00947"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a83bc9c1dbc95156a68f139ff16faca2a"> 947</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitSwitchInst(<a class="code" href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SwitchInst</a> &amp;inst)</div>
929
+ <div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160;{</div>
930
+ <div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = getValueNode(&amp;inst);</div>
931
+ <div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = getValueNode(inst.getCondition());</div>
932
932
  <div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; </div>
933
- <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <span class="comment">// get case successor basic block and related case value</span></div>
934
- <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <a class="code" href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SuccBBAndCondValPairVec</a> succBB2CondValPairVec;</div>
935
- <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">LLVMUtil::getSuccBBandCondValPairVec</a>(inst, succBB2CondValPairVec);</div>
936
- <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;succBB2CaseValue : succBB2CondValPairVec)</div>
937
- <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; {</div>
938
- <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> val = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">LLVMUtil::getCaseValue</a>(inst, succBB2CaseValue);</div>
939
- <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succBB = succBB2CaseValue.first;</div>
940
- <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;succBB-&gt;front();</div>
941
- <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
942
- <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfSuccInst);</div>
943
- <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; successors.push_back(std::make_pair(icfgNode, val));</div>
944
- <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; }</div>
945
- <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; addBranchStmt(brinst, cond, successors);</div>
946
- <div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;}</div>
947
- <div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; </div>
948
- <div class="line"><a name="l00972"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac26e0714728df0beca278eb405596775"> 972</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitVAArgInst(<a class="code" href="namespaceSVF.html#abcafc32093ff5ee038b5fcf6e4076ed4">VAArgInst</a> &amp;inst)</div>
949
- <div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160;{</div>
950
- <div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
951
- <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div>
952
- <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
953
- <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; addCopyEdge(src,dst);</div>
954
- <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160;}</div>
955
- <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; </div>
956
- <div class="line"><a name="l00984"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a870ea33a335a7036555dd24171cf8f22"> 984</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitFreezeInst(<a class="code" href="namespaceSVF.html#a9868a60a9cc7b78965a23b5034100f88">FreezeInst</a> &amp;inst)</div>
957
- <div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160;{</div>
958
- <div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
959
- <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumOperands(); i++)</div>
960
- <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; {</div>
961
- <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div>
962
- <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
963
- <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; addCopyEdge(src,dst);</div>
964
- <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div>
965
- <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160;}</div>
966
- <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; </div>
967
- <div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; </div>
968
- <div class="line"><a name="l00999"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515"> 999</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleDirectCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
969
- <div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;{</div>
970
- <div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; </div>
971
- <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
972
- <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
973
- <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
974
- <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
975
- <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle direct call &quot;</span> &lt;&lt; svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() &lt;&lt; <span class="stringliteral">&quot; callee &quot;</span> &lt;&lt; <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
976
- <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; </div>
977
- <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <span class="comment">//Only handle the ret.val. if it&#39;s used as a ptr.</span></div>
978
- <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = getValueNode(cs);</div>
979
- <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="comment">//Does it actually return a ptr?</span></div>
980
- <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <span class="keywordflow">if</span> (!cs-&gt;getType()-&gt;isVoidTy())</div>
981
- <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; {</div>
982
- <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = getReturnNode(svffun);</div>
983
- <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
984
- <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitICFGNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(svffun);</div>
985
- <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; addRetEdge(srcret, dstrec,callICFGNode, exitICFGNode);</div>
986
- <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; }</div>
987
- <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="comment">//Iterators for the actual and formal parameters</span></div>
988
- <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> itA = 0, ieA = cs-&gt;arg_size();</div>
989
- <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; Function::const_arg_iterator itF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;arg_begin(), ieF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;arg_end();</div>
990
- <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div>
991
- <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; args:&quot;</span>);</div>
992
- <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</div>
993
- <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; {</div>
994
- <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
995
- <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keywordflow">if</span> (itA == ieA)</div>
996
- <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; {</div>
997
- <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; !! not enough args\n&quot;</span>);</div>
998
- <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <span class="keywordflow">break</span>;</div>
999
- <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; }</div>
1000
- <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA), *FA = &amp;*itF; <span class="comment">//current actual/formal arg</span></div>
1001
- <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; </div>
1002
- <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process actual parm &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(AA)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
933
+ <div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; <a class="code" href="classSVF_1_1BranchStmt.html#a6a0e64824777f04be4c169125dd4f666">BranchStmt::SuccAndCondPairVec</a> successors;</div>
934
+ <div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; </div>
935
+ <div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <span class="comment">// get case successor basic block and related case value</span></div>
936
+ <div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <a class="code" href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SuccBBAndCondValPairVec</a> succBB2CondValPairVec;</div>
937
+ <div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">LLVMUtil::getSuccBBandCondValPairVec</a>(inst, succBB2CondValPairVec);</div>
938
+ <div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;succBB2CaseValue : succBB2CondValPairVec)</div>
939
+ <div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; {</div>
940
+ <div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <a class="code" href="namespaceSVF.html#ad781b0b14e89773e774072b280658ef3">s64_t</a> val = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">LLVMUtil::getCaseValue</a>(inst, succBB2CaseValue);</div>
941
+ <div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *succBB = succBB2CaseValue.first;</div>
942
+ <div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;succBB-&gt;front();</div>
943
+ <div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfSuccInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(succInst);</div>
944
+ <div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(svfSuccInst);</div>
945
+ <div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; successors.push_back(std::make_pair(icfgNode, val));</div>
946
+ <div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; }</div>
947
+ <div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; addBranchStmt(brinst, cond, successors);</div>
948
+ <div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160;}</div>
949
+ <div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; </div>
950
+ <div class="line"><a name="l00974"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ac26e0714728df0beca278eb405596775"> 974</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitVAArgInst(<a class="code" href="namespaceSVF.html#abcafc32093ff5ee038b5fcf6e4076ed4">VAArgInst</a> &amp;inst)</div>
951
+ <div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160;{</div>
952
+ <div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
953
+ <div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div>
954
+ <div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
955
+ <div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; addCopyEdge(src,dst);</div>
956
+ <div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160;}</div>
957
+ <div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; </div>
958
+ <div class="line"><a name="l00986"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a870ea33a335a7036555dd24171cf8f22"> 986</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::visitFreezeInst(<a class="code" href="namespaceSVF.html#a9868a60a9cc7b78965a23b5034100f88">FreezeInst</a> &amp;inst)</div>
959
+ <div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160;{</div>
960
+ <div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = getValueNode(&amp;inst);</div>
961
+ <div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> i = 0; i &lt; inst.getNumOperands(); i++)</div>
962
+ <div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; {</div>
963
+ <div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div>
964
+ <div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = getValueNode(opnd);</div>
965
+ <div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; addCopyEdge(src,dst);</div>
966
+ <div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; }</div>
967
+ <div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160;}</div>
968
+ <div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; </div>
969
+ <div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; </div>
970
+ <div class="line"><a name="l01001"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a3ccc53ca9a6862674ee2ec3bd67aa515"> 1001</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleDirectCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>)</div>
971
+ <div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;{</div>
972
+ <div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; </div>
973
+ <div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; assert(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
974
+ <div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
975
+ <div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svffun = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>);</div>
976
+ <div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div>
977
+ <div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle direct call &quot;</span> &lt;&lt; svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">toString</a>() &lt;&lt; <span class="stringliteral">&quot; callee &quot;</span> &lt;&lt; <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;getName().str() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div>
978
+ <div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; </div>
979
+ <div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <span class="comment">//Only handle the ret.val. if it&#39;s used as a ptr.</span></div>
980
+ <div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = getValueNode(cs);</div>
981
+ <div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="comment">//Does it actually return a ptr?</span></div>
982
+ <div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">if</span> (!cs-&gt;getType()-&gt;isVoidTy())</div>
983
+ <div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; {</div>
984
+ <div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = getReturnNode(svffun);</div>
985
+ <div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callICFGNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
986
+ <div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitICFGNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(svffun);</div>
987
+ <div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; addRetEdge(srcret, dstrec,callICFGNode, exitICFGNode);</div>
988
+ <div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; }</div>
989
+ <div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="comment">//Iterators for the actual and formal parameters</span></div>
990
+ <div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> itA = 0, ieA = cs-&gt;arg_size();</div>
991
+ <div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160; Function::const_arg_iterator itF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;arg_begin(), ieF = <a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;arg_end();</div>
992
+ <div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div>
993
+ <div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; args:&quot;</span>);</div>
994
+ <div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</div>
995
+ <div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; {</div>
996
+ <div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div>
997
+ <div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordflow">if</span> (itA == ieA)</div>
998
+ <div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; {</div>
999
+ <div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; !! not enough args\n&quot;</span>);</div>
1000
+ <div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">break</span>;</div>
1001
+ <div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; }</div>
1002
+ <div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA), *FA = &amp;*itF; <span class="comment">//current actual/formal arg</span></div>
1003
1003
  <div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; </div>
1004
- <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = getValueNode(FA);</div>
1005
- <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = getValueNode(AA);</div>
1006
- <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1007
- <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1008
- <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; addCallEdge(srcAA, dstFA, icfgNode, entry);</div>
1009
- <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; }</div>
1010
- <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div>
1011
- <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isVarArg())</div>
1012
- <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; {</div>
1013
- <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = getVarargNode(svffun);</div>
1014
- <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n varargs:&quot;</span>);</div>
1015
- <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keywordflow">for</span> (; itA != ieA; ++itA)</div>
1016
- <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; {</div>
1017
- <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA);</div>
1018
- <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = getValueNode(AA);</div>
1019
- <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1020
- <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1021
- <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; addCallEdge(vnAA,vaF, icfgNode,entry);</div>
1022
- <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; }</div>
1023
- <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; }</div>
1024
- <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; <span class="keywordflow">if</span>(itA != ieA)</div>
1025
- <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; {</div>
1026
- <div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;too many args to non-vararg func.&quot;</span>);</div>
1027
- <div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">getSourceLoc</a>() + <span class="stringliteral">&quot;)&quot;</span>);</div>
1028
- <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; </div>
1029
- <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; }</div>
1030
- <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;}</div>
1031
- <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; </div>
1032
- <div class="line"><a name="l01065"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a892ab8cad098e9e9d8425e7f05e35c59"> 1065</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* SVFIRBuilder::getBaseValueForExtArg(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div>
1033
- <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;{</div>
1034
- <div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(V);</div>
1035
- <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; assert(value &amp;&amp; <span class="stringliteral">&quot;null ptr?&quot;</span>);</div>
1036
- <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(value))</div>
1037
- <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; {</div>
1038
- <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalidx = 0;</div>
1039
- <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1generic__bridge__gep__type__iterator.html">bridge_gep_iterator</a> gi = <a class="code" href="namespacellvm.html#acfe99e9d441434240c79f6d76b73fe0a">bridge_gep_begin</a>(gep), ge = <a class="code" href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">bridge_gep_end</a>(gep); gi != ge; ++gi)</div>
1040
- <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; {</div>
1041
- <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* op = SVFUtil::dyn_cast&lt;ConstantInt&gt;(gi.getOperand()))</div>
1042
- <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; totalidx += op-&gt;getSExtValue();</div>
1043
- <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; }</div>
1044
- <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keywordflow">if</span>(totalidx == 0 &amp;&amp; !SVFUtil::isa&lt;StructType&gt;(value-&gt;getType()))</div>
1045
- <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; value = gep-&gt;getPointerOperand();</div>
1046
- <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; }</div>
1047
- <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; </div>
1048
- <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <span class="comment">// if the argument of memcpy is the result of an allocation (1) or a casted load instruction (2),</span></div>
1049
- <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <span class="comment">// further steps are necessary to find the correct base value</span></div>
1050
- <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="comment">//</span></div>
1051
- <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="comment">// (1)</span></div>
1052
- <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">// %call = malloc 80</span></div>
1053
- <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="comment">// %0 = bitcast i8* %call to %struct.A*</span></div>
1054
- <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">// %1 = bitcast %struct.B* %param to i8*</span></div>
1055
- <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="comment">// call void memcpy(%call, %1, 80)</span></div>
1056
- <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="comment">//</span></div>
1057
- <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="comment">// (2)</span></div>
1058
- <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="comment">// %0 = bitcast %struct.A* %param to i8*</span></div>
1059
- <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="comment">// %2 = bitcast %struct.B** %arrayidx to i8**</span></div>
1060
- <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="comment">// %3 = load i8*, i8** %2</span></div>
1061
- <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="comment">// call void @memcpy(%0, %3, 80)</span></div>
1062
- <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &amp;cxt = LLVMModuleSet::getLLVMModuleSet()-&gt;getContext();</div>
1063
- <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="keywordflow">if</span> (value-&gt;getType() == PointerType::getInt8PtrTy(cxt))</div>
1064
- <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; {</div>
1065
- <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <span class="comment">// (1)</span></div>
1066
- <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cb = SVFUtil::dyn_cast&lt;CallBase&gt;(value))</div>
1067
- <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; {</div>
1068
- <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cb);</div>
1069
- <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfInst))</div>
1070
- <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; {</div>
1071
- <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* bitCast = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">getFirstUseViaCastInst</a>(cb))</div>
1072
- <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">return</span> bitCast;</div>
1073
- <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; }</div>
1074
- <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; }</div>
1075
- <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="comment">// (2)</span></div>
1076
- <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* load = SVFUtil::dyn_cast&lt;LoadInst&gt;(value))</div>
1077
- <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; {</div>
1078
- <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#afc50da46a6ea7c2cf61683bbec4d7c8d">BitCastInst</a>* bitCast = SVFUtil::dyn_cast&lt;BitCastInst&gt;(load-&gt;getPointerOperand()))</div>
1079
- <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <span class="keywordflow">return</span> bitCast-&gt;getOperand(0);</div>
1080
- <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; }</div>
1081
- <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; }</div>
1082
- <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; </div>
1083
- <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="keywordflow">return</span> value;</div>
1084
- <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;}</div>
1085
- <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; </div>
1086
- <div class="line"><a name="l01122"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a"> 1122</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleIndCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
1087
- <div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;{</div>
1088
- <div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
1089
- <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfcalledval = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(cs-&gt;getCalledOperand());</div>
1090
- <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; </div>
1091
- <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1092
- <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; pag-&gt;addIndirectCallsites(cbn,pag-&gt;getValueNode(svfcalledval));</div>
1093
- <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;}</div>
1094
- <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; </div>
1095
- <div class="line"><a name="l01131"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a22bd51c6fe770d179867342164ec2767"> 1131</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::updateCallGraph(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph)</div>
1096
- <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;{</div>
1097
- <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div>
1098
- <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div>
1099
- <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div>
1100
- <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; {</div>
1101
- <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter-&gt;first;</div>
1102
- <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* callbase = SVFUtil::cast&lt;CallBase&gt;(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()));</div>
1103
- <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; assert(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">isIndirectCall</a>() &amp;&amp; <span class="stringliteral">&quot;this is not an indirect call?&quot;</span>);</div>
1104
- <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; functions = iter-&gt;second;</div>
1105
- <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div>
1106
- <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; {</div>
1107
- <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee = SVFUtil::cast&lt;Function&gt;(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(*func_iter));</div>
1108
- <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; </div>
1109
- <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(*func_iter))</div>
1110
- <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; {</div>
1111
- <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; setCurrentLocation(callee, callee-&gt;empty() ? <span class="keyword">nullptr</span> : &amp;callee-&gt;getEntryBlock());</div>
1112
- <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
1113
- <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; handleExtCall(callbase, svfcallee);</div>
1114
- <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; }</div>
1115
- <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="keywordflow">else</span></div>
1116
- <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; {</div>
1117
- <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; setCurrentLocation(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>(), callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>());</div>
1118
- <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; handleDirectCall(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>*<span class="keyword">&gt;</span>(callbase), callee);</div>
1119
- <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; }</div>
1120
- <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; }</div>
1121
- <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; }</div>
1122
- <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; </div>
1123
- <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <span class="comment">// dump SVFIR</span></div>
1124
- <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordflow">if</span> (Options::PAGDotGraph())</div>
1125
- <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; pag-&gt;dump(<span class="stringliteral">&quot;svfir_final&quot;</span>);</div>
1126
- <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;}</div>
1127
- <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; </div>
1128
- <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;<span class="comment">/*</span></div>
1129
- <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;<span class="comment"> * TODO: more sanity checks might be needed here</span></div>
1130
- <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;<span class="comment"> */</span></div>
1131
- <div class="line"><a name="l01167"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60"> 1167</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::sanityCheck()</div>
1132
- <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;{</div>
1133
- <div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = pag-&gt;begin(); nIter != pag-&gt;end(); ++nIter)</div>
1134
- <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; {</div>
1135
- <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; (void) pag-&gt;getGNode(nIter-&gt;first);</div>
1136
- <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="comment">//TODO::</span></div>
1137
- <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div>
1138
- <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div>
1139
- <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="comment">// then it has to be an object node.</span></div>
1140
- <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">// (2) make sure every variable should be initialized</span></div>
1141
- <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div>
1142
- <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="comment">// when loading a pointer value should make sure</span></div>
1143
- <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="comment">// some value has been store into this pointer before</span></div>
1144
- <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div>
1145
- <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div>
1146
- <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div>
1147
- <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="comment">// are set correctly for dummy gepval node</span></div>
1148
- <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></div>
1149
- <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; }</div>
1150
- <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;}</div>
1151
- <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; </div>
1152
- <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; </div>
1153
- <div class="line"><a name="l01193"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c"> 1193</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> SVFIRBuilder::getGepValVar(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; ap, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elementType)</div>
1154
- <div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;{</div>
1155
- <div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = pag-&gt;getBaseValVar(getValueNode(val));</div>
1156
- <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = pag-&gt;getGepValVar(curVal, base, ap);</div>
1157
- <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <span class="keywordflow">if</span> (gepval==UINT_MAX)</div>
1158
- <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; {</div>
1159
- <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; assert(((<span class="keywordtype">int</span>) UINT_MAX)==-1 &amp;&amp; <span class="stringliteral">&quot;maximum limit of unsigned int is not -1?&quot;</span>);</div>
1160
- <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <span class="comment">/*</span></div>
1161
- <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160;<span class="comment"> * getGepValVar can only be called from two places:</span></div>
1162
- <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;<span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div>
1163
- <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div>
1164
- <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="comment"> * so curVal can only be</span></div>
1165
- <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="comment"> * 1. Instruction</span></div>
1166
- <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<span class="comment"> * 2. GlobalVariable</span></div>
1167
- <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="comment"> */</span></div>
1168
- <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; assert((SVFUtil::isa&lt;SVFInstruction, SVFGlobalValue&gt;(curVal)) &amp;&amp; <span class="stringliteral">&quot;curVal not an instruction or a globalvariable?&quot;</span>);</div>
1169
- <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; </div>
1170
- <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div>
1171
- <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div>
1172
- <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
1173
- <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
1174
- <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; setCurrentLocation(curVal, <span class="keyword">nullptr</span>);</div>
1175
- <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
1176
- <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepNode= pag-&gt;addGepValNode(curVal, llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(val),ap, NodeIDAllocator::get()-&gt;allocateValueId(),elementType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">getPointerTo</a>());</div>
1177
- <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; addGepEdge(base, gepNode, ap, <span class="keyword">true</span>);</div>
1178
- <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; setCurrentLocation(cval, cbb);</div>
1179
- <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">return</span> gepNode;</div>
1180
- <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; }</div>
1181
- <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <span class="keywordflow">else</span></div>
1182
- <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="keywordflow">return</span> gepval;</div>
1183
- <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;}</div>
1184
- <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; </div>
1185
- <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; </div>
1186
- <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;<span class="comment">/*</span></div>
1187
- <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;<span class="comment"> * curVal &lt;--------&gt; PAGEdge</span></div>
1188
- <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;<span class="comment"> * Instruction Any Edge</span></div>
1189
- <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;<span class="comment"> * Argument CopyEdge (SVFIR::addFormalParamBlackHoleAddrEdge)</span></div>
1190
- <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<span class="comment"> * ConstantExpr CopyEdge (Int2PtrConstantExpr CastConstantExpr SVFIRBuilder::processCE)</span></div>
1191
- <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;<span class="comment"> * GepEdge (GepConstantExpr SVFIRBuilder::processCE)</span></div>
1192
- <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;<span class="comment"> * ConstantPointerNull CopyEdge (3--&gt;2 NullPtr--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1193
- <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="comment"> * AddrEdge (0--&gt;2 BlkObj--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1194
- <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;<span class="comment"> * GlobalVariable AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1195
- <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;<span class="comment"> * GepEdge (SVFIRBuilder::getGlobalVarField)</span></div>
1196
- <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;<span class="comment"> * Function AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1197
- <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;<span class="comment"> * Constant StoreEdge (SVFIRBuilder::InitialGlobal)</span></div>
1198
- <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;<span class="comment"> */</span></div>
1199
- <div class="line"><a name="l01239"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01"> 1239</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::setCurrentBBAndValueForPAGEdge(<a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge)</div>
1200
- <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;{</div>
1201
- <div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <span class="keywordflow">if</span> (SVFModule::pagReadFromTXT())</div>
1202
- <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <span class="keywordflow">return</span>;</div>
1203
- <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; </div>
1204
- <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; assert(curVal &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div>
1205
- <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a0e45ab5b38059371c47d5f2011118a4d">setBB</a>(curBB!=<span class="keyword">nullptr</span> ? curBB : <span class="keyword">nullptr</span>);</div>
1206
- <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a6ae58a22d43361904c7033f5c790da38">setValue</a>(curVal);</div>
1207
- <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div>
1208
- <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; pag-&gt;mapValueToEdge(curVal, edge);</div>
1209
- <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getGlobalICFGNode();</div>
1210
- <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = SVFUtil::dyn_cast&lt;SVFInstruction&gt;(curVal))</div>
1211
- <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; {</div>
1212
- <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction();</div>
1213
- <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction();</div>
1214
- <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="keywordflow">if</span>(srcFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;RetPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;SVFFunction&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getValue()))</div>
1215
- <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; {</div>
1216
- <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; assert(srcFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;SrcNode of the PAGEdge not in the same function?&quot;</span>);</div>
1217
- <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; }</div>
1218
- <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <span class="keywordflow">if</span>(dstFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;CallPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;SVFFunction&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getValue()))</div>
1219
- <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; {</div>
1220
- <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; assert(dstFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;DstNode of the PAGEdge not in the same function?&quot;</span>);</div>
1221
- <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; }</div>
1222
- <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; </div>
1223
- <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="keywordflow">if</span> (!(SVFUtil::isa&lt;GepStmt&gt;(edge) &amp;&amp; SVFUtil::isa&lt;GepValVar&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>())))</div>
1224
- <div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; assert(curBB &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div>
1225
- <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; </div>
1226
- <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <span class="keywordflow">if</span>(curInst-&gt;isRetInst())</div>
1227
- <div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; {</div>
1228
- <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(curInst-&gt;getFunction());</div>
1229
- <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; }</div>
1230
- <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="keywordflow">else</span></div>
1231
- <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; {</div>
1232
- <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;RetPE&gt;(edge))</div>
1233
- <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getRetICFGNode(curInst);</div>
1234
- <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <span class="keywordflow">else</span></div>
1235
- <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curInst);</div>
1236
- <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; }</div>
1237
- <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; }</div>
1238
- <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* arg = SVFUtil::dyn_cast&lt;SVFArgument&gt;(curVal))</div>
1239
- <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; {</div>
1240
- <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; assert(curBB &amp;&amp; (curBB-&gt;getParent()-&gt;getEntryBlock() == curBB));</div>
1241
- <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(arg-&gt;getParent());</div>
1242
- <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; }</div>
1243
- <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFConstant&gt;(curVal) ||</div>
1244
- <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; SVFUtil::isa&lt;SVFFunction&gt;(curVal) ||</div>
1245
- <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; SVFUtil::isa&lt;SVFMetadataAsValue&gt;(curVal))</div>
1246
- <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; {</div>
1247
- <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="keywordflow">if</span> (!curBB)</div>
1248
- <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; pag-&gt;addGlobalPAGEdge(edge);</div>
1249
- <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="keywordflow">else</span></div>
1250
- <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; {</div>
1251
- <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curBB-&gt;front());</div>
1252
- <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; }</div>
1253
- <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; }</div>
1254
- <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <span class="keywordflow">else</span></div>
1255
- <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; {</div>
1256
- <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else value can we have?&quot;</span>);</div>
1257
- <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; }</div>
1258
- <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; </div>
1259
- <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; pag-&gt;addToSVFStmtList(icfgNode,edge);</div>
1260
- <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div>
1261
- <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::dyn_cast&lt;CallPE&gt;(edge))</div>
1262
- <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; {</div>
1263
- <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>*<span class="keyword">&gt;</span>(callPE-&gt;getCallSite());</div>
1264
- <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entryNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>*<span class="keyword">&gt;</span>(callPE-&gt;getFunEntryICFGNode());</div>
1265
- <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag-&gt;getICFG()-&gt;hasInterICFGEdge(callNode,entryNode, ICFGEdge::CallCF))</div>
1266
- <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; SVFUtil::cast&lt;CallCFGEdge&gt;(edge)-&gt;addCallPE(callPE);</div>
1267
- <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; }</div>
1268
- <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = SVFUtil::dyn_cast&lt;RetPE&gt;(edge))</div>
1269
- <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; {</div>
1270
- <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>*<span class="keyword">&gt;</span>(retPE-&gt;getCallSite()-&gt;getRetICFGNode());</div>
1271
- <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>*<span class="keyword">&gt;</span>(retPE-&gt;getFunExitICFGNode());</div>
1272
- <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag-&gt;getICFG()-&gt;hasInterICFGEdge(exitNode, retNode, ICFGEdge::RetCF))</div>
1273
- <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; SVFUtil::cast&lt;RetCFGEdge&gt;(edge)-&gt;addRetPE(retPE);</div>
1274
- <div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; }</div>
1275
- <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;}</div>
1276
- <div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; </div>
1277
- <div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; </div>
1278
- <div class="line"><a name="l01326"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7"> 1326</a></span>&#160;<a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> SVFIRBuilder::getAccessPathFromBaseNode(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
1279
- <div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;{</div>
1280
- <div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-&gt;getGNode(nodeId);</div>
1281
- <div class="line"><a name="l01329"></a><span class="lineno"> 1329</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>(SVFStmt::Gep);</div>
1282
- <div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <span class="keywordflow">if</span>(geps.empty())</div>
1283
- <div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1284
- <div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; </div>
1285
- <div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; assert(geps.size()==1 &amp;&amp; <span class="stringliteral">&quot;one node can only be connected by at most one gep edge!&quot;</span>);</div>
1286
- <div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div>
1287
- <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gepEdge = SVFUtil::cast&lt;GepStmt&gt;(*it);</div>
1288
- <div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="keywordflow">if</span>(gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div>
1289
- <div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1290
- <div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <span class="keywordflow">else</span></div>
1291
- <div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; <span class="keywordflow">return</span> gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>();</div>
1292
- <div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;}</div>
1004
+ <div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process actual parm &quot;</span> &lt;&lt; LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(AA)-&gt;toString() &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div>
1005
+ <div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; </div>
1006
+ <div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = getValueNode(FA);</div>
1007
+ <div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = getValueNode(AA);</div>
1008
+ <div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1009
+ <div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1010
+ <div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; addCallEdge(srcAA, dstFA, icfgNode, entry);</div>
1011
+ <div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; }</div>
1012
+ <div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div>
1013
+ <div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="SVFFileSystem_8cpp.html#ab25baccb41e3b67ef0bfdaa1336c9649">F</a>-&gt;isVarArg())</div>
1014
+ <div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; {</div>
1015
+ <div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = getVarargNode(svffun);</div>
1016
+ <div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <a class="code" href="SVFType_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n varargs:&quot;</span>);</div>
1017
+ <div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <span class="keywordflow">for</span> (; itA != ieA; ++itA)</div>
1018
+ <div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; {</div>
1019
+ <div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* AA = cs-&gt;getArgOperand(itA);</div>
1020
+ <div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = getValueNode(AA);</div>
1021
+ <div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1022
+ <div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entry = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(svffun);</div>
1023
+ <div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; addCallEdge(vnAA,vaF, icfgNode,entry);</div>
1024
+ <div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; }</div>
1025
+ <div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; }</div>
1026
+ <div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160; <span class="keywordflow">if</span>(itA != ieA)</div>
1027
+ <div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; {</div>
1028
+ <div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;too many args to non-vararg func.&quot;</span>);</div>
1029
+ <div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2e0196e0ce547ab4a483cc6d2646b24">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + svfcall-&gt;<a class="code" href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">getSourceLoc</a>() + <span class="stringliteral">&quot;)&quot;</span>);</div>
1030
+ <div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; </div>
1031
+ <div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; }</div>
1032
+ <div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;}</div>
1033
+ <div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; </div>
1034
+ <div class="line"><a name="l01067"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a892ab8cad098e9e9d8425e7f05e35c59"> 1067</a></span>&#160;<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* SVFIRBuilder::getBaseValueForExtArg(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* V)</div>
1035
+ <div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;{</div>
1036
+ <div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* value = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">stripAllCasts</a>(V);</div>
1037
+ <div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; assert(value &amp;&amp; <span class="stringliteral">&quot;null ptr?&quot;</span>);</div>
1038
+ <div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac4e93e1fec646ff222940a663843921b">GetElementPtrInst</a>* gep = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(value))</div>
1039
+ <div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; {</div>
1040
+ <div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <a class="code" href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">APOffset</a> totalidx = 0;</div>
1041
+ <div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1generic__bridge__gep__type__iterator.html">bridge_gep_iterator</a> gi = <a class="code" href="namespacellvm.html#acfe99e9d441434240c79f6d76b73fe0a">bridge_gep_begin</a>(gep), ge = <a class="code" href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">bridge_gep_end</a>(gep); gi != ge; ++gi)</div>
1042
+ <div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; {</div>
1043
+ <div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>* op = SVFUtil::dyn_cast&lt;ConstantInt&gt;(gi.getOperand()))</div>
1044
+ <div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; totalidx += op-&gt;getSExtValue();</div>
1045
+ <div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; }</div>
1046
+ <div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">if</span>(totalidx == 0 &amp;&amp; !SVFUtil::isa&lt;StructType&gt;(value-&gt;getType()))</div>
1047
+ <div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; value = gep-&gt;getPointerOperand();</div>
1048
+ <div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; }</div>
1049
+ <div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; </div>
1050
+ <div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="comment">// if the argument of memcpy is the result of an allocation (1) or a casted load instruction (2),</span></div>
1051
+ <div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; <span class="comment">// further steps are necessary to find the correct base value</span></div>
1052
+ <div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">//</span></div>
1053
+ <div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="comment">// (1)</span></div>
1054
+ <div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; <span class="comment">// %call = malloc 80</span></div>
1055
+ <div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <span class="comment">// %0 = bitcast i8* %call to %struct.A*</span></div>
1056
+ <div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="comment">// %1 = bitcast %struct.B* %param to i8*</span></div>
1057
+ <div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="comment">// call void memcpy(%call, %1, 80)</span></div>
1058
+ <div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="comment">//</span></div>
1059
+ <div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; <span class="comment">// (2)</span></div>
1060
+ <div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <span class="comment">// %0 = bitcast %struct.A* %param to i8*</span></div>
1061
+ <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <span class="comment">// %2 = bitcast %struct.B** %arrayidx to i8**</span></div>
1062
+ <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <span class="comment">// %3 = load i8*, i8** %2</span></div>
1063
+ <div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="comment">// call void @memcpy(%0, %3, 80)</span></div>
1064
+ <div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <a class="code" href="namespaceSVF.html#affba423b674a0aba723e33101826e297">LLVMContext</a> &amp;cxt = LLVMModuleSet::getLLVMModuleSet()-&gt;getContext();</div>
1065
+ <div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <span class="keywordflow">if</span> (value-&gt;getType() == PointerType::getInt8PtrTy(cxt))</div>
1066
+ <div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; {</div>
1067
+ <div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="comment">// (1)</span></div>
1068
+ <div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cb = SVFUtil::dyn_cast&lt;CallBase&gt;(value))</div>
1069
+ <div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; {</div>
1070
+ <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfInst = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cb);</div>
1071
+ <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">SVFUtil::isHeapAllocExtCallViaRet</a>(svfInst))</div>
1072
+ <div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; {</div>
1073
+ <div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* bitCast = <a class="code" href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">getFirstUseViaCastInst</a>(cb))</div>
1074
+ <div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="keywordflow">return</span> bitCast;</div>
1075
+ <div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; }</div>
1076
+ <div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; }</div>
1077
+ <div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="comment">// (2)</span></div>
1078
+ <div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">LoadInst</a>* load = SVFUtil::dyn_cast&lt;LoadInst&gt;(value))</div>
1079
+ <div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; {</div>
1080
+ <div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#afc50da46a6ea7c2cf61683bbec4d7c8d">BitCastInst</a>* bitCast = SVFUtil::dyn_cast&lt;BitCastInst&gt;(load-&gt;getPointerOperand()))</div>
1081
+ <div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <span class="keywordflow">return</span> bitCast-&gt;getOperand(0);</div>
1082
+ <div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; }</div>
1083
+ <div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; }</div>
1084
+ <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; </div>
1085
+ <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="keywordflow">return</span> value;</div>
1086
+ <div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;}</div>
1087
+ <div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; </div>
1088
+ <div class="line"><a name="l01124"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a5ae68d4465feb54fcb8fd0cf20b7a71a"> 1124</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::handleIndCall(<a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* cs)</div>
1089
+ <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;{</div>
1090
+ <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* svfcall = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFInstruction(cs);</div>
1091
+ <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* svfcalledval = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFValue(cs-&gt;getCalledOperand());</div>
1092
+ <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; </div>
1093
+ <div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cbn = pag-&gt;getICFG()-&gt;getCallICFGNode(svfcall);</div>
1094
+ <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; pag-&gt;addIndirectCallsites(cbn,pag-&gt;getValueNode(svfcalledval));</div>
1095
+ <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;}</div>
1096
+ <div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; </div>
1097
+ <div class="line"><a name="l01133"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a22bd51c6fe770d179867342164ec2767"> 1133</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::updateCallGraph(<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* callgraph)</div>
1098
+ <div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;{</div>
1099
+ <div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; PTACallGraph::CallEdgeMap::const_iterator iter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().begin();</div>
1100
+ <div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; PTACallGraph::CallEdgeMap::const_iterator eiter = callgraph-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#ad49fa2a288945f6910deb11acdf6a42d">getIndCallMap</a>().end();</div>
1101
+ <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keywordflow">for</span> (; iter != eiter; iter++)</div>
1102
+ <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; {</div>
1103
+ <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callBlock = iter-&gt;first;</div>
1104
+ <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>* callbase = SVFUtil::cast&lt;CallBase&gt;(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()));</div>
1105
+ <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; assert(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">isIndirectCall</a>() &amp;&amp; <span class="stringliteral">&quot;this is not an indirect call?&quot;</span>);</div>
1106
+ <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PTACallGraph.html#a5f5a5ec7e707a21994d301cc07d32a5a">PTACallGraph::FunctionSet</a>&amp; functions = iter-&gt;second;</div>
1107
+ <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; <span class="keywordflow">for</span> (PTACallGraph::FunctionSet::const_iterator func_iter = functions.begin(); func_iter != functions.end(); func_iter++)</div>
1108
+ <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; {</div>
1109
+ <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* callee = SVFUtil::cast&lt;Function&gt;(LLVMModuleSet::getLLVMModuleSet()-&gt;getLLVMValue(*func_iter));</div>
1110
+ <div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; </div>
1111
+ <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(*func_iter))</div>
1112
+ <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; {</div>
1113
+ <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; setCurrentLocation(callee, callee-&gt;empty() ? <span class="keyword">nullptr</span> : &amp;callee-&gt;getEntryBlock());</div>
1114
+ <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* svfcallee = LLVMModuleSet::getLLVMModuleSet()-&gt;getSVFFunction(callee);</div>
1115
+ <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; handleExtCall(callbase, svfcallee);</div>
1116
+ <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; }</div>
1117
+ <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; <span class="keywordflow">else</span></div>
1118
+ <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; {</div>
1119
+ <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; setCurrentLocation(callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>(), callBlock-&gt;<a class="code" href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">getCallSite</a>()-&gt;<a class="code" href="classSVF_1_1SVFInstruction.html#ae009f41cbf48d949d4325e08fe8d7198">getParent</a>());</div>
1120
+ <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; handleDirectCall(<span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">CallBase</a>*<span class="keyword">&gt;</span>(callbase), callee);</div>
1121
+ <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; }</div>
1122
+ <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; }</div>
1123
+ <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; }</div>
1124
+ <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; </div>
1125
+ <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <span class="comment">// dump SVFIR</span></div>
1126
+ <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordflow">if</span> (Options::PAGDotGraph())</div>
1127
+ <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; pag-&gt;dump(<span class="stringliteral">&quot;svfir_final&quot;</span>);</div>
1128
+ <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;}</div>
1129
+ <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; </div>
1130
+ <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;<span class="comment">/*</span></div>
1131
+ <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;<span class="comment"> * TODO: more sanity checks might be needed here</span></div>
1132
+ <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;<span class="comment"> */</span></div>
1133
+ <div class="line"><a name="l01169"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60"> 1169</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::sanityCheck()</div>
1134
+ <div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;{</div>
1135
+ <div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = pag-&gt;begin(); nIter != pag-&gt;end(); ++nIter)</div>
1136
+ <div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; {</div>
1137
+ <div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; (void) pag-&gt;getGNode(nIter-&gt;first);</div>
1138
+ <div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="comment">//TODO::</span></div>
1139
+ <div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div>
1140
+ <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div>
1141
+ <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <span class="comment">// then it has to be an object node.</span></div>
1142
+ <div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="comment">// (2) make sure every variable should be initialized</span></div>
1143
+ <div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div>
1144
+ <div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; <span class="comment">// when loading a pointer value should make sure</span></div>
1145
+ <div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="comment">// some value has been store into this pointer before</span></div>
1146
+ <div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div>
1147
+ <div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div>
1148
+ <div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div>
1149
+ <div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="comment">// are set correctly for dummy gepval node</span></div>
1150
+ <div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></div>
1151
+ <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; }</div>
1152
+ <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160;}</div>
1153
+ <div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; </div>
1154
+ <div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; </div>
1155
+ <div class="line"><a name="l01195"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#ae4516ec05eabece1bc8e0cad1ec8cf1c"> 1195</a></span>&#160;<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> SVFIRBuilder::getGepValVar(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val, <span class="keyword">const</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>&amp; ap, <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFType.html">SVFType</a>* elementType)</div>
1156
+ <div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;{</div>
1157
+ <div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = pag-&gt;getBaseValVar(getValueNode(val));</div>
1158
+ <div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = pag-&gt;getGepValVar(curVal, base, ap);</div>
1159
+ <div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <span class="keywordflow">if</span> (gepval==UINT_MAX)</div>
1160
+ <div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; {</div>
1161
+ <div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; assert(((<span class="keywordtype">int</span>) UINT_MAX)==-1 &amp;&amp; <span class="stringliteral">&quot;maximum limit of unsigned int is not -1?&quot;</span>);</div>
1162
+ <div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; <span class="comment">/*</span></div>
1163
+ <div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;<span class="comment"> * getGepValVar can only be called from two places:</span></div>
1164
+ <div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;<span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div>
1165
+ <div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;<span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div>
1166
+ <div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;<span class="comment"> * so curVal can only be</span></div>
1167
+ <div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;<span class="comment"> * 1. Instruction</span></div>
1168
+ <div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;<span class="comment"> * 2. GlobalVariable</span></div>
1169
+ <div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;<span class="comment"> */</span></div>
1170
+ <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; assert((SVFUtil::isa&lt;SVFInstruction, SVFGlobalValue&gt;(curVal)) &amp;&amp; <span class="stringliteral">&quot;curVal not an instruction or a globalvariable?&quot;</span>);</div>
1171
+ <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; </div>
1172
+ <div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div>
1173
+ <div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div>
1174
+ <div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFValue.html">SVFValue</a>* cval = getCurrentValue();</div>
1175
+ <div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFBasicBlock.html">SVFBasicBlock</a>* cbb = getCurrentBB();</div>
1176
+ <div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; setCurrentLocation(curVal, <span class="keyword">nullptr</span>);</div>
1177
+ <div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <a class="code" href="classSVF_1_1LLVMModuleSet.html">LLVMModuleSet</a>* llvmmodule = LLVMModuleSet::getLLVMModuleSet();</div>
1178
+ <div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepNode= pag-&gt;addGepValNode(curVal, llvmmodule-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">getSVFValue</a>(val),ap, NodeIDAllocator::get()-&gt;allocateValueId(),elementType-&gt;<a class="code" href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">getPointerTo</a>());</div>
1179
+ <div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; addGepEdge(base, gepNode, ap, <span class="keyword">true</span>);</div>
1180
+ <div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; setCurrentLocation(cval, cbb);</div>
1181
+ <div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <span class="keywordflow">return</span> gepNode;</div>
1182
+ <div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; }</div>
1183
+ <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; <span class="keywordflow">else</span></div>
1184
+ <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="keywordflow">return</span> gepval;</div>
1185
+ <div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;}</div>
1186
+ <div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; </div>
1187
+ <div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; </div>
1188
+ <div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160;<span class="comment">/*</span></div>
1189
+ <div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;<span class="comment"> * curVal &lt;--------&gt; PAGEdge</span></div>
1190
+ <div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<span class="comment"> * Instruction Any Edge</span></div>
1191
+ <div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;<span class="comment"> * Argument CopyEdge (SVFIR::addFormalParamBlackHoleAddrEdge)</span></div>
1192
+ <div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;<span class="comment"> * ConstantExpr CopyEdge (Int2PtrConstantExpr CastConstantExpr SVFIRBuilder::processCE)</span></div>
1193
+ <div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="comment"> * GepEdge (GepConstantExpr SVFIRBuilder::processCE)</span></div>
1194
+ <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;<span class="comment"> * ConstantPointerNull CopyEdge (3--&gt;2 NullPtr--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1195
+ <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;<span class="comment"> * AddrEdge (0--&gt;2 BlkObj--&gt;BlkPtr SVFIR::addNullPtrNode)</span></div>
1196
+ <div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;<span class="comment"> * GlobalVariable AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1197
+ <div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;<span class="comment"> * GepEdge (SVFIRBuilder::getGlobalVarField)</span></div>
1198
+ <div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;<span class="comment"> * Function AddrEdge (SVFIRBuilder::visitGlobal)</span></div>
1199
+ <div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;<span class="comment"> * Constant StoreEdge (SVFIRBuilder::InitialGlobal)</span></div>
1200
+ <div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;<span class="comment"> */</span></div>
1201
+ <div class="line"><a name="l01241"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01"> 1241</a></span>&#160;<span class="keywordtype">void</span> SVFIRBuilder::setCurrentBBAndValueForPAGEdge(<a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge)</div>
1202
+ <div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160;{</div>
1203
+ <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <span class="keywordflow">if</span> (SVFModule::pagReadFromTXT())</div>
1204
+ <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="keywordflow">return</span>;</div>
1205
+ <div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; </div>
1206
+ <div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; assert(curVal &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div>
1207
+ <div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a0e45ab5b38059371c47d5f2011118a4d">setBB</a>(curBB!=<span class="keyword">nullptr</span> ? curBB : <span class="keyword">nullptr</span>);</div>
1208
+ <div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a6ae58a22d43361904c7033f5c790da38">setValue</a>(curVal);</div>
1209
+ <div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div>
1210
+ <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; pag-&gt;mapValueToEdge(curVal, edge);</div>
1211
+ <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = pag-&gt;getICFG()-&gt;getGlobalICFGNode();</div>
1212
+ <div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFInstruction.html">SVFInstruction</a>* curInst = SVFUtil::dyn_cast&lt;SVFInstruction&gt;(curVal))</div>
1213
+ <div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; {</div>
1214
+ <div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction();</div>
1215
+ <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction();</div>
1216
+ <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <span class="keywordflow">if</span>(srcFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;RetPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;SVFFunction&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getValue()))</div>
1217
+ <div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; {</div>
1218
+ <div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; assert(srcFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;SrcNode of the PAGEdge not in the same function?&quot;</span>);</div>
1219
+ <div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; }</div>
1220
+ <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="keywordflow">if</span>(dstFun!=<span class="keyword">nullptr</span> &amp;&amp; !SVFUtil::isa&lt;CallPE&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;SVFFunction&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getValue()))</div>
1221
+ <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; {</div>
1222
+ <div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; assert(dstFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;DstNode of the PAGEdge not in the same function?&quot;</span>);</div>
1223
+ <div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; }</div>
1224
+ <div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; </div>
1225
+ <div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="keywordflow">if</span> (!(SVFUtil::isa&lt;GepStmt&gt;(edge) &amp;&amp; SVFUtil::isa&lt;GepValVar&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>())))</div>
1226
+ <div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; assert(curBB &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div>
1227
+ <div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; </div>
1228
+ <div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; <span class="keywordflow">if</span>(curInst-&gt;isRetInst())</div>
1229
+ <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; {</div>
1230
+ <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunExitICFGNode(curInst-&gt;getFunction());</div>
1231
+ <div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; }</div>
1232
+ <div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">else</span></div>
1233
+ <div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; {</div>
1234
+ <div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;RetPE&gt;(edge))</div>
1235
+ <div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getRetICFGNode(curInst);</div>
1236
+ <div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <span class="keywordflow">else</span></div>
1237
+ <div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curInst);</div>
1238
+ <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; }</div>
1239
+ <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; }</div>
1240
+ <div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFArgument.html">SVFArgument</a>* arg = SVFUtil::dyn_cast&lt;SVFArgument&gt;(curVal))</div>
1241
+ <div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; {</div>
1242
+ <div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; assert(curBB &amp;&amp; (curBB-&gt;getParent()-&gt;getEntryBlock() == curBB));</div>
1243
+ <div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getFunEntryICFGNode(arg-&gt;getParent());</div>
1244
+ <div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; }</div>
1245
+ <div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;SVFConstant&gt;(curVal) ||</div>
1246
+ <div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; SVFUtil::isa&lt;SVFFunction&gt;(curVal) ||</div>
1247
+ <div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; SVFUtil::isa&lt;SVFMetadataAsValue&gt;(curVal))</div>
1248
+ <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; {</div>
1249
+ <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <span class="keywordflow">if</span> (!curBB)</div>
1250
+ <div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; pag-&gt;addGlobalPAGEdge(edge);</div>
1251
+ <div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <span class="keywordflow">else</span></div>
1252
+ <div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; {</div>
1253
+ <div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; icfgNode = pag-&gt;getICFG()-&gt;getICFGNode(curBB-&gt;front());</div>
1254
+ <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; }</div>
1255
+ <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; }</div>
1256
+ <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; <span class="keywordflow">else</span></div>
1257
+ <div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; {</div>
1258
+ <div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else value can we have?&quot;</span>);</div>
1259
+ <div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; }</div>
1260
+ <div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; </div>
1261
+ <div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; pag-&gt;addToSVFStmtList(icfgNode,edge);</div>
1262
+ <div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div>
1263
+ <div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallPE.html">CallPE</a>* callPE = SVFUtil::dyn_cast&lt;CallPE&gt;(edge))</div>
1264
+ <div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; {</div>
1265
+ <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* callNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>*<span class="keyword">&gt;</span>(callPE-&gt;getCallSite());</div>
1266
+ <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* entryNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>*<span class="keyword">&gt;</span>(callPE-&gt;getFunEntryICFGNode());</div>
1267
+ <div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag-&gt;getICFG()-&gt;hasInterICFGEdge(callNode,entryNode, ICFGEdge::CallCF))</div>
1268
+ <div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; SVFUtil::cast&lt;CallCFGEdge&gt;(edge)-&gt;addCallPE(callPE);</div>
1269
+ <div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; }</div>
1270
+ <div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1RetPE.html">RetPE</a>* retPE = SVFUtil::dyn_cast&lt;RetPE&gt;(edge))</div>
1271
+ <div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; {</div>
1272
+ <div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* retNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>*<span class="keyword">&gt;</span>(retPE-&gt;getCallSite()-&gt;getRetICFGNode());</div>
1273
+ <div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; <a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* exitNode = <span class="keyword">const_cast&lt;</span><a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>*<span class="keyword">&gt;</span>(retPE-&gt;getFunExitICFGNode());</div>
1274
+ <div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = pag-&gt;getICFG()-&gt;hasInterICFGEdge(exitNode, retNode, ICFGEdge::RetCF))</div>
1275
+ <div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; SVFUtil::cast&lt;RetCFGEdge&gt;(edge)-&gt;addRetPE(retPE);</div>
1276
+ <div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; }</div>
1277
+ <div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;}</div>
1278
+ <div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; </div>
1279
+ <div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; </div>
1280
+ <div class="line"><a name="l01328"></a><span class="lineno"><a class="line" href="classSVF_1_1SVFIRBuilder.html#a7c401d6929e583be734c0c4e9957d0d7"> 1328</a></span>&#160;<a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a> SVFIRBuilder::getAccessPathFromBaseNode(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId)</div>
1281
+ <div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;{</div>
1282
+ <div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; <a class="code" href="classSVF_1_1SVFVar.html">SVFVar</a>* node = pag-&gt;getGNode(nodeId);</div>
1283
+ <div class="line"><a name="l01331"></a><span class="lineno"> 1331</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>(SVFStmt::Gep);</div>
1284
+ <div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <span class="keywordflow">if</span>(geps.empty())</div>
1285
+ <div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1286
+ <div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; </div>
1287
+ <div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; assert(geps.size()==1 &amp;&amp; <span class="stringliteral">&quot;one node can only be connected by at most one gep edge!&quot;</span>);</div>
1288
+ <div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <a class="code" href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVFVar::iterator</a> it = geps.begin();</div>
1289
+ <div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gepEdge = SVFUtil::cast&lt;GepStmt&gt;(*it);</div>
1290
+ <div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <span class="keywordflow">if</span>(gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">isVariantFieldGep</a>())</div>
1291
+ <div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1AccessPath.html">AccessPath</a>(0);</div>
1292
+ <div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="keywordflow">else</span></div>
1293
+ <div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="keywordflow">return</span> gepEdge-&gt;<a class="code" href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">getAccessPath</a>();</div>
1294
+ <div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;}</div>
1293
1295
  </div><!-- fragment --></div><!-- contents -->
1294
1296
  <div class="ttc" id="anamespaceSVF_html_a5c4820681ef340339ddded756eb82ae1"><div class="ttname"><a href="namespaceSVF.html#a5c4820681ef340339ddded756eb82ae1">SVF::APOffset</a></div><div class="ttdeci">s64_t APOffset</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00061">SVFType.h:61</a></div></div>
1295
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a38ce45ae5f017c90115ce444b44d478c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">SVF::LLVMUtil::stripAllCasts</a></div><div class="ttdeci">const Value * stripAllCasts(const Value *val)</div><div class="ttdoc">Strip off the all casts.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00263">LLVMUtil.cpp:263</a></div></div>
1296
- <div class="ttc" id="anamespaceSVF_html_a8de26e1810ea0c3b1e8ad62f1c8a864d"><div class="ttname"><a href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SVF::SuccBBAndCondValPairVec</a></div><div class="ttdeci">std::vector&lt; SuccBBAndCondValPair &gt; SuccBBAndCondValPairVec</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00183">BasicTypes.h:183</a></div></div>
1297
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a38ce45ae5f017c90115ce444b44d478c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a38ce45ae5f017c90115ce444b44d478c">SVF::LLVMUtil::stripAllCasts</a></div><div class="ttdeci">const Value * stripAllCasts(const Value *val)</div><div class="ttdoc">Strip off the all casts.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00328">LLVMUtil.cpp:328</a></div></div>
1298
+ <div class="ttc" id="anamespaceSVF_html_a8de26e1810ea0c3b1e8ad62f1c8a864d"><div class="ttname"><a href="namespaceSVF.html#a8de26e1810ea0c3b1e8ad62f1c8a864d">SVF::SuccBBAndCondValPairVec</a></div><div class="ttdeci">std::vector&lt; SuccBBAndCondValPair &gt; SuccBBAndCondValPairVec</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00184">BasicTypes.h:184</a></div></div>
1297
1299
  <div class="ttc" id="aPAGBuilderFromFile_8h_html"><div class="ttname"><a href="PAGBuilderFromFile_8h.html">PAGBuilderFromFile.h</a></div></div>
1298
1300
  <div class="ttc" id="aclassSVF_1_1CHGBuilder_html_aa5c672ac426ad4085d64d97f8cb14ace"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html#aa5c672ac426ad4085d64d97f8cb14ace">SVF::CHGBuilder::buildCHG</a></div><div class="ttdeci">void buildCHG()</div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8cpp_source.html#l00059">CHGBuilder.cpp:59</a></div></div>
1299
1301
  <div class="ttc" id="anamespaceSVF_html_ab696aab940eb187dc81217efe8649af5"><div class="ttname"><a href="namespaceSVF.html#ab696aab940eb187dc81217efe8649af5">SVF::StoreInst</a></div><div class="ttdeci">llvm::StoreInst StoreInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00146">BasicTypes.h:146</a></div></div>
1300
1302
  <div class="ttc" id="aclassSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00044">ICFGEdge.h:44</a></div></div>
1301
1303
  <div class="ttc" id="aclassSVF_1_1GepStmt_html_a0ddf180a0f7ba64fc8655687910e3788"><div class="ttname"><a href="classSVF_1_1GepStmt.html#a0ddf180a0f7ba64fc8655687910e3788">SVF::GepStmt::isVariantFieldGep</a></div><div class="ttdeci">bool isVariantFieldGep() const</div><div class="ttdoc">Gep statement with a variant field index (pointer arithmetic) for struct field access.</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00526">SVFStatements.h:526</a></div></div>
1302
1304
  <div class="ttc" id="anamespaceSVF_html_a292a6e8c5b4f2023b5575879c57eca62"><div class="ttname"><a href="namespaceSVF.html#a292a6e8c5b4f2023b5575879c57eca62">SVF::UnaryOperator</a></div><div class="ttdeci">llvm::UnaryOperator UnaryOperator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00178">BasicTypes.h:178</a></div></div>
1303
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a35b36394af726c679fe2c1b6051db7c4"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a35b36394af726c679fe2c1b6051db7c4">SVF::LLVMUtil::isBinaryConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isBinaryConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00309">LLVMUtil.h:309</a></div></div>
1305
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a35b36394af726c679fe2c1b6051db7c4"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a35b36394af726c679fe2c1b6051db7c4">SVF::LLVMUtil::isBinaryConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isBinaryConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00314">LLVMUtil.h:314</a></div></div>
1304
1306
  <div class="ttc" id="aclassSVF_1_1FunEntryICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunEntryICFGNode.html">SVF::FunEntryICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00261">ICFGNode.h:261</a></div></div>
1305
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a08fbef6fe3e2af96a49f79ce23accb01"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">SVF::LLVMUtil::isValVtbl</a></div><div class="ttdeci">bool isValVtbl(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00909">LLVMUtil.cpp:909</a></div></div>
1307
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a08fbef6fe3e2af96a49f79ce23accb01"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a08fbef6fe3e2af96a49f79ce23accb01">SVF::LLVMUtil::isValVtbl</a></div><div class="ttdeci">bool isValVtbl(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00976">LLVMUtil.cpp:976</a></div></div>
1306
1308
  <div class="ttc" id="aclassSVF_1_1GenericEdge_html_ab47ca533c415841ef75456cbad439589"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">SVF::GenericEdge::getSrcNode</a></div><div class="ttdeci">NodeType * getSrcNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00097">GenericGraph.h:97</a></div></div>
1307
1309
  <div class="ttc" id="aclassSVF_1_1RetICFGNode_html"><div class="ttname"><a href="classSVF_1_1RetICFGNode.html">SVF::RetICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00487">ICFGNode.h:487</a></div></div>
1308
1310
  <div class="ttc" id="aclassSVF_1_1ICFGBuilder_html"><div class="ttname"><a href="classSVF_1_1ICFGBuilder.html">SVF::ICFGBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGBuilder_8h_source.html#l00039">ICFGBuilder.h:39</a></div></div>
1309
1311
  <div class="ttc" id="aLLVMUtil_8h_html"><div class="ttname"><a href="LLVMUtil_8h.html">LLVMUtil.h</a></div></div>
1310
1312
  <div class="ttc" id="aclassSVF_1_1CallICFGNode_html_a90fd0b8e44fba1a7eb76d15bce085d66"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html#a90fd0b8e44fba1a7eb76d15bce085d66">SVF::CallICFGNode::getCallSite</a></div><div class="ttdeci">const SVFInstruction * getCallSite() const</div><div class="ttdoc">Return callsite.</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00409">ICFGNode.h:409</a></div></div>
1313
+ <div class="ttc" id="anamespaceSVF_html_a893c345ff98bb2808ae905cf9f3671c5"><div class="ttname"><a href="namespaceSVF.html#a893c345ff98bb2808ae905cf9f3671c5">SVF::GEPOperator</a></div><div class="ttdeci">llvm::GEPOperator GEPOperator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00180">BasicTypes.h:180</a></div></div>
1311
1314
  <div class="ttc" id="anamespaceSVF_html_aad5d26ab07a5d1314bdb8f54e0fcdb22"><div class="ttname"><a href="namespaceSVF.html#aad5d26ab07a5d1314bdb8f54e0fcdb22">SVF::BinaryOperator</a></div><div class="ttdeci">llvm::BinaryOperator BinaryOperator</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00177">BasicTypes.h:177</a></div></div>
1312
1315
  <div class="ttc" id="anamespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00084">BasicTypes.h:84</a></div></div>
1313
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a9001722dd27bf487351725c3d7b65f2f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">SVF::LLVMUtil::getSuccBBandCondValPairVec</a></div><div class="ttdeci">void getSuccBBandCondValPairVec(const SwitchInst &amp;switchInst, SuccBBAndCondValPairVec &amp;vec)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01251">LLVMUtil.cpp:1251</a></div></div>
1316
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a9001722dd27bf487351725c3d7b65f2f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a9001722dd27bf487351725c3d7b65f2f">SVF::LLVMUtil::getSuccBBandCondValPairVec</a></div><div class="ttdeci">void getSuccBBandCondValPairVec(const SwitchInst &amp;switchInst, SuccBBAndCondValPairVec &amp;vec)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01322">LLVMUtil.cpp:1322</a></div></div>
1314
1317
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_aafd4da7cef6387bb974abe20185b7b96"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#aafd4da7cef6387bb974abe20185b7b96">SVF::SymbolTableInfo::retSyms</a></div><div class="ttdeci">FunToIDMapTy &amp; retSyms()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00280">SymbolTableInfo.h:280</a></div></div>
1315
1318
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad56c48be3ba6ebb95416623256524097"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad56c48be3ba6ebb95416623256524097">SVF::LLVMUtil::getCallee</a></div><div class="ttdeci">const Function * getCallee(const CallBase *cs)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00074">LLVMUtil.h:74</a></div></div>
1316
1319
  <div class="ttc" id="anamespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
@@ -1318,11 +1321,11 @@ $(function() {
1318
1321
  <div class="ttc" id="aSVFType_8h_html_a7a295e02c56a93cf9206dd9d3b18dd17"><div class="ttname"><a href="SVFType_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a></div><div class="ttdeci">#define DPAGBuild</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00584">SVFType.h:584</a></div></div>
1319
1322
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_a05ca2987d9f8716c24e489bec53502f4"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a05ca2987d9f8716c24e489bec53502f4">SVF::SymbolTableInfo::blackholeSymID</a></div><div class="ttdeci">SymID blackholeSymID() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00198">SymbolTableInfo.h:198</a></div></div>
1320
1323
  <div class="ttc" id="aSVFType_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFType_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00604">SVFType.h:604</a></div></div>
1321
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a200539f965bff5627abac41920498ee8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">SVF::LLVMUtil::getFirstUseViaCastInst</a></div><div class="ttdeci">const Value * getFirstUseViaCastInst(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00349">LLVMUtil.cpp:349</a></div></div>
1324
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a200539f965bff5627abac41920498ee8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a200539f965bff5627abac41920498ee8">SVF::LLVMUtil::getFirstUseViaCastInst</a></div><div class="ttdeci">const Value * getFirstUseViaCastInst(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00414">LLVMUtil.cpp:414</a></div></div>
1322
1325
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_a8f3cb8a1db34dd692ee04561f4edeebf"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a8f3cb8a1db34dd692ee04561f4edeebf">SVF::SymbolTableInfo::valSyms</a></div><div class="ttdeci">ValueToIDMapTy &amp; valSyms()</div><div class="ttdoc">Get different kinds of syms maps.</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00260">SymbolTableInfo.h:260</a></div></div>
1323
1326
  <div class="ttc" id="anamespaceSVF_html_a412280b134578905248ce0122c5db7c9"><div class="ttname"><a href="namespaceSVF.html#a412280b134578905248ce0122c5db7c9">SVF::SwitchInst</a></div><div class="ttdeci">llvm::SwitchInst SwitchInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00153">BasicTypes.h:153</a></div></div>
1324
1327
  <div class="ttc" id="aclassSVF_1_1LLVMLoopAnalysis_html"><div class="ttname"><a href="classSVF_1_1LLVMLoopAnalysis.html">SVF::LLVMLoopAnalysis</a></div><div class="ttdef"><b>Definition:</b> <a href="LLVMLoopAnalysis_8h_source.html#l00039">LLVMLoopAnalysis.h:39</a></div></div>
1325
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad8ee8de153df3f1bbdebb67185a2731c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">SVF::LLVMUtil::isConstantObjSym</a></div><div class="ttdeci">bool isConstantObjSym(const SVFValue *val)</div><div class="ttdoc">Check whether this value points-to a constant object.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00860">LLVMUtil.cpp:860</a></div></div>
1328
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ad8ee8de153df3f1bbdebb67185a2731c"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ad8ee8de153df3f1bbdebb67185a2731c">SVF::LLVMUtil::isConstantObjSym</a></div><div class="ttdeci">bool isConstantObjSym(const SVFValue *val)</div><div class="ttdoc">Check whether this value points-to a constant object.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00927">LLVMUtil.cpp:927</a></div></div>
1326
1329
  <div class="ttc" id="anamespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdoc">LLVM Basic classes.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00080">BasicTypes.h:80</a></div></div>
1327
1330
  <div class="ttc" id="aclassSVF_1_1AccessPath_html_a2358a8194b5e2c4bcbb5218dee7fcbcd"><div class="ttname"><a href="classSVF_1_1AccessPath.html#a2358a8194b5e2c4bcbb5218dee7fcbcd">SVF::AccessPath::addOffsetVarAndGepTypePair</a></div><div class="ttdeci">bool addOffsetVarAndGepTypePair(const SVFVar *var, const SVFType *gepIterType)</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8cpp_source.html#l00042">AccessPath.cpp:42</a></div></div>
1328
1331
  <div class="ttc" id="aclassSVF_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#l00605">SVFStatements.h:605</a></div></div>
@@ -1336,7 +1339,7 @@ $(function() {
1336
1339
  <div class="ttc" id="aclassSVF_1_1SVFStmt_html_a8cd7b6c6fd8b030b1421d95a086359f4"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a8cd7b6c6fd8b030b1421d95a086359f4">SVF::SVFStmt::SVFStmtSetTy</a></div><div class="ttdeci">GenericNode&lt; SVFVar, SVFStmt &gt;::GEdgeSetTy SVFStmtSetTy</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00217">SVFStatements.h:217</a></div></div>
1337
1340
  <div class="ttc" id="anamespaceSVF_html_a1f4624771922dc8c2447ad7433588c73"><div class="ttname"><a href="namespaceSVF.html#a1f4624771922dc8c2447ad7433588c73">SVF::CallBase</a></div><div class="ttdeci">llvm::CallBase CallBase</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00144">BasicTypes.h:144</a></div></div>
1338
1341
  <div class="ttc" id="anamespaceSVF_html_ac6b6710585fc6667858ccfd4311b6ab5"><div class="ttname"><a href="namespaceSVF.html#ac6b6710585fc6667858ccfd4311b6ab5">SVF::CallBrInst</a></div><div class="ttdeci">llvm::CallBrInst CallBrInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00154">BasicTypes.h:154</a></div></div>
1339
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a33e8378ae1a911169394e545a4ba2220"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">SVF::LLVMUtil::getCaseValue</a></div><div class="ttdeci">s64_t getCaseValue(const SwitchInst &amp;switchInst, SuccBBAndCondValPair &amp;succBB2CondVal)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01261">LLVMUtil.cpp:1261</a></div></div>
1342
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a33e8378ae1a911169394e545a4ba2220"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a33e8378ae1a911169394e545a4ba2220">SVF::LLVMUtil::getCaseValue</a></div><div class="ttdeci">s64_t getCaseValue(const SwitchInst &amp;switchInst, SuccBBAndCondValPair &amp;succBB2CondVal)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01332">LLVMUtil.cpp:1332</a></div></div>
1340
1343
  <div class="ttc" id="aclassSVF_1_1SVFType_html_a3672b4797c400aac90c6d36ce29e0e57"><div class="ttname"><a href="classSVF_1_1SVFType.html#a3672b4797c400aac90c6d36ce29e0e57">SVF::SVFType::getPointerTo</a></div><div class="ttdeci">const SVFPointerType * getPointerTo() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00297">SVFType.h:297</a></div></div>
1341
1344
  <div class="ttc" id="anamespacellvm_html_a7cfc92a12082d69711c97bb3d1b99c48"><div class="ttname"><a href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">llvm::bridge_gep_end</a></div><div class="ttdeci">bridge_gep_iterator bridge_gep_end(const User *GEP)</div><div class="ttdef"><b>Definition:</b> <a href="GEPTypeBridgeIterator_8h_source.html#l00157">GEPTypeBridgeIterator.h:157</a></div></div>
1342
1345
  <div class="ttc" id="aLLVMLoopAnalysis_8h_html"><div class="ttname"><a href="LLVMLoopAnalysis_8h.html">LLVMLoopAnalysis.h</a></div></div>
@@ -1348,7 +1351,7 @@ $(function() {
1348
1351
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_adaed6e68c2f53260ed4c4fc38b5c4721"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#adaed6e68c2f53260ed4c4fc38b5c4721">SVF::SymbolTableInfo::nullPtrSymID</a></div><div class="ttdeci">SymID nullPtrSymID() const</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00188">SymbolTableInfo.h:188</a></div></div>
1349
1352
  <div class="ttc" id="anamespaceSVF_html_a9868a60a9cc7b78965a23b5034100f88"><div class="ttname"><a href="namespaceSVF.html#a9868a60a9cc7b78965a23b5034100f88">SVF::FreezeInst</a></div><div class="ttdeci">llvm::FreezeInst FreezeInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00167">BasicTypes.h:167</a></div></div>
1350
1353
  <div class="ttc" id="anamespaceSVF_html_a5a6e8ab900d5cd17ef72661006a7fbe0"><div class="ttname"><a href="namespaceSVF.html#a5a6e8ab900d5cd17ef72661006a7fbe0">SVF::LoadInst</a></div><div class="ttdeci">llvm::LoadInst LoadInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00147">BasicTypes.h:147</a></div></div>
1351
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_af983b0e1fbd371d8672e8f03f63084fc"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#af983b0e1fbd371d8672e8f03f63084fc">SVF::LLVMUtil::isCastConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isCastConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00264">LLVMUtil.h:264</a></div></div>
1354
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_af983b0e1fbd371d8672e8f03f63084fc"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#af983b0e1fbd371d8672e8f03f63084fc">SVF::LLVMUtil::isCastConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isCastConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00269">LLVMUtil.h:269</a></div></div>
1352
1355
  <div class="ttc" id="anamespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
1353
1356
  <div class="ttc" id="anamespaceSVF_html_a0fd33072b099f61eaa642e94ed0c03fc"><div class="ttname"><a href="namespaceSVF.html#a0fd33072b099f61eaa642e94ed0c03fc">SVF::GlobalAlias</a></div><div class="ttdeci">llvm::GlobalAlias GlobalAlias</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00126">BasicTypes.h:126</a></div></div>
1354
1357
  <div class="ttc" id="anamespaceSVF_html_ac7dcc6103dee3a0bbc2fd2e02716a154"><div class="ttname"><a href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">SVF::ReturnInst</a></div><div class="ttdeci">llvm::ReturnInst ReturnInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00155">BasicTypes.h:155</a></div></div>
@@ -1371,7 +1374,7 @@ $(function() {
1371
1374
  <div class="ttc" id="aclassSVF_1_1GepStmt_html_a6c74f234a6b40bc5292bb14874c2e600"><div class="ttname"><a href="classSVF_1_1GepStmt.html#a6c74f234a6b40bc5292bb14874c2e600">SVF::GepStmt::getAccessPath</a></div><div class="ttdeci">const AccessPath &amp; getAccessPath() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00491">SVFStatements.h:491</a></div></div>
1372
1375
  <div class="ttc" id="aclassSVF_1_1AccessPath_html_ab95df74c97fba13206df48e00131e15f"><div class="ttname"><a href="classSVF_1_1AccessPath.html#ab95df74c97fba13206df48e00131e15f">SVF::AccessPath::setFldIdx</a></div><div class="ttdeci">void setFldIdx(APOffset idx)</div><div class="ttdef"><b>Definition:</b> <a href="AccessPath_8h_source.html#l00104">AccessPath.h:104</a></div></div>
1373
1376
  <div class="ttc" id="anamespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00085">BasicTypes.h:85</a></div></div>
1374
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a946a2b51b848c45c6c52f03581ee05b8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a946a2b51b848c45c6c52f03581ee05b8">SVF::LLVMUtil::isTruncConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isTruncConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00284">LLVMUtil.h:284</a></div></div>
1377
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a946a2b51b848c45c6c52f03581ee05b8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a946a2b51b848c45c6c52f03581ee05b8">SVF::LLVMUtil::isTruncConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isTruncConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00289">LLVMUtil.h:289</a></div></div>
1375
1378
  <div class="ttc" id="anamespaceSVF_html_a2bf58575ac7d068e0f1a4cf953b9e6cb"><div class="ttname"><a href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">SVF::StructType</a></div><div class="ttdeci">llvm::StructType StructType</div><div class="ttdoc">LLVM types.</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00092">BasicTypes.h:92</a></div></div>
1376
1379
  <div class="ttc" id="aclassSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00297">SVFValue.h:297</a></div></div>
1377
1380
  <div class="ttc" id="aclassSVF_1_1CHGBuilder_html"><div class="ttname"><a href="classSVF_1_1CHGBuilder.html">SVF::CHGBuilder</a></div><div class="ttdef"><b>Definition:</b> <a href="CHGBuilder_8h_source.html#l00036">CHGBuilder.h:36</a></div></div>
@@ -1379,17 +1382,17 @@ $(function() {
1379
1382
  <div class="ttc" id="aclassSVF_1_1CallICFGNode_html_aa11226a2e4fa6a7b1d78006cc8ca0518"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html#aa11226a2e4fa6a7b1d78006cc8ca0518">SVF::CallICFGNode::isIndirectCall</a></div><div class="ttdeci">bool isIndirectCall() const</div><div class="ttdoc">Return true if this is an indirect call.</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00440">ICFGNode.h:440</a></div></div>
1380
1383
  <div class="ttc" id="aBasicTypes_8h_html"><div class="ttname"><a href="BasicTypes_8h.html">BasicTypes.h</a></div></div>
1381
1384
  <div class="ttc" id="anamespaceSVF_html_a3bacb4f95c73e6d794901d01c6b65a83"><div class="ttname"><a href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">SVF::AllocaInst</a></div><div class="ttdeci">llvm::AllocaInst AllocaInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00148">BasicTypes.h:148</a></div></div>
1382
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ae59b0dc7f29dbd2018e819f77465f66e"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ae59b0dc7f29dbd2018e819f77465f66e">SVF::LLVMUtil::isSelectConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isSelectConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00274">LLVMUtil.h:274</a></div></div>
1385
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ae59b0dc7f29dbd2018e819f77465f66e"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ae59b0dc7f29dbd2018e819f77465f66e">SVF::LLVMUtil::isSelectConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isSelectConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00279">LLVMUtil.h:279</a></div></div>
1383
1386
  <div class="ttc" id="anamespaceSVF_html_ab7fac9d4a4839be445c89777e21bc307"><div class="ttname"><a href="namespaceSVF.html#ab7fac9d4a4839be445c89777e21bc307">SVF::SelectInst</a></div><div class="ttdeci">llvm::SelectInst SelectInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00172">BasicTypes.h:172</a></div></div>
1384
1387
  <div class="ttc" id="anamespaceSVF_html_a5d875a9d726bb9f68a17efa528dec0b4"><div class="ttname"><a href="namespaceSVF.html#a5d875a9d726bb9f68a17efa528dec0b4">SVF::CmpInst</a></div><div class="ttdeci">llvm::CmpInst CmpInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00157">BasicTypes.h:157</a></div></div>
1385
1388
  <div class="ttc" id="aclassSVF_1_1SVFStmt_html"><div class="ttname"><a href="classSVF_1_1SVFStmt.html">SVF::SVFStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00051">SVFStatements.h:51</a></div></div>
1386
1389
  <div class="ttc" id="aclassSVF_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#l00045">SVFVariables.h:45</a></div></div>
1387
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a151fd7fb2b2ebe72af7c417defbb4f4d"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">SVF::LLVMUtil::getDataLayout</a></div><div class="ttdeci">static DataLayout * getDataLayout(Module *mod)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00332">LLVMUtil.h:332</a></div></div>
1388
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_adfa4a4e6d13004d14137d9168bd32463"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#adfa4a4e6d13004d14137d9168bd32463">SVF::LLVMUtil::isInt2PtrConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isInt2PtrConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00244">LLVMUtil.h:244</a></div></div>
1390
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a151fd7fb2b2ebe72af7c417defbb4f4d"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a151fd7fb2b2ebe72af7c417defbb4f4d">SVF::LLVMUtil::getDataLayout</a></div><div class="ttdeci">static DataLayout * getDataLayout(Module *mod)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00337">LLVMUtil.h:337</a></div></div>
1391
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_adfa4a4e6d13004d14137d9168bd32463"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#adfa4a4e6d13004d14137d9168bd32463">SVF::LLVMUtil::isInt2PtrConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isInt2PtrConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00249">LLVMUtil.h:249</a></div></div>
1389
1392
  <div class="ttc" id="aSVFModule_8h_html"><div class="ttname"><a href="SVFModule_8h.html">SVFModule.h</a></div></div>
1390
1393
  <div class="ttc" id="anamespaceSVF_html_a962e9a9044a46fc4bd2367384f6e0827"><div class="ttname"><a href="namespaceSVF.html#a962e9a9044a46fc4bd2367384f6e0827">SVF::CastInst</a></div><div class="ttdeci">llvm::CastInst CastInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00156">BasicTypes.h:156</a></div></div>
1391
1394
  <div class="ttc" id="aclassSVF_1_1SymbolTableInfo_html_a3f9612f32c651220386beb0514f8fcff"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a3f9612f32c651220386beb0514f8fcff">SVF::SymbolTableInfo::objSyms</a></div><div class="ttdeci">ValueToIDMapTy &amp; objSyms()</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00265">SymbolTableInfo.h:265</a></div></div>
1392
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2834d135a2385efff783e6e22d2eff1f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2834d135a2385efff783e6e22d2eff1f">SVF::LLVMUtil::isPtr2IntConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isPtr2IntConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00254">LLVMUtil.h:254</a></div></div>
1395
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a2834d135a2385efff783e6e22d2eff1f"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a2834d135a2385efff783e6e22d2eff1f">SVF::LLVMUtil::isPtr2IntConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isPtr2IntConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00259">LLVMUtil.h:259</a></div></div>
1393
1396
  <div class="ttc" id="anamespaceSVF_html_ace1fd4c32134018e2f6d5da193524986"><div class="ttname"><a href="namespaceSVF.html#ace1fd4c32134018e2f6d5da193524986">SVF::ExtractValueInst</a></div><div class="ttdeci">llvm::ExtractValueInst ExtractValueInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00158">BasicTypes.h:158</a></div></div>
1394
1397
  <div class="ttc" id="anamespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00082">BasicTypes.h:82</a></div></div>
1395
1398
  <div class="ttc" id="aclassSVF_1_1GepStmt_html"><div class="ttname"><a href="classSVF_1_1GepStmt.html">SVF::GepStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00461">SVFStatements.h:461</a></div></div>
@@ -1412,13 +1415,14 @@ $(function() {
1412
1415
  <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a3d34fcdfc98add848a34fd5259c11eb2"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a3d34fcdfc98add848a34fd5259c11eb2">SVF::LLVMUtil::getDefFunForMultipleModule</a></div><div class="ttdeci">const Function * getDefFunForMultipleModule(const Function *fun)</div><div class="ttdoc">Get the definition of a function across multiple modules.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00057">LLVMUtil.h:57</a></div></div>
1413
1416
  <div class="ttc" id="anamespaceSVF_html_a56cb9d6d1e05f6c31bfe1a4045bc8b5f"><div class="ttname"><a href="namespaceSVF.html#a56cb9d6d1e05f6c31bfe1a4045bc8b5f">SVF::InvokeInst</a></div><div class="ttdeci">llvm::InvokeInst InvokeInst</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00161">BasicTypes.h:161</a></div></div>
1414
1417
  <div class="ttc" id="aclassllvm_1_1generic__bridge__gep__type__iterator_html"><div class="ttname"><a href="classllvm_1_1generic__bridge__gep__type__iterator.html">llvm::generic_bridge_gep_type_iterator</a></div><div class="ttdef"><b>Definition:</b> <a href="GEPTypeBridgeIterator_8h_source.html#l00017">GEPTypeBridgeIterator.h:17</a></div></div>
1415
- <div class="ttc" id="aclassSVF_1_1SVFValue_html_a4a0cfe3a8f37d33ffcdca3d66026dcc3"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">SVF::SVFValue::toString</a></div><div class="ttdeci">std::string toString() const</div><div class="ttdoc">Needs to be implemented by a SVF front end.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01291">LLVMUtil.cpp:1291</a></div></div>
1418
+ <div class="ttc" id="aclassSVF_1_1SVFValue_html_a4a0cfe3a8f37d33ffcdca3d66026dcc3"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a4a0cfe3a8f37d33ffcdca3d66026dcc3">SVF::SVFValue::toString</a></div><div class="ttdeci">std::string toString() const</div><div class="ttdoc">Needs to be implemented by a SVF front end.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l01385">LLVMUtil.cpp:1385</a></div></div>
1416
1419
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html">SVF::LLVMModuleSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00044">LLVMModule.h:44</a></div></div>
1417
1420
  <div class="ttc" id="aclassSVF_1_1FunExitICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunExitICFGNode.html">SVF::FunExitICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00324">ICFGNode.h:324</a></div></div>
1418
1421
  <div class="ttc" id="anamespaceSVF_1_1SVFUtil_html_a4550f2fb815882edfb666ac818792064"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a4550f2fb815882edfb666ac818792064">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(const std::string &amp;msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output.</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00099">SVFUtil.cpp:99</a></div></div>
1419
1422
  <div class="ttc" id="aclassSVF_1_1GenericGraph_html_ac213302cf5c7cdf3b66f7b18649d0fbc"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVF::GenericGraph&lt; SVFVar, SVFStmt &gt;::iterator</a></div><div class="ttdeci">IDToNodeMapTy::iterator iterator</div><div class="ttdoc">Node Iterators.</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00359">GenericGraph.h:359</a></div></div>
1420
1423
  <div class="ttc" id="aclassSVF_1_1LLVMLoopAnalysis_html_a17e4805c2db146430c58af35625a388d"><div class="ttname"><a href="classSVF_1_1LLVMLoopAnalysis.html#a17e4805c2db146430c58af35625a388d">SVF::LLVMLoopAnalysis::build</a></div><div class="ttdeci">virtual void build(ICFG *icfg)</div><div class="ttdoc">Start from here.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMLoopAnalysis_8cpp_source.html#l00088">LLVMLoopAnalysis.cpp:88</a></div></div>
1421
1424
  <div class="ttc" id="aclassSVF_1_1CHGraph_html"><div class="ttname"><a href="classSVF_1_1CHGraph.html">SVF::CHGraph</a></div><div class="ttdef"><b>Definition:</b> <a href="CHG_8h_source.html#l00215">CHG.h:215</a></div></div>
1425
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a4b5d4c7ca2c580ace7305bfed58ffce8"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a4b5d4c7ca2c580ace7305bfed58ffce8">SVF::LLVMUtil::getPointeeType</a></div><div class="ttdeci">Type * getPointeeType(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00246">LLVMUtil.cpp:246</a></div></div>
1422
1426
  <div class="ttc" id="aclassSVF_1_1ICFG_html"><div class="ttname"><a href="classSVF_1_1ICFG.html">SVF::ICFG</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00047">ICFG.h:47</a></div></div>
1423
1427
  <div class="ttc" id="anamespaceSVF_html_a911dbaab38cb42deb9c195c7f687853d"><div class="ttname"><a href="namespaceSVF.html#a911dbaab38cb42deb9c195c7f687853d">SVF::ConstantExpr</a></div><div class="ttdeci">llvm::ConstantExpr ConstantExpr</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00118">BasicTypes.h:118</a></div></div>
1424
1428
  <div class="ttc" id="aclassSVF_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>
@@ -1426,9 +1430,9 @@ $(function() {
1426
1430
  <div class="ttc" id="aclassSVF_1_1GenericNode_html_a2f5471985dfe62bc9ded830a693ab153"><div class="ttname"><a href="classSVF_1_1GenericNode.html#a2f5471985dfe62bc9ded830a693ab153">SVF::GenericNode::iterator</a></div><div class="ttdeci">GEdgeSetTy::iterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00154">GenericGraph.h:154</a></div></div>
1427
1431
  <div class="ttc" id="aclassSVF_1_1PAGBuilderFromFile_html_ac5a5058088d03fc9e0e8a0ed8b4367aa"><div class="ttname"><a href="classSVF_1_1PAGBuilderFromFile.html#ac5a5058088d03fc9e0e8a0ed8b4367aa">SVF::PAGBuilderFromFile::build</a></div><div class="ttdeci">SVFIR * build()</div><div class="ttdoc">Start building.</div><div class="ttdef"><b>Definition:</b> <a href="PAGBuilderFromFile_8cpp_source.html#l00059">PAGBuilderFromFile.cpp:59</a></div></div>
1428
1432
  <div class="ttc" id="aclassSVF_1_1LLVMModuleSet_html_afdd77bc1fca91f70b2ec362f1dacd392"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#afdd77bc1fca91f70b2ec362f1dacd392">SVF::LLVMModuleSet::getSVFValue</a></div><div class="ttdeci">SVFValue * getSVFValue(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l01238">LLVMModule.cpp:1238</a></div></div>
1429
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ab5fc50624b5fe83b676b14bec4b99685"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ab5fc50624b5fe83b676b14bec4b99685">SVF::LLVMUtil::isGepConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isGepConstantExpr(const Value *val)</div><div class="ttdoc">Return corresponding constant expression, otherwise return nullptr.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00234">LLVMUtil.h:234</a></div></div>
1433
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_ab5fc50624b5fe83b676b14bec4b99685"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#ab5fc50624b5fe83b676b14bec4b99685">SVF::LLVMUtil::isGepConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isGepConstantExpr(const Value *val)</div><div class="ttdoc">Return corresponding constant expression, otherwise return nullptr.</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00239">LLVMUtil.h:239</a></div></div>
1430
1434
  <div class="ttc" id="anamespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="svf-llvm_2tools_2MTA_2MTAResultValidator_8h_source.html#l00020">MTAResultValidator.h:20</a></div></div>
1431
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a215cc9fd716798bbb7f96f5b64e01349"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a215cc9fd716798bbb7f96f5b64e01349">SVF::LLVMUtil::isUnaryConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isUnaryConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00320">LLVMUtil.h:320</a></div></div>
1435
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_a215cc9fd716798bbb7f96f5b64e01349"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#a215cc9fd716798bbb7f96f5b64e01349">SVF::LLVMUtil::isUnaryConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isUnaryConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00325">LLVMUtil.h:325</a></div></div>
1432
1436
  <div class="ttc" id="aclassSVF_1_1SVFArgument_html"><div class="ttname"><a href="classSVF_1_1SVFArgument.html">SVF::SVFArgument</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00892">SVFValue.h:892</a></div></div>
1433
1437
  <div class="ttc" id="aclassSVF_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#l00148">SVFVariables.h:148</a></div></div>
1434
1438
  <div class="ttc" id="aclassSVF_1_1ICFGBuilder_html_ae66565ee32fff4ef5f0157e867333250"><div class="ttname"><a href="classSVF_1_1ICFGBuilder.html#ae66565ee32fff4ef5f0157e867333250">SVF::ICFGBuilder::build</a></div><div class="ttdeci">void build(SVFModule *svfModule)</div><div class="ttdef"><b>Definition:</b> <a href="ICFGBuilder_8cpp_source.html#l00042">ICFGBuilder.cpp:42</a></div></div>
@@ -1442,8 +1446,7 @@ $(function() {
1442
1446
  <div class="ttc" id="aclassSVF_1_1PAGBuilderFromFile_html"><div class="ttname"><a href="classSVF_1_1PAGBuilderFromFile.html">SVF::PAGBuilderFromFile</a></div><div class="ttdef"><b>Definition:</b> <a href="PAGBuilderFromFile_8h_source.html#l00041">PAGBuilderFromFile.h:41</a></div></div>
1443
1447
  <div class="ttc" id="aclassSVF_1_1SVFValue_html_a7effb0f37f486745e0cdc3ae5e9c732b"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a7effb0f37f486745e0cdc3ae5e9c732b">SVF::SVFValue::getSourceLoc</a></div><div class="ttdeci">virtual const std::string getSourceLoc() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFValue_8h_source.html#l00280">SVFValue.h:280</a></div></div>
1444
1448
  <div class="ttc" id="aSymbolTableBuilder_8h_html"><div class="ttname"><a href="SymbolTableBuilder_8h.html">SymbolTableBuilder.h</a></div></div>
1445
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aa0b3e34188f721ff7145e47cb607c79a"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aa0b3e34188f721ff7145e47cb607c79a">SVF::LLVMUtil::isCmpConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isCmpConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00298">LLVMUtil.h:298</a></div></div>
1446
- <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_abba4111230f6009bbf50518ee36a9870"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#abba4111230f6009bbf50518ee36a9870">SVF::LLVMUtil::getPtrElementType</a></div><div class="ttdeci">static Type * getPtrElementType(const PointerType *pty)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00119">LLVMUtil.h:119</a></div></div>
1449
+ <div class="ttc" id="anamespaceSVF_1_1LLVMUtil_html_aa0b3e34188f721ff7145e47cb607c79a"><div class="ttname"><a href="namespaceSVF_1_1LLVMUtil.html#aa0b3e34188f721ff7145e47cb607c79a">SVF::LLVMUtil::isCmpConstantExpr</a></div><div class="ttdeci">const ConstantExpr * isCmpConstantExpr(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00303">LLVMUtil.h:303</a></div></div>
1447
1450
  <div class="ttc" id="anamespaceSVF_html_a7332f8059ea95472dcc231de884a5768"><div class="ttname"><a href="namespaceSVF.html#a7332f8059ea95472dcc231de884a5768">SVF::ConstantData</a></div><div class="ttdeci">llvm::ConstantData ConstantData</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00114">BasicTypes.h:114</a></div></div>
1448
1451
  <div class="ttc" id="aclassSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00101">GenericGraph.h:101</a></div></div>
1449
1452
  <div class="ttc" id="anamespaceSVF_html_ad42bff8d0a7d60a085aa32d10f4955af"><div class="ttname"><a href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">SVF::u32_t</a></div><div class="ttdeci">unsigned u32_t</div><div class="ttdef"><b>Definition:</b> <a href="SVFType_8h_source.html#l00051">SVFType.h:51</a></div></div>