svf-tools 1.0.336 → 1.0.340

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 (209) hide show
  1. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +1 -1
  2. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +3 -3
  3. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +3 -3
  4. package/SVF-doxygen/html/html/Andersen_8h_source.html +2 -2
  5. package/SVF-doxygen/html/html/ConsG_8cpp_source.html +3 -3
  6. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +7 -7
  7. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +4 -4
  8. package/SVF-doxygen/html/html/DDAClient_8cpp_source.html +1 -1
  9. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +2 -2
  10. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +3 -3
  11. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +1 -1
  12. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +3 -3
  13. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +5 -5
  14. package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +1 -1
  15. package/SVF-doxygen/html/html/ICFGBuilder_8cpp_source.html +4 -2
  16. package/SVF-doxygen/html/html/ICFGBuilder_8h_source.html +1 -1
  17. package/SVF-doxygen/html/html/ICFG_8cpp_source.html +17 -17
  18. package/SVF-doxygen/html/html/ICFG_8h_source.html +38 -37
  19. package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +3 -3
  20. package/SVF-doxygen/html/html/MTA_8cpp_source.html +2 -2
  21. package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +1 -1
  22. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  23. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +2 -2
  24. package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +9 -9
  25. package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +4 -4
  26. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +22 -25
  27. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +42 -43
  28. package/SVF-doxygen/html/html/SVFGBuilder_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp.html +1 -0
  30. package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +6 -5
  31. package/SVF-doxygen/html/html/SVFIRBuilder_8h_source.html +40 -40
  32. package/SVF-doxygen/html/html/SVFIR_8cpp_source.html +12 -12
  33. package/SVF-doxygen/html/html/SVFIR_8h_source.html +14 -14
  34. package/SVF-doxygen/html/html/SVFStatements_8cpp_source.html +22 -21
  35. package/SVF-doxygen/html/html/SVFStatements_8h_source.html +47 -47
  36. package/SVF-doxygen/html/html/SVFVariables_8h_source.html +91 -87
  37. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +5 -5
  38. package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +1 -1
  39. package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +5 -5
  40. package/SVF-doxygen/html/html/SymbolTableInfo_8h_source.html +5 -5
  41. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
  42. package/SVF-doxygen/html/html/TypeBasedHeapCloning_8cpp_source.html +11 -11
  43. package/SVF-doxygen/html/html/VFGNode_8h_source.html +4 -4
  44. package/SVF-doxygen/html/html/VFG_8cpp_source.html +9 -9
  45. package/SVF-doxygen/html/html/VFG_8h_source.html +8 -8
  46. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  47. package/SVF-doxygen/html/html/WPAPass_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/html/classSVF_1_1Andersen-members.html +187 -188
  49. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +7 -10
  50. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase-members.html +160 -161
  51. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +4 -7
  52. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD-members.html +199 -200
  53. package/SVF-doxygen/html/html/classSVF_1_1AndersenHCD.html +0 -3
  54. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD-members.html +202 -203
  55. package/SVF-doxygen/html/html/classSVF_1_1AndersenHLCD.html +0 -3
  56. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD-members.html +195 -196
  57. package/SVF-doxygen/html/html/classSVF_1_1AndersenLCD.html +0 -3
  58. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD-members.html +196 -197
  59. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +0 -3
  60. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +205 -206
  61. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -4
  62. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +3 -3
  63. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff-members.html +193 -194
  64. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +0 -3
  65. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl-members.html +116 -117
  66. package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +12 -15
  67. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPStmt.html +18 -18
  68. package/SVF-doxygen/html/html/classSVF_1_1BranchStmt.html +32 -32
  69. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +4 -4
  70. package/SVF-doxygen/html/html/classSVF_1_1CallPE.html +2 -2
  71. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar-members.html +1 -1
  72. package/SVF-doxygen/html/html/classSVF_1_1CloneDummyObjVar.html +13 -11
  73. package/SVF-doxygen/html/html/classSVF_1_1CloneFIObjVar.html +12 -12
  74. package/SVF-doxygen/html/html/classSVF_1_1CloneGepObjVar.html +12 -12
  75. package/SVF-doxygen/html/html/classSVF_1_1CmpStmt.html +19 -19
  76. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl-members.html +104 -105
  77. package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +5 -8
  78. package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +3 -3
  79. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA-members.html +182 -183
  80. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +12 -15
  81. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +5 -5
  82. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +3 -3
  83. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar-members.html +2 -2
  84. package/SVF-doxygen/html/html/classSVF_1_1DummyObjVar.html +46 -14
  85. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar-members.html +2 -2
  86. package/SVF-doxygen/html/html/classSVF_1_1DummyValVar.html +45 -14
  87. package/SVF-doxygen/html/html/classSVF_1_1FIObjVar.html +14 -14
  88. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA-members.html +219 -220
  89. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +0 -3
  90. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA-members.html +180 -181
  91. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +9 -12
  92. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive-members.html +212 -213
  93. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +17 -20
  94. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +2 -2
  95. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC-members.html +244 -245
  96. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +7 -10
  97. package/SVF-doxygen/html/html/classSVF_1_1FunptrDDAClient.html +1 -1
  98. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.html +1 -3
  99. package/SVF-doxygen/html/html/classSVF_1_1GenericNode.png +0 -0
  100. package/SVF-doxygen/html/html/classSVF_1_1GepObjVar.html +32 -32
  101. package/SVF-doxygen/html/html/classSVF_1_1GepStmt.html +2 -2
  102. package/SVF-doxygen/html/html/classSVF_1_1GepValVar.html +27 -27
  103. package/SVF-doxygen/html/html/classSVF_1_1ICFG-members.html +27 -26
  104. package/SVF-doxygen/html/html/classSVF_1_1ICFG.html +183 -116
  105. package/SVF-doxygen/html/html/classSVF_1_1ICFGBuilder.html +9 -5
  106. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter-members.html +9 -9
  107. package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +26 -25
  108. package/SVF-doxygen/html/html/classSVF_1_1LoadStmt.html +2 -2
  109. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +1 -1
  110. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  111. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +1 -1
  112. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +2 -2
  113. package/SVF-doxygen/html/html/classSVF_1_1MultiOpndStmt.html +4 -4
  114. package/SVF-doxygen/html/html/classSVF_1_1NormalGepStmt.html +2 -2
  115. package/SVF-doxygen/html/html/classSVF_1_1ObjVar.html +18 -18
  116. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +2 -2
  117. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt-members.html +37 -36
  118. package/SVF-doxygen/html/html/classSVF_1_1PhiStmt.html +27 -3
  119. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis-members.html +78 -79
  120. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +106 -146
  121. package/SVF-doxygen/html/html/classSVF_1_1RetPE.html +2 -2
  122. package/SVF-doxygen/html/html/classSVF_1_1RetPN-members.html +75 -73
  123. package/SVF-doxygen/html/html/classSVF_1_1RetPN.html +60 -16
  124. package/SVF-doxygen/html/html/classSVF_1_1RetPN.png +0 -0
  125. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +1 -1
  126. package/SVF-doxygen/html/html/classSVF_1_1SVFIR.html +14 -14
  127. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +122 -115
  128. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.html +3 -3
  129. package/SVF-doxygen/html/html/classSVF_1_1SVFVar.png +0 -0
  130. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +5 -5
  131. package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +1 -1
  132. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard-members.html +171 -172
  133. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +0 -3
  134. package/SVF-doxygen/html/html/classSVF_1_1StoreStmt.html +2 -2
  135. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +5 -5
  136. package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +18 -18
  137. package/SVF-doxygen/html/html/classSVF_1_1TDForkPE.html +11 -11
  138. package/SVF-doxygen/html/html/classSVF_1_1TDJoinPE.html +11 -11
  139. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
  140. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis-members.html +161 -162
  141. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +3 -6
  142. package/SVF-doxygen/html/html/classSVF_1_1TypeBasedHeapCloning.html +17 -17
  143. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPStmt.html +25 -25
  144. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +11 -11
  145. package/SVF-doxygen/html/html/classSVF_1_1ValVar.html +17 -11
  146. package/SVF-doxygen/html/html/classSVF_1_1ValVar.png +0 -0
  147. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN-members.html +74 -72
  148. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.html +60 -16
  149. package/SVF-doxygen/html/html/classSVF_1_1VarArgPN.png +0 -0
  150. package/SVF-doxygen/html/html/classSVF_1_1VariantGepStmt.html +2 -2
  151. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive-members.html +254 -255
  152. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +2 -5
  153. package/SVF-doxygen/html/html/classSVF_1_1WPAPass.html +1 -1
  154. package/SVF-doxygen/html/html/functions_c.html +12 -12
  155. package/SVF-doxygen/html/html/functions_d.html +0 -3
  156. package/SVF-doxygen/html/html/functions_func_c.html +19 -19
  157. package/SVF-doxygen/html/html/functions_func_d.html +0 -3
  158. package/SVF-doxygen/html/html/functions_func_i.html +13 -10
  159. package/SVF-doxygen/html/html/functions_i.html +10 -6
  160. package/SVF-doxygen/html/html/functions_l.html +6 -6
  161. package/SVF-doxygen/html/html/functions_n.html +3 -3
  162. package/SVF-doxygen/html/html/functions_p.html +9 -9
  163. package/SVF-doxygen/html/html/functions_r.html +1 -1
  164. package/SVF-doxygen/html/html/functions_rela.html +3 -0
  165. package/SVF-doxygen/html/html/functions_s.html +14 -12
  166. package/SVF-doxygen/html/html/functions_t.html +7 -5
  167. package/SVF-doxygen/html/html/functions_v.html +6 -6
  168. package/SVF-doxygen/html/html/hierarchy.html +5 -5
  169. package/SVF-doxygen/html/html/search/all_10.js +7 -7
  170. package/SVF-doxygen/html/html/search/all_12.js +1 -1
  171. package/SVF-doxygen/html/html/search/all_13.js +10 -10
  172. package/SVF-doxygen/html/html/search/all_14.js +3 -3
  173. package/SVF-doxygen/html/html/search/all_15.js +1 -1
  174. package/SVF-doxygen/html/html/search/all_16.js +3 -3
  175. package/SVF-doxygen/html/html/search/all_3.js +1 -1
  176. package/SVF-doxygen/html/html/search/all_4.js +0 -1
  177. package/SVF-doxygen/html/html/search/all_9.js +2 -1
  178. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  179. package/SVF-doxygen/html/html/search/all_d.js +3 -3
  180. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  181. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  182. package/SVF-doxygen/html/html/search/functions_2.js +1 -1
  183. package/SVF-doxygen/html/html/search/functions_3.js +0 -1
  184. package/SVF-doxygen/html/html/search/functions_8.js +1 -0
  185. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  186. package/SVF-doxygen/html/html/search/related_4.js +1 -0
  187. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  188. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  189. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  190. package/SVF-doxygen/html/html/search/variables_e.js +1 -1
  191. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01ICFG_01_5_01_4.html +1 -1
  192. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01Inverse_3_01SVF_1_1ICFGNode_01_5_01_4_01_4.html +1 -1
  193. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFGNode_01_5_01_4.html +1 -1
  194. package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1ICFG_01_5_01_4.html +2 -2
  195. package/SVF-doxygen/html/html/svf-ex_8cpp.html +1 -1
  196. package/SVF-doxygen/html/html/svf-ex_8cpp_source.html +1 -1
  197. package/include/Graphs/ICFG.h +5 -3
  198. package/include/MemoryModel/PointerAnalysis.h +0 -3
  199. package/include/MemoryModel/SVFStatements.h +5 -0
  200. package/include/MemoryModel/SVFVariables.h +25 -4
  201. package/include/MemoryModel/SymbolTableInfo.h +2 -2
  202. package/lib/Graphs/ICFG.cpp +2 -2
  203. package/lib/MSSA/MemSSA.cpp +1 -1
  204. package/lib/MemoryModel/PointerAnalysis.cpp +1 -21
  205. package/lib/MemoryModel/SVFStatements.cpp +10 -1
  206. package/lib/SVF-FE/ICFGBuilder.cpp +16 -2
  207. package/lib/SVF-FE/SVFIRBuilder.cpp +13 -0
  208. package/lib/SVF-FE/SymbolTableBuilder.cpp +8 -8
  209. package/package.json +1 -1
@@ -408,7 +408,7 @@ Private Attributes</h2></td></tr>
408
408
  <p>Add Address edge. </p>
409
409
 
410
410
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00289">289</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
411
- <div class="fragment"><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; AddrStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a8436a7eede7b5ff5d9b80a0c951ea729">addAddrStmt</a>(src, dst);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
411
+ <div class="fragment"><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; AddrStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a8436a7eede7b5ff5d9b80a0c951ea729">addAddrStmt</a>(src, dst);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
412
412
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
413
413
  <div class="ttc" id="classSVF_1_1SVFIR_html_a8436a7eede7b5ff5d9b80a0c951ea729"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a8436a7eede7b5ff5d9b80a0c951ea729">SVF::SVFIR::addAddrStmt</a></div><div class="ttdeci">AddrStmt * addAddrStmt(NodeID src, NodeID dst)</div><div class="ttdoc">Add an edge into SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00051">SVFIR.cpp:51</a></div></div>
414
414
  </div><!-- fragment -->
@@ -463,7 +463,7 @@ Private Attributes</h2></td></tr>
463
463
  <p>Add Copy edge. </p>
464
464
 
465
465
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00317">317</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
466
- <div class="fragment"><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; BinaryOPStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a955a2f93cf9eef857e40f19bc24edb2f">addBinaryOPStmt</a>(op1, op2, dst, opcode);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
466
+ <div class="fragment"><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; {</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; BinaryOPStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a955a2f93cf9eef857e40f19bc24edb2f">addBinaryOPStmt</a>(op1, op2, dst, opcode);</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
467
467
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
468
468
  <div class="ttc" id="classSVF_1_1SVFIR_html_a955a2f93cf9eef857e40f19bc24edb2f"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a955a2f93cf9eef857e40f19bc24edb2f">SVF::SVFIR::addBinaryOPStmt</a></div><div class="ttdeci">BinaryOPStmt * addBinaryOPStmt(NodeID op1, NodeID op2, NodeID dst, u32_t opcode)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00129">SVFIR.cpp:129</a></div></div>
469
469
  </div><!-- fragment -->
@@ -496,7 +496,7 @@ Private Attributes</h2></td></tr>
496
496
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00281">281</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
497
497
  <div class="fragment"><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; {</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <a class="code" href="namespaceSVF.html#ae6ead95a66f69e1e4cfa1159f868a152">PAGEdge</a> *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a33df5f5d9b7de3846cf973135b04f513">addBlackHoleAddrStmt</a>(node);</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a33df5f5d9b7de3846cf973135b04f513"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a33df5f5d9b7de3846cf973135b04f513">SVF::SVFIR::addBlackHoleAddrStmt</a></div><div class="ttdeci">SVFStmt * addBlackHoleAddrStmt(NodeID node)</div><div class="ttdoc">Set a pointer points-to black hole (e.g. int2ptr) </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00258">SVFIR.cpp:258</a></div></div>
498
498
  <div class="ttc" id="namespaceSVF_html_ae6ead95a66f69e1e4cfa1159f868a152"><div class="ttname"><a href="namespaceSVF.html#ae6ead95a66f69e1e4cfa1159f868a152">SVF::PAGEdge</a></div><div class="ttdeci">SVFStmt PAGEdge</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00043">IRGraph.h:43</a></div></div>
499
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
499
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
500
500
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
501
501
  </div><!-- fragment -->
502
502
  </div>
@@ -544,7 +544,7 @@ Private Attributes</h2></td></tr>
544
544
  <p>Add Branch statement. </p>
545
545
 
546
546
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00331">331</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
547
- <div class="fragment"><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; BranchStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4f0d318deff3b97a4bd5e7b9d53e42fd">addBranchStmt</a>(br, cond, succs);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
547
+ <div class="fragment"><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; BranchStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4f0d318deff3b97a4bd5e7b9d53e42fd">addBranchStmt</a>(br, cond, succs);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
548
548
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
549
549
  <div class="ttc" id="classSVF_1_1SVFIR_html_a4f0d318deff3b97a4bd5e7b9d53e42fd"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a4f0d318deff3b97a4bd5e7b9d53e42fd">SVF::SVFIR::addBranchStmt</a></div><div class="ttdeci">BranchStmt * addBranchStmt(NodeID br, NodeID cond, std::vector&lt; const ICFGNode *&gt; succs)</div><div class="ttdoc">Add BranchStmt. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00167">SVFIR.cpp:167</a></div></div>
550
550
  </div><!-- fragment -->
@@ -594,7 +594,7 @@ Private Attributes</h2></td></tr>
594
594
 
595
595
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00356">356</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
596
596
  <div class="fragment"><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; {</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; CallPE *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a9e99fcf29016ef401f53491ec54a4053">addCallPE</a>(src, dst, cs);</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a9e99fcf29016ef401f53491ec54a4053"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a9e99fcf29016ef401f53491ec54a4053">SVF::SVFIR::addCallPE</a></div><div class="ttdeci">CallPE * addCallPE(NodeID src, NodeID dst, const CallBlockNode *cs)</div><div class="ttdoc">Add Call edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00222">SVFIR.cpp:222</a></div></div>
597
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
597
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
598
598
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
599
599
  </div><!-- fragment -->
600
600
  </div>
@@ -649,7 +649,7 @@ Private Attributes</h2></td></tr>
649
649
 
650
650
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00310">310</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
651
651
  <div class="fragment"><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; CmpStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a7eb14738f0cf08cc8b5c623c953db4ba">addCmpStmt</a>(op1, op2, dst, predict);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a7eb14738f0cf08cc8b5c623c953db4ba"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a7eb14738f0cf08cc8b5c623c953db4ba">SVF::SVFIR::addCmpStmt</a></div><div class="ttdeci">CmpStmt * addCmpStmt(NodeID op1, NodeID op2, NodeID dst, u32_t predict)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00108">SVFIR.cpp:108</a></div></div>
652
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
652
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
653
653
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
654
654
  </div><!-- fragment -->
655
655
  </div>
@@ -688,19 +688,19 @@ Private Attributes</h2></td></tr>
688
688
  <p>Add the load/store constraints and temp. nodes for the complex constraint *D = *S (where D/S may point to structs). </p>
689
689
  <p>If sz is 0, we will add edges for all fields. </p>
690
690
 
691
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01014">1014</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
692
- <div class="fragment"><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;{</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(D &amp;&amp; S);</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(D), vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(S);</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keywordflow">if</span>(!vnD || !vnS)</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160; std::vector&lt;LocationSet&gt; fields;</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160; <span class="comment">//Get the max possible size of the copy, unless it was provided.</span></div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160; std::vector&lt;LocationSet&gt; srcFields;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160; std::vector&lt;LocationSet&gt; dstFields;</div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *stype = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(S, srcFields);</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *dtype = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(D, dstFields);</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160; <span class="keywordflow">if</span>(srcFields.size() &gt; dstFields.size())</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; fields = dstFields;</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; fields = srcFields;</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; <span class="keywordflow">if</span> (sz == 0)</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160; sz = fields.size();</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() &gt;= sz &amp;&amp; <span class="stringliteral">&quot;the number of flattened fields is smaller than size&quot;</span>);</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; <span class="keywordflow">if</span> (fields.size() == 1 &amp;&amp; (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">isConstantData</a>(D) || <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">isConstantData</a>(S))) {</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(vnD,dummy);</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy,vnS);</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; }</div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160; <span class="comment">//For each field (i), add (Ti = *S + i) and (*D + i = Ti).</span></div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> index = 0; index &lt; sz; index++)</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; {</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dField = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(D,fields[index],dtype,index);</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> sField = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(S,fields[index],stype,index);</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(sField,dummy);</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy,dField);</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; }</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_aa7e98cd2fd599aedefa4c2e6fb659da0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">SVF::SVFIR::addDummyValNode</a></div><div class="ttdeci">NodeID addDummyValNode()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00461">SVFIR.h:461</a></div></div>
691
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01027">1027</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
692
+ <div class="fragment"><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;{</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(D &amp;&amp; S);</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(D), vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(S);</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160; <span class="keywordflow">if</span>(!vnD || !vnS)</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160; std::vector&lt;LocationSet&gt; fields;</div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160; <span class="comment">//Get the max possible size of the copy, unless it was provided.</span></div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160; std::vector&lt;LocationSet&gt; srcFields;</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160; std::vector&lt;LocationSet&gt; dstFields;</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *stype = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(S, srcFields);</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *dtype = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(D, dstFields);</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160; <span class="keywordflow">if</span>(srcFields.size() &gt; dstFields.size())</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160; fields = dstFields;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160; fields = srcFields;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160; <span class="keywordflow">if</span> (sz == 0)</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160; sz = fields.size();</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() &gt;= sz &amp;&amp; <span class="stringliteral">&quot;the number of flattened fields is smaller than size&quot;</span>);</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160; <span class="keywordflow">if</span> (fields.size() == 1 &amp;&amp; (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">isConstantData</a>(D) || <a class="code" href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">isConstantData</a>(S))) {</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(vnD,dummy);</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy,vnS);</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160; }</div><div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>&#160;</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160; <span class="comment">//For each field (i), add (Ti = *S + i) and (*D + i = Ti).</span></div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> index = 0; index &lt; sz; index++)</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160; {</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dField = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(D,fields[index],dtype,index);</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> sField = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(S,fields[index],stype,index);</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(sField,dummy);</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy,dField);</div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; }</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_aa7e98cd2fd599aedefa4c2e6fb659da0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">SVF::SVFIR::addDummyValNode</a></div><div class="ttdeci">NodeID addDummyValNode()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00461">SVFIR.h:461</a></div></div>
693
693
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
694
694
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
695
695
  <div class="ttc" id="namespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00075">BasicTypes.h:75</a></div></div>
696
696
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
697
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ad0b30ca8fc2939bb7360a3ff08727d58"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">SVF::SVFIRBuilder::getGepValVar</a></div><div class="ttdeci">NodeID getGepValVar(const Value *val, const LocationSet &amp;ls, const Type *baseType, u32_t fieldidx)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01509">SVFIRBuilder.cpp:1509</a></div></div>
697
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ad0b30ca8fc2939bb7360a3ff08727d58"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">SVF::SVFIRBuilder::getGepValVar</a></div><div class="ttdeci">NodeID getGepValVar(const Value *val, const LocationSet &amp;ls, const Type *baseType, u32_t fieldidx)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01522">SVFIRBuilder.cpp:1522</a></div></div>
698
698
  <div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
699
699
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a9fdcddcdcf14a90cc80d42de0d5ad189"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">SVF::SVFIRBuilder::addLoadEdge</a></div><div class="ttdeci">LoadStmt * addLoadEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Load edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00337">SVFIRBuilder.h:337</a></div></div>
700
700
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ac5795471aff6ccb07a84ffe1277ff2d4"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">SVF::SVFIRBuilder::addStoreEdge</a></div><div class="ttdeci">StoreStmt * addStoreEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Store edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00344">SVFIRBuilder.h:344</a></div></div>
701
701
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a9e85d445e8b7b205134acd3874bba388"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a9e85d445e8b7b205134acd3874bba388">SVF::SVFUtil::isConstantData</a></div><div class="ttdeci">bool isConstantData(const Value *val)</div><div class="ttdoc">Return true if the value refers to constant data, e.g., i32 0. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00392">LLVMUtil.h:392</a></div></div>
702
702
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
703
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ac03c4203e4b32a68dd548af64764fe2c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">SVF::SVFIRBuilder::getBaseTypeAndFlattenedFields</a></div><div class="ttdeci">const Type * getBaseTypeAndFlattenedFields(const Value *V, std::vector&lt; LocationSet &gt; &amp;fields)</div><div class="ttdoc">Get the base type and max offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00960">SVFIRBuilder.cpp:960</a></div></div>
703
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ac03c4203e4b32a68dd548af64764fe2c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">SVF::SVFIRBuilder::getBaseTypeAndFlattenedFields</a></div><div class="ttdeci">const Type * getBaseTypeAndFlattenedFields(const Value *V, std::vector&lt; LocationSet &gt; &amp;fields)</div><div class="ttdoc">Get the base type and max offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00973">SVFIRBuilder.cpp:973</a></div></div>
704
704
  </div><!-- fragment -->
705
705
  </div>
706
706
  </div>
@@ -741,7 +741,7 @@ Private Attributes</h2></td></tr>
741
741
  <p>Add Copy edge. </p>
742
742
 
743
743
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00296">296</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
744
- <div class="fragment"><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; CopyStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f">addCopyStmt</a>(src, dst);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
744
+ <div class="fragment"><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; CopyStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f">addCopyStmt</a>(src, dst);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
745
745
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
746
746
  <div class="ttc" id="classSVF_1_1SVFIR_html_aa54b93ebf36944b548aaa74dbf8a144f"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa54b93ebf36944b548aaa74dbf8a144f">SVF::SVFIR::addCopyStmt</a></div><div class="ttdeci">CopyStmt * addCopyStmt(NodeID src, NodeID dst)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00069">SVFIR.cpp:69</a></div></div>
747
747
  </div><!-- fragment -->
@@ -843,7 +843,7 @@ Private Attributes</h2></td></tr>
843
843
 
844
844
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00370">370</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
845
845
  <div class="fragment"><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; {</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; GepStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a9eeab593b2f161ad268d27a7031aedbe">addGepStmt</a>(src, dst, ls, constGep);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a9eeab593b2f161ad268d27a7031aedbe"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a9eeab593b2f161ad268d27a7031aedbe">SVF::SVFIR::addGepStmt</a></div><div class="ttdeci">GepStmt * addGepStmt(NodeID src, NodeID dst, const LocationSet &amp;ls, bool constGep)</div><div class="ttdoc">Add Gep edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00308">SVFIR.cpp:308</a></div></div>
846
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
846
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
847
847
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
848
848
  </div><!-- fragment -->
849
849
  </div>
@@ -932,7 +932,7 @@ Private Attributes</h2></td></tr>
932
932
 
933
933
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00337">337</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
934
934
  <div class="fragment"><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; {</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; LoadStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a3837804b2622baf7e6991aa993286e9e">addLoadStmt</a>(src, dst);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a3837804b2622baf7e6991aa993286e9e"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a3837804b2622baf7e6991aa993286e9e">SVF::SVFIR::addLoadStmt</a></div><div class="ttdeci">LoadStmt * addLoadStmt(NodeID src, NodeID dst)</div><div class="ttdoc">Add Load edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00185">SVFIR.cpp:185</a></div></div>
935
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
935
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
936
936
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
937
937
  </div><!-- fragment -->
938
938
  </div>
@@ -981,7 +981,7 @@ Private Attributes</h2></td></tr>
981
981
 
982
982
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00377">377</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
983
983
  <div class="fragment"><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; NormalGepStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2a851ff7011e3bd71c36be5c7198a1f4">addNormalGepStmt</a>(src, dst, ls);</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a2a851ff7011e3bd71c36be5c7198a1f4"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2a851ff7011e3bd71c36be5c7198a1f4">SVF::SVFIR::addNormalGepStmt</a></div><div class="ttdeci">NormalGepStmt * addNormalGepStmt(NodeID src, NodeID dst, const LocationSet &amp;ls)</div><div class="ttdoc">Add Offset(Gep) edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00327">SVFIR.cpp:327</a></div></div>
984
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
984
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
985
985
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
986
986
  </div><!-- fragment -->
987
987
  </div>
@@ -1065,7 +1065,7 @@ Private Attributes</h2></td></tr>
1065
1065
 
1066
1066
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00303">303</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
1067
1067
  <div class="fragment"><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; {</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; PhiStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#af6b4b35214d0e526dee13dadbb6326d0">addPhiStmt</a>(res,opnd);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIR_html_af6b4b35214d0e526dee13dadbb6326d0"><div class="ttname"><a href="classSVF_1_1SVFIR.html#af6b4b35214d0e526dee13dadbb6326d0">SVF::SVFIR::addPhiStmt</a></div><div class="ttdeci">PhiStmt * addPhiStmt(NodeID res, NodeID opnd)</div><div class="ttdoc">Add phi node information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00087">SVFIR.cpp:87</a></div></div>
1068
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
1068
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
1069
1069
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
1070
1070
  </div><!-- fragment -->
1071
1071
  </div>
@@ -1113,7 +1113,7 @@ Private Attributes</h2></td></tr>
1113
1113
  <p>Add Return edge. </p>
1114
1114
 
1115
1115
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00363">363</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
1116
- <div class="fragment"><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; RetPE *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a12fef4ec0537b26947eb0ab10799f29f">addRetPE</a>(src, dst, cs);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
1116
+ <div class="fragment"><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; {</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; RetPE *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a12fef4ec0537b26947eb0ab10799f29f">addRetPE</a>(src, dst, cs);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
1117
1117
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
1118
1118
  <div class="ttc" id="classSVF_1_1SVFIR_html_a12fef4ec0537b26947eb0ab10799f29f"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a12fef4ec0537b26947eb0ab10799f29f">SVF::SVFIR::addRetPE</a></div><div class="ttdeci">RetPE * addRetPE(NodeID src, NodeID dst, const CallBlockNode *cs)</div><div class="ttdoc">Add Return edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00240">SVFIR.cpp:240</a></div></div>
1119
1119
  </div><!-- fragment -->
@@ -1160,7 +1160,7 @@ Private Attributes</h2></td></tr>
1160
1160
  <div class="ttc" id="classSVF_1_1ICFG_html_a485fcd76a8a864c9b686e68a3ca66dfc"><div class="ttname"><a href="classSVF_1_1ICFG.html#a485fcd76a8a864c9b686e68a3ca66dfc">SVF::ICFG::getIntraBlockNode</a></div><div class="ttdeci">IntraBlockNode * getIntraBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00221">ICFG.cpp:221</a></div></div>
1161
1161
  <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
1162
1162
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5afb07f2cf8d76f8db334250e0c96cc0"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">SVF::SVFIRBuilder::curVal</a></div><div class="ttdeci">const Value * curVal</div><div class="ttdoc">Current Value during SVFIR construction when visiting the module. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00051">SVFIRBuilder.h:51</a></div></div>
1163
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
1163
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
1164
1164
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
1165
1165
  <div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
1166
1166
  </div><!-- fragment -->
@@ -1210,7 +1210,7 @@ Private Attributes</h2></td></tr>
1210
1210
 
1211
1211
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00391">391</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
1212
1212
  <div class="fragment"><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; TDForkPE *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a787dc5aff6f7a7d8ec3a7a23d9f40a7e">addThreadForkPE</a>(src, dst, cs);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a787dc5aff6f7a7d8ec3a7a23d9f40a7e"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a787dc5aff6f7a7d8ec3a7a23d9f40a7e">SVF::SVFIR::addThreadForkPE</a></div><div class="ttdeci">TDForkPE * addThreadForkPE(NodeID src, NodeID dst, const CallBlockNode *cs)</div><div class="ttdoc">Add Thread fork edge for parameter passing. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00269">SVFIR.cpp:269</a></div></div>
1213
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
1213
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
1214
1214
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
1215
1215
  </div><!-- fragment -->
1216
1216
  </div>
@@ -1258,7 +1258,7 @@ Private Attributes</h2></td></tr>
1258
1258
  <p>Add Thread join edge for parameter passing. </p>
1259
1259
 
1260
1260
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00398">398</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
1261
- <div class="fragment"><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; TDJoinPE *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4f64a1a266838ac72b66cca138ec57ca">addThreadJoinPE</a>(src, dst, cs);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
1261
+ <div class="fragment"><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; TDJoinPE *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a4f64a1a266838ac72b66cca138ec57ca">addThreadJoinPE</a>(src, dst, cs);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
1262
1262
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
1263
1263
  <div class="ttc" id="classSVF_1_1SVFIR_html_a4f64a1a266838ac72b66cca138ec57ca"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a4f64a1a266838ac72b66cca138ec57ca">SVF::SVFIR::addThreadJoinPE</a></div><div class="ttdeci">TDJoinPE * addThreadJoinPE(NodeID src, NodeID dst, const CallBlockNode *cs)</div><div class="ttdoc">Add Thread join edge for parameter passing. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00287">SVFIR.cpp:287</a></div></div>
1264
1264
  </div><!-- fragment -->
@@ -1308,7 +1308,7 @@ Private Attributes</h2></td></tr>
1308
1308
 
1309
1309
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00324">324</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
1310
1310
  <div class="fragment"><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; UnaryOPStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a8abc436992aa3b6b636084ff5f9a8ef2">addUnaryOPStmt</a>(src, dst, opcode);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIR_html_a8abc436992aa3b6b636084ff5f9a8ef2"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a8abc436992aa3b6b636084ff5f9a8ef2">SVF::SVFIR::addUnaryOPStmt</a></div><div class="ttdeci">UnaryOPStmt * addUnaryOPStmt(NodeID src, NodeID dst, u32_t opcode)</div><div class="ttdoc">Add Unary edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00149">SVFIR.cpp:149</a></div></div>
1311
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
1311
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
1312
1312
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
1313
1313
  </div><!-- fragment -->
1314
1314
  </div>
@@ -1357,7 +1357,7 @@ Private Attributes</h2></td></tr>
1357
1357
 
1358
1358
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00384">384</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
1359
1359
  <div class="fragment"><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; {</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; VariantGepStmt *edge = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#abbd4b6430444a91e991636abf189c00b">addVariantGepStmt</a>(src, dst, ls);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">setCurrentBBAndValueForPAGEdge</a>(edge);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">return</span> edge;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIR_html_abbd4b6430444a91e991636abf189c00b"><div class="ttname"><a href="classSVF_1_1SVFIR.html#abbd4b6430444a91e991636abf189c00b">SVF::SVFIR::addVariantGepStmt</a></div><div class="ttdeci">VariantGepStmt * addVariantGepStmt(NodeID src, NodeID dst, const LocationSet &amp;ls)</div><div class="ttdoc">Add Variant(Gep) edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00347">SVFIR.cpp:347</a></div></div>
1360
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01556">SVFIRBuilder.cpp:1556</a></div></div>
1360
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_abc394c99f0905c958a230412134eda01"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#abc394c99f0905c958a230412134eda01">SVF::SVFIRBuilder::setCurrentBBAndValueForPAGEdge</a></div><div class="ttdeci">void setCurrentBBAndValueForPAGEdge(PAGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01569">SVFIRBuilder.cpp:1569</a></div></div>
1361
1361
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
1362
1362
  </div><!-- fragment -->
1363
1363
  </div>
@@ -1395,14 +1395,16 @@ Private Attributes</h2></td></tr>
1395
1395
  <p>Return <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> node will not be created for function which can not reach the return instruction due to call to <a class="el" href="util_8h.html#a23c00958edf66c39625a0d535dee57b7">abort()</a>, <a class="el" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit()</a>, etc. In 176.gcc of SPEC 2000, function build_objc_string() from c-lang.c shows an example when fun.doesNotReturn() evaluates to TRUE because of <a class="el" href="util_8h.html#a23c00958edf66c39625a0d535dee57b7">abort()</a>.</p>
1396
1396
  <p>To be noted, we do not record arguments which are in declared function without body TODO: what about external functions with <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> imported by commandline? </p>
1397
1397
 
1398
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00046">46</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1399
- <div class="fragment"><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="comment">// We read SVFIR from a user-defined txt instead of parsing SVFIR from LLVM IR</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <a class="code" href="classSVF_1_1PAGBuilderFromFile.html">PAGBuilderFromFile</a> fileBuilder(<a class="code" href="classSVF_1_1SVFModule.html#a54c2bc2cb7cda0d74f4cadc676461b60">SVFModule::pagFileName</a>());</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <span class="keywordflow">return</span> fileBuilder.build();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; }</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">// If the SVFIR has been built before, then we return the unique SVFIR of the program</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a0a18bca50f7cd3a1882754f19303d257">getNodeNumAfterPAGBuild</a>() &gt; 1)</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aa67bbd366b93fb1ec7a540c83566c977">svfMod</a> = svfModule;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#af4b18e8e1fdfb117cb5dd1a81cea4b71">initialiseNodes</a>();</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8">visitGlobal</a>(svfModule);</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#a709371b13dcf500277f8bc275bdb23c7">SVFModule::iterator</a> fit = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), efit = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>();</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; fit != efit; ++fit)</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; {</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>&amp; fun = **fit;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(&amp;fun))</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">if</span>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;doesNotReturn() == <span class="keyword">false</span> &amp;&amp; fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;getReturnType()-&gt;isVoidTy() == <span class="keyword">false</span>)</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a53774463f34bb8b528b179b72b48fd69">addFunRet</a>(&amp;fun,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a96010999a4e5013beb1c37ef753ff910">getReturnNode</a>(&amp;fun)));</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <span class="keywordflow">for</span> (Function::arg_iterator I = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;arg_begin(), E = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;arg_end();</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; I != E; ++I) {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(&amp;*I,&amp;fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;getEntryBlock());</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> argValNodeId = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(&amp;*I);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">// if this is the function does not have caller (e.g. main)</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// or a dead function, shall we create a black hole address edge for it?</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">// it is (1) too conservative, and (2) make FormalParmVFGNode defined at blackhole address PAGEdge.</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// if(SVFUtil::ArgInNoCallerFunction(&amp;*I)) {</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// if(I-&gt;getType()-&gt;isPointerTy())</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// addBlackHoleAddrEdge(argValNodeId);</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">//}</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ac27b9eedd489f13175c010a32203abae">addFunArgs</a>(&amp;fun,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(argValNodeId));</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; }</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">for</span> (Function::iterator bit = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;begin(), ebit = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;end();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; bit != ebit; ++bit)</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; {</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>&amp; bb = *bit;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="keywordflow">for</span> (BasicBlock::iterator it = bb.begin(), eit = bb.end();</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; {</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>&amp; inst = *it;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(&amp;inst,&amp;bb);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; visit(inst);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60">sanityCheck</a>();</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#af6a2c401d5c7582a4a958b1fe40838e5">initialiseCandidatePointers</a>();</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a5fe12445ed0528183775747dec356db0">setNodeNumAfterPAGBuild</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>());</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00414">GenericGraph.h:414</a></div></div>
1398
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00047">47</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1399
+ <div class="fragment"><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;{</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// We read SVFIR from a user-defined txt instead of parsing SVFIR from LLVM IR</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; {</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; <a class="code" href="classSVF_1_1PAGBuilderFromFile.html">PAGBuilderFromFile</a> fileBuilder(<a class="code" href="classSVF_1_1SVFModule.html#a54c2bc2cb7cda0d74f4cadc676461b60">SVFModule::pagFileName</a>());</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span> fileBuilder.build();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; }</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// If the SVFIR has been built before, then we return the unique SVFIR of the program</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a0a18bca50f7cd3a1882754f19303d257">getNodeNumAfterPAGBuild</a>() &gt; 1)</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aa67bbd366b93fb1ec7a540c83566c977">svfMod</a> = svfModule;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#af4b18e8e1fdfb117cb5dd1a81cea4b71">initialiseNodes</a>();</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8">visitGlobal</a>(svfModule);</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#a709371b13dcf500277f8bc275bdb23c7">SVFModule::iterator</a> fit = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">begin</a>(), efit = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">end</a>();</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; fit != efit; ++fit)</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; {</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>&amp; fun = **fit;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVFUtil::isExtCall</a>(&amp;fun))</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">if</span>(fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;doesNotReturn() == <span class="keyword">false</span> &amp;&amp; fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;getReturnType()-&gt;isVoidTy() == <span class="keyword">false</span>)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a53774463f34bb8b528b179b72b48fd69">addFunRet</a>(&amp;fun,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a96010999a4e5013beb1c37ef753ff910">getReturnNode</a>(&amp;fun)));</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">for</span> (Function::arg_iterator I = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;arg_begin(), E = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;arg_end();</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; I != E; ++I) {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(&amp;*I,&amp;fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;getEntryBlock());</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> argValNodeId = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(&amp;*I);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="comment">// if this is the function does not have caller (e.g. main)</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="comment">// or a dead function, shall we create a black hole address edge for it?</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="comment">// it is (1) too conservative, and (2) make FormalParmVFGNode defined at blackhole address PAGEdge.</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; <span class="comment">// if(SVFUtil::ArgInNoCallerFunction(&amp;*I)) {</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="comment">// if(I-&gt;getType()-&gt;isPointerTy())</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// addBlackHoleAddrEdge(argValNodeId);</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">//}</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ac27b9eedd489f13175c010a32203abae">addFunArgs</a>(&amp;fun,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(argValNodeId));</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; }</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; }</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; <span class="keywordflow">for</span> (Function::iterator bit = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;begin(), ebit = fun.<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;end();</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; bit != ebit; ++bit)</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>&amp; bb = *bit;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keywordflow">for</span> (BasicBlock::iterator it = bb.begin(), eit = bb.end();</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>&amp; inst = *it;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(&amp;inst,&amp;bb);</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; visit(inst);</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; }</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60">sanityCheck</a>();</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#af6a2c401d5c7582a4a958b1fe40838e5">initialiseCandidatePointers</a>();</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a5fe12445ed0528183775747dec356db0">setNodeNumAfterPAGBuild</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>());</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// dump SVFIR</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a3a20311c732fb391332ae0ee1cb450a0">Options::PAGDotGraph</a>)</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">dump</a>(<span class="stringliteral">&quot;svfir_initial&quot;</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160;</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="comment">// print to command line of the SVFIR graph</span></div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#a98df022c5da54ea30b3f0ce008d3ca80">Options::PAGPrint</a>)</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">print</a>();</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="comment">// dump ICFG</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1Options.html#aea29a835c54fab800117e57de00e0b1e">Options::DumpICFG</a>)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">dump</a>(<span class="stringliteral">&quot;icfg_initial&quot;</span>);</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160;</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00414">GenericGraph.h:414</a></div></div>
1400
1400
  <div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
1401
1401
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
1402
1402
  <div class="ttc" id="classSVF_1_1SVFModule_html_a5486697889c6cca4f9f426650defc255"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a5486697889c6cca4f9f426650defc255">SVF::SVFModule::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00147">SVFModule.h:147</a></div></div>
1403
+ <div class="ttc" id="classSVF_1_1IRGraph_html_a1cb32461439c4dc8d044c2bfadb11307"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a1cb32461439c4dc8d044c2bfadb11307">SVF::IRGraph::dump</a></div><div class="ttdeci">void dump(std::string name)</div><div class="ttdoc">Dump SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8cpp_source.html#l00101">IRGraph.cpp:101</a></div></div>
1403
1404
  <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
1404
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_af4b18e8e1fdfb117cb5dd1a81cea4b71"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#af4b18e8e1fdfb117cb5dd1a81cea4b71">SVF::SVFIRBuilder::initialiseNodes</a></div><div class="ttdeci">void initialiseNodes()</div><div class="ttdoc">Initialize nodes and edges. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00128">SVFIRBuilder.cpp:128</a></div></div>
1405
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a09baa8c7246853c3faaed85b38f0da60"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60">SVF::SVFIRBuilder::sanityCheck</a></div><div class="ttdeci">void sanityCheck()</div><div class="ttdoc">Sanity check for SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01483">SVFIRBuilder.cpp:1483</a></div></div>
1405
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_af4b18e8e1fdfb117cb5dd1a81cea4b71"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#af4b18e8e1fdfb117cb5dd1a81cea4b71">SVF::SVFIRBuilder::initialiseNodes</a></div><div class="ttdeci">void initialiseNodes()</div><div class="ttdoc">Initialize nodes and edges. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00141">SVFIRBuilder.cpp:141</a></div></div>
1406
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a09baa8c7246853c3faaed85b38f0da60"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a09baa8c7246853c3faaed85b38f0da60">SVF::SVFIRBuilder::sanityCheck</a></div><div class="ttdeci">void sanityCheck()</div><div class="ttdoc">Sanity check for SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01496">SVFIRBuilder.cpp:1496</a></div></div>
1407
+ <div class="ttc" id="classSVF_1_1Options_html_a3a20311c732fb391332ae0ee1cb450a0"><div class="ttname"><a href="classSVF_1_1Options.html#a3a20311c732fb391332ae0ee1cb450a0">SVF::Options::PAGDotGraph</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; PAGDotGraph</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00133">Options.h:133</a></div></div>
1406
1408
  <div class="ttc" id="classSVF_1_1SVFIR_html_ac27b9eedd489f13175c010a32203abae"><div class="ttname"><a href="classSVF_1_1SVFIR.html#ac27b9eedd489f13175c010a32203abae">SVF::SVFIR::addFunArgs</a></div><div class="ttdeci">void addFunArgs(const SVFFunction *fun, const SVFVar *arg)</div><div class="ttdoc">Get/set method for function/callsite arguments and returns. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00494">SVFIR.h:494</a></div></div>
1407
1409
  <div class="ttc" id="classSVF_1_1SVFIR_html_af6a2c401d5c7582a4a958b1fe40838e5"><div class="ttname"><a href="classSVF_1_1SVFIR.html#af6a2c401d5c7582a4a958b1fe40838e5">SVF::SVFIR::initialiseCandidatePointers</a></div><div class="ttdeci">void initialiseCandidatePointers()</div><div class="ttdoc">Initialize candidate pointers. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00646">SVFIR.cpp:646</a></div></div>
1408
1410
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a15105737c91d01ba9daf2161fad220ef"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">SVF::SVFIRBuilder::setCurrentLocation</a></div><div class="ttdeci">void setCurrentLocation(const Value *val, const BasicBlock *bb)</div><div class="ttdoc">Set current basic block in order to keep track of control flow information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00239">SVFIRBuilder.h:239</a></div></div>
@@ -1412,16 +1414,21 @@ Private Attributes</h2></td></tr>
1412
1414
  <div class="ttc" id="classSVF_1_1SVFModule_html_a54c2bc2cb7cda0d74f4cadc676461b60"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a54c2bc2cb7cda0d74f4cadc676461b60">SVF::SVFModule::pagFileName</a></div><div class="ttdeci">static std::string pagFileName()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00088">SVFModule.h:88</a></div></div>
1413
1415
  <div class="ttc" id="classSVF_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>
1414
1416
  <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
1417
+ <div class="ttc" id="classSVF_1_1SVFIR_html_a236b4fefd16e9c793c5bd6d576290841"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a236b4fefd16e9c793c5bd6d576290841">SVF::SVFIR::print</a></div><div class="ttdeci">void print()</div><div class="ttdoc">Print SVFIR. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00557">SVFIR.cpp:557</a></div></div>
1415
1418
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aa67bbd366b93fb1ec7a540c83566c977"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aa67bbd366b93fb1ec7a540c83566c977">SVF::SVFIRBuilder::svfMod</a></div><div class="ttdeci">SVFModule * svfMod</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00049">SVFIRBuilder.h:49</a></div></div>
1419
+ <div class="ttc" id="classSVF_1_1ICFG_html_a999956500bbd605326531480546db9ba"><div class="ttname"><a href="classSVF_1_1ICFG.html#a999956500bbd605326531480546db9ba">SVF::ICFG::dump</a></div><div class="ttdeci">void dump(const std::string &amp;file, bool simple=false)</div><div class="ttdoc">Dump graph into dot file. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00398">ICFG.cpp:398</a></div></div>
1416
1420
  <div class="ttc" id="classSVF_1_1SVFFunction_html_ac4ae917ae35ac6fca652fe2dd90a8ac2"><div class="ttname"><a href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">SVF::SVFFunction::getLLVMFun</a></div><div class="ttdeci">Function * getLLVMFun() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00249">BasicTypes.h:249</a></div></div>
1421
+ <div class="ttc" id="classSVF_1_1Options_html_aea29a835c54fab800117e57de00e0b1e"><div class="ttname"><a href="classSVF_1_1Options.html#aea29a835c54fab800117e57de00e0b1e">SVF::Options::DumpICFG</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; DumpICFG</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00135">Options.h:135</a></div></div>
1422
+ <div class="ttc" id="classSVF_1_1Options_html_a98df022c5da54ea30b3f0ce008d3ca80"><div class="ttname"><a href="classSVF_1_1Options.html#a98df022c5da54ea30b3f0ce008d3ca80">SVF::Options::PAGPrint</a></div><div class="ttdeci">static const llvm::cl::opt&lt; bool &gt; PAGPrint</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00137">Options.h:137</a></div></div>
1417
1423
  <div class="ttc" id="classSVF_1_1SVFModule_html_a58d03edb6ff85f4943135478f113df31"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a58d03edb6ff85f4943135478f113df31">SVF::SVFModule::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00155">SVFModule.h:155</a></div></div>
1418
1424
  <div class="ttc" id="classSVF_1_1SVFModule_html_a709371b13dcf500277f8bc275bdb23c7"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a709371b13dcf500277f8bc275bdb23c7">SVF::SVFModule::iterator</a></div><div class="ttdeci">FunctionSetType::iterator iterator</div><div class="ttdoc">Iterators type def. </div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00051">SVFModule.h:51</a></div></div>
1419
1425
  <div class="ttc" id="classSVF_1_1IRGraph_html_a5fe12445ed0528183775747dec356db0"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a5fe12445ed0528183775747dec356db0">SVF::IRGraph::setNodeNumAfterPAGBuild</a></div><div class="ttdeci">void setNodeNumAfterPAGBuild(u32_t num)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00181">IRGraph.h:181</a></div></div>
1420
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4c6cd51def26ebd8e839df9fdc4b64b8"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8">SVF::SVFIRBuilder::visitGlobal</a></div><div class="ttdeci">void visitGlobal(SVFModule *svfModule)</div><div class="ttdoc">Handle globals including (global variable and functions) </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00502">SVFIRBuilder.cpp:502</a></div></div>
1426
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4c6cd51def26ebd8e839df9fdc4b64b8"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4c6cd51def26ebd8e839df9fdc4b64b8">SVF::SVFIRBuilder::visitGlobal</a></div><div class="ttdeci">void visitGlobal(SVFModule *svfModule)</div><div class="ttdoc">Handle globals including (global variable and functions) </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00515">SVFIRBuilder.cpp:515</a></div></div>
1421
1427
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
1422
1428
  <div class="ttc" id="classSVF_1_1SVFModule_html_a1357c876eccedd58b3abe68875b3a570"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVF::SVFModule::pagReadFromTXT</a></div><div class="ttdeci">static bool pagReadFromTXT()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00093">SVFModule.h:93</a></div></div>
1423
1429
  <div class="ttc" id="classSVF_1_1IRGraph_html_a96010999a4e5013beb1c37ef753ff910"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a96010999a4e5013beb1c37ef753ff910">SVF::IRGraph::getReturnNode</a></div><div class="ttdeci">NodeID getReturnNode(const SVFFunction *func) const</div><div class="ttdoc">GetReturnNode - Return the unique node representing the return value of a function. </div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00135">IRGraph.h:135</a></div></div>
1424
1430
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a43c9c773bfa17abf481c33073e30d01b"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">SVF::GenericGraph::getGNode</a></div><div class="ttdeci">NodeType * getGNode(NodeID id) const</div><div class="ttdoc">Get a node. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00387">GenericGraph.h:387</a></div></div>
1431
+ <div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
1425
1432
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00063">LLVMUtil.h:63</a></div></div>
1426
1433
  </div><!-- fragment -->
1427
1434
  </div>
@@ -1456,8 +1463,8 @@ Private Attributes</h2></td></tr>
1456
1463
  <p>Return the object node offset according to GEP insn (V). Given a gep edge p = q + i, if "i" is a constant then we return its offset size otherwise if "i" is a variable determined by runtime, then it is a variant offset Return TRUE if the offset of this GEP insn is a constant. </p>
1457
1464
  <p>given a gep edge p = q + i, </p>
1458
1465
 
1459
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00205">205</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1460
- <div class="fragment"><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;{</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(V);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keyword">const</span> llvm::GEPOperator *gepOp = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<span class="keyword">const</span> llvm::GEPOperator&gt;(V);</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a> * dataLayout = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a5fad3e11fbba831ed0940fb715e7dc2d">SymbolTableInfo::getDataLayout</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;getMainLLVMModule());</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; llvm::APInt byteOffset(dataLayout-&gt;getIndexSizeInBits(gepOp-&gt;getPointerAddressSpace()),0,<span class="keyword">true</span>);</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">if</span>(gepOp &amp;&amp; dataLayout &amp;&amp; gepOp-&gt;accumulateConstantOffset(*dataLayout,byteOffset))</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; {</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> bo = byteOffset.getSExtValue();</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <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>(*V), ge = <a class="code" href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">bridge_gep_end</a>(*V);</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; gi != ge; ++gi)</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; ls.<a class="code" href="classSVF_1_1LocationSet.html#ac544fa84eff20dfe043b7d0c771dec2b">addOffsetValue</a>(gi.getOperand());</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// Handling array types, skipe array handling here</span></div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="comment">// We treat whole array as one, then we can distinguish different field of an array of struct</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <span class="comment">// e.g. s[1].f1 is differet from s[0].f2</span></div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ArrayType&gt;(*gi))</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">//The int-value object of the current index operand</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="comment">// (may not be constant for arrays).</span></div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *op = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>&gt;(gi.getOperand());</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">if</span>(!op)</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; {</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; }</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">//The actual index</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> idx = op-&gt;getSExtValue();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">// Handling pointer types</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// These GEP instructions are simply making address computations from the base pointer address</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// e.g. idx = (char*) &amp;p + 4, at this case gep only one offset index (idx)</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="comment">// Case 1: This operation is likely accessing an array through pointer p.</span></div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// Case 2: It may also be used to access a field of a struct (which is not ANSI-compliant)</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// Since this is a field-index based memory model,</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// for case 1: we consider the whole array as one element, This can be improved by LocMemModel as it can distinguish different</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// elements of the same array.</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// for case 2: we treat idx the same as &amp;p by ignoring const 4 (This handling is unsound since the program itself is not ANSI-compliant).</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(*gi))</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; {</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="comment">//off += idx;</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; }</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160;</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="comment">// Handling struct here</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *ST = SVFUtil::dyn_cast&lt;StructType&gt;(*gi) )</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; {</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(op &amp;&amp; <span class="stringliteral">&quot;non-const struct index in GEP&quot;</span>);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keyword">const</span> vector&lt;u32_t&gt; &amp;so = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#ac50e1d8f8b8e514d098a55bfbac86010">getFlattenedFieldIdxVec</a>(ST);</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordflow">if</span> ((<span class="keywordtype">unsigned</span>)idx &gt;= so.size())</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; {</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;!! Struct index out of bounds&quot;</span> &lt;&lt; idx &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; }</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">//add the translated offset</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; ls.<a class="code" href="classSVF_1_1LocationSet.html#acc8d400f4715e05d8d4174d7bf722346">setFldIdx</a>(ls.<a class="code" href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">accumulateConstantFieldIdx</a>() + so[idx]);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; }</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; }</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160;}</div><div class="ttc" id="classSVF_1_1LocationSet_html_ac544fa84eff20dfe043b7d0c771dec2b"><div class="ttname"><a href="classSVF_1_1LocationSet.html#ac544fa84eff20dfe043b7d0c771dec2b">SVF::LocationSet::addOffsetValue</a></div><div class="ttdeci">bool addOffsetValue(const Value *offsetValue)</div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8cpp_source.html#l00042">LocationSet.cpp:42</a></div></div>
1466
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00218">218</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1467
+ <div class="fragment"><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160;{</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(V);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keyword">const</span> llvm::GEPOperator *gepOp = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<span class="keyword">const</span> llvm::GEPOperator&gt;(V);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="namespaceSVF.html#a03db82b8a7914367024723dba4d6ca3c">DataLayout</a> * dataLayout = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a5fad3e11fbba831ed0940fb715e7dc2d">SymbolTableInfo::getDataLayout</a>(<a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;getMainLLVMModule());</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; llvm::APInt byteOffset(dataLayout-&gt;getIndexSizeInBits(gepOp-&gt;getPointerAddressSpace()),0,<span class="keyword">true</span>);</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordflow">if</span>(gepOp &amp;&amp; dataLayout &amp;&amp; gepOp-&gt;accumulateConstantOffset(*dataLayout,byteOffset))</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; {</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> bo = byteOffset.getSExtValue();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; }</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <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>(*V), ge = <a class="code" href="namespacellvm.html#a7cfc92a12082d69711c97bb3d1b99c48">bridge_gep_end</a>(*V);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; gi != ge; ++gi)</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; ls.<a class="code" href="classSVF_1_1LocationSet.html#ac544fa84eff20dfe043b7d0c771dec2b">addOffsetValue</a>(gi.getOperand());</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="comment">// Handling array types, skipe array handling here</span></div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// We treat whole array as one, then we can distinguish different field of an array of struct</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// e.g. s[1].f1 is differet from s[0].f2</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ArrayType&gt;(*gi))</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">//The int-value object of the current index operand</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// (may not be constant for arrays).</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a> *op = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">ConstantInt</a>&gt;(gi.getOperand());</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordflow">if</span>(!op)</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; {</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; }</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">//The actual index</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> idx = op-&gt;getSExtValue();</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="comment">// Handling pointer types</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// These GEP instructions are simply making address computations from the base pointer address</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="comment">// e.g. idx = (char*) &amp;p + 4, at this case gep only one offset index (idx)</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// Case 1: This operation is likely accessing an array through pointer p.</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// Case 2: It may also be used to access a field of a struct (which is not ANSI-compliant)</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// Since this is a field-index based memory model,</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// for case 1: we consider the whole array as one element, This can be improved by LocMemModel as it can distinguish different</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// elements of the same array.</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="comment">// for case 2: we treat idx the same as &amp;p by ignoring const 4 (This handling is unsound since the program itself is not ANSI-compliant).</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(*gi))</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="comment">//off += idx;</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; }</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160;</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="comment">// Handling struct here</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *ST = SVFUtil::dyn_cast&lt;StructType&gt;(*gi) )</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; {</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(op &amp;&amp; <span class="stringliteral">&quot;non-const struct index in GEP&quot;</span>);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keyword">const</span> vector&lt;u32_t&gt; &amp;so = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#ac50e1d8f8b8e514d098a55bfbac86010">getFlattenedFieldIdxVec</a>(ST);</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span> ((<span class="keywordtype">unsigned</span>)idx &gt;= so.size())</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; {</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;!! Struct index out of bounds&quot;</span> &lt;&lt; idx &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(0);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; }</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">//add the translated offset</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; ls.<a class="code" href="classSVF_1_1LocationSet.html#acc8d400f4715e05d8d4174d7bf722346">setFldIdx</a>(ls.<a class="code" href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">accumulateConstantFieldIdx</a>() + so[idx]);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; }</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; }</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;}</div><div class="ttc" id="classSVF_1_1LocationSet_html_ac544fa84eff20dfe043b7d0c771dec2b"><div class="ttname"><a href="classSVF_1_1LocationSet.html#ac544fa84eff20dfe043b7d0c771dec2b">SVF::LocationSet::addOffsetValue</a></div><div class="ttdeci">bool addOffsetValue(const Value *offsetValue)</div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8cpp_source.html#l00042">LocationSet.cpp:42</a></div></div>
1461
1468
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
1462
1469
  <div class="ttc" id="classSVF_1_1LocationSet_html_acc8d400f4715e05d8d4174d7bf722346"><div class="ttname"><a href="classSVF_1_1LocationSet.html#acc8d400f4715e05d8d4174d7bf722346">SVF::LocationSet::setFldIdx</a></div><div class="ttdeci">void setFldIdx(Size_t idx)</div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00158">LocationSet.h:158</a></div></div>
1463
1470
  <div class="ttc" id="namespaceSVF_html_adefcb50414ea999d70cea5ccdbcb98d7"><div class="ttname"><a href="namespaceSVF.html#adefcb50414ea999d70cea5ccdbcb98d7">SVF::ConstantInt</a></div><div class="ttdeci">llvm::ConstantInt ConstantInt</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00128">BasicTypes.h:128</a></div></div>
@@ -1506,12 +1513,12 @@ Private Attributes</h2></td></tr>
1506
1513
  <p>Get the base type and max offset. </p>
1507
1514
  <p>Find the base type and the max possible offset of an object pointed to by (V). </p>
1508
1515
 
1509
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00960">960</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1510
- <div class="fragment"><div class="line"><a name="l00961"></a><span class="lineno"> 961</span>&#160;{</div><div class="line"><a name="l00962"></a><span class="lineno"> 962</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(V);</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; fields.push_back(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(0));</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160;</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T = V-&gt;getType();</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; <span class="comment">// Use the biggest struct type out of all operands.</span></div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#afc1b50355821e7299df03b026e36f1df">User</a> *U = SVFUtil::dyn_cast&lt;User&gt;(V))</div><div class="line"><a name="l00968"></a><span class="lineno"> 968</span>&#160; {</div><div class="line"><a name="l00969"></a><span class="lineno"> 969</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> msz = 1; <span class="comment">//the max size seen so far</span></div><div class="line"><a name="l00970"></a><span class="lineno"> 970</span>&#160; <span class="comment">// In case of BitCast, try the target type itself</span></div><div class="line"><a name="l00971"></a><span class="lineno"> 971</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;BitCastInst&gt;(V))</div><div class="line"><a name="l00972"></a><span class="lineno"> 972</span>&#160; {</div><div class="line"><a name="l00973"></a><span class="lineno"> 973</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">getFields</a>(fields, T, msz);</div><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160; <span class="keywordflow">if</span> (msz &lt; sz)</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; {</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; msz = sz;</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160; }</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; }</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="comment">// Try the types of all operands</span></div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">for</span> (User::const_op_iterator it = U-&gt;op_begin(), ie = U-&gt;op_end();</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; it != ie; ++it)</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; {</div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *operandtype = it-&gt;get()-&gt;getType();</div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160;</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">getFields</a>(fields, operandtype, msz);</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <span class="keywordflow">if</span> (msz &lt; sz)</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; {</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; msz = sz;</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; T = operandtype;</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; }</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; }</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; }</div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="comment">// If V is a CE, the actual pointer type is its operand.</span></div><div class="line"><a name="l00994"></a><span class="lineno"> 994</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> *E = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(V))</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; {</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; T = E-&gt;getOperand(0)-&gt;getType();</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">getFields</a>(fields, T, 0);</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; }</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; <span class="comment">// Handle Argument case</span></div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;Argument&gt;(V))</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; {</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">getFields</a>(fields, T, 0);</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; }</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *ptype = SVFUtil::dyn_cast&lt;PointerType&gt;(T))</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; T = ptype-&gt;getElementType();</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160; <span class="keywordflow">return</span> T;</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00075">BasicTypes.h:75</a></div></div>
1516
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00973">973</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1517
+ <div class="fragment"><div class="line"><a name="l00974"></a><span class="lineno"> 974</span>&#160;{</div><div class="line"><a name="l00975"></a><span class="lineno"> 975</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(V);</div><div class="line"><a name="l00976"></a><span class="lineno"> 976</span>&#160; fields.push_back(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(0));</div><div class="line"><a name="l00977"></a><span class="lineno"> 977</span>&#160;</div><div class="line"><a name="l00978"></a><span class="lineno"> 978</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *T = V-&gt;getType();</div><div class="line"><a name="l00979"></a><span class="lineno"> 979</span>&#160; <span class="comment">// Use the biggest struct type out of all operands.</span></div><div class="line"><a name="l00980"></a><span class="lineno"> 980</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#afc1b50355821e7299df03b026e36f1df">User</a> *U = SVFUtil::dyn_cast&lt;User&gt;(V))</div><div class="line"><a name="l00981"></a><span class="lineno"> 981</span>&#160; {</div><div class="line"><a name="l00982"></a><span class="lineno"> 982</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> msz = 1; <span class="comment">//the max size seen so far</span></div><div class="line"><a name="l00983"></a><span class="lineno"> 983</span>&#160; <span class="comment">// In case of BitCast, try the target type itself</span></div><div class="line"><a name="l00984"></a><span class="lineno"> 984</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;BitCastInst&gt;(V))</div><div class="line"><a name="l00985"></a><span class="lineno"> 985</span>&#160; {</div><div class="line"><a name="l00986"></a><span class="lineno"> 986</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">getFields</a>(fields, T, msz);</div><div class="line"><a name="l00987"></a><span class="lineno"> 987</span>&#160; <span class="keywordflow">if</span> (msz &lt; sz)</div><div class="line"><a name="l00988"></a><span class="lineno"> 988</span>&#160; {</div><div class="line"><a name="l00989"></a><span class="lineno"> 989</span>&#160; msz = sz;</div><div class="line"><a name="l00990"></a><span class="lineno"> 990</span>&#160; }</div><div class="line"><a name="l00991"></a><span class="lineno"> 991</span>&#160; }</div><div class="line"><a name="l00992"></a><span class="lineno"> 992</span>&#160; <span class="comment">// Try the types of all operands</span></div><div class="line"><a name="l00993"></a><span class="lineno"> 993</span>&#160; <span class="keywordflow">for</span> (User::const_op_iterator it = U-&gt;op_begin(), ie = U-&gt;op_end();</div><div class="line"><a name="l00994"></a><span class="lineno"> 994</span>&#160; it != ie; ++it)</div><div class="line"><a name="l00995"></a><span class="lineno"> 995</span>&#160; {</div><div class="line"><a name="l00996"></a><span class="lineno"> 996</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *operandtype = it-&gt;get()-&gt;getType();</div><div class="line"><a name="l00997"></a><span class="lineno"> 997</span>&#160;</div><div class="line"><a name="l00998"></a><span class="lineno"> 998</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">getFields</a>(fields, operandtype, msz);</div><div class="line"><a name="l00999"></a><span class="lineno"> 999</span>&#160; <span class="keywordflow">if</span> (msz &lt; sz)</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160; {</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160; msz = sz;</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160; T = operandtype;</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160; }</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160; }</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160; }</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160; <span class="comment">// If V is a CE, the actual pointer type is its operand.</span></div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</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> *E = SVFUtil::dyn_cast&lt;ConstantExpr&gt;(V))</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160; {</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160; T = E-&gt;getOperand(0)-&gt;getType();</div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">getFields</a>(fields, T, 0);</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160; }</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160; <span class="comment">// Handle Argument case</span></div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;Argument&gt;(V))</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160; {</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">getFields</a>(fields, T, 0);</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160; }</div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *ptype = SVFUtil::dyn_cast&lt;PointerType&gt;(T))</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160; T = ptype-&gt;getElementType();</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160; <span class="keywordflow">return</span> T;</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00075">BasicTypes.h:75</a></div></div>
1511
1518
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
1512
1519
  <div class="ttc" id="namespaceSVF_html_aa962cc1d782cc46553251e96b64a754b"><div class="ttname"><a href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">SVF::PointerType</a></div><div class="ttdeci">llvm::PointerType PointerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00108">BasicTypes.h:108</a></div></div>
1513
1520
  <div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
1514
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5c7cc40f0a9c89a8b9c21c65215dda29"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">SVF::SVFIRBuilder::getFields</a></div><div class="ttdeci">u32_t getFields(std::vector&lt; LocationSet &gt; &amp;fields, const Type *T, u32_t msz)</div><div class="ttdoc">Replace fields with flatten fields of T if the number of its fields is larger than msz...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01623">SVFIRBuilder.cpp:1623</a></div></div>
1521
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5c7cc40f0a9c89a8b9c21c65215dda29"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5c7cc40f0a9c89a8b9c21c65215dda29">SVF::SVFIRBuilder::getFields</a></div><div class="ttdeci">u32_t getFields(std::vector&lt; LocationSet &gt; &amp;fields, const Type *T, u32_t msz)</div><div class="ttdoc">Replace fields with flatten fields of T if the number of its fields is larger than msz...</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01636">SVFIRBuilder.cpp:1636</a></div></div>
1515
1522
  <div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00072">LocationSet.h:72</a></div></div>
1516
1523
  <div class="ttc" id="namespaceSVF_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#l00131">BasicTypes.h:131</a></div></div>
1517
1524
  <div class="ttc" id="namespaceSVF_html_afc1b50355821e7299df03b026e36f1df"><div class="ttname"><a href="namespaceSVF.html#afc1b50355821e7299df03b026e36f1df">SVF::User</a></div><div class="ttdeci">llvm::User User</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00086">BasicTypes.h:86</a></div></div>
@@ -1610,8 +1617,8 @@ Private Attributes</h2></td></tr>
1610
1617
  <p>Replace fields with flatten fields of T if the number of its fields is larger than msz. </p>
1611
1618
  <p>Replace fields with T's flatten fields. </p>
1612
1619
 
1613
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01623">1623</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1614
- <div class="fragment"><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;{</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(T))</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; T = T-&gt;getContainedType(0);</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; <span class="keyword">const</span> std::vector&lt;FlattenedFieldInfo&gt;&amp; stVec = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0">getFlattenedFieldInfoVec</a>(T);</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = stVec.size();</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160; <span class="keywordflow">if</span> (msz &lt; sz)</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160; {</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160; fields.clear();</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;FlattenedFieldInfo&gt;::const_iterator it = stVec.begin(), eit = stVec.end(); it!=eit; ++it)</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160; fields.push_back(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(*it));</div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160; }</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <span class="keywordflow">return</span> sz;</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;}</div><div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
1620
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01636">1636</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1621
+ <div class="fragment"><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;{</div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(T))</div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160; <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; T = T-&gt;getContainedType(0);</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160; <span class="keyword">const</span> std::vector&lt;FlattenedFieldInfo&gt;&amp; stVec = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0">getFlattenedFieldInfoVec</a>(T);</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> sz = stVec.size();</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160; <span class="keywordflow">if</span> (msz &lt; sz)</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160; {</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160; fields.clear();</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160; <span class="keywordflow">for</span>(std::vector&lt;FlattenedFieldInfo&gt;::const_iterator it = stVec.begin(), eit = stVec.end(); it!=eit; ++it)</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160; fields.push_back(<a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(*it));</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160; }</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160; <span class="keywordflow">return</span> sz;</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;}</div><div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
1615
1622
  <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a267169023fc4f8dd66b145f7231fec11"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SVF::SymbolTableInfo::SymbolInfo</a></div><div class="ttdeci">static SymbolTableInfo * SymbolInfo()</div><div class="ttdoc">Singleton design here to make sure we only have one instance during any analysis. ...</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00059">SymbolTableInfo.cpp:59</a></div></div>
1616
1623
  <div class="ttc" id="classSVF_1_1SymbolTableInfo_html_a9ca564bdc1f40a2ccd30d98e0e4075b0"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0">SVF::SymbolTableInfo::getFlattenedFieldInfoVec</a></div><div class="ttdeci">const std::vector&lt; FlattenedFieldInfo &gt; &amp; getFlattenedFieldInfoVec(const Type *T)</div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8cpp_source.html#l00330">SymbolTableInfo.cpp:330</a></div></div>
1617
1624
  <div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00072">LocationSet.h:72</a></div></div>
@@ -1657,8 +1664,8 @@ Private Attributes</h2></td></tr>
1657
1664
  </div><div class="memdoc">
1658
1665
  <p>Add a temp field value node according to base value and offset this node is after the initial node method, it is out of scope of symInfo table </p>
1659
1666
 
1660
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01509">1509</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1661
- <div class="fragment"><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;{</div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">getBaseValVar</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(val));</div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a811c5eaeef1e52cc2d6f56ec5a76bb02">getGepValVar</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, base, ls);</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <span class="keywordflow">if</span> (gepval==UINT_MAX)</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; {</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(((<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><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;<span class="comment"> * getGepValVar can only be called from two places:</span></div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;<span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;<span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;<span class="comment"> * so curVal can only be</span></div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;<span class="comment"> * 1. Instruction</span></div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;<span class="comment"> * 2. GlobalVariable</span></div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((SVFUtil::isa&lt;Instruction&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) || SVFUtil::isa&lt;GlobalVariable&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>)) &amp;&amp; <span class="stringliteral">&quot;curVal not an instruction or a globalvariable?&quot;</span>);</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; <span class="keyword">const</span> std::vector&lt;FlattenedFieldInfo&gt; &amp;fieldinfo = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0">getFlattenedFieldInfoVec</a>(baseType);</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type = fieldinfo[fieldidx].getFlattenElemTy();</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepNode= <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a9a702ceb8ba3851daef444f1ece3a2f8">addGepValNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, val,ls, <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-&gt;allocateValueId(),type,fieldidx);</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a45ab73a812809b3c725daf11b5da6141">addGepEdge</a>(base, gepNode, ls, <span class="keyword">true</span>);</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <span class="keywordflow">return</span> gepNode;</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; }</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="keywordflow">return</span> gepval;</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a724198dcaf43730e1df814f15fe4e1e0"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">SVF::SVFIRBuilder::getCurrentBB</a></div><div class="ttdeci">const BasicBlock * getCurrentBB() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00248">SVFIRBuilder.h:248</a></div></div>
1667
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01522">1522</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1668
+ <div class="fragment"><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;{</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> base = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a5298f34143ec3a2e6bb74ebad668cbbc">getBaseValVar</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(val));</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a811c5eaeef1e52cc2d6f56ec5a76bb02">getGepValVar</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, base, ls);</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160; <span class="keywordflow">if</span> (gepval==UINT_MAX)</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160; {</div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(((<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><div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;<span class="comment"> * getGepValVar can only be called from two places:</span></div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;<span class="comment"> * 1. SVFIRBuilder::addComplexConsForExt to handle external calls</span></div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;<span class="comment"> * 2. SVFIRBuilder::getGlobalVarField to initialize global variable</span></div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;<span class="comment"> * so curVal can only be</span></div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;<span class="comment"> * 1. Instruction</span></div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;<span class="comment"> * 2. GlobalVariable</span></div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((SVFUtil::isa&lt;Instruction&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) || SVFUtil::isa&lt;GlobalVariable&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>)) &amp;&amp; <span class="stringliteral">&quot;curVal not an instruction or a globalvariable?&quot;</span>);</div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <span class="keyword">const</span> std::vector&lt;FlattenedFieldInfo&gt; &amp;fieldinfo = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a9ca564bdc1f40a2ccd30d98e0e4075b0">getFlattenedFieldInfoVec</a>(baseType);</div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type = fieldinfo[fieldidx].getFlattenElemTy();</div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; <span class="comment">// We assume every GepValNode and its GepEdge to the baseNode are unique across the whole program</span></div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; <span class="comment">// We preserve the current BB information to restore it after creating the gepNode</span></div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> gepNode= <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a9a702ceb8ba3851daef444f1ece3a2f8">addGepValNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, val,ls, <a class="code" href="classSVF_1_1NodeIDAllocator.html#a2bd3ca30fc9669d9a0327544bdb4557b">NodeIDAllocator::get</a>()-&gt;allocateValueId(),type,fieldidx);</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a45ab73a812809b3c725daf11b5da6141">addGepEdge</a>(base, gepNode, ls, <span class="keyword">true</span>);</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <span class="keywordflow">return</span> gepNode;</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; }</div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; <span class="keywordflow">return</span> gepval;</div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a724198dcaf43730e1df814f15fe4e1e0"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">SVF::SVFIRBuilder::getCurrentBB</a></div><div class="ttdeci">const BasicBlock * getCurrentBB() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00248">SVFIRBuilder.h:248</a></div></div>
1662
1669
  <div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
1663
1670
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
1664
1671
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
@@ -1707,11 +1714,11 @@ Private Attributes</h2></td></tr>
1707
1714
  <p>Get the field of the global variable node FIXME:Here we only get the field that actually used in the program We ignore the initialization of global variable field that not used in the program </p>
1708
1715
  <p>if we did not find the constant expression in the program, then we need to create a gep node for this field </p>
1709
1716
 
1710
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00401">401</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1711
- <div class="fragment"><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;{</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160;</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="comment">// if the global variable do not have any field needs to be initialized</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <span class="keywordflow">if</span> (offset == 0 &amp;&amp; gvar-&gt;getInitializer()-&gt;getType()-&gt;isSingleValueType())</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(gvar);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; }</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *gvartype = gvar-&gt;getType();</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *ptype = SVFUtil::dyn_cast&lt;PointerType&gt;(gvartype))</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; gvartype = ptype-&gt;getElementType();</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(gvar, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset), gvartype, offset);</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; }</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
1717
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00414">414</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1718
+ <div class="fragment"><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;{</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160; <span class="comment">// if the global variable do not have any field needs to be initialized</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <span class="keywordflow">if</span> (offset == 0 &amp;&amp; gvar-&gt;getInitializer()-&gt;getType()-&gt;isSingleValueType())</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; {</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(gvar);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; {</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *gvartype = gvar-&gt;getType();</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">PointerType</a> *ptype = SVFUtil::dyn_cast&lt;PointerType&gt;(gvartype))</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; gvartype = ptype-&gt;getElementType();</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(gvar, <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a>(offset), gvartype, offset);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
1712
1719
  <div class="ttc" id="namespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00075">BasicTypes.h:75</a></div></div>
1713
1720
  <div class="ttc" id="namespaceSVF_html_aa962cc1d782cc46553251e96b64a754b"><div class="ttname"><a href="namespaceSVF.html#aa962cc1d782cc46553251e96b64a754b">SVF::PointerType</a></div><div class="ttdeci">llvm::PointerType PointerType</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00108">BasicTypes.h:108</a></div></div>
1714
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ad0b30ca8fc2939bb7360a3ff08727d58"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">SVF::SVFIRBuilder::getGepValVar</a></div><div class="ttdeci">NodeID getGepValVar(const Value *val, const LocationSet &amp;ls, const Type *baseType, u32_t fieldidx)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01509">SVFIRBuilder.cpp:1509</a></div></div>
1721
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ad0b30ca8fc2939bb7360a3ff08727d58"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">SVF::SVFIRBuilder::getGepValVar</a></div><div class="ttdeci">NodeID getGepValVar(const Value *val, const LocationSet &amp;ls, const Type *baseType, u32_t fieldidx)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01522">SVFIRBuilder.cpp:1522</a></div></div>
1715
1722
  <div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00072">LocationSet.h:72</a></div></div>
1716
1723
  </div><!-- fragment -->
1717
1724
  </div>
@@ -1837,7 +1844,7 @@ Private Attributes</h2></td></tr>
1837
1844
  <p>Get different kinds of node. </p>
1838
1845
 
1839
1846
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00085">85</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
1840
- <div class="fragment"><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// first handle gep edge if val if a constant expression</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(V);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// strip off the constant cast and return the value node</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5adf8baa546292434ba1fec48db2d0a7"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">SVF::SVFIRBuilder::processCE</a></div><div class="ttdeci">void processCE(const Value *val)</div><div class="ttdoc">Process constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00275">SVFIRBuilder.cpp:275</a></div></div>
1847
+ <div class="fragment"><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; {</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="comment">// first handle gep edge if val if a constant expression</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(V);</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <span class="comment">// strip off the constant cast and return the value node</span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(V);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5adf8baa546292434ba1fec48db2d0a7"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">SVF::SVFIRBuilder::processCE</a></div><div class="ttdeci">void processCE(const Value *val)</div><div class="ttdoc">Process constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00288">SVFIRBuilder.cpp:288</a></div></div>
1841
1848
  <div class="ttc" id="classSVF_1_1IRGraph_html_abffddd41cc308b9b3bd5ad4a7f8f1624"><div class="ttname"><a href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00120">IRGraph.h:120</a></div></div>
1842
1849
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
1843
1850
  </div><!-- fragment -->
@@ -1905,8 +1912,8 @@ Private Attributes</h2></td></tr>
1905
1912
  <p>Add the constraints for a direct, non-external call. </p>
1906
1913
  <p>FIXME: this assertion should be placed for correct checking except bug program like 188.ammp, 300.twolf </p>
1907
1914
 
1908
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00894">894</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1909
- <div class="fragment"><div class="line"><a name="l00895"></a><span class="lineno"> 895</span>&#160;{</div><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160;</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(F);</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160;</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle direct call &quot;</span> &lt;&lt; *cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>() &lt;&lt; <span class="stringliteral">&quot; callee &quot;</span> &lt;&lt; *F &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;</div><div class="line"><a name="l00902"></a><span class="lineno"> 902</span>&#160; <span class="comment">//Only handle the ret.val. if it&#39;s used as a ptr.</span></div><div class="line"><a name="l00903"></a><span class="lineno"> 903</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00904"></a><span class="lineno"> 904</span>&#160; <span class="comment">//Does it actually return a ptr?</span></div><div class="line"><a name="l00905"></a><span class="lineno"> 905</span>&#160; <span class="keywordflow">if</span> (!cs.<a class="code" href="classSVF_1_1CallSite.html#a9b7d53a345875e4e6c72eb23ac6475de">getType</a>()-&gt;isVoidTy())</div><div class="line"><a name="l00906"></a><span class="lineno"> 906</span>&#160; {</div><div class="line"><a name="l00907"></a><span class="lineno"> 907</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = <a class="code" href="classSVF_1_1SVFIRBuilder.html#aff99c8de4acf4eeaf01803dadf459b92">getReturnNode</a>(F);</div><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a50702f09af1ea9d50ee4726fc8f8a65c">addRetEdge</a>(srcret, dstrec,icfgNode);</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; }</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160; <span class="comment">//Iterators for the actual and formal parameters</span></div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <a class="code" href="classSVF_1_1CallSite.html#ac1cdfe5e54026960a23142e26b3150ff">CallSite::arg_iterator</a> itA = cs.<a class="code" href="classSVF_1_1CallSite.html#aabc0054b7f4e06b7ca0b6072746984e6">arg_begin</a>(), ieA = cs.<a class="code" href="classSVF_1_1CallSite.html#a46e8ffe430bb2711abaafc9d7864909e">arg_end</a>();</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; Function::const_arg_iterator itF = F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;arg_begin(), ieF = F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;arg_end();</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; args:&quot;</span>);</div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; {</div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; <span class="keywordflow">if</span> (itA == ieA)</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; {</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; !! not enough args\n&quot;</span>);</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *AA = *itA, *FA = &amp;*itF; <span class="comment">//current actual/formal arg</span></div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160;</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process actual parm &quot;</span> &lt;&lt; *AA &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160;</div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(FA);</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(AA);</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#af4ff212d09284eb377eefd14f60d2f14">addCallEdge</a>(srcAA, dstFA, icfgNode);</div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; }</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <span class="keywordflow">if</span> (F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;isVarArg())</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; {</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3fe99644b2bf5f0f9b2b21a56a400ad4">getVarargNode</a>(F);</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n varargs:&quot;</span>);</div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160; <span class="keywordflow">for</span> (; itA != ieA; ++itA)</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; {</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *AA = *itA;</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(AA);</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#af4ff212d09284eb377eefd14f60d2f14">addCallEdge</a>(vnAA,vaF, icfgNode);</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; }</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; }</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="keywordflow">if</span>(itA != ieA)</div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; {</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;too many args to non-vararg func.&quot;</span>);</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>()) + <span class="stringliteral">&quot;)&quot;</span>);</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160;</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; }</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
1915
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00907">907</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1916
+ <div class="fragment"><div class="line"><a name="l00908"></a><span class="lineno"> 908</span>&#160;{</div><div class="line"><a name="l00909"></a><span class="lineno"> 909</span>&#160;</div><div class="line"><a name="l00910"></a><span class="lineno"> 910</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(F);</div><div class="line"><a name="l00911"></a><span class="lineno"> 911</span>&#160;</div><div class="line"><a name="l00912"></a><span class="lineno"> 912</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00913"></a><span class="lineno"> 913</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle direct call &quot;</span> &lt;&lt; *cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>() &lt;&lt; <span class="stringliteral">&quot; callee &quot;</span> &lt;&lt; *F &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00914"></a><span class="lineno"> 914</span>&#160;</div><div class="line"><a name="l00915"></a><span class="lineno"> 915</span>&#160; <span class="comment">//Only handle the ret.val. if it&#39;s used as a ptr.</span></div><div class="line"><a name="l00916"></a><span class="lineno"> 916</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstrec = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00917"></a><span class="lineno"> 917</span>&#160; <span class="comment">//Does it actually return a ptr?</span></div><div class="line"><a name="l00918"></a><span class="lineno"> 918</span>&#160; <span class="keywordflow">if</span> (!cs.<a class="code" href="classSVF_1_1CallSite.html#a9b7d53a345875e4e6c72eb23ac6475de">getType</a>()-&gt;isVoidTy())</div><div class="line"><a name="l00919"></a><span class="lineno"> 919</span>&#160; {</div><div class="line"><a name="l00920"></a><span class="lineno"> 920</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcret = <a class="code" href="classSVF_1_1SVFIRBuilder.html#aff99c8de4acf4eeaf01803dadf459b92">getReturnNode</a>(F);</div><div class="line"><a name="l00921"></a><span class="lineno"> 921</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00922"></a><span class="lineno"> 922</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a50702f09af1ea9d50ee4726fc8f8a65c">addRetEdge</a>(srcret, dstrec,icfgNode);</div><div class="line"><a name="l00923"></a><span class="lineno"> 923</span>&#160; }</div><div class="line"><a name="l00924"></a><span class="lineno"> 924</span>&#160; <span class="comment">//Iterators for the actual and formal parameters</span></div><div class="line"><a name="l00925"></a><span class="lineno"> 925</span>&#160; <a class="code" href="classSVF_1_1CallSite.html#ac1cdfe5e54026960a23142e26b3150ff">CallSite::arg_iterator</a> itA = cs.<a class="code" href="classSVF_1_1CallSite.html#aabc0054b7f4e06b7ca0b6072746984e6">arg_begin</a>(), ieA = cs.<a class="code" href="classSVF_1_1CallSite.html#a46e8ffe430bb2711abaafc9d7864909e">arg_end</a>();</div><div class="line"><a name="l00926"></a><span class="lineno"> 926</span>&#160; Function::const_arg_iterator itF = F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;arg_begin(), ieF = F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;arg_end();</div><div class="line"><a name="l00927"></a><span class="lineno"> 927</span>&#160; <span class="comment">//Go through the fixed parameters.</span></div><div class="line"><a name="l00928"></a><span class="lineno"> 928</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; args:&quot;</span>);</div><div class="line"><a name="l00929"></a><span class="lineno"> 929</span>&#160; <span class="keywordflow">for</span> (; itF != ieF; ++itA, ++itF)</div><div class="line"><a name="l00930"></a><span class="lineno"> 930</span>&#160; {</div><div class="line"><a name="l00931"></a><span class="lineno"> 931</span>&#160; <span class="comment">//Some programs (e.g. Linux kernel) leave unneeded parameters empty.</span></div><div class="line"><a name="l00932"></a><span class="lineno"> 932</span>&#160; <span class="keywordflow">if</span> (itA == ieA)</div><div class="line"><a name="l00933"></a><span class="lineno"> 933</span>&#160; {</div><div class="line"><a name="l00934"></a><span class="lineno"> 934</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot; !! not enough args\n&quot;</span>);</div><div class="line"><a name="l00935"></a><span class="lineno"> 935</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00936"></a><span class="lineno"> 936</span>&#160; }</div><div class="line"><a name="l00937"></a><span class="lineno"> 937</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *AA = *itA, *FA = &amp;*itF; <span class="comment">//current actual/formal arg</span></div><div class="line"><a name="l00938"></a><span class="lineno"> 938</span>&#160;</div><div class="line"><a name="l00939"></a><span class="lineno"> 939</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process actual parm &quot;</span> &lt;&lt; *AA &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00940"></a><span class="lineno"> 940</span>&#160;</div><div class="line"><a name="l00941"></a><span class="lineno"> 941</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstFA = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(FA);</div><div class="line"><a name="l00942"></a><span class="lineno"> 942</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcAA = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(AA);</div><div class="line"><a name="l00943"></a><span class="lineno"> 943</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00944"></a><span class="lineno"> 944</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#af4ff212d09284eb377eefd14f60d2f14">addCallEdge</a>(srcAA, dstFA, icfgNode);</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; }</div><div class="line"><a name="l00946"></a><span class="lineno"> 946</span>&#160; <span class="comment">//Any remaining actual args must be varargs.</span></div><div class="line"><a name="l00947"></a><span class="lineno"> 947</span>&#160; <span class="keywordflow">if</span> (F-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>()-&gt;isVarArg())</div><div class="line"><a name="l00948"></a><span class="lineno"> 948</span>&#160; {</div><div class="line"><a name="l00949"></a><span class="lineno"> 949</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vaF = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3fe99644b2bf5f0f9b2b21a56a400ad4">getVarargNode</a>(F);</div><div class="line"><a name="l00950"></a><span class="lineno"> 950</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n varargs:&quot;</span>);</div><div class="line"><a name="l00951"></a><span class="lineno"> 951</span>&#160; <span class="keywordflow">for</span> (; itA != ieA; ++itA)</div><div class="line"><a name="l00952"></a><span class="lineno"> 952</span>&#160; {</div><div class="line"><a name="l00953"></a><span class="lineno"> 953</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *AA = *itA;</div><div class="line"><a name="l00954"></a><span class="lineno"> 954</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnAA = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(AA);</div><div class="line"><a name="l00955"></a><span class="lineno"> 955</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00956"></a><span class="lineno"> 956</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#af4ff212d09284eb377eefd14f60d2f14">addCallEdge</a>(vnAA,vaF, icfgNode);</div><div class="line"><a name="l00957"></a><span class="lineno"> 957</span>&#160; }</div><div class="line"><a name="l00958"></a><span class="lineno"> 958</span>&#160; }</div><div class="line"><a name="l00959"></a><span class="lineno"> 959</span>&#160; <span class="keywordflow">if</span>(itA != ieA)</div><div class="line"><a name="l00960"></a><span class="lineno"> 960</span>&#160; {</div><div class="line"><a name="l00963"></a><span class="lineno"> 963</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;too many args to non-vararg func.&quot;</span>);</div><div class="line"><a name="l00964"></a><span class="lineno"> 964</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;(&quot;</span> + <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>()) + <span class="stringliteral">&quot;)&quot;</span>);</div><div class="line"><a name="l00965"></a><span class="lineno"> 965</span>&#160;</div><div class="line"><a name="l00966"></a><span class="lineno"> 966</span>&#160; }</div><div class="line"><a name="l00967"></a><span class="lineno"> 967</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
1910
1917
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
1911
1918
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aff99c8de4acf4eeaf01803dadf459b92"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aff99c8de4acf4eeaf01803dadf459b92">SVF::SVFIRBuilder::getReturnNode</a></div><div class="ttdeci">NodeID getReturnNode(const SVFFunction *func)</div><div class="ttdoc">getReturnNode - Return the node representing the unique return value of a function. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00101">SVFIRBuilder.h:101</a></div></div>
1912
1919
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_af4ff212d09284eb377eefd14f60d2f14"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#af4ff212d09284eb377eefd14f60d2f14">SVF::SVFIRBuilder::addCallEdge</a></div><div class="ttdeci">CallPE * addCallEdge(NodeID src, NodeID dst, const CallBlockNode *cs)</div><div class="ttdoc">Add Call edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00356">SVFIRBuilder.h:356</a></div></div>
@@ -1981,8 +1988,8 @@ Private Attributes</h2></td></tr>
1981
1988
  <p>handle indirect calls at hare_parallel_for (e.g., hare_parallel_for(..., fp, ...); const Value* fun = <a class="el" href="classSVF_1_1ThreadAPI.html#a6852ff1eedc1117e95e45e4a90c80d53" title="Return a static reference. ">ThreadAPI::getThreadAPI()</a>-&gt;getForkedFun(inst); if(!SVFUtil::isa&lt;Function&gt;(fun)) pag-&gt;addIndirectCallsites(cs,pag-&gt;getValueNode(fun));</p>
1982
1989
  <p>TODO: inter-procedural <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> edges for thread joins </p>
1983
1990
 
1984
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01060">1060</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1985
- <div class="fragment"><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;{</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>();</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a61ed4bb80d88b0f8dbc02535c224fdfb">isHeapAllocOrStaticExtCall</a>(cs))</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160; {</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160; <span class="comment">// case 1: ret = new obj</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">isHeapAllocExtCallViaRet</a>(cs) || <a class="code" href="namespaceSVF_1_1SVFUtil.html#ae62938f722543d6d7fc201b685be1abf">isStaticExtCall</a>(cs))</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160; {</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> val = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(inst);</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, val);</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160; }</div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160; <span class="comment">// case 2: *arg = new obj</span></div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160; {</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">isHeapAllocExtCallViaArg</a>(cs) &amp;&amp; <span class="stringliteral">&quot;Must be heap alloc call via arg.&quot;</span>);</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordtype">int</span> arg_pos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">getHeapAllocHoldingArgPosition</a>(callee);</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *arg = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(arg_pos);</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="keywordflow">if</span> (arg-&gt;getType()-&gt;isPointerTy())</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; {</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(arg);</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a18388bc282c5329a837c6a273893c4fb">addDummyObjNode</a>();</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <span class="keywordflow">if</span> (vnArg &amp;&amp; dummy &amp;&amp; obj)</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; {</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, dummy);</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy, vnArg);</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; }</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; }</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; {</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;Arg receiving new object must be pointer type&quot;</span>);</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; }</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; }</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; }</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; {</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; {</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">ExtAPI::extf_t</a> tF= <a class="code" href="namespaceSVF_1_1SVFUtil.html#ac3e7507fb376b1625bc1573132ab9f06">extCallTy</a>(callee);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; <span class="keywordflow">switch</span>(tF)</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; {</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c">ExtAPI::EFT_REALLOC</a>:</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <span class="keywordflow">if</span>(!SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; <span class="comment">// e.g. void *realloc(void *ptr, size_t size)</span></div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; <span class="comment">// if ptr is null then we will treat it as a malloc</span></div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="comment">// if ptr is not null, then we assume a new data memory will be attached to</span></div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; <span class="comment">// the tail of old allocated memory block.</span></div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantPointerNull&gt;(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)))</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> val = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(inst);</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, val);</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; }</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; }</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">ExtAPI::EFT_L_A0</a>:</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">ExtAPI::EFT_L_A1</a>:</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d">ExtAPI::EFT_L_A2</a>:</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c">ExtAPI::EFT_L_A8</a>:</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; {</div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">if</span>(!SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> arg_pos;</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <span class="keywordflow">switch</span>(tF)</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; {</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">ExtAPI::EFT_L_A1</a>:</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; arg_pos= 1;</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d">ExtAPI::EFT_L_A2</a>:</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; arg_pos= 2;</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c">ExtAPI::EFT_L_A8</a>:</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; arg_pos= 8;</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; arg_pos= 0;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; }</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src= cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(arg_pos);</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(src-&gt;getType()))</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; {</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(src);</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(srcNode, dstNode);</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; }</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dstNode);</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; }</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa0cecd43037de38c00ec6017b03bbb3f">ExtAPI::EFT_L_A0__A0R_A1</a>:</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; {</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <span class="comment">// this is only for memset(void *str, int c, size_t n)</span></div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="comment">// which copies the character c (an unsigned char) to the first n characters of the string pointed to, by the argument str</span></div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; <span class="comment">// However, the second argument is non-pointer, thus we can not use addComplexConsForExt</span></div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <span class="comment">// addComplexConsForExt(cs.getArgument(0), cs.getArgument(1));</span></div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; }</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a54aa3d7051aab7d65ee1154538bfbb48">ExtAPI::EFT_L_A0__A0R_A1R</a>:</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; {</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="comment">//memcpy returns the dest.</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; {</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; }</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; }</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae7e7e0702f480304f4afefa96f6c5002">ExtAPI::EFT_A1R_A0R</a>:</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a80ea82d0181911894919c181eb1f4e35">ExtAPI::EFT_L_A1__FunPtr</a>:</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; {</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</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;(src))</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; src = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a86763e6a3606598580cd0172aecb5bc7">stripConstantCasts</a>(gep-&gt;getPointerOperand());</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* glob = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(src)){</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad9ebd847ed5d901cd30b1cfcdaec3462">ConstantDataArray</a>* constarray = SVFUtil::dyn_cast&lt;ConstantDataArray&gt;(glob-&gt;getInitializer())){</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6f82e03d880257527bd9cb5978e05604">getProgFunction</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa67bbd366b93fb1ec7a540c83566c977">svfMod</a>,constarray-&gt;getAsCString().str())){</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(fun-&gt;getLLVMFun());</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(srcNode, <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; }</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; }</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; }</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160; }</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4ba81144ee1a70785fbf83ca5f0d4573">ExtAPI::EFT_A3R_A1R_NS</a>:</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160; <span class="comment">//These func. are never used to copy structs, so the size is 1.</span></div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(3), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1), 1);</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4c1361546aa103c26b11b0b89dc8d482">ExtAPI::EFT_A1R_A0</a>:</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; {</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; }</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab8814290c2362cd812a7783802eb209a">ExtAPI::EFT_A2R_A1</a>:</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; {</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(2));</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; }</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac631e9cc3bb430a9c12d0c004d2ca97d">ExtAPI::EFT_A4R_A1</a>:</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; {</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(4));</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; }</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aac3eaaf0865895ce144c035e429166be">ExtAPI::EFT_L_A0__A1_A0</a>:</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; {</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; <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;(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0))) {</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(load-&gt;getPointerOperand()));</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(load-&gt;getPointerOperand()), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; }</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;<span class="comment">// else if (const GetElementPtrInst *gep = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(cs.getArgument(0))) {</span></div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;<span class="comment">// addStoreEdge(getValueNode(cs.getArgument(1)), getValueNode(cs.getArgument(0)));</span></div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;<span class="comment">// if (SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</span></div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;<span class="comment">// addCopyEdge(getValueNode(cs.getArgument(0)), getValueNode(inst));</span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160; }</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae8423cc29f4de0225e30de6982e6a3a4">ExtAPI::EFT_L_A0__A2R_A0</a>:</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; {</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <span class="comment">//Do the L_A0 part if the retval is used.</span></div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src= cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(src-&gt;getType()))</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160; {</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(src);</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160; <span class="keywordflow">if</span>(vnS)</div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(vnS,vnD);</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; }</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(vnD);</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; }</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; <span class="comment">//Do the A2R_A0 part.</span></div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(2));</div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; }</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899">ExtAPI::EFT_A0R_NEW</a>:</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4353ad2b443e7f7ce2151869eed9c097">ExtAPI::EFT_A1R_NEW</a>:</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14">ExtAPI::EFT_A2R_NEW</a>:</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2">ExtAPI::EFT_A4R_NEW</a>:</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be">ExtAPI::EFT_A11R_NEW</a>:</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; {</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">&quot;Alloc via arg cases are not handled here.&quot;</span>);</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; }</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4">ExtAPI::EFT_ALLOC</a>:</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">ExtAPI::EFT_NOSTRUCT_ALLOC</a>:</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0">ExtAPI::EFT_STAT</a>:</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22">ExtAPI::EFT_STAT2</a>:</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">&quot;alloc type func. are not handled here&quot;</span>);</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; {</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <span class="comment">// fdopen will return an integer in LLVM IR.</span></div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;alloc type func do not return pointer type&quot;</span>);</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; }</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">ExtAPI::EFT_NOOP</a>:</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">ExtAPI::EFT_FREE</a>:</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b">ExtAPI::EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a>:</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; {</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg1 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg3 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(3);</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; <span class="comment">// We have vArg3 points to the entry of _Rb_tree_node_base { color; parent; left; right; }.</span></div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <span class="comment">// Now we calculate the offset from base to vArg3</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg3 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vArg3);</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> offset = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(vnArg3).<a class="code" href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">accumulateConstantFieldIdx</a>();</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="comment">// We get all flattened fields of base</span></div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; vector&lt;LocationSet&gt; fields;</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(vArg3, fields);</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() &gt;= 4 &amp;&amp; <span class="stringliteral">&quot;_Rb_tree_node_base should have at least 4 fields.\n&quot;</span>);</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <span class="comment">// We summarize the side effects: arg3-&gt;parent = arg1, arg3-&gt;left = arg1, arg3-&gt;right = arg1</span></div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <span class="comment">// Note that arg0 is aligned with &quot;offset&quot;.</span></div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = offset + 1; i &lt;= offset + 3; ++i)</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; {</div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(vArg3, fields[i], type, i);</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(vArg1);</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; }</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; }</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a31d0b620d3344c68ecfd71c9faf1d598">ExtAPI::EFT_STD_RB_TREE_INCREMENT</a>:</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160; {</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(inst);</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vArg);</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> offset = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(vnArg).<a class="code" href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">accumulateConstantFieldIdx</a>();</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; <span class="comment">// We get all fields</span></div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; vector&lt;LocationSet&gt; fields;</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(vArg,fields);</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() &gt;= 4 &amp;&amp; <span class="stringliteral">&quot;_Rb_tree_node_base should have at least 4 fields.\n&quot;</span>);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; <span class="comment">// We summarize the side effects: ret = arg-&gt;parent, ret = arg-&gt;left, ret = arg-&gt;right</span></div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; <span class="comment">// Note that arg0 is aligned with &quot;offset&quot;.</span></div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = offset + 1; i &lt;= offset + 3; ++i)</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160; {</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(vArg, fields[i], type, i);</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160; }</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; }</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21">ExtAPI::EFT_STD_LIST_HOOK</a>:</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; {</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vSrc = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vDst = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vSrc);</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vDst);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, dst);</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; }</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae3e90095a170aa15d9b6c305469e32af">ExtAPI::CPP_EFT_A0R_A1</a>:</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; {</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; <span class="keywordflow">if</span> (symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; {</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS, vnD);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; }</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; }</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054">ExtAPI::CPP_EFT_A0R_A1R</a>:</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; {</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; <span class="keywordflow">if</span> (symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; {</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vnD &amp;&amp; vnS &amp;&amp; <span class="stringliteral">&quot;dst or src not exist?&quot;</span>);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(vnS,dummy);</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy,vnD);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; }</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; }</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a3eb7d75552ce138f55c840b6635d32ed">ExtAPI::CPP_EFT_A1R</a>:</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; {</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; <span class="keywordflow">if</span> (symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; {</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vnS &amp;&amp; <span class="stringliteral">&quot;src not exist?&quot;</span>);</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(vnS,dummy);</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; }</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; }</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6c9b3a6987d311c61156dab96e5ad3b9">ExtAPI::CPP_EFT_DYNAMIC_CAST</a>:</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; {</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg0 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *retVal = cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>();</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(vArg0);</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(src &amp;&amp; <span class="stringliteral">&quot;src not exist?&quot;</span>);</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(retVal);</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dst &amp;&amp; <span class="stringliteral">&quot;dst not exist?&quot;</span>);</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src, dst);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; }</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9d9ec33eb5ecf285ccf2aa575bcba31a">ExtAPI::EFT_CXA_BEGIN_CATCH</a>:</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; {</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; }</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <span class="comment">//default:</span></div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9">ExtAPI::EFT_OTHER</a>:</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; {</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; {</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; std::string str;</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;function &quot;</span> &lt;&lt; callee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>() &lt;&lt; <span class="stringliteral">&quot; not in the external function summary list&quot;</span>;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(rawstr.str());</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; <span class="comment">//assert(&quot;unknown ext.func type&quot;);</span></div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; }</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; }</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; }</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; }</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c2abeb363081381c3dc939ab511e3f0">isThreadForkCall</a>(inst))</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; {</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* forkedFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad98299033577f1e7f4e9bc73dff3b253">getLLVMFunction</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ac840e43fa58a90099de99a1953f091ac">getForkedFun</a>(inst)) )</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; {</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; forkedFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(forkedFun)-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>();</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#aaeeb386d80b51d729322317065606454">getActualParmAtForkSite</a>(inst);</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((forkedFun-&gt;arg_size() &lt;= 2) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of start routine should be one&quot;</span>);</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; <span class="keywordflow">if</span>(forkedFun-&gt;arg_size() &lt;= 2 &amp;&amp; forkedFun-&gt;arg_size() &gt;= 1)</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; {</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* formalParm = &amp;(*forkedFun-&gt;arg_begin());</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(actualParm-&gt;getType()) &amp;&amp; SVFUtil::isa&lt;PointerType&gt;(formalParm-&gt;getType()) )</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; {</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7a311f7789c6c7a028ad0f595c1e0295">addThreadForkEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(actualParm), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(formalParm),icfgNode);</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; }</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; }</div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160; }</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; {</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; }</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; }</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a28fbb7cc51eb7e25d88f43e3eb1f30fb">isHareParForCall</a>(inst))</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; {</div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* taskFunc = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad98299033577f1e7f4e9bc73dff3b253">getLLVMFunction</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab048cbce6e4f5a3d6ff90da3565220ff">getTaskFuncAtHareParForSite</a>(inst)) )</div><div class="line"><a name="l01446"></a><span class="lineno"> 1446</span>&#160; {</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((taskFunc-&gt;arg_size() == 3) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of hare_parallel_for&#39;s task routine should be 3&quot;</span>);</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad3471260b66bdd7e6b790ad2a94fe7ce">getTaskDataAtHareParForSite</a>(inst);</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* formalParm = &amp;(*taskFunc-&gt;arg_begin());</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(actualParm-&gt;getType()) &amp;&amp; SVFUtil::isa&lt;PointerType&gt;(formalParm-&gt;getType()) )</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; {</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7a311f7789c6c7a028ad0f595c1e0295">addThreadForkEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(actualParm), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(formalParm),icfgNode);</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; }</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; }</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; {</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160; }</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; }</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; }</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;}</div><div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">SVF::ExtAPI::EFT_L_A0</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00059">ExtAPI.h:59</a></div></div>
1991
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01073">1073</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
1992
+ <div class="fragment"><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;{</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* inst = cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>();</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a61ed4bb80d88b0f8dbc02535c224fdfb">isHeapAllocOrStaticExtCall</a>(cs))</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160; {</div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160; <span class="comment">// case 1: ret = new obj</span></div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab2064cb70c76f399ce115f2621adea35">isHeapAllocExtCallViaRet</a>(cs) || <a class="code" href="namespaceSVF_1_1SVFUtil.html#ae62938f722543d6d7fc201b685be1abf">isStaticExtCall</a>(cs))</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160; {</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> val = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(inst);</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, val);</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160; }</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160; <span class="comment">// case 2: *arg = new obj</span></div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160; {</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#aedfa6e9216c6c788c26aef1967689b76">isHeapAllocExtCallViaArg</a>(cs) &amp;&amp; <span class="stringliteral">&quot;Must be heap alloc call via arg.&quot;</span>);</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160; <span class="keywordtype">int</span> arg_pos = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a73215bac62f1340a58f6c7f2ba9b0e7b">getHeapAllocHoldingArgPosition</a>(callee);</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *arg = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(arg_pos);</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160; <span class="keywordflow">if</span> (arg-&gt;getType()-&gt;isPointerTy())</div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160; {</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(arg);</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a18388bc282c5329a837c6a273893c4fb">addDummyObjNode</a>();</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160; <span class="keywordflow">if</span> (vnArg &amp;&amp; dummy &amp;&amp; obj)</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160; {</div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, dummy);</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy, vnArg);</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160; }</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160; }</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160; {</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;Arg receiving new object must be pointer type&quot;</span>);</div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160; }</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160; }</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160; }</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160; {</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160; {</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">ExtAPI::extf_t</a> tF= <a class="code" href="namespaceSVF_1_1SVFUtil.html#ac3e7507fb376b1625bc1573132ab9f06">extCallTy</a>(callee);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160; <span class="keywordflow">switch</span>(tF)</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160; {</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1f23e7b8cdd103943f515e807bf36b1c">ExtAPI::EFT_REALLOC</a>:</div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160; {</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160; <span class="keywordflow">if</span>(!SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160; <span class="comment">// e.g. void *realloc(void *ptr, size_t size)</span></div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160; <span class="comment">// if ptr is null then we will treat it as a malloc</span></div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160; <span class="comment">// if ptr is not null, then we assume a new data memory will be attached to</span></div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160; <span class="comment">// the tail of old allocated memory block.</span></div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantPointerNull&gt;(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)))</div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160; {</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> val = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(inst);</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, val);</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160; }</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160; }</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">ExtAPI::EFT_L_A0</a>:</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">ExtAPI::EFT_L_A1</a>:</div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d">ExtAPI::EFT_L_A2</a>:</div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c">ExtAPI::EFT_L_A8</a>:</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160; {</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160; <span class="keywordflow">if</span>(!SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dstNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> arg_pos;</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160; <span class="keywordflow">switch</span>(tF)</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160; {</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">ExtAPI::EFT_L_A1</a>:</div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160; arg_pos= 1;</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac078d0307bec384b6df3da561045ff7d">ExtAPI::EFT_L_A2</a>:</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160; arg_pos= 2;</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c">ExtAPI::EFT_L_A8</a>:</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160; arg_pos= 8;</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160; <span class="keywordflow">default</span>:</div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160; arg_pos= 0;</div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160; }</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src= cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(arg_pos);</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(src-&gt;getType()))</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160; {</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(src);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(srcNode, dstNode);</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160; }</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dstNode);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160; }</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa0cecd43037de38c00ec6017b03bbb3f">ExtAPI::EFT_L_A0__A0R_A1</a>:</div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160; {</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160; <span class="comment">// this is only for memset(void *str, int c, size_t n)</span></div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160; <span class="comment">// which copies the character c (an unsigned char) to the first n characters of the string pointed to, by the argument str</span></div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160; <span class="comment">// However, the second argument is non-pointer, thus we can not use addComplexConsForExt</span></div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160; <span class="comment">// addComplexConsForExt(cs.getArgument(0), cs.getArgument(1));</span></div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160; }</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a54aa3d7051aab7d65ee1154538bfbb48">ExtAPI::EFT_L_A0__A0R_A1R</a>:</div><div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>&#160; {</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160; <span class="comment">//memcpy returns the dest.</span></div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160; {</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160; }</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160; }</div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae7e7e0702f480304f4afefa96f6c5002">ExtAPI::EFT_A1R_A0R</a>:</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a80ea82d0181911894919c181eb1f4e35">ExtAPI::EFT_L_A1__FunPtr</a>:</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160; {</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</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;(src))</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160; src = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a86763e6a3606598580cd0172aecb5bc7">stripConstantCasts</a>(gep-&gt;getPointerOperand());</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a>* glob = SVFUtil::dyn_cast&lt;GlobalVariable&gt;(src)){</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ad9ebd847ed5d901cd30b1cfcdaec3462">ConstantDataArray</a>* constarray = SVFUtil::dyn_cast&lt;ConstantDataArray&gt;(glob-&gt;getInitializer())){</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a6f82e03d880257527bd9cb5978e05604">getProgFunction</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aa67bbd366b93fb1ec7a540c83566c977">svfMod</a>,constarray-&gt;getAsCString().str())){</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> srcNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(fun-&gt;getLLVMFun());</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(srcNode, <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160; }</div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160; }</div><div class="line"><a name="l01201"></a><span class="lineno"> 1201</span>&#160; }</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160; }</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4ba81144ee1a70785fbf83ca5f0d4573">ExtAPI::EFT_A3R_A1R_NS</a>:</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160; <span class="comment">//These func. are never used to copy structs, so the size is 1.</span></div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">addComplexConsForExt</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(3), cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1), 1);</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4c1361546aa103c26b11b0b89dc8d482">ExtAPI::EFT_A1R_A0</a>:</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160; {</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01214"></a><span class="lineno"> 1214</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160; }</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab8814290c2362cd812a7783802eb209a">ExtAPI::EFT_A2R_A1</a>:</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160; {</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(2));</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160; }</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac631e9cc3bb430a9c12d0c004d2ca97d">ExtAPI::EFT_A4R_A1</a>:</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160; {</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(4));</div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01228"></a><span class="lineno"> 1228</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160; }</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aac3eaaf0865895ce144c035e429166be">ExtAPI::EFT_L_A0__A1_A0</a>:</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160; {</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160; <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;(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0))) {</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1)), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(load-&gt;getPointerOperand()));</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(load-&gt;getPointerOperand()), <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst));</div><div class="line"><a name="l01242"></a><span class="lineno"> 1242</span>&#160; }</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;<span class="comment">// else if (const GetElementPtrInst *gep = SVFUtil::dyn_cast&lt;GetElementPtrInst&gt;(cs.getArgument(0))) {</span></div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;<span class="comment">// addStoreEdge(getValueNode(cs.getArgument(1)), getValueNode(cs.getArgument(0)));</span></div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;<span class="comment">// if (SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</span></div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;<span class="comment">// addCopyEdge(getValueNode(cs.getArgument(0)), getValueNode(inst));</span></div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;<span class="comment">// }</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160; }</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae8423cc29f4de0225e30de6982e6a3a4">ExtAPI::EFT_L_A0__A2R_A0</a>:</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160; {</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160; {</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160; <span class="comment">//Do the L_A0 part if the retval is used.</span></div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst);</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src= cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01257"></a><span class="lineno"> 1257</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(src-&gt;getType()))</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160; {</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(src);</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160; <span class="keywordflow">if</span>(vnS)</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(vnS,vnD);</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160; }</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(vnD);</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160; }</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160; <span class="comment">//Do the A2R_A0 part.</span></div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(2));</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS= <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01270"></a><span class="lineno"> 1270</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160; }</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a035cf8a39c192608ec0e91d48e479899">ExtAPI::EFT_A0R_NEW</a>:</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a4353ad2b443e7f7ce2151869eed9c097">ExtAPI::EFT_A1R_NEW</a>:</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a27b8dfa0742daa17c3e1a520d03dbd14">ExtAPI::EFT_A2R_NEW</a>:</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afe69efc20e29f95e0e333d1a462576a2">ExtAPI::EFT_A4R_NEW</a>:</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be">ExtAPI::EFT_A11R_NEW</a>:</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160; {</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">&quot;Alloc via arg cases are not handled here.&quot;</span>);</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160; }</div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac57ade96d1d18b9f2d4d36bc6928c5c4">ExtAPI::EFT_ALLOC</a>:</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">ExtAPI::EFT_NOSTRUCT_ALLOC</a>:</div><div class="line"><a name="l01284"></a><span class="lineno"> 1284</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0">ExtAPI::EFT_STAT</a>:</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a515c2184a7461fc1788a514432a7ec22">ExtAPI::EFT_STAT2</a>:</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!<span class="stringliteral">&quot;alloc type func. are not handled here&quot;</span>);</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160; {</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160; <span class="comment">// fdopen will return an integer in LLVM IR.</span></div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(<span class="stringliteral">&quot;alloc type func do not return pointer type&quot;</span>);</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160; }</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a87c4ba17ac3567a0673d6516995e06ef">ExtAPI::EFT_NOOP</a>:</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b98279d1926e4ebfb237a43536c7b73">ExtAPI::EFT_FREE</a>:</div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01297"></a><span class="lineno"> 1297</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b">ExtAPI::EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a>:</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160; {</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg1 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg3 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(3);</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160; <span class="comment">// We have vArg3 points to the entry of _Rb_tree_node_base { color; parent; left; right; }.</span></div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160; <span class="comment">// Now we calculate the offset from base to vArg3</span></div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg3 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vArg3);</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> offset = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(vnArg3).<a class="code" href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">accumulateConstantFieldIdx</a>();</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160; <span class="comment">// We get all flattened fields of base</span></div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160; vector&lt;LocationSet&gt; fields;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(vArg3, fields);</div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() &gt;= 4 &amp;&amp; <span class="stringliteral">&quot;_Rb_tree_node_base should have at least 4 fields.\n&quot;</span>);</div><div class="line"><a name="l01311"></a><span class="lineno"> 1311</span>&#160;</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160; <span class="comment">// We summarize the side effects: arg3-&gt;parent = arg1, arg3-&gt;left = arg1, arg3-&gt;right = arg1</span></div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; <span class="comment">// Note that arg0 is aligned with &quot;offset&quot;.</span></div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = offset + 1; i &lt;= offset + 3; ++i)</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160; {</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(vArg3, fields[i], type, i);</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(vArg1);</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160; }</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160; }</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a31d0b620d3344c68ecfd71c9faf1d598">ExtAPI::EFT_STD_RB_TREE_INCREMENT</a>:</div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160; {</div><div class="line"><a name="l01325"></a><span class="lineno"> 1325</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(inst);</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnArg = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vArg);</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160; <a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> offset = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">getLocationSetFromBaseNode</a>(vnArg).<a class="code" href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">accumulateConstantFieldIdx</a>();</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160; <span class="comment">// We get all fields</span></div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160; vector&lt;LocationSet&gt; fields;</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> *type = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">getBaseTypeAndFlattenedFields</a>(vArg,fields);</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(fields.size() &gt;= 4 &amp;&amp; <span class="stringliteral">&quot;_Rb_tree_node_base should have at least 4 fields.\n&quot;</span>);</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160; <span class="comment">// We summarize the side effects: ret = arg-&gt;parent, ret = arg-&gt;left, ret = arg-&gt;right</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160; <span class="comment">// Note that arg0 is aligned with &quot;offset&quot;.</span></div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = offset + 1; i &lt;= offset + 3; ++i)</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160; {</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">getGepValVar</a>(vArg, fields[i], type, i);</div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160; <span class="keywordflow">if</span>(vnD &amp;&amp; vnS)</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS,vnD);</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160; }</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160; }</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21">ExtAPI::EFT_STD_LIST_HOOK</a>:</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160; {</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vSrc = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vDst = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1);</div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vSrc);</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(vDst);</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, dst);</div><div class="line"><a name="l01353"></a><span class="lineno"> 1353</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160; }</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ae3e90095a170aa15d9b6c305469e32af">ExtAPI::CPP_EFT_A0R_A1</a>:</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160; {</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160; <span class="keywordflow">if</span> (symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160; {</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(vnS, vnD);</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160; }</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160; }</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054">ExtAPI::CPP_EFT_A0R_A1R</a>:</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160; {</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160; <span class="keywordflow">if</span> (symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160; {</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnD = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0));</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vnD &amp;&amp; vnS &amp;&amp; <span class="stringliteral">&quot;dst or src not exist?&quot;</span>);</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(vnS,dummy);</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(dummy,vnD);</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160; }</div><div class="line"><a name="l01378"></a><span class="lineno"> 1378</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160; }</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a3eb7d75552ce138f55c840b6635d32ed">ExtAPI::CPP_EFT_A1R</a>:</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160; {</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160; <span class="keywordflow">if</span> (symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a89e9c6da843e5eef25c51afd5d0937e5">getModelConstants</a>())</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160; {</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(1));</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(vnS &amp;&amp; <span class="stringliteral">&quot;src not exist?&quot;</span>);</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dummy = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa7e98cd2fd599aedefa4c2e6fb659da0">addDummyValNode</a>();</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(vnS,dummy);</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160; }</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160; }</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6c9b3a6987d311c61156dab96e5ad3b9">ExtAPI::CPP_EFT_DYNAMIC_CAST</a>:</div><div class="line"><a name="l01393"></a><span class="lineno"> 1393</span>&#160; {</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *vArg0 = cs.<a class="code" href="classSVF_1_1CallSite.html#a26a594d36bbb5b77e7085502812d9ca2">getArgument</a>(0);</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *retVal = cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>();</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(vArg0);</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(src &amp;&amp; <span class="stringliteral">&quot;src not exist?&quot;</span>);</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(retVal);</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dst &amp;&amp; <span class="stringliteral">&quot;dst not exist?&quot;</span>);</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src, dst);</div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160; }</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9d9ec33eb5ecf285ccf2aa575bcba31a">ExtAPI::EFT_CXA_BEGIN_CATCH</a>:</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160; {</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160; }</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160; <span class="comment">//default:</span></div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160; <span class="keywordflow">case</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ac8af5ecc06abccdbcba873e2be3f11f9">ExtAPI::EFT_OTHER</a>:</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160; {</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(inst-&gt;getType()))</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160; {</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160; std::string str;</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160; <a class="code" href="namespaceSVF.html#a726981481ac082dcda3e4921416b65a0">raw_string_ostream</a> rawstr(str);</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160; rawstr &lt;&lt; <span class="stringliteral">&quot;function &quot;</span> &lt;&lt; callee-&gt;<a class="code" href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">getName</a>() &lt;&lt; <span class="stringliteral">&quot; not in the external function summary list&quot;</span>;</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">writeWrnMsg</a>(rawstr.str());</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160; <span class="comment">//assert(&quot;unknown ext.func type&quot;);</span></div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160; }</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160; }</div><div class="line"><a name="l01419"></a><span class="lineno"> 1419</span>&#160; }</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160; }</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c2abeb363081381c3dc939ab511e3f0">isThreadForkCall</a>(inst))</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160; {</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* forkedFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad98299033577f1e7f4e9bc73dff3b253">getLLVMFunction</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ac840e43fa58a90099de99a1953f091ac">getForkedFun</a>(inst)) )</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160; {</div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160; forkedFun = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a142e650415cb81011eb59dadd3cb0637">getDefFunForMultipleModule</a>(forkedFun)-&gt;<a class="code" href="classSVF_1_1SVFFunction.html#ac4ae917ae35ac6fca652fe2dd90a8ac2">getLLVMFun</a>();</div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#aaeeb386d80b51d729322317065606454">getActualParmAtForkSite</a>(inst);</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((forkedFun-&gt;arg_size() &lt;= 2) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of start routine should be one&quot;</span>);</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160; <span class="keywordflow">if</span>(forkedFun-&gt;arg_size() &lt;= 2 &amp;&amp; forkedFun-&gt;arg_size() &gt;= 1)</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160; {</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* formalParm = &amp;(*forkedFun-&gt;arg_begin());</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(actualParm-&gt;getType()) &amp;&amp; SVFUtil::isa&lt;PointerType&gt;(formalParm-&gt;getType()) )</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160; {</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7a311f7789c6c7a028ad0f595c1e0295">addThreadForkEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(actualParm), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(formalParm),icfgNode);</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160; }</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160; }</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160; }</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160; {</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160; }</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160; }</div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;</div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a28fbb7cc51eb7e25d88f43e3eb1f30fb">isHareParForCall</a>(inst))</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160; {</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* taskFunc = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad98299033577f1e7f4e9bc73dff3b253">getLLVMFunction</a>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab048cbce6e4f5a3d6ff90da3565220ff">getTaskFuncAtHareParForSite</a>(inst)) )</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160; {</div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((taskFunc-&gt;arg_size() == 3) &amp;&amp; <span class="stringliteral">&quot;Size of formal parameter of hare_parallel_for&#39;s task routine should be 3&quot;</span>);</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* actualParm = <a class="code" href="namespaceSVF_1_1SVFUtil.html#ad3471260b66bdd7e6b790ad2a94fe7ce">getTaskDataAtHareParForSite</a>(inst);</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* formalParm = &amp;(*taskFunc-&gt;arg_begin());</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;PointerType&gt;(actualParm-&gt;getType()) &amp;&amp; SVFUtil::isa&lt;PointerType&gt;(formalParm-&gt;getType()) )</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160; {</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(inst);</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7a311f7789c6c7a028ad0f595c1e0295">addThreadForkEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(actualParm), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(formalParm),icfgNode);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160; }</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160; }</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160; {</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; }</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160; }</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;</div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160; }</div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;}</div><div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a6363df51947cab85ec4ae04b4e056f96">SVF::ExtAPI::EFT_L_A0</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00059">ExtAPI.h:59</a></div></div>
1986
1993
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094afedd2f66497ed9404b8b3cb1d16a3f0b">SVF::ExtAPI::EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00081">ExtAPI.h:81</a></div></div>
1987
1994
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_ad98299033577f1e7f4e9bc73dff3b253"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ad98299033577f1e7f4e9bc73dff3b253">SVF::SVFUtil::getLLVMFunction</a></div><div class="ttdeci">const Function * getLLVMFunction(const Value *val)</div><div class="ttdoc">Return LLVM function if this value is. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00053">LLVMUtil.h:53</a></div></div>
1988
1995
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a3e80511758692d2ad4e5dbee15beb719"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00281">SVFIRBuilder.h:281</a></div></div>
@@ -1999,14 +2006,14 @@ Private Attributes</h2></td></tr>
1999
2006
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
2000
2007
  <div class="ttc" id="classSVF_1_1SVFIR_html_a8b36d077c30fb2830a253ded82413c2d"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a8b36d077c30fb2830a253ded82413c2d">SVF::SVFIR::getLocationSetFromBaseNode</a></div><div class="ttdeci">LocationSet getLocationSetFromBaseNode(NodeID nodeId)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8cpp_source.html#l00529">SVFIR.cpp:529</a></div></div>
2001
2008
  <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
2002
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ad0b30ca8fc2939bb7360a3ff08727d58"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">SVF::SVFIRBuilder::getGepValVar</a></div><div class="ttdeci">NodeID getGepValVar(const Value *val, const LocationSet &amp;ls, const Type *baseType, u32_t fieldidx)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01509">SVFIRBuilder.cpp:1509</a></div></div>
2009
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ad0b30ca8fc2939bb7360a3ff08727d58"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ad0b30ca8fc2939bb7360a3ff08727d58">SVF::SVFIRBuilder::getGepValVar</a></div><div class="ttdeci">NodeID getGepValVar(const Value *val, const LocationSet &amp;ls, const Type *baseType, u32_t fieldidx)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01522">SVFIRBuilder.cpp:1522</a></div></div>
2003
2010
  <div class="ttc" id="classSVF_1_1CallSite_html_ab36a6a35eea673d4bdca615efc4336b1"><div class="ttname"><a href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">SVF::CallSite::getInstruction</a></div><div class="ttdeci">CallBase * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00310">BasicTypes.h:310</a></div></div>
2004
2011
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aed5f4c75cc5016c61f441abf06a2bf21">SVF::ExtAPI::EFT_STD_LIST_HOOK</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00083">ExtAPI.h:83</a></div></div>
2005
2012
  <div class="ttc" id="classSVF_1_1SVFValue_html_adc15c1f7a77158142156fba7524e89c9"><div class="ttname"><a href="classSVF_1_1SVFValue.html#adc15c1f7a77158142156fba7524e89c9">SVF::SVFValue::getName</a></div><div class="ttdeci">const llvm::StringRef getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00231">SVFBasicTypes.h:231</a></div></div>
2006
2013
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a7f75d2265448acf50cd59151a1241054">SVF::ExtAPI::CPP_EFT_A0R_A1R</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00086">ExtAPI.h:86</a></div></div>
2007
2014
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8b59b6966952577361826d09b95b76be">SVF::ExtAPI::EFT_A11R_NEW</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00080">ExtAPI.h:80</a></div></div>
2008
2015
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a1e119ad93f66dbbf8014917febad843c">SVF::ExtAPI::EFT_L_A8</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00062">ExtAPI.h:62</a></div></div>
2009
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ab83a61a519cb0bb6fed823a938cf0602"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">SVF::SVFIRBuilder::addComplexConsForExt</a></div><div class="ttdeci">void addComplexConsForExt(Value *D, Value *S, u32_t sz=0)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01014">SVFIRBuilder.cpp:1014</a></div></div>
2016
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ab83a61a519cb0bb6fed823a938cf0602"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ab83a61a519cb0bb6fed823a938cf0602">SVF::SVFIRBuilder::addComplexConsForExt</a></div><div class="ttdeci">void addComplexConsForExt(Value *D, Value *S, u32_t sz=0)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01027">SVFIRBuilder.cpp:1027</a></div></div>
2010
2017
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a077caa1b10ab84d101d79fc7ea50db2d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a077caa1b10ab84d101d79fc7ea50db2d">SVF::SVFUtil::writeWrnMsg</a></div><div class="ttdeci">void writeWrnMsg(std::string msg)</div><div class="ttdoc">Writes a message run through wrnMsg. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00069">SVFUtil.cpp:69</a></div></div>
2011
2018
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a94f514e925fdb422632840ca44343af0">SVF::ExtAPI::EFT_STAT</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00057">ExtAPI.h:57</a></div></div>
2012
2019
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a8782293305260b1500a09b473439d3b0">SVF::ExtAPI::EFT_NOSTRUCT_ALLOC</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00056">ExtAPI.h:56</a></div></div>
@@ -2076,7 +2083,7 @@ Private Attributes</h2></td></tr>
2076
2083
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aec63c85b24133af679d60dda42ab44ab">SVF::ExtAPI::EFT_L_A1</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00060">ExtAPI.h:60</a></div></div>
2077
2084
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8h_source.html#l00063">LLVMUtil.h:63</a></div></div>
2078
2085
  <div class="ttc" id="classSVF_1_1LocationSet_html_a43de212ce81a29391cee13d8dbaa93eb"><div class="ttname"><a href="classSVF_1_1LocationSet.html#a43de212ce81a29391cee13d8dbaa93eb">SVF::LocationSet::accumulateConstantFieldIdx</a></div><div class="ttdeci">Size_t accumulateConstantFieldIdx() const</div><div class="ttdoc">Get methods. </div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00154">LocationSet.h:154</a></div></div>
2079
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ac03c4203e4b32a68dd548af64764fe2c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">SVF::SVFIRBuilder::getBaseTypeAndFlattenedFields</a></div><div class="ttdeci">const Type * getBaseTypeAndFlattenedFields(const Value *V, std::vector&lt; LocationSet &gt; &amp;fields)</div><div class="ttdoc">Get the base type and max offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00960">SVFIRBuilder.cpp:960</a></div></div>
2086
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ac03c4203e4b32a68dd548af64764fe2c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ac03c4203e4b32a68dd548af64764fe2c">SVF::SVFIRBuilder::getBaseTypeAndFlattenedFields</a></div><div class="ttdeci">const Type * getBaseTypeAndFlattenedFields(const Value *V, std::vector&lt; LocationSet &gt; &amp;fields)</div><div class="ttdoc">Get the base type and max offset. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00973">SVFIRBuilder.cpp:973</a></div></div>
2080
2087
  <div class="ttc" id="classSVF_1_1SymbolTableInfo_html"><div class="ttname"><a href="classSVF_1_1SymbolTableInfo.html">SVF::SymbolTableInfo</a></div><div class="ttdef"><b>Definition:</b> <a href="SymbolTableInfo_8h_source.html#l00047">SymbolTableInfo.h:47</a></div></div>
2081
2088
  </div><!-- fragment -->
2082
2089
  </div>
@@ -2100,8 +2107,8 @@ Private Attributes</h2></td></tr>
2100
2107
  <p>Handle indirect call. </p>
2101
2108
  <p>Indirect call is resolved on-the-fly during pointer analysis </p>
2102
2109
 
2103
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01474">1474</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2104
- <div class="fragment"><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;{</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cbn = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa91db3ebf92eacf077ae7b4d0735635b">addIndirectCallsites</a>(cbn,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a9526f6c3829f8897d1ca617feda8451a">getCalledValue</a>()));</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;}</div><div class="ttc" id="classSVF_1_1ICFG_html_a7d10e8a815c836a070d35850f817a18c"><div class="ttname"><a href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">SVF::ICFG::getCallBlockNode</a></div><div class="ttdeci">CallBlockNode * getCallBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00197">ICFG.cpp:197</a></div></div>
2110
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01487">1487</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2111
+ <div class="fragment"><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;{</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cbn = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa91db3ebf92eacf077ae7b4d0735635b">addIndirectCallsites</a>(cbn,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#a9526f6c3829f8897d1ca617feda8451a">getCalledValue</a>()));</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;}</div><div class="ttc" id="classSVF_1_1ICFG_html_a7d10e8a815c836a070d35850f817a18c"><div class="ttname"><a href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">SVF::ICFG::getCallBlockNode</a></div><div class="ttdeci">CallBlockNode * getCallBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00197">ICFG.cpp:197</a></div></div>
2105
2112
  <div class="ttc" id="classSVF_1_1CallSite_html_a9526f6c3829f8897d1ca617feda8451a"><div class="ttname"><a href="classSVF_1_1CallSite.html#a9526f6c3829f8897d1ca617feda8451a">SVF::CallSite::getCalledValue</a></div><div class="ttdeci">Value * getCalledValue() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00321">BasicTypes.h:321</a></div></div>
2106
2113
  <div class="ttc" id="classSVF_1_1CallSite_html_ab36a6a35eea673d4bdca615efc4336b1"><div class="ttname"><a href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">SVF::CallSite::getInstruction</a></div><div class="ttdeci">CallBase * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00310">BasicTypes.h:310</a></div></div>
2107
2114
  <div class="ttc" id="classSVF_1_1IRGraph_html_abffddd41cc308b9b3bd5ad4a7f8f1624"><div class="ttname"><a href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00120">IRGraph.h:120</a></div></div>
@@ -2145,13 +2152,13 @@ Private Attributes</h2></td></tr>
2145
2152
  </div><div class="memdoc">
2146
2153
  <p>src should not point to anything yet </p>
2147
2154
 
2148
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00431">431</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2149
- <div class="fragment"><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160;{</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;global &quot;</span> &lt;&lt; *gvar &lt;&lt; <span class="stringliteral">&quot; constant initializer: &quot;</span> &lt;&lt; *C</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isSingleValueType())</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; {</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(C);</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="comment">// get the field value if it is avaiable, otherwise we create a dummy field node.</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(gvar, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> field = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8e2440b87147a9d1380876d6beb410ae">getGlobalVarField</a>(gvar, offset);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GlobalVariable&gt;(C) || SVFUtil::isa&lt;Function&gt;(C))</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; {</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, field);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; }</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(C))</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="comment">// add gep edge of C1 itself is a constant expression</span></div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(C);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, field);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; }</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(C))</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; {</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div><div class="line"><a name="l00460"></a><span class="lineno"> 460</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><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(C);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>(), src);</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; }</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; {</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, field);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isPtrOrPtrVectorTy() &amp;&amp; src != <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>())</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>(), src);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; }</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; }</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantArray&gt;(C))</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; {</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">cppUtil::isValVtbl</a>(gvar) == <span class="keyword">false</span>)</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</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><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">InitialGlobal</a>(gvar, SVFUtil::cast&lt;Constant&gt;(C-&gt;getOperand(i)), offset);</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; }</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantStruct&gt;(C))</div><div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; {</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty = SVFUtil::cast&lt;StructType&gt;(C-&gt;getType());</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keyword">const</span> std::vector&lt;u32_t&gt;&amp; offsetvect =</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#ac50e1d8f8b8e514d098a55bfbac86010">getFlattenedFieldIdxVec</a>(sty);</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</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><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; {</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = offsetvect[i];</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">InitialGlobal</a>(gvar, SVFUtil::cast&lt;Constant&gt;(C-&gt;getOperand(i)), offset + off);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160;</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; {</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="comment">//TODO:assert(false,&quot;what else do we have&quot;);</span></div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; }</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a2a0711cb1fdd3c5c90b07ff107aff1ac"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">SVF::SVFIRBuilder::addAddrEdge</a></div><div class="ttdeci">AddrStmt * addAddrEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Address edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00289">SVFIRBuilder.h:289</a></div></div>
2155
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00444">444</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2156
+ <div class="fragment"><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160;{</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;global &quot;</span> &lt;&lt; *gvar &lt;&lt; <span class="stringliteral">&quot; constant initializer: &quot;</span> &lt;&lt; *C</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160;</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isSingleValueType())</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; {</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(C);</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; <span class="comment">// get the field value if it is avaiable, otherwise we create a dummy field node.</span></div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(gvar, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> field = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a8e2440b87147a9d1380876d6beb410ae">getGlobalVarField</a>(gvar, offset);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160;</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;GlobalVariable&gt;(C) || SVFUtil::isa&lt;Function&gt;(C))</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; {</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, field);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; }</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(C))</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; {</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <span class="comment">// add gep edge of C1 itself is a constant expression</span></div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(C);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, field);</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; }</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(C))</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; {</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</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><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(C);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>(), src);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; {</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(C, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, field);</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <span class="keywordflow">if</span> (C-&gt;getType()-&gt;isPtrOrPtrVectorTy() &amp;&amp; src != <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>())</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>(), src);</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; }</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantArray&gt;(C))</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1cppUtil.html#aeef0f5c6486379043a7d47b0635f2667">cppUtil::isValVtbl</a>(gvar) == <span class="keyword">false</span>)</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</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><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">InitialGlobal</a>(gvar, SVFUtil::cast&lt;Constant&gt;(C-&gt;getOperand(i)), offset);</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160;</div><div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantStruct&gt;(C))</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; {</div><div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a2bf58575ac7d068e0f1a4cf953b9e6cb">StructType</a> *sty = SVFUtil::cast&lt;StructType&gt;(C-&gt;getType());</div><div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="keyword">const</span> std::vector&lt;u32_t&gt;&amp; offsetvect =</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>()-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#ac50e1d8f8b8e514d098a55bfbac86010">getFlattenedFieldIdxVec</a>(sty);</div><div class="line"><a name="l00499"></a><span class="lineno"> 499</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><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; {</div><div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> off = offsetvect[i];</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">InitialGlobal</a>(gvar, SVFUtil::cast&lt;Constant&gt;(C-&gt;getOperand(i)), offset + off);</div><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; }</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; }</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; {</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="comment">//TODO:assert(false,&quot;what else do we have&quot;);</span></div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; }</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a2a0711cb1fdd3c5c90b07ff107aff1ac"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">SVF::SVFIRBuilder::addAddrEdge</a></div><div class="ttdeci">AddrStmt * addAddrEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Address edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00289">SVFIRBuilder.h:289</a></div></div>
2150
2157
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2151
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a8e2440b87147a9d1380876d6beb410ae"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a8e2440b87147a9d1380876d6beb410ae">SVF::SVFIRBuilder::getGlobalVarField</a></div><div class="ttdeci">NodeID getGlobalVarField(const GlobalVariable *gvar, u32_t offset)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00401">SVFIRBuilder.cpp:401</a></div></div>
2158
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a8e2440b87147a9d1380876d6beb410ae"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a8e2440b87147a9d1380876d6beb410ae">SVF::SVFIRBuilder::getGlobalVarField</a></div><div class="ttdeci">NodeID getGlobalVarField(const GlobalVariable *gvar, u32_t offset)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00414">SVFIRBuilder.cpp:414</a></div></div>
2152
2159
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2153
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ae7fcd2050a57a43bfed2c7fd1c41d250"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">SVF::SVFIRBuilder::InitialGlobal</a></div><div class="ttdeci">void InitialGlobal(const GlobalVariable *gvar, Constant *C, u32_t offset)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00431">SVFIRBuilder.cpp:431</a></div></div>
2154
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5adf8baa546292434ba1fec48db2d0a7"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">SVF::SVFIRBuilder::processCE</a></div><div class="ttdeci">void processCE(const Value *val)</div><div class="ttdoc">Process constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00275">SVFIRBuilder.cpp:275</a></div></div>
2160
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ae7fcd2050a57a43bfed2c7fd1c41d250"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">SVF::SVFIRBuilder::InitialGlobal</a></div><div class="ttdeci">void InitialGlobal(const GlobalVariable *gvar, Constant *C, u32_t offset)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00444">SVFIRBuilder.cpp:444</a></div></div>
2161
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5adf8baa546292434ba1fec48db2d0a7"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">SVF::SVFIRBuilder::processCE</a></div><div class="ttdeci">void processCE(const Value *val)</div><div class="ttdoc">Process constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00288">SVFIRBuilder.cpp:288</a></div></div>
2155
2162
  <div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
2156
2163
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a15105737c91d01ba9daf2161fad220ef"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">SVF::SVFIRBuilder::setCurrentLocation</a></div><div class="ttdeci">void setCurrentLocation(const Value *val, const BasicBlock *bb)</div><div class="ttdoc">Set current basic block in order to keep track of control flow information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00239">SVFIRBuilder.h:239</a></div></div>
2157
2164
  <div class="ttc" id="classSVF_1_1IRGraph_html_a3de9a2a565c303f68a90c32dc59febd5"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">SVF::IRGraph::getNullPtr</a></div><div class="ttdeci">NodeID getNullPtr() const</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00156">IRGraph.h:156</a></div></div>
@@ -2187,8 +2194,8 @@ Private Attributes</h2></td></tr>
2187
2194
  <p>Initialize nodes and edges. </p>
2188
2195
  <p>add address edges for constant nodes. </p>
2189
2196
 
2190
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00128">128</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2191
- <div class="fragment"><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;{</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Initialise SVFIR Nodes ...\n&quot;</span>);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160;</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2b532a5db0197c579b512fbcdb4d6220">addBlackholeObjNode</a>();</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aff3f3ff198e7511576484dfda7bf051b">addConstantObjNode</a>();</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2b1de62f88588b068d4eed125049ed8d">addBlackholePtrNode</a>();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a1717e26e29f50096b96d7e4c43fe1c76">addNullPtrNode</a>();</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <span class="keywordflow">for</span> (SymbolTableInfo::ValueToIDMapTy::iterator iter =</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a8f3cb8a1db34dd692ee04561f4edeebf">valSyms</a>().begin(); iter != symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a8f3cb8a1db34dd692ee04561f4edeebf">valSyms</a>().end();</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; ++iter)</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; {</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add val node &quot;</span> &lt;&lt; iter-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">if</span>(iter-&gt;second == symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a1689fa03795200b501ae3887906e7e72">blkPtrSymID</a>() || iter-&gt;second == symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#adaed6e68c2f53260ed4c4fc38b5c4721">nullPtrSymID</a>())</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a93bc14960cdd4eb345c64e9b79757ccf">addValNode</a>(iter-&gt;first, iter-&gt;second);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <span class="keywordflow">for</span> (SymbolTableInfo::ValueToIDMapTy::iterator iter =</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a3f9612f32c651220386beb0514f8fcff">objSyms</a>().begin(); iter != symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a3f9612f32c651220386beb0514f8fcff">objSyms</a>().end();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; ++iter)</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; {</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add obj node &quot;</span> &lt;&lt; iter-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">if</span>(iter-&gt;second == symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a05ca2987d9f8716c24e489bec53502f4">blackholeSymID</a>() || iter-&gt;second == symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#ab582424fdb6d9674c1bd4466cdfbe497">constantSymID</a>())</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(iter-&gt;first, iter-&gt;second);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; }</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <span class="keywordflow">for</span> (SymbolTableInfo::FunToIDMapTy::iterator iter =</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#aafd4da7cef6387bb974abe20185b7b96">retSyms</a>().begin(); iter != symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#aafd4da7cef6387bb974abe20185b7b96">retSyms</a>().end();</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; ++iter)</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add ret node &quot;</span> &lt;&lt; iter-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(iter-&gt;first);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a38f6d0c7db935fd4e556761f96f1fa09">addRetNode</a>(fun, iter-&gt;second);</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">for</span> (SymbolTableInfo::FunToIDMapTy::iterator iter =</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#ac449cd925dc05758c990179c0748e1d5">varargSyms</a>().begin();</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; iter != symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#ac449cd925dc05758c990179c0748e1d5">varargSyms</a>().end(); ++iter)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add vararg node &quot;</span> &lt;&lt; iter-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(iter-&gt;first);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6ade5bf3edc7b6c3faafc3e5ff3d0538">addVarargNode</a>(fun, iter-&gt;second);</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="keywordflow">for</span> (SymbolTableInfo::ValueToIDMapTy::iterator iter =</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a3f9612f32c651220386beb0514f8fcff">objSyms</a>().begin(); iter != symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a3f9612f32c651220386beb0514f8fcff">objSyms</a>().end(); ++iter)</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add address edges for constant node &quot;</span> &lt;&lt; iter-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = iter-&gt;first;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <span class="keywordflow">if</span> (symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a61bda1c1c52fb765d0027d8141d35c35">isConstantObjSym</a>(val))</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptr = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(val);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">if</span>(ptr!= <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3b417ee79560fd00f4cf80906044c198">getBlkPtr</a>() &amp;&amp; ptr!= <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>())</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(val, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(iter-&gt;second, ptr);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; }</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; }</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>() &gt;= symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a7dda4943de0ed174a1d20fcdfde6c61c">getTotalSymNum</a>()</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; &amp;&amp; <span class="stringliteral">&quot;not all node been inititalize!!!&quot;</span>);</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_a2b1de62f88588b068d4eed125049ed8d"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2b1de62f88588b068d4eed125049ed8d">SVF::SVFIR::addBlackholePtrNode</a></div><div class="ttdeci">NodeID addBlackholePtrNode()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00586">SVFIR.h:586</a></div></div>
2197
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00141">141</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2198
+ <div class="fragment"><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160;{</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Initialise SVFIR Nodes ...\n&quot;</span>);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classSVF_1_1SymbolTableInfo.html">SymbolTableInfo</a>* symTable = <a class="code" href="classSVF_1_1SymbolTableInfo.html#a267169023fc4f8dd66b145f7231fec11">SymbolTableInfo::SymbolInfo</a>();</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2b532a5db0197c579b512fbcdb4d6220">addBlackholeObjNode</a>();</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aff3f3ff198e7511576484dfda7bf051b">addConstantObjNode</a>();</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a2b1de62f88588b068d4eed125049ed8d">addBlackholePtrNode</a>();</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a1717e26e29f50096b96d7e4c43fe1c76">addNullPtrNode</a>();</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">for</span> (SymbolTableInfo::ValueToIDMapTy::iterator iter =</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a8f3cb8a1db34dd692ee04561f4edeebf">valSyms</a>().begin(); iter != symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a8f3cb8a1db34dd692ee04561f4edeebf">valSyms</a>().end();</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; ++iter)</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add val node &quot;</span> &lt;&lt; iter-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">if</span>(iter-&gt;second == symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a1689fa03795200b501ae3887906e7e72">blkPtrSymID</a>() || iter-&gt;second == symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#adaed6e68c2f53260ed4c4fc38b5c4721">nullPtrSymID</a>())</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a93bc14960cdd4eb345c64e9b79757ccf">addValNode</a>(iter-&gt;first, iter-&gt;second);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">for</span> (SymbolTableInfo::ValueToIDMapTy::iterator iter =</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a3f9612f32c651220386beb0514f8fcff">objSyms</a>().begin(); iter != symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a3f9612f32c651220386beb0514f8fcff">objSyms</a>().end();</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; ++iter)</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add obj node &quot;</span> &lt;&lt; iter-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span>(iter-&gt;second == symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a05ca2987d9f8716c24e489bec53502f4">blackholeSymID</a>() || iter-&gt;second == symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#ab582424fdb6d9674c1bd4466cdfbe497">constantSymID</a>())</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a83bc8ecf4c5d10af10af3c8c44b9882d">addObjNode</a>(iter-&gt;first, iter-&gt;second);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; }</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="keywordflow">for</span> (SymbolTableInfo::FunToIDMapTy::iterator iter =</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#aafd4da7cef6387bb974abe20185b7b96">retSyms</a>().begin(); iter != symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#aafd4da7cef6387bb974abe20185b7b96">retSyms</a>().end();</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; ++iter)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add ret node &quot;</span> &lt;&lt; iter-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(iter-&gt;first);</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a38f6d0c7db935fd4e556761f96f1fa09">addRetNode</a>(fun, iter-&gt;second);</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; }</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160;</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">for</span> (SymbolTableInfo::FunToIDMapTy::iterator iter =</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#ac449cd925dc05758c990179c0748e1d5">varargSyms</a>().begin();</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; iter != symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#ac449cd925dc05758c990179c0748e1d5">varargSyms</a>().end(); ++iter)</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add vararg node &quot;</span> &lt;&lt; iter-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(iter-&gt;first);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6ade5bf3edc7b6c3faafc3e5ff3d0538">addVarargNode</a>(fun, iter-&gt;second);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <span class="keywordflow">for</span> (SymbolTableInfo::ValueToIDMapTy::iterator iter =</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a3f9612f32c651220386beb0514f8fcff">objSyms</a>().begin(); iter != symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a3f9612f32c651220386beb0514f8fcff">objSyms</a>().end(); ++iter)</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; {</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add address edges for constant node &quot;</span> &lt;&lt; iter-&gt;second &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = iter-&gt;first;</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">if</span> (symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a61bda1c1c52fb765d0027d8141d35c35">isConstantObjSym</a>(val))</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptr = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(val);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span>(ptr!= <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3b417ee79560fd00f4cf80906044c198">getBlkPtr</a>() &amp;&amp; ptr!= <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>())</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; {</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(val, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(iter-&gt;second, ptr);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; }</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>() &gt;= symTable-&gt;<a class="code" href="classSVF_1_1SymbolTableInfo.html#a7dda4943de0ed174a1d20fcdfde6c61c">getTotalSymNum</a>()</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; &amp;&amp; <span class="stringliteral">&quot;not all node been inititalize!!!&quot;</span>);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_a2b1de62f88588b068d4eed125049ed8d"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a2b1de62f88588b068d4eed125049ed8d">SVF::SVFIR::addBlackholePtrNode</a></div><div class="ttdeci">NodeID addBlackholePtrNode()</div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00586">SVFIR.h:586</a></div></div>
2192
2199
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a8c8d16036008f87c7811586047599858"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">SVF::GenericGraph::getTotalNodeNum</a></div><div class="ttdeci">u32_t getTotalNodeNum() const</div><div class="ttdoc">Get total number of node/edge. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00414">GenericGraph.h:414</a></div></div>
2193
2200
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a2a0711cb1fdd3c5c90b07ff107aff1ac"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">SVF::SVFIRBuilder::addAddrEdge</a></div><div class="ttdeci">AddrStmt * addAddrEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Address edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00289">SVFIRBuilder.h:289</a></div></div>
2194
2201
  <div class="ttc" id="classSVF_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#l00239">SymbolTableInfo.h:239</a></div></div>
@@ -2246,8 +2253,8 @@ Private Attributes</h2></td></tr>
2246
2253
  <p>Process constant expression. </p>
2247
2254
  <p>Handle constant expression, and connect the gep edge </p>
2248
2255
 
2249
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00275">275</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2250
- <div class="fragment"><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160;{</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <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><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; {</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</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_1SVFUtil.html#a384b0986a6c4e99dfc4e1629b3598c3c">isGepConstantExpr</a>(ref))</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle gep constant expression &quot;</span> &lt;&lt; *ref &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = gepce-&gt;getOperand(0);</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// handle recursive constant express case (gep (bitcast (gep X 1)) 1)</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(opnd);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="keywordtype">bool</span> constGep = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a87b75f04942124711d5ea1366e866890">computeGepOffset</a>(gepce, ls);</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// must invoke pag methods here, otherwise it will be a dead recursion cycle</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(gepce, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="comment"> * The gep edge created are like constexpr (same edge may appear at multiple callsites)</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;<span class="comment"> * so bb/inst of this edge may be rewritten several times, we treat it as global here.</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a45ab73a812809b3c725daf11b5da6141">addGepEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(opnd), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(gepce), ls, constGep);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; }</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</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_1SVFUtil.html#a7e404bcc6613ba10a56c4fbdc842c5a8">isCastConstantExpr</a>(ref))</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle cast constant expression &quot;</span> &lt;&lt; *ref &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = castce-&gt;getOperand(0);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(opnd);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(castce, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(opnd), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(castce));</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; }</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <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_1SVFUtil.html#a07d991d5bfccce9ebdef0cbb6f4bf739">isSelectConstantExpr</a>(ref))</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; {</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle select constant expression &quot;</span> &lt;&lt; *ref &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src1 = selectce-&gt;getOperand(1);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src2 = selectce-&gt;getOperand(2);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(src1);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(src2);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(selectce, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc1 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(src1);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc2 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(src2);</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nres = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(selectce);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(nres,nsrc1);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(nres,nsrc2);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; }</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="comment">// if we meet a int2ptr, then it points-to black hole</span></div><div class="line"><a name="l00330"></a><span class="lineno"> 330</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_1SVFUtil.html#a6bc4376ada53ddfbf8df2ca817153555">isInt2PtrConstantExpr</a>(ref))</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; {</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a55d8504dbc766c4ede031299a37417ef">addGlobalBlackHoleAddrEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(int2Ptrce), int2Ptrce);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; }</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</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_1SVFUtil.html#a093b7ae4ad144fb5d028366b1814861a">isPtr2IntConstantExpr</a>(ref))</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = ptr2Intce-&gt;getOperand(0);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(opnd);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ptr2Intce, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(opnd), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ptr2Intce));</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a1373688c6faba4dcdb640106575ea433">isTruncConstantExpr</a>(ref) || <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4adb63c87a9489ab905d42230ac66299">isCmpConstantExpr</a>(ref))</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; {</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// we don&#39;t handle trunc and cmp instruction for now</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ref);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; }</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a43c9072210a5f5baeafe36da03f2fde2">isBinaryConstantExpr</a>(ref))</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; {</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// we don&#39;t handle binary constant expression like add(x,y) now</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ref);</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#af14757d5cf466bba20a125f118378560">isUnaryConstantExpr</a>(ref))</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">// we don&#39;t handle unary constant expression like fneg(x) now</span></div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ref);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantAggregate&gt;(ref))</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; {</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="comment">// we don&#39;t handle constant agrgregate like constant vectors</span></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(ref))</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</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><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ref);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>(), dst);</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; }</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; {</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantExpr&gt;(val))</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<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><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; }</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a3e80511758692d2ad4e5dbee15beb719"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00281">SVFIRBuilder.h:281</a></div></div>
2256
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00288">288</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2257
+ <div class="fragment"><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;{</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</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><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; {</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</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_1SVFUtil.html#a384b0986a6c4e99dfc4e1629b3598c3c">isGepConstantExpr</a>(ref))</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; {</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle gep constant expression &quot;</span> &lt;&lt; *ref &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = gepce-&gt;getOperand(0);</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="comment">// handle recursive constant express case (gep (bitcast (gep X 1)) 1)</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(opnd);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls;</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordtype">bool</span> constGep = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a87b75f04942124711d5ea1366e866890">computeGepOffset</a>(gepce, ls);</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="comment">// must invoke pag methods here, otherwise it will be a dead recursion cycle</span></div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(gepce, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">/*</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160;<span class="comment"> * The gep edge created are like constexpr (same edge may appear at multiple callsites)</span></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;<span class="comment"> * so bb/inst of this edge may be rewritten several times, we treat it as global here.</span></div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a45ab73a812809b3c725daf11b5da6141">addGepEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(opnd), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(gepce), ls, constGep);</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</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_1SVFUtil.html#a7e404bcc6613ba10a56c4fbdc842c5a8">isCastConstantExpr</a>(ref))</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; {</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle cast constant expression &quot;</span> &lt;&lt; *ref &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = castce-&gt;getOperand(0);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(opnd);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(castce, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(opnd), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(castce));</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</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_1SVFUtil.html#a07d991d5bfccce9ebdef0cbb6f4bf739">isSelectConstantExpr</a>(ref))</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; {</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;handle select constant expression &quot;</span> &lt;&lt; *ref &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src1 = selectce-&gt;getOperand(1);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* src2 = selectce-&gt;getOperand(2);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(src1);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(src2);</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(selectce, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc1 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(src1);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nsrc2 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(src2);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nres = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(selectce);</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(nres,nsrc1);</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(nres,nsrc2);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="comment">// if we meet a int2ptr, then it points-to black hole</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</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_1SVFUtil.html#a6bc4376ada53ddfbf8df2ca817153555">isInt2PtrConstantExpr</a>(ref))</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; {</div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a55d8504dbc766c4ede031299a37417ef">addGlobalBlackHoleAddrEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(int2Ptrce), int2Ptrce);</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; }</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</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_1SVFUtil.html#a093b7ae4ad144fb5d028366b1814861a">isPtr2IntConstantExpr</a>(ref))</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a>* opnd = ptr2Intce-&gt;getOperand(0);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>(opnd);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ptr2Intce, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(opnd), <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ptr2Intce));</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#a1373688c6faba4dcdb640106575ea433">isTruncConstantExpr</a>(ref) || <a class="code" href="namespaceSVF_1_1SVFUtil.html#a4adb63c87a9489ab905d42230ac66299">isCmpConstantExpr</a>(ref))</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; {</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">// we don&#39;t handle trunc and cmp instruction for now</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ref);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a43c9072210a5f5baeafe36da03f2fde2">isBinaryConstantExpr</a>(ref))</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; {</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="comment">// we don&#39;t handle binary constant expression like add(x,y) now</span></div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ref);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#af14757d5cf466bba20a125f118378560">isUnaryConstantExpr</a>(ref))</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; {</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="comment">// we don&#39;t handle unary constant expression like fneg(x) now</span></div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ref);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; }</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantAggregate&gt;(ref))</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; {</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="comment">// we don&#39;t handle constant agrgregate like constant vectors</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;BlockAddress&gt;(ref))</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; {</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// blockaddress instruction (e.g. i8* blockaddress(@run_vm, %182))</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</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><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *cval = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a7bf5d4d18f74f70b61955810e4f01d8c">getCurrentValue</a>();</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a> *cbb = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">getCurrentBB</a>();</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(ref, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(ref);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#ac5da3a0cbe040a45d719b6f6a23aed91">getConstantNode</a>(), dst);</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(cval, cbb);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; {</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;ConstantExpr&gt;(val))</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<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><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; }</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a3e80511758692d2ad4e5dbee15beb719"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00281">SVFIRBuilder.h:281</a></div></div>
2251
2258
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a724198dcaf43730e1df814f15fe4e1e0"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a724198dcaf43730e1df814f15fe4e1e0">SVF::SVFIRBuilder::getCurrentBB</a></div><div class="ttdeci">const BasicBlock * getCurrentBB() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00248">SVFIRBuilder.h:248</a></div></div>
2252
2259
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a2a0711cb1fdd3c5c90b07ff107aff1ac"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">SVF::SVFIRBuilder::addAddrEdge</a></div><div class="ttdeci">AddrStmt * addAddrEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Address edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00289">SVFIRBuilder.h:289</a></div></div>
2253
2260
  <div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
@@ -2256,14 +2263,14 @@ Private Attributes</h2></td></tr>
2256
2263
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af14757d5cf466bba20a125f118378560"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af14757d5cf466bba20a125f118378560">SVF::SVFUtil::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#l00604">LLVMUtil.h:604</a></div></div>
2257
2264
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
2258
2265
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a6bc4376ada53ddfbf8df2ca817153555"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a6bc4376ada53ddfbf8df2ca817153555">SVF::SVFUtil::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#l00530">LLVMUtil.h:530</a></div></div>
2259
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5adf8baa546292434ba1fec48db2d0a7"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">SVF::SVFIRBuilder::processCE</a></div><div class="ttdeci">void processCE(const Value *val)</div><div class="ttdoc">Process constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00275">SVFIRBuilder.cpp:275</a></div></div>
2266
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5adf8baa546292434ba1fec48db2d0a7"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">SVF::SVFIRBuilder::processCE</a></div><div class="ttdeci">void processCE(const Value *val)</div><div class="ttdoc">Process constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00288">SVFIRBuilder.cpp:288</a></div></div>
2260
2267
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a15105737c91d01ba9daf2161fad220ef"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">SVF::SVFIRBuilder::setCurrentLocation</a></div><div class="ttdeci">void setCurrentLocation(const Value *val, const BasicBlock *bb)</div><div class="ttdoc">Set current basic block in order to keep track of control flow information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00239">SVFIRBuilder.h:239</a></div></div>
2261
2268
  <div class="ttc" id="classSVF_1_1IRGraph_html_abffddd41cc308b9b3bd5ad4a7f8f1624"><div class="ttname"><a href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00120">IRGraph.h:120</a></div></div>
2262
2269
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a4adb63c87a9489ab905d42230ac66299"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a4adb63c87a9489ab905d42230ac66299">SVF::SVFUtil::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#l00584">LLVMUtil.h:584</a></div></div>
2263
2270
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a45ab73a812809b3c725daf11b5da6141"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a45ab73a812809b3c725daf11b5da6141">SVF::SVFIRBuilder::addGepEdge</a></div><div class="ttdeci">GepStmt * addGepEdge(NodeID src, NodeID dst, const LocationSet &amp;ls, bool constGep)</div><div class="ttdoc">Add Gep edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00370">SVFIRBuilder.h:370</a></div></div>
2264
2271
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a384b0986a6c4e99dfc4e1629b3598c3c"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a384b0986a6c4e99dfc4e1629b3598c3c">SVF::SVFUtil::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#l00520">LLVMUtil.h:520</a></div></div>
2265
2272
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aadb890cbff1ea703ece726aefecb791c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">SVF::SVFIRBuilder::addPhiStmt</a></div><div class="ttdeci">PhiStmt * addPhiStmt(NodeID res, NodeID opnd)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00303">SVFIRBuilder.h:303</a></div></div>
2266
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a87b75f04942124711d5ea1366e866890"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a87b75f04942124711d5ea1366e866890">SVF::SVFIRBuilder::computeGepOffset</a></div><div class="ttdeci">bool computeGepOffset(const User *V, LocationSet &amp;ls)</div><div class="ttdoc">Compute offset of a gep instruction or gep constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00205">SVFIRBuilder.cpp:205</a></div></div>
2273
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a87b75f04942124711d5ea1366e866890"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a87b75f04942124711d5ea1366e866890">SVF::SVFIRBuilder::computeGepOffset</a></div><div class="ttdeci">bool computeGepOffset(const User *V, LocationSet &amp;ls)</div><div class="ttdoc">Compute offset of a gep instruction or gep constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00218">SVFIRBuilder.cpp:218</a></div></div>
2267
2274
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a093b7ae4ad144fb5d028366b1814861a"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a093b7ae4ad144fb5d028366b1814861a">SVF::SVFUtil::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#l00540">LLVMUtil.h:540</a></div></div>
2268
2275
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
2269
2276
  <div class="ttc" id="namespaceSVF_html_a7e230c0cba2e3a7c2e5a5f2ee7d88af9"><div class="ttname"><a href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">SVF::Constant</a></div><div class="ttdeci">llvm::Constant Constant</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00123">BasicTypes.h:123</a></div></div>
@@ -2300,8 +2307,8 @@ Private Attributes</h2></td></tr>
2300
2307
 
2301
2308
  <p>Sanity check for <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a>. </p>
2302
2309
 
2303
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01483">1483</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2304
- <div class="fragment"><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;{</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160; {</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160; (void) <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(nIter-&gt;first);</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160; <span class="comment">//TODO::</span></div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160; <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160; <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160; <span class="comment">// then it has to be an object node.</span></div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160; <span class="comment">// (2) make sure every variable should be initialized</span></div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160; <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160; <span class="comment">// when loading a pointer value should make sure</span></div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160; <span class="comment">// some value has been store into this pointer before</span></div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160; <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160; <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; <span class="comment">// are set correctly for dummy gepval node</span></div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; }</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00361">GenericGraph.h:361</a></div></div>
2310
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01496">1496</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2311
+ <div class="fragment"><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;{</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1GenericGraph.html#ac213302cf5c7cdf3b66f7b18649d0fbc">SVFIR::iterator</a> nIter = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); nIter != <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++nIter)</div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160; {</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160; (void) <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(nIter-&gt;first);</div><div class="line"><a name="l01501"></a><span class="lineno"> 1501</span>&#160; <span class="comment">//TODO::</span></div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160; <span class="comment">// (1) every source(root) node of a pag tree should be object node</span></div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160; <span class="comment">// if a node has no incoming edge, but has outgoing edges</span></div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160; <span class="comment">// then it has to be an object node.</span></div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160; <span class="comment">// (2) make sure every variable should be initialized</span></div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160; <span class="comment">// otherwise it causes the a null pointer, the aliasing relation may not be captured</span></div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160; <span class="comment">// when loading a pointer value should make sure</span></div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160; <span class="comment">// some value has been store into this pointer before</span></div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160; <span class="comment">// q = load p, some value should stored into p first like store w p;</span></div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160; <span class="comment">// (3) make sure PAGNode should not have a const expr value (pointer should have unique def)</span></div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160; <span class="comment">// (4) look closely into addComplexConsForExt, make sure program locations(e.g.,inst bb)</span></div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160; <span class="comment">// are set correctly for dummy gepval node</span></div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160; <span class="comment">// (5) reduce unnecessary copy edge (const casts) and ensure correctness.</span></div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160; }</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00361">GenericGraph.h:361</a></div></div>
2305
2312
  <div class="ttc" id="classSVF_1_1GenericGraph_html_a4bef15157423cef48dc7333a803cd27d"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">SVF::GenericGraph::end</a></div><div class="ttdeci">iterator end()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00365">GenericGraph.h:365</a></div></div>
2306
2313
  <div class="ttc" id="classSVF_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#l00338">GenericGraph.h:338</a></div></div>
2307
2314
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
@@ -2327,8 +2334,8 @@ Private Attributes</h2></td></tr>
2327
2334
  <p>We assume every <a class="el" href="classSVF_1_1GepValVar.html">GepValVar</a> and its <a class="el" href="classSVF_1_1GepStmt.html">GepStmt</a> are unique across whole program</p>
2328
2335
  <p>We will have one unique function exit <a class="el" href="classSVF_1_1ICFGNode.html">ICFGNode</a> for all returns </p>
2329
2336
 
2330
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01556">1556</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2331
- <div class="fragment"><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;{</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a> &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a852730edf374d18a3fb3985211ed7623">setBB</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>);</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a24dddb4e346a6e569908e3efe8a6ecc0">setValue</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>);</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aefe3143b33cee00c3c2611fea577c1ac">mapValueToEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, edge);</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ae3b8f1b45c75b5fc231da76d3a49ad57">getGlobalBlockNode</a>();</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *curInst = SVFUtil::dyn_cast&lt;Instruction&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; {</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction();</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction();</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</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;Function&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getValue())) {</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(srcFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;SrcNode of the PAGEdge not in the same function?&quot;</span>);</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; }</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</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;Function&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getValue())) {</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dstFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;DstNode of the PAGEdge not in the same function?&quot;</span>);</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; }</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</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><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a>* retInst = SVFUtil::dyn_cast&lt;ReturnInst&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>)){</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(retInst-&gt;getParent()-&gt;getParent());</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#aa33426d57dc150956902945a17a29bcb">getFunExitBlockNode</a>(fun);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; }</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(curInst);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; }</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* arg = SVFUtil::dyn_cast&lt;Argument&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; {</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> &amp;&amp; (&amp;<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>-&gt;getParent()-&gt;getEntryBlock() == <a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>));</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(arg-&gt;getParent());</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ae1ef14cdda27a2062c4c454750444108">getFunEntryBlockNode</a>(fun);</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; }</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; {</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>)</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(&amp;<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>-&gt;front());</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; }</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;GlobalVariable&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; SVFUtil::isa&lt;Function&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; SVFUtil::isa&lt;Constant&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; SVFUtil::isa&lt;MetadataAsValue&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; {</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; }</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; {</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else value can we have?&quot;</span>);</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; }</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">addToSVFStmtList</a>(icfgNode,edge);</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_a6a84868ab4e2845e884fba08d82b40f6"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">SVF::SVFIR::addToSVFStmtList</a></div><div class="ttdeci">void addToSVFStmtList(ICFGNode *inst, SVFStmt *edge)</div><div class="ttdoc">Add a SVFStmt into instruction map. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00191">SVFIR.h:191</a></div></div>
2337
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l01569">1569</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2338
+ <div class="fragment"><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;{</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1SVFModule.html#a1357c876eccedd58b3abe68875b3a570">SVFModule::pagReadFromTXT</a>())</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;</div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a> &amp;&amp; <span class="stringliteral">&quot;current Val is nullptr?&quot;</span>);</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a852730edf374d18a3fb3985211ed7623">setBB</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>);</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; edge-&gt;<a class="code" href="classSVF_1_1SVFStmt.html#a24dddb4e346a6e569908e3efe8a6ecc0">setValue</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>);</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <span class="comment">// backmap in valuToEdgeMap</span></div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#aefe3143b33cee00c3c2611fea577c1ac">mapValueToEdge</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>, edge);</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ae3b8f1b45c75b5fc231da76d3a49ad57">getGlobalBlockNode</a>();</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a> *curInst = SVFUtil::dyn_cast&lt;Instruction&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; {</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* srcFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getFunction();</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>* dstFun = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getFunction();</div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</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;Function&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()-&gt;getValue())) {</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(srcFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;SrcNode of the PAGEdge not in the same function?&quot;</span>);</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; }</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</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;Function&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getValue())) {</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dstFun==curInst-&gt;getFunction() &amp;&amp; <span class="stringliteral">&quot;DstNode of the PAGEdge not in the same function?&quot;</span>);</div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; }</div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;</div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</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><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> &amp;&amp; <span class="stringliteral">&quot;instruction does not have a basic block??&quot;</span>);</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#ac7dcc6103dee3a0bbc2fd2e02716a154">ReturnInst</a>* retInst = SVFUtil::dyn_cast&lt;ReturnInst&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>)){</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(retInst-&gt;getParent()-&gt;getParent());</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#aa33426d57dc150956902945a17a29bcb">getFunExitBlockNode</a>(fun);</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; }</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(curInst);</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160; }</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a58cdfbc4160cae08745b67844ac29801">Argument</a>* arg = SVFUtil::dyn_cast&lt;Argument&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160; {</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a> &amp;&amp; (&amp;<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>-&gt;getParent()-&gt;getEntryBlock() == <a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>));</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(arg-&gt;getParent());</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ae1ef14cdda27a2062c4c454750444108">getFunEntryBlockNode</a>(fun);</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160; }</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;ConstantExpr&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160; {</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>)</div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160; icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(&amp;<a class="code" href="classSVF_1_1SVFIRBuilder.html#aac1cbf0cb2b402b5fd0e2324c89c31b0">curBB</a>-&gt;front());</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160; }</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa&lt;GlobalVariable&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160; SVFUtil::isa&lt;Function&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160; SVFUtil::isa&lt;Constant&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>) ||</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160; SVFUtil::isa&lt;MetadataAsValue&gt;(<a class="code" href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">curVal</a>))</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160; {</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#ae3d9b4acb63a7dbe316e87bad4e3987a">addGlobalPAGEdge</a>(edge);</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160; }</div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160; {</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;what else value can we have?&quot;</span>);</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160; }</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">addToSVFStmtList</a>(icfgNode,edge);</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160; icfgNode-&gt;<a class="code" href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">addSVFStmt</a>(edge);</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIR_html_a6a84868ab4e2845e884fba08d82b40f6"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a6a84868ab4e2845e884fba08d82b40f6">SVF::SVFIR::addToSVFStmtList</a></div><div class="ttdeci">void addToSVFStmtList(ICFGNode *inst, SVFStmt *edge)</div><div class="ttdoc">Add a SVFStmt into instruction map. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00191">SVFIR.h:191</a></div></div>
2332
2339
  <div class="ttc" id="classSVF_1_1ICFGNode_html_a8a133398c691ab3639ceefbc57cd33be"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#a8a133398c691ab3639ceefbc57cd33be">SVF::ICFGNode::addSVFStmt</a></div><div class="ttdeci">void addSVFStmt(const SVFStmt *edge)</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00116">ICFGNode.h:116</a></div></div>
2333
2340
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
2334
2341
  <div class="ttc" id="classSVF_1_1SVFFunction_html"><div class="ttname"><a href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a></div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00233">BasicTypes.h:233</a></div></div>
@@ -2346,7 +2353,7 @@ Private Attributes</h2></td></tr>
2346
2353
  <div class="ttc" id="classSVF_1_1SVFStmt_html_a24dddb4e346a6e569908e3efe8a6ecc0"><div class="ttname"><a href="classSVF_1_1SVFStmt.html#a24dddb4e346a6e569908e3efe8a6ecc0">SVF::SVFStmt::setValue</a></div><div class="ttdeci">void setValue(const Value *val)</div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00112">SVFStatements.h:112</a></div></div>
2347
2354
  <div class="ttc" id="classSVF_1_1GenericEdge_html_ab47ca533c415841ef75456cbad439589"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">SVF::GenericEdge::getSrcNode</a></div><div class="ttdeci">NodeType * getSrcNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00085">GenericGraph.h:85</a></div></div>
2348
2355
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5afb07f2cf8d76f8db334250e0c96cc0"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5afb07f2cf8d76f8db334250e0c96cc0">SVF::SVFIRBuilder::curVal</a></div><div class="ttdeci">const Value * curVal</div><div class="ttdoc">Current Value during SVFIR construction when visiting the module. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00051">SVFIRBuilder.h:51</a></div></div>
2349
- <div class="ttc" id="classSVF_1_1ICFG_html_ae3b8f1b45c75b5fc231da76d3a49ad57"><div class="ttname"><a href="classSVF_1_1ICFG.html#ae3b8f1b45c75b5fc231da76d3a49ad57">SVF::ICFG::getGlobalBlockNode</a></div><div class="ttdeci">GlobalBlockNode * getGlobalBlockNode() const</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00175">ICFG.h:175</a></div></div>
2356
+ <div class="ttc" id="classSVF_1_1ICFG_html_ae3b8f1b45c75b5fc231da76d3a49ad57"><div class="ttname"><a href="classSVF_1_1ICFG.html#ae3b8f1b45c75b5fc231da76d3a49ad57">SVF::ICFG::getGlobalBlockNode</a></div><div class="ttdeci">GlobalBlockNode * getGlobalBlockNode() const</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00178">ICFG.h:178</a></div></div>
2350
2357
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acf40310917909e4234282c0695a43160"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">SVF::LLVMModuleSet::getLLVMModuleSet</a></div><div class="ttdeci">static LLVMModuleSet * getLLVMModuleSet()</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00069">LLVMModule.h:69</a></div></div>
2351
2358
  <div class="ttc" id="classSVF_1_1ICFG_html_ae1ef14cdda27a2062c4c454750444108"><div class="ttname"><a href="classSVF_1_1ICFG.html#ae1ef14cdda27a2062c4c454750444108">SVF::ICFG::getFunEntryBlockNode</a></div><div class="ttdeci">FunEntryBlockNode * getFunEntryBlockNode(const SVFFunction *fun)</div><div class="ttdoc">Add a function entry node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00230">ICFG.cpp:230</a></div></div>
2352
2359
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
@@ -2426,8 +2433,8 @@ Private Attributes</h2></td></tr>
2426
2433
  <p>Our visit overrides. </p>
2427
2434
  <p>Visit alloca instructions Add edge V (dst) &lt;&ndash; O (src), V here is a value node on <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a>, O is object node on <a class="el" href="classSVF_1_1SVFIR.html">SVFIR</a> </p>
2428
2435
 
2429
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00552">552</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2430
- <div class="fragment"><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160;{</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160;</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="comment">// AllocaInst should always be a pointer type</span></div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process alloca &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160;</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(&amp;inst);</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160;</div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(src, dst);</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160;</div><div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a2a0711cb1fdd3c5c90b07ff107aff1ac"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">SVF::SVFIRBuilder::addAddrEdge</a></div><div class="ttdeci">AddrStmt * addAddrEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Address edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00289">SVFIRBuilder.h:289</a></div></div>
2436
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00565">565</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2437
+ <div class="fragment"><div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160;{</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; <span class="comment">// AllocaInst should always be a pointer type</span></div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process alloca &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(&amp;inst);</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(src, dst);</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160;</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a2a0711cb1fdd3c5c90b07ff107aff1ac"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">SVF::SVFIRBuilder::addAddrEdge</a></div><div class="ttdeci">AddrStmt * addAddrEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Address edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00289">SVFIRBuilder.h:289</a></div></div>
2431
2438
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2432
2439
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2433
2440
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
@@ -2515,12 +2522,12 @@ Private Attributes</h2></td></tr>
2515
2522
  </div><div class="memdoc">
2516
2523
  <p>Visit Binary Operator </p>
2517
2524
 
2518
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00673">673</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2519
- <div class="fragment"><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;{</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for BinaryOperator?&quot;</span>);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op1);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op2);</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>* binayPE = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5832c14f0c8bf4d2f41921383c40340e">addBinaryOPEdge</a>(op1Node, op2Node, dst, opcode);</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2525
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00686">686</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2526
+ <div class="fragment"><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160;{</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for BinaryOperator?&quot;</span>);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op1);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op2);</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1BinaryOPStmt.html">BinaryOPStmt</a>* binayPE = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5832c14f0c8bf4d2f41921383c40340e">addBinaryOPEdge</a>(op1Node, op2Node, dst, opcode);</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2520
2527
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2521
2528
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
2522
2529
  <div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
2523
- <div class="ttc" id="classSVF_1_1BinaryOPStmt_html"><div class="ttname"><a href="classSVF_1_1BinaryOPStmt.html">SVF::BinaryOPStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00809">SVFStatements.h:809</a></div></div>
2530
+ <div class="ttc" id="classSVF_1_1BinaryOPStmt_html"><div class="ttname"><a href="classSVF_1_1BinaryOPStmt.html">SVF::BinaryOPStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00814">SVFStatements.h:814</a></div></div>
2524
2531
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
2525
2532
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5832c14f0c8bf4d2f41921383c40340e"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5832c14f0c8bf4d2f41921383c40340e">SVF::SVFIRBuilder::addBinaryOPEdge</a></div><div class="ttdeci">BinaryOPStmt * addBinaryOPEdge(NodeID op1, NodeID op2, NodeID dst, u32_t opcode)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00317">SVFIRBuilder.h:317</a></div></div>
2526
2533
  </div><!-- fragment -->
@@ -2543,14 +2550,14 @@ Private Attributes</h2></td></tr>
2543
2550
  </div><div class="memdoc">
2544
2551
  <p>Branch and switch instructions are treated as UnaryOP br cmp label if.then, label if.else </p>
2545
2552
 
2546
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00832">832</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2547
- <div class="fragment"><div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; {</div><div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond;</div><div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; <span class="keywordflow">if</span> (inst.isConditional())</div><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160; cond = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getCondition());</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; cond = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>();</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;</div><div class="line"><a name="l00840"></a><span class="lineno"> 840</span>&#160; std::vector&lt;const ICFGNode*&gt; successors;</div><div class="line"><a name="l00841"></a><span class="lineno"> 841</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><div class="line"><a name="l00842"></a><span class="lineno"> 842</span>&#160; {</div><div class="line"><a name="l00843"></a><span class="lineno"> 843</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;inst.getSuccessor(i)-&gt;front();</div><div class="line"><a name="l00844"></a><span class="lineno"> 844</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(succInst);</div><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; successors.push_back(icfgNode);</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; }</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a> *brStmt = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae0a1f66dee058f6af0f6b074db38db8e">addBranchStmt</a>(brinst, cond,successors);</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2553
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00845">845</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2554
+ <div class="fragment"><div class="line"><a name="l00845"></a><span class="lineno"> 845</span>&#160; {</div><div class="line"><a name="l00846"></a><span class="lineno"> 846</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00847"></a><span class="lineno"> 847</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond;</div><div class="line"><a name="l00848"></a><span class="lineno"> 848</span>&#160; <span class="keywordflow">if</span> (inst.isConditional())</div><div class="line"><a name="l00849"></a><span class="lineno"> 849</span>&#160; cond = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getCondition());</div><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; cond = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">getNullPtr</a>();</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160;</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160; std::vector&lt;const ICFGNode*&gt; successors;</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</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><div class="line"><a name="l00855"></a><span class="lineno"> 855</span>&#160; {</div><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;inst.getSuccessor(i)-&gt;front();</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(succInst);</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; successors.push_back(icfgNode);</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; }</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a> *brStmt = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae0a1f66dee058f6af0f6b074db38db8e">addBranchStmt</a>(brinst, cond,successors);</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2548
2555
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2549
2556
  <div class="ttc" id="classSVF_1_1ICFGNode_html"><div class="ttname"><a href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00054">ICFGNode.h:54</a></div></div>
2550
2557
  <div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
2551
2558
  <div class="ttc" id="classSVF_1_1IRGraph_html_a3de9a2a565c303f68a90c32dc59febd5"><div class="ttname"><a href="classSVF_1_1IRGraph.html#a3de9a2a565c303f68a90c32dc59febd5">SVF::IRGraph::getNullPtr</a></div><div class="ttdeci">NodeID getNullPtr() const</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00156">IRGraph.h:156</a></div></div>
2552
2559
  <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
2553
- <div class="ttc" id="classSVF_1_1BranchStmt_html"><div class="ttname"><a href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00908">SVFStatements.h:908</a></div></div>
2560
+ <div class="ttc" id="classSVF_1_1BranchStmt_html"><div class="ttname"><a href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00913">SVFStatements.h:913</a></div></div>
2554
2561
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
2555
2562
  <div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
2556
2563
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ae0a1f66dee058f6af0f6b074db38db8e"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae0a1f66dee058f6af0f6b074db38db8e">SVF::SVFIRBuilder::addBranchStmt</a></div><div class="ttdeci">BranchStmt * addBranchStmt(NodeID br, NodeID cond, const std::vector&lt; const ICFGNode *&gt; succs)</div><div class="ttdoc">Add Branch statement. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00331">SVFIRBuilder.h:331</a></div></div>
@@ -2583,7 +2590,7 @@ Private Attributes</h2></td></tr>
2583
2590
  </div><div class="memdoc">
2584
2591
 
2585
2592
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00161">161</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
2586
- <div class="fragment"><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">visitCallSite</a>(&amp;I);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a6b52906a617f088b1077ba0387a846ab"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">SVF::SVFIRBuilder::visitCallSite</a></div><div class="ttdeci">void visitCallSite(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00734">SVFIRBuilder.cpp:734</a></div></div>
2593
+ <div class="fragment"><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">visitCallSite</a>(&amp;I);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a6b52906a617f088b1077ba0387a846ab"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">SVF::SVFIRBuilder::visitCallSite</a></div><div class="ttdeci">void visitCallSite(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00747">SVFIRBuilder.cpp:747</a></div></div>
2587
2594
  </div><!-- fragment -->
2588
2595
  </div>
2589
2596
  </div>
@@ -2612,7 +2619,7 @@ Private Attributes</h2></td></tr>
2612
2619
  </div><div class="memdoc">
2613
2620
 
2614
2621
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00153">153</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
2615
- <div class="fragment"><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">visitCallSite</a>(&amp;I);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a6b52906a617f088b1077ba0387a846ab"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">SVF::SVFIRBuilder::visitCallSite</a></div><div class="ttdeci">void visitCallSite(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00734">SVFIRBuilder.cpp:734</a></div></div>
2622
+ <div class="fragment"><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">visitCallSite</a>(&amp;I);</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a6b52906a617f088b1077ba0387a846ab"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">SVF::SVFIRBuilder::visitCallSite</a></div><div class="ttdeci">void visitCallSite(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00747">SVFIRBuilder.cpp:747</a></div></div>
2616
2623
  </div><!-- fragment -->
2617
2624
  </div>
2618
2625
  </div>
@@ -2633,8 +2640,8 @@ Private Attributes</h2></td></tr>
2633
2640
  </div><div class="memdoc">
2634
2641
  <p>Collect callsite arguments and returns </p>
2635
2642
 
2636
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00734">734</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2637
- <div class="fragment"><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;{</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160;</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="comment">// skip llvm intrinsics</span></div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab7f58caf27c30a1d414e06f60ca84d80">isIntrinsicInst</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>()))</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process callsite &quot;</span> &lt;&lt; *cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160;</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* retBlockNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">getRetBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160;</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a51f28f03a236b244b636ca88c5511a30">addCallSite</a>(callBlockNode);</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1CallSite.html#ac1cdfe5e54026960a23142e26b3150ff">CallSite::arg_iterator</a> itA = cs.<a class="code" href="classSVF_1_1CallSite.html#aabc0054b7f4e06b7ca0b6072746984e6">arg_begin</a>(), ieA = cs.<a class="code" href="classSVF_1_1CallSite.html#a46e8ffe430bb2711abaafc9d7864909e">arg_end</a>(); itA!=ieA; ++itA)</div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a5fafbfd6a30b8796b92a3a1f3409767f">addCallSiteArgs</a>(callBlockNode,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(*itA)));</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160;</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <span class="keywordflow">if</span>(!cs.<a class="code" href="classSVF_1_1CallSite.html#a9b7d53a345875e4e6c72eb23ac6475de">getType</a>()-&gt;isVoidTy())</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a3c8070a1d7a6a705433b05dd633185b1">addCallSiteRets</a>(retBlockNode,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>())));</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *callee = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">getCallee</a>(cs);</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keywordflow">if</span> (callee)</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; {</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; {</div><div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="comment">// There is no extpag for the function, use the old method.</span></div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aff08d65b1411d1db81f80b9d4228c65d">handleExtCall</a>(cs, callee);</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; }</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; {</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#afd3125974393d68b4b8f5298ef699ab3">handleDirectCall</a>(cs, callee);</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; }</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; }</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; {</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="comment">//If the callee was not identified as a function (null F), this is indirect.</span></div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aa21ed35656d26eec22c53dc41019adc4">handleIndCall</a>(cs);</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; }</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aa21ed35656d26eec22c53dc41019adc4"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aa21ed35656d26eec22c53dc41019adc4">SVF::SVFIRBuilder::handleIndCall</a></div><div class="ttdeci">void handleIndCall(CallSite cs)</div><div class="ttdoc">Handle indirect call. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01474">SVFIRBuilder.cpp:1474</a></div></div>
2643
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00747">747</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2644
+ <div class="fragment"><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160;{</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; <span class="comment">// skip llvm intrinsics</span></div><div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF_1_1SVFUtil.html#ab7f58caf27c30a1d414e06f60ca84d80">isIntrinsicInst</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>()))</div><div class="line"><a name="l00752"></a><span class="lineno"> 752</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;</div><div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>,</div><div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process callsite &quot;</span> &lt;&lt; *cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160;</div><div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* callBlockNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">getCallBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <a class="code" href="classSVF_1_1RetBlockNode.html">RetBlockNode</a>* retBlockNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">getRetBlockNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>());</div><div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160;</div><div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a51f28f03a236b244b636ca88c5511a30">addCallSite</a>(callBlockNode);</div><div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160;</div><div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1CallSite.html#ac1cdfe5e54026960a23142e26b3150ff">CallSite::arg_iterator</a> itA = cs.<a class="code" href="classSVF_1_1CallSite.html#aabc0054b7f4e06b7ca0b6072746984e6">arg_begin</a>(), ieA = cs.<a class="code" href="classSVF_1_1CallSite.html#a46e8ffe430bb2711abaafc9d7864909e">arg_end</a>(); itA!=ieA; ++itA)</div><div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a5fafbfd6a30b8796b92a3a1f3409767f">addCallSiteArgs</a>(callBlockNode,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(*itA)));</div><div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160;</div><div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">if</span>(!cs.<a class="code" href="classSVF_1_1CallSite.html#a9b7d53a345875e4e6c72eb23ac6475de">getType</a>()-&gt;isVoidTy())</div><div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a3c8070a1d7a6a705433b05dd633185b1">addCallSiteRets</a>(retBlockNode,<a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a43c9c773bfa17abf481c33073e30d01b">getGNode</a>(<a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(cs.<a class="code" href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">getInstruction</a>())));</div><div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160;</div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *callee = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">getCallee</a>(cs);</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; <span class="keywordflow">if</span> (callee)</div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; {</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(callee))</div><div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; {</div><div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160; <span class="comment">// There is no extpag for the function, use the old method.</span></div><div class="line"><a name="l00776"></a><span class="lineno"> 776</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aff08d65b1411d1db81f80b9d4228c65d">handleExtCall</a>(cs, callee);</div><div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160; }</div><div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; {</div><div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#afd3125974393d68b4b8f5298ef699ab3">handleDirectCall</a>(cs, callee);</div><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; }</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; }</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; {</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; <span class="comment">//If the callee was not identified as a function (null F), this is indirect.</span></div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aa21ed35656d26eec22c53dc41019adc4">handleIndCall</a>(cs);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; }</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aa21ed35656d26eec22c53dc41019adc4"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aa21ed35656d26eec22c53dc41019adc4">SVF::SVFIRBuilder::handleIndCall</a></div><div class="ttdeci">void handleIndCall(CallSite cs)</div><div class="ttdoc">Handle indirect call. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01487">SVFIRBuilder.cpp:1487</a></div></div>
2638
2645
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_ab7f58caf27c30a1d414e06f60ca84d80"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#ab7f58caf27c30a1d414e06f60ca84d80">SVF::SVFUtil::isIntrinsicInst</a></div><div class="ttdeci">bool isIntrinsicInst(const Instruction *inst)</div><div class="ttdoc">Return true if it is an intrinsic instruction. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00180">SVFUtil.h:180</a></div></div>
2639
2646
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2640
2647
  <div class="ttc" id="classSVF_1_1ICFG_html_a7d10e8a815c836a070d35850f817a18c"><div class="ttname"><a href="classSVF_1_1ICFG.html#a7d10e8a815c836a070d35850f817a18c">SVF::ICFG::getCallBlockNode</a></div><div class="ttdeci">CallBlockNode * getCallBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00197">ICFG.cpp:197</a></div></div>
@@ -2642,14 +2649,14 @@ Private Attributes</h2></td></tr>
2642
2649
  <div class="ttc" id="classSVF_1_1CallSite_html_ab36a6a35eea673d4bdca615efc4336b1"><div class="ttname"><a href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">SVF::CallSite::getInstruction</a></div><div class="ttdeci">CallBase * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00310">BasicTypes.h:310</a></div></div>
2643
2650
  <div class="ttc" id="classSVF_1_1CallSite_html_a46e8ffe430bb2711abaafc9d7864909e"><div class="ttname"><a href="classSVF_1_1CallSite.html#a46e8ffe430bb2711abaafc9d7864909e">SVF::CallSite::arg_end</a></div><div class="ttdeci">User::const_op_iterator arg_end() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00315">BasicTypes.h:315</a></div></div>
2644
2651
  <div class="ttc" id="classSVF_1_1SVFIR_html_a51f28f03a236b244b636ca88c5511a30"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a51f28f03a236b244b636ca88c5511a30">SVF::SVFIR::addCallSite</a></div><div class="ttdeci">void addCallSite(const CallBlockNode *call)</div><div class="ttdoc">Add callsites. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00621">SVFIR.h:621</a></div></div>
2645
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aff08d65b1411d1db81f80b9d4228c65d"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aff08d65b1411d1db81f80b9d4228c65d">SVF::SVFIRBuilder::handleExtCall</a></div><div class="ttdeci">virtual void handleExtCall(CallSite cs, const SVFFunction *F)</div><div class="ttdoc">Handle external call. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01060">SVFIRBuilder.cpp:1060</a></div></div>
2652
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aff08d65b1411d1db81f80b9d4228c65d"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aff08d65b1411d1db81f80b9d4228c65d">SVF::SVFIRBuilder::handleExtCall</a></div><div class="ttdeci">virtual void handleExtCall(CallSite cs, const SVFFunction *F)</div><div class="ttdoc">Handle external call. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l01073">SVFIRBuilder.cpp:1073</a></div></div>
2646
2653
  <div class="ttc" id="classSVF_1_1RetBlockNode_html"><div class="ttname"><a href="classSVF_1_1RetBlockNode.html">SVF::RetBlockNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00459">ICFGNode.h:459</a></div></div>
2647
2654
  <div class="ttc" id="classSVF_1_1CallSite_html_aabc0054b7f4e06b7ca0b6072746984e6"><div class="ttname"><a href="classSVF_1_1CallSite.html#aabc0054b7f4e06b7ca0b6072746984e6">SVF::CallSite::arg_begin</a></div><div class="ttdeci">User::const_op_iterator arg_begin() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00314">BasicTypes.h:314</a></div></div>
2648
2655
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a145abbd2958629718fbca41d25c3124d"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a145abbd2958629718fbca41d25c3124d">SVF::SVFUtil::getCallee</a></div><div class="ttdeci">const SVFFunction * getCallee(const CallSite cs)</div><div class="ttdoc">Return callee of a callsite. Return null if this is an indirect call. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00268">SVFUtil.h:268</a></div></div>
2649
2656
  <div class="ttc" id="classSVF_1_1SVFIR_html_a3c8070a1d7a6a705433b05dd633185b1"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a3c8070a1d7a6a705433b05dd633185b1">SVF::SVFIR::addCallSiteRets</a></div><div class="ttdeci">void addCallSiteRets(RetBlockNode *retBlockNode, const SVFVar *arg)</div><div class="ttdoc">Add callsite returns. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00514">SVFIR.h:514</a></div></div>
2650
2657
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
2651
2658
  <div class="ttc" id="classSVF_1_1SVFIR_html_a5fafbfd6a30b8796b92a3a1f3409767f"><div class="ttname"><a href="classSVF_1_1SVFIR.html#a5fafbfd6a30b8796b92a3a1f3409767f">SVF::SVFIR::addCallSiteArgs</a></div><div class="ttdeci">void addCallSiteArgs(CallBlockNode *callBlockNode, const SVFVar *arg)</div><div class="ttdoc">Add callsite arguments. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00508">SVFIR.h:508</a></div></div>
2652
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_afd3125974393d68b4b8f5298ef699ab3"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#afd3125974393d68b4b8f5298ef699ab3">SVF::SVFIRBuilder::handleDirectCall</a></div><div class="ttdeci">void handleDirectCall(CallSite cs, const SVFFunction *F)</div><div class="ttdoc">Handle direct call. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00894">SVFIRBuilder.cpp:894</a></div></div>
2659
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_afd3125974393d68b4b8f5298ef699ab3"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#afd3125974393d68b4b8f5298ef699ab3">SVF::SVFIRBuilder::handleDirectCall</a></div><div class="ttdeci">void handleDirectCall(CallSite cs, const SVFFunction *F)</div><div class="ttdoc">Handle direct call. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00907">SVFIRBuilder.cpp:907</a></div></div>
2653
2660
  <div class="ttc" id="classSVF_1_1ICFG_html_a6d66c83cb1656d0f8ec8b8b65a9e9c41"><div class="ttname"><a href="classSVF_1_1ICFG.html#a6d66c83cb1656d0f8ec8b8b65a9e9c41">SVF::ICFG::getRetBlockNode</a></div><div class="ttdeci">RetBlockNode * getRetBlockNode(const Instruction *inst)</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8cpp_source.html#l00210">ICFG.cpp:210</a></div></div>
2654
2661
  <div class="ttc" id="classSVF_1_1CallSite_html_a9b7d53a345875e4e6c72eb23ac6475de"><div class="ttname"><a href="classSVF_1_1CallSite.html#a9b7d53a345875e4e6c72eb23ac6475de">SVF::CallSite::getType</a></div><div class="ttdeci">Type * getType() const</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00313">BasicTypes.h:313</a></div></div>
2655
2662
  <div class="ttc" id="SVFBasicTypes_8h_html_a7a295e02c56a93cf9206dd9d3b18dd17"><div class="ttname"><a href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a></div><div class="ttdeci">#define DPAGBuild</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00156">SVFBasicTypes.h:156</a></div></div>
@@ -2679,8 +2686,8 @@ Private Attributes</h2></td></tr>
2679
2686
  </table>
2680
2687
  </div><div class="memdoc">
2681
2688
 
2682
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00649">649</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2683
- <div class="fragment"><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160;{</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process cast &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;IntToPtrInst&gt;(&amp;inst))</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; {</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; }</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> * opnd = inst.getOperand(0);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(opnd-&gt;getType()))</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; opnd = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a862eaa4f3d172bc7ffa56406f2d5af92">stripAllCasts</a>(opnd);</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src, dst);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; }</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160;}</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a862eaa4f3d172bc7ffa56406f2d5af92"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a862eaa4f3d172bc7ffa56406f2d5af92">SVF::SVFUtil::stripAllCasts</a></div><div class="ttdeci">Value * stripAllCasts(Value *val)</div><div class="ttdoc">Strip off the all casts. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00191">LLVMUtil.cpp:191</a></div></div>
2689
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00662">662</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2690
+ <div class="fragment"><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160;{</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160;</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process cast &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;IntToPtrInst&gt;(&amp;inst))</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; {</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; }</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; {</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> * opnd = inst.getOperand(0);</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordflow">if</span> (!SVFUtil::isa&lt;PointerType&gt;(opnd-&gt;getType()))</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; opnd = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a862eaa4f3d172bc7ffa56406f2d5af92">stripAllCasts</a>(opnd);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src, dst);</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; }</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;}</div><div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a862eaa4f3d172bc7ffa56406f2d5af92"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a862eaa4f3d172bc7ffa56406f2d5af92">SVF::SVFUtil::stripAllCasts</a></div><div class="ttdeci">Value * stripAllCasts(Value *val)</div><div class="ttdoc">Strip off the all casts. </div><div class="ttdef"><b>Definition:</b> <a href="LLVMUtil_8cpp_source.html#l00191">LLVMUtil.cpp:191</a></div></div>
2684
2691
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a3e80511758692d2ad4e5dbee15beb719"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00281">SVFIRBuilder.h:281</a></div></div>
2685
2692
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2686
2693
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
@@ -2709,12 +2716,12 @@ Private Attributes</h2></td></tr>
2709
2716
  </div><div class="memdoc">
2710
2717
  <p>Visit compare instruction </p>
2711
2718
 
2712
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00701">701</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2713
- <div class="fragment"><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;{</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for compare instruction?&quot;</span>);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op1);</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op2);</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predicate = inst.getPredicate();</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>* cmpPE = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a0a7183291291e3f91188607ead065c81">addCmpEdge</a>(op1Node, op2Node, dst, predicate);</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2719
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00714">714</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2720
+ <div class="fragment"><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160;{</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(inst.getNumOperands() == 2 &amp;&amp; <span class="stringliteral">&quot;not two operands for compare instruction?&quot;</span>);</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op1 = inst.getOperand(0);</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op1Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op1);</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* op2 = inst.getOperand(1);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> op2Node = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(op2);</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> predicate = inst.getPredicate();</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CmpStmt.html">CmpStmt</a>* cmpPE = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a0a7183291291e3f91188607ead065c81">addCmpEdge</a>(op1Node, op2Node, dst, predicate);</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2714
2721
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2715
2722
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
2716
2723
  <div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
2717
- <div class="ttc" id="classSVF_1_1CmpStmt_html"><div class="ttname"><a href="classSVF_1_1CmpStmt.html">SVF::CmpStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00763">SVFStatements.h:763</a></div></div>
2724
+ <div class="ttc" id="classSVF_1_1CmpStmt_html"><div class="ttname"><a href="classSVF_1_1CmpStmt.html">SVF::CmpStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00768">SVFStatements.h:768</a></div></div>
2718
2725
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a0a7183291291e3f91188607ead065c81"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a0a7183291291e3f91188607ead065c81">SVF::SVFIRBuilder::addCmpEdge</a></div><div class="ttdeci">CmpStmt * addCmpEdge(NodeID op1, NodeID op2, NodeID dst, u32_t predict)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00310">SVFIRBuilder.h:310</a></div></div>
2719
2726
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
2720
2727
  </div><!-- fragment -->
@@ -2738,8 +2745,8 @@ Private Attributes</h2></td></tr>
2738
2745
  <p>The �extractelement� instruction extracts a single scalar element from a vector at a specified index. TODO: for now we just assume the pointer after extraction points to blackhole The first operand of an �extractelement� instruction is a value of vector type. The second operand is an index indicating the position from which to extract the element.</p>
2739
2746
  <p>&lt;result&gt; = extractelement &lt;4 x i32&gt; vec, i32 0 ; yields i32 </p>
2740
2747
 
2741
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00822">822</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2742
- <div class="fragment"><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160;{</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a3e80511758692d2ad4e5dbee15beb719"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00281">SVFIRBuilder.h:281</a></div></div>
2748
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00835">835</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2749
+ <div class="fragment"><div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160;{</div><div class="line"><a name="l00837"></a><span class="lineno"> 837</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00838"></a><span class="lineno"> 838</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00839"></a><span class="lineno"> 839</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a3e80511758692d2ad4e5dbee15beb719"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00281">SVFIRBuilder.h:281</a></div></div>
2743
2750
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2744
2751
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2745
2752
  </div><!-- fragment -->
@@ -2762,8 +2769,8 @@ Private Attributes</h2></td></tr>
2762
2769
  </div><div class="memdoc">
2763
2770
  <p>visit extract value instructions for structures in registers TODO: for now we just assume the pointer after extraction points to blackhole for example %24 = extractvalue { i32, struct.s_hash* } call34, 0 %24 is a pointer points to first field of a register value call34 however we can not create call34 as an memory object, as it is register value. Is that necessary treat extract value as getelementptr instruction later to get more precise results? </p>
2764
2771
 
2765
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00808">808</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2766
- <div class="fragment"><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160;{</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00811"></a><span class="lineno"> 811</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a3e80511758692d2ad4e5dbee15beb719"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00281">SVFIRBuilder.h:281</a></div></div>
2772
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00821">821</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2773
+ <div class="fragment"><div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160;{</div><div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a3e80511758692d2ad4e5dbee15beb719"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00281">SVFIRBuilder.h:281</a></div></div>
2767
2774
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2768
2775
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2769
2776
  </div><!-- fragment -->
@@ -2817,8 +2824,8 @@ Private Attributes</h2></td></tr>
2817
2824
  <p>&lt;result&gt; = freeze ty &lt;val&gt; If &lt;val&gt; is undef or poison, ‘freeze’ returns an arbitrary, but fixed value of type <code>ty</code> Otherwise, this instruction is a no-op and returns the input &lt;val&gt;</p>
2818
2825
  <p>&lt;result&gt; = freeze ty &lt;val&gt; If &lt;val&gt; is undef or poison, ‘freeze’ returns an arbitrary, but fixed value of type <code>ty</code> Otherwise, this instruction is a no-op and returns the input &lt;val&gt; For now, we assume &lt;val&gt; is never a posion or undef. </p>
2819
2826
 
2820
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00880">880</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2821
- <div class="fragment"><div class="line"><a name="l00880"></a><span class="lineno"> 880</span>&#160; {</div><div class="line"><a name="l00881"></a><span class="lineno"> 881</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00882"></a><span class="lineno"> 882</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><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; {</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src,dst);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160; }</div><div class="line"><a name="l00888"></a><span class="lineno"> 888</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2827
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00893">893</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2828
+ <div class="fragment"><div class="line"><a name="l00893"></a><span class="lineno"> 893</span>&#160; {</div><div class="line"><a name="l00894"></a><span class="lineno"> 894</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00895"></a><span class="lineno"> 895</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><div class="line"><a name="l00896"></a><span class="lineno"> 896</span>&#160; {</div><div class="line"><a name="l00897"></a><span class="lineno"> 897</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(i);</div><div class="line"><a name="l00898"></a><span class="lineno"> 898</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div><div class="line"><a name="l00899"></a><span class="lineno"> 899</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src,dst);</div><div class="line"><a name="l00900"></a><span class="lineno"> 900</span>&#160; }</div><div class="line"><a name="l00901"></a><span class="lineno"> 901</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2822
2829
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2823
2830
  <div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
2824
2831
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a140defeb309d895394822f8780deda16"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">SVF::SVFIRBuilder::addCopyEdge</a></div><div class="ttdeci">CopyStmt * addCopyEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00296">SVFIRBuilder.h:296</a></div></div>
@@ -2843,13 +2850,13 @@ Private Attributes</h2></td></tr>
2843
2850
  </div><div class="memdoc">
2844
2851
  <p>Visit getelementptr instructions </p>
2845
2852
 
2846
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00623">623</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2847
- <div class="fragment"><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;{</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160;</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="comment">// GetElementPtrInst should always be a pointer or a vector contains pointers</span></div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="comment">// for now we don&#39;t handle vector type here</span></div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;VectorType&gt;(inst.getType()))</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; {</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; }</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160;</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160;</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process gep &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getPointerOperand());</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls;</div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordtype">bool</span> constGep = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a87b75f04942124711d5ea1366e866890">computeGepOffset</a>(&amp;inst, ls);</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a45ab73a812809b3c725daf11b5da6141">addGepEdge</a>(src, dst, ls, constGep);</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a3e80511758692d2ad4e5dbee15beb719"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00281">SVFIRBuilder.h:281</a></div></div>
2853
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00636">636</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2854
+ <div class="fragment"><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;{</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160;</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="comment">// GetElementPtrInst should always be a pointer or a vector contains pointers</span></div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="comment">// for now we don&#39;t handle vector type here</span></div><div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;VectorType&gt;(inst.getType()))</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">addBlackHoleAddrEdge</a>(dst);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; }</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160;</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160;</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process gep &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getPointerOperand());</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160;</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <a class="code" href="classSVF_1_1LocationSet.html">LocationSet</a> ls;</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <span class="keywordtype">bool</span> constGep = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a87b75f04942124711d5ea1366e866890">computeGepOffset</a>(&amp;inst, ls);</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a45ab73a812809b3c725daf11b5da6141">addGepEdge</a>(src, dst, ls, constGep);</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a3e80511758692d2ad4e5dbee15beb719"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a3e80511758692d2ad4e5dbee15beb719">SVF::SVFIRBuilder::addBlackHoleAddrEdge</a></div><div class="ttdeci">PAGEdge * addBlackHoleAddrEdge(NodeID node)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00281">SVFIRBuilder.h:281</a></div></div>
2848
2855
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2849
2856
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2850
2857
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
2851
2858
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a45ab73a812809b3c725daf11b5da6141"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a45ab73a812809b3c725daf11b5da6141">SVF::SVFIRBuilder::addGepEdge</a></div><div class="ttdeci">GepStmt * addGepEdge(NodeID src, NodeID dst, const LocationSet &amp;ls, bool constGep)</div><div class="ttdoc">Add Gep edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00370">SVFIRBuilder.h:370</a></div></div>
2852
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a87b75f04942124711d5ea1366e866890"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a87b75f04942124711d5ea1366e866890">SVF::SVFIRBuilder::computeGepOffset</a></div><div class="ttdeci">bool computeGepOffset(const User *V, LocationSet &amp;ls)</div><div class="ttdoc">Compute offset of a gep instruction or gep constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00205">SVFIRBuilder.cpp:205</a></div></div>
2859
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a87b75f04942124711d5ea1366e866890"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a87b75f04942124711d5ea1366e866890">SVF::SVFIRBuilder::computeGepOffset</a></div><div class="ttdeci">bool computeGepOffset(const User *V, LocationSet &amp;ls)</div><div class="ttdoc">Compute offset of a gep instruction or gep constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00218">SVFIRBuilder.cpp:218</a></div></div>
2853
2860
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
2854
2861
  <div class="ttc" id="classSVF_1_1LocationSet_html"><div class="ttname"><a href="classSVF_1_1LocationSet.html">SVF::LocationSet</a></div><div class="ttdef"><b>Definition:</b> <a href="LocationSet_8h_source.html#l00072">LocationSet.h:72</a></div></div>
2855
2862
  <div class="ttc" id="SVFBasicTypes_8h_html_a7a295e02c56a93cf9206dd9d3b18dd17"><div class="ttname"><a href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a></div><div class="ttdeci">#define DPAGBuild</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00156">SVFBasicTypes.h:156</a></div></div>
@@ -2878,15 +2885,15 @@ Private Attributes</h2></td></tr>
2878
2885
  <p>initialize global variable</p>
2879
2886
  <p>initialize global functions </p>
2880
2887
 
2881
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00502">502</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2882
- <div class="fragment"><div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160;{</div><div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160;</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#a4cf1ca2e9f045a0520b0a8a6cd5993f2">SVFModule::global_iterator</a> I = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a4dc32c583d29d74d052eaa5665b0b70e">global_begin</a>(), E =</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a8a34164634d6ad9a7b76175907c8c44b">global_end</a>(); I != E; ++I)</div><div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; {</div><div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar = *I;</div><div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(gvar);</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(gvar);</div><div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(gvar, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, idx);</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160;</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <span class="keywordflow">if</span> (gvar-&gt;hasInitializer())</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; {</div><div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C = gvar-&gt;getInitializer();</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global var node &quot;</span> &lt;&lt; *gvar &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">InitialGlobal</a>(gvar, C, 0);</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; }</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160;</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#ab86e221a93bec67a2ecb7cb53315f569">SVFModule::llvm_const_iterator</a> I = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">llvmFunBegin</a>(), E =</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">llvmFunEnd</a>(); I != E; ++I)</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; {</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = *I;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(fun);</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(fun);</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160;</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global function node &quot;</span> &lt;&lt; fun-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(fun, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, idx);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; <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><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#abee99d29b7d4c4915a386895c755009c">SVFModule::alias_iterator</a> I = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a7f2b4647c8d69c8328b63e576cb6d065">alias_begin</a>(), E = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a3cfd0983849950099d1e8f8e0fda42bc">alias_end</a>(); I != E; I++)</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(*I);</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>((*I)-&gt;getAliasee());</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>((*I)-&gt;getAliasee());</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(*I, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src,dst);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFModule_html_af38d0f831967d6d8391a4c84e58d6519"><div class="ttname"><a href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">SVF::SVFModule::llvmFunEnd</a></div><div class="ttdeci">llvm_iterator llvmFunEnd()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00138">SVFModule.h:138</a></div></div>
2888
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00515">515</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
2889
+ <div class="fragment"><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160;{</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160;</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#a4cf1ca2e9f045a0520b0a8a6cd5993f2">SVFModule::global_iterator</a> I = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a4dc32c583d29d74d052eaa5665b0b70e">global_begin</a>(), E =</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a8a34164634d6ad9a7b76175907c8c44b">global_end</a>(); I != E; ++I)</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; {</div><div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *gvar = *I;</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(gvar);</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(gvar);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160;</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(gvar, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, idx);</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; <span class="keywordflow">if</span> (gvar-&gt;hasInitializer())</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; {</div><div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; <a class="code" href="namespaceSVF.html#a7e230c0cba2e3a7c2e5a5f2ee7d88af9">Constant</a> *C = gvar-&gt;getInitializer();</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global var node &quot;</span> &lt;&lt; *gvar &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">InitialGlobal</a>(gvar, C, 0);</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; }</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; }</div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;</div><div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#ab86e221a93bec67a2ecb7cb53315f569">SVFModule::llvm_const_iterator</a> I = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a648542aa5c4b487ad5aa12a39d15e951">llvmFunBegin</a>(), E =</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">llvmFunEnd</a>(); I != E; ++I)</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; {</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *fun = *I;</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> idx = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(fun);</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5a93f3d13e2b3df126fbc42b1bd09006">getObjectNode</a>(fun);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;add global function node &quot;</span> &lt;&lt; fun-&gt;getName() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(fun, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">addAddrEdge</a>(obj, idx);</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; }</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="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><div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1SVFModule.html#abee99d29b7d4c4915a386895c755009c">SVFModule::alias_iterator</a> I = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a7f2b4647c8d69c8328b63e576cb6d065">alias_begin</a>(), E = svfModule-&gt;<a class="code" href="classSVF_1_1SVFModule.html#a3cfd0983849950099d1e8f8e0fda42bc">alias_end</a>(); I != E; I++)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>(*I);</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">getValueNode</a>((*I)-&gt;getAliasee());</div><div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">processCE</a>((*I)-&gt;getAliasee());</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">setCurrentLocation</a>(*I, <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src,dst);</div><div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; }</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFModule_html_af38d0f831967d6d8391a4c84e58d6519"><div class="ttname"><a href="classSVF_1_1SVFModule.html#af38d0f831967d6d8391a4c84e58d6519">SVF::SVFModule::llvmFunEnd</a></div><div class="ttdeci">llvm_iterator llvmFunEnd()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00138">SVFModule.h:138</a></div></div>
2883
2890
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a2a0711cb1fdd3c5c90b07ff107aff1ac"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a2a0711cb1fdd3c5c90b07ff107aff1ac">SVF::SVFIRBuilder::addAddrEdge</a></div><div class="ttdeci">AddrStmt * addAddrEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Address edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00289">SVFIRBuilder.h:289</a></div></div>
2884
2891
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
2885
2892
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
2886
2893
  <div class="ttc" id="classSVF_1_1SVFModule_html_abee99d29b7d4c4915a386895c755009c"><div class="ttname"><a href="classSVF_1_1SVFModule.html#abee99d29b7d4c4915a386895c755009c">SVF::SVFModule::alias_iterator</a></div><div class="ttdeci">AliasSetType::iterator alias_iterator</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00057">SVFModule.h:57</a></div></div>
2887
2894
  <div class="ttc" id="namespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00083">BasicTypes.h:83</a></div></div>
2888
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ae7fcd2050a57a43bfed2c7fd1c41d250"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">SVF::SVFIRBuilder::InitialGlobal</a></div><div class="ttdeci">void InitialGlobal(const GlobalVariable *gvar, Constant *C, u32_t offset)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00431">SVFIRBuilder.cpp:431</a></div></div>
2889
- <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5adf8baa546292434ba1fec48db2d0a7"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">SVF::SVFIRBuilder::processCE</a></div><div class="ttdeci">void processCE(const Value *val)</div><div class="ttdoc">Process constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00275">SVFIRBuilder.cpp:275</a></div></div>
2895
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ae7fcd2050a57a43bfed2c7fd1c41d250"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae7fcd2050a57a43bfed2c7fd1c41d250">SVF::SVFIRBuilder::InitialGlobal</a></div><div class="ttdeci">void InitialGlobal(const GlobalVariable *gvar, Constant *C, u32_t offset)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00444">SVFIRBuilder.cpp:444</a></div></div>
2896
+ <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a5adf8baa546292434ba1fec48db2d0a7"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a5adf8baa546292434ba1fec48db2d0a7">SVF::SVFIRBuilder::processCE</a></div><div class="ttdeci">void processCE(const Value *val)</div><div class="ttdoc">Process constant expression. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00288">SVFIRBuilder.cpp:288</a></div></div>
2890
2897
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a15105737c91d01ba9daf2161fad220ef"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a15105737c91d01ba9daf2161fad220ef">SVF::SVFIRBuilder::setCurrentLocation</a></div><div class="ttdeci">void setCurrentLocation(const Value *val, const BasicBlock *bb)</div><div class="ttdoc">Set current basic block in order to keep track of control flow information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00239">SVFIRBuilder.h:239</a></div></div>
2891
2898
  <div class="ttc" id="classSVF_1_1IRGraph_html_abffddd41cc308b9b3bd5ad4a7f8f1624"><div class="ttname"><a href="classSVF_1_1IRGraph.html#abffddd41cc308b9b3bd5ad4a7f8f1624">SVF::IRGraph::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdef"><b>Definition:</b> <a href="IRGraph_8h_source.html#l00120">IRGraph.h:120</a></div></div>
2892
2899
  <div class="ttc" id="classSVF_1_1SVFModule_html_a3cfd0983849950099d1e8f8e0fda42bc"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a3cfd0983849950099d1e8f8e0fda42bc">SVF::SVFModule::alias_end</a></div><div class="ttdeci">alias_iterator alias_end()</div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00189">SVFModule.h:189</a></div></div>
@@ -3022,7 +3029,7 @@ Private Attributes</h2></td></tr>
3022
3029
  </div><div class="memdoc">
3023
3030
 
3024
3031
  <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8h_source.html#l00157">157</a> of file <a class="el" href="SVFIRBuilder_8h_source.html">SVFIRBuilder.h</a>.</p>
3025
- <div class="fragment"><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">visitCallSite</a>(&amp;II);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a6b52906a617f088b1077ba0387a846ab"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">SVF::SVFIRBuilder::visitCallSite</a></div><div class="ttdeci">void visitCallSite(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00734">SVFIRBuilder.cpp:734</a></div></div>
3032
+ <div class="fragment"><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">visitCallSite</a>(&amp;II);</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; }</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a6b52906a617f088b1077ba0387a846ab"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a6b52906a617f088b1077ba0387a846ab">SVF::SVFIRBuilder::visitCallSite</a></div><div class="ttdeci">void visitCallSite(CallSite cs)</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8cpp_source.html#l00747">SVFIRBuilder.cpp:747</a></div></div>
3026
3033
  </div><!-- fragment -->
3027
3034
  </div>
3028
3035
  </div>
@@ -3072,8 +3079,8 @@ Private Attributes</h2></td></tr>
3072
3079
  </table>
3073
3080
  </div><div class="memdoc">
3074
3081
 
3075
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00591">591</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3076
- <div class="fragment"><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;{</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process load &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getPointerOperand());</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160;</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(src, dst);</div><div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3082
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00604">604</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3083
+ <div class="fragment"><div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160;{</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process load &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getPointerOperand());</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">addLoadEdge</a>(src, dst);</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3077
3084
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
3078
3085
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a9fdcddcdcf14a90cc80d42de0d5ad189"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a9fdcddcdcf14a90cc80d42de0d5ad189">SVF::SVFIRBuilder::addLoadEdge</a></div><div class="ttdeci">LoadStmt * addLoadEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Load edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00337">SVFIRBuilder.h:337</a></div></div>
3079
3086
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
@@ -3099,8 +3106,8 @@ Private Attributes</h2></td></tr>
3099
3106
  </div><div class="memdoc">
3100
3107
  <p>Visit phi instructions </p>
3101
3108
 
3102
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00570">570</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3103
- <div class="fragment"><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160;{</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160;</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process phi &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160;</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> i = 0; i &lt; inst.getNumIncomingValues(); ++i)</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; {</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = inst.getIncomingValue(i);</div><div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* incomingInst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>&gt;(val);</div><div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((incomingInst==<span class="keyword">nullptr</span>) || (incomingInst-&gt;getFunction() == inst.getFunction()));</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160;</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(val);</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(dst,src);</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; }</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3109
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00583">583</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3110
+ <div class="fragment"><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160;{</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process phi &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;</div><div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a2db29836a72e8d86e9baa6d8d55d2978">Size_t</a> i = 0; i &lt; inst.getNumIncomingValues(); ++i)</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; {</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* val = inst.getIncomingValue(i);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* incomingInst = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>&gt;(val);</div><div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>((incomingInst==<span class="keyword">nullptr</span>) || (incomingInst-&gt;getFunction() == inst.getFunction()));</div><div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160;</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(val);</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(dst,src);</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; }</div><div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3104
3111
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
3105
3112
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
3106
3113
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aadb890cbff1ea703ece726aefecb791c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">SVF::SVFIRBuilder::addPhiStmt</a></div><div class="ttdeci">PhiStmt * addPhiStmt(NodeID res, NodeID opnd)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00303">SVFIRBuilder.h:303</a></div></div>
@@ -3161,8 +3168,8 @@ Private Attributes</h2></td></tr>
3161
3168
  </div><div class="memdoc">
3162
3169
  <p>Visit return instructions of a function </p>
3163
3170
 
3164
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00780">780</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3165
- <div class="fragment"><div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160;{</div><div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160;</div><div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="comment">// ReturnInst itself should always not be a pointer type</span></div><div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div><div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160;</div><div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process return &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160;</div><div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src = inst.getReturnValue())</div><div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; {</div><div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *F = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(inst.getParent()-&gt;getParent());</div><div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160;</div><div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rnF = <a class="code" href="classSVF_1_1SVFIRBuilder.html#aff99c8de4acf4eeaf01803dadf459b92">getReturnNode</a>(F);</div><div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(src);</div><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; <span class="comment">//vnS may be null if src is a null ptr</span></div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(rnF,vnS);</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; }</div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3171
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00793">793</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3172
+ <div class="fragment"><div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160;{</div><div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160;</div><div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; <span class="comment">// ReturnInst itself should always not be a pointer type</span></div><div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div><div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160;</div><div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process return &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160;</div><div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> *src = inst.getReturnValue())</div><div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; {</div><div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *F = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(inst.getParent()-&gt;getParent());</div><div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160;</div><div class="line"><a name="l00805"></a><span class="lineno"> 805</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> rnF = <a class="code" href="classSVF_1_1SVFIRBuilder.html#aff99c8de4acf4eeaf01803dadf459b92">getReturnNode</a>(F);</div><div class="line"><a name="l00806"></a><span class="lineno"> 806</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> vnS = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(src);</div><div class="line"><a name="l00807"></a><span class="lineno"> 807</span>&#160; <span class="comment">//vnS may be null if src is a null ptr</span></div><div class="line"><a name="l00808"></a><span class="lineno"> 808</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(rnF,vnS);</div><div class="line"><a name="l00809"></a><span class="lineno"> 809</span>&#160; }</div><div class="line"><a name="l00810"></a><span class="lineno"> 810</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3166
3173
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
3167
3174
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aff99c8de4acf4eeaf01803dadf459b92"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aff99c8de4acf4eeaf01803dadf459b92">SVF::SVFIRBuilder::getReturnNode</a></div><div class="ttdeci">NodeID getReturnNode(const SVFFunction *func)</div><div class="ttdoc">getReturnNode - Return the node representing the unique return value of a function. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00101">SVFIRBuilder.h:101</a></div></div>
3168
3175
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
@@ -3195,8 +3202,8 @@ Private Attributes</h2></td></tr>
3195
3202
  <p>Visit select instructions </p>
3196
3203
  <p>Two operands have same incoming basic block, both are the current BB </p>
3197
3204
 
3198
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00717">717</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3199
- <div class="fragment"><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160;{</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process select &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src1 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getTrueValue());</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src2 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getFalseValue());</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160;</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(dst,src1);</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(dst,src2);</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3205
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00730">730</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3206
+ <div class="fragment"><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160;{</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160;</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process select &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160;</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src1 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getTrueValue());</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src2 = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getFalseValue());</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160;</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(dst,src1);</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">addPhiStmt</a>(dst,src2);</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3200
3207
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
3201
3208
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_aadb890cbff1ea703ece726aefecb791c"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#aadb890cbff1ea703ece726aefecb791c">SVF::SVFIRBuilder::addPhiStmt</a></div><div class="ttdeci">PhiStmt * addPhiStmt(NodeID res, NodeID opnd)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00303">SVFIRBuilder.h:303</a></div></div>
3202
3209
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a85ab6b592fefc45a0674d3295e01638f"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVF::SVFUtil::outs</a></div><div class="ttdeci">raw_ostream &amp; outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
@@ -3252,8 +3259,8 @@ Private Attributes</h2></td></tr>
3252
3259
  </div><div class="memdoc">
3253
3260
  <p>Visit store instructions </p>
3254
3261
 
3255
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00605">605</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3256
- <div class="fragment"><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160;{</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <span class="comment">// StoreInst itself should always not be a pointer type</span></div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div><div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160;</div><div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process store &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160;</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getPointerOperand());</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160;</div><div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getValueOperand());</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;</div><div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, dst);</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160;</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3262
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00618">618</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3263
+ <div class="fragment"><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;{</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="comment">// StoreInst itself should always not be a pointer type</span></div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(!SVFUtil::isa&lt;PointerType&gt;(inst.getType()));</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">outs</a>() &lt;&lt; <span class="stringliteral">&quot;process store &quot;</span> &lt;&lt; inst &lt;&lt; <span class="stringliteral">&quot; \n&quot;</span>);</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getPointerOperand());</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160;</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getValueOperand());</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">addStoreEdge</a>(src, dst);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3257
3264
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
3258
3265
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
3259
3266
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ac5795471aff6ccb07a84ffe1277ff2d4"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ac5795471aff6ccb07a84ffe1277ff2d4">SVF::SVFIRBuilder::addStoreEdge</a></div><div class="ttdeci">StoreStmt * addStoreEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Store edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00344">SVFIRBuilder.h:344</a></div></div>
@@ -3279,13 +3286,13 @@ Private Attributes</h2></td></tr>
3279
3286
  </table>
3280
3287
  </div><div class="memdoc">
3281
3288
 
3282
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00850">850</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3283
- <div class="fragment"><div class="line"><a name="l00850"></a><span class="lineno"> 850</span>&#160; {</div><div class="line"><a name="l00851"></a><span class="lineno"> 851</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00852"></a><span class="lineno"> 852</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getCondition());</div><div class="line"><a name="l00853"></a><span class="lineno"> 853</span>&#160;</div><div class="line"><a name="l00854"></a><span class="lineno"> 854</span>&#160; std::vector&lt;const ICFGNode*&gt; successors;</div><div class="line"><a name="l00855"></a><span class="lineno"> 855</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><div class="line"><a name="l00856"></a><span class="lineno"> 856</span>&#160; {</div><div class="line"><a name="l00857"></a><span class="lineno"> 857</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;inst.getSuccessor(i)-&gt;front();</div><div class="line"><a name="l00858"></a><span class="lineno"> 858</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(succInst);</div><div class="line"><a name="l00859"></a><span class="lineno"> 859</span>&#160; successors.push_back(icfgNode);</div><div class="line"><a name="l00860"></a><span class="lineno"> 860</span>&#160; }</div><div class="line"><a name="l00861"></a><span class="lineno"> 861</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a> *brStmt = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae0a1f66dee058f6af0f6b074db38db8e">addBranchStmt</a>(brinst, cond,successors);</div><div class="line"><a name="l00862"></a><span class="lineno"> 862</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3289
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00863">863</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3290
+ <div class="fragment"><div class="line"><a name="l00863"></a><span class="lineno"> 863</span>&#160; {</div><div class="line"><a name="l00864"></a><span class="lineno"> 864</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> brinst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00865"></a><span class="lineno"> 865</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> cond = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(inst.getCondition());</div><div class="line"><a name="l00866"></a><span class="lineno"> 866</span>&#160;</div><div class="line"><a name="l00867"></a><span class="lineno"> 867</span>&#160; std::vector&lt;const ICFGNode*&gt; successors;</div><div class="line"><a name="l00868"></a><span class="lineno"> 868</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><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; {</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">Instruction</a>* succInst = &amp;inst.getSuccessor(i)-&gt;front();</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* icfgNode = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#ab7b0b3088b46ad65451905cc4f567a7b">getBlockICFGNode</a>(succInst);</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; successors.push_back(icfgNode);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; }</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1BranchStmt.html">BranchStmt</a> *brStmt = <a class="code" href="classSVF_1_1SVFIRBuilder.html#ae0a1f66dee058f6af0f6b074db38db8e">addBranchStmt</a>(brinst, cond,successors);</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3284
3291
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
3285
3292
  <div class="ttc" id="classSVF_1_1ICFGNode_html"><div class="ttname"><a href="classSVF_1_1ICFGNode.html">SVF::ICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00054">ICFGNode.h:54</a></div></div>
3286
3293
  <div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
3287
3294
  <div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00079">BasicTypes.h:79</a></div></div>
3288
- <div class="ttc" id="classSVF_1_1BranchStmt_html"><div class="ttname"><a href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00908">SVFStatements.h:908</a></div></div>
3295
+ <div class="ttc" id="classSVF_1_1BranchStmt_html"><div class="ttname"><a href="classSVF_1_1BranchStmt.html">SVF::BranchStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00913">SVFStatements.h:913</a></div></div>
3289
3296
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a4ea94b0a8d6da904ff9a6c1b0341b9cb"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a4ea94b0a8d6da904ff9a6c1b0341b9cb">SVF::SVFIRBuilder::pag</a></div><div class="ttdeci">SVFIR * pag</div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00048">SVFIRBuilder.h:48</a></div></div>
3290
3297
  <div class="ttc" id="classSVF_1_1SVFIR_html_aa1943d53e75aef9b014953143c6894da"><div class="ttname"><a href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">SVF::SVFIR::getICFG</a></div><div class="ttdeci">ICFG * getICFG()</div><div class="ttdoc">Return ICFG. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIR_8h_source.html#l00132">SVFIR.h:132</a></div></div>
3291
3298
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_ae0a1f66dee058f6af0f6b074db38db8e"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#ae0a1f66dee058f6af0f6b074db38db8e">SVF::SVFIRBuilder::addBranchStmt</a></div><div class="ttdeci">BranchStmt * addBranchStmt(NodeID br, NodeID cond, const std::vector&lt; const ICFGNode *&gt; succs)</div><div class="ttdoc">Add Branch statement. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00331">SVFIRBuilder.h:331</a></div></div>
@@ -3310,13 +3317,13 @@ Private Attributes</h2></td></tr>
3310
3317
  </div><div class="memdoc">
3311
3318
  <p>Visit Unary Operator </p>
3312
3319
 
3313
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00688">688</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3314
- <div class="fragment"><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160;{</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(inst.getNumOperands() == 1 &amp;&amp; <span class="stringliteral">&quot;not one operand for Unary instruction?&quot;</span>);</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>* unaryPE = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6102431dd8a8d7b050d5773e499d0fbf">addUnaryOPEdge</a>(src, dst, opcode);</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3320
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00701">701</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3321
+ <div class="fragment"><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160;{</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(inst.getNumOperands() == 1 &amp;&amp; <span class="stringliteral">&quot;not one operand for Unary instruction?&quot;</span>);</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getOperand(0);</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> opcode = inst.getOpcode();</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1UnaryOPStmt.html">UnaryOPStmt</a>* unaryPE = <a class="code" href="classSVF_1_1SVFIRBuilder.html#a6102431dd8a8d7b050d5773e499d0fbf">addUnaryOPEdge</a>(src, dst, opcode);</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3315
3322
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
3316
3323
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a6102431dd8a8d7b050d5773e499d0fbf"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a6102431dd8a8d7b050d5773e499d0fbf">SVF::SVFIRBuilder::addUnaryOPEdge</a></div><div class="ttdeci">UnaryOPStmt * addUnaryOPEdge(NodeID src, NodeID dst, u32_t opcode)</div><div class="ttdoc">Add Unary edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00324">SVFIRBuilder.h:324</a></div></div>
3317
3324
  <div class="ttc" id="util_8h_html_a07d17d6d5d1074c0969bc5d3c3d1d84a"><div class="ttname"><a href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a></div><div class="ttdeci">#define assert(ex)</div><div class="ttdef"><b>Definition:</b> <a href="util_8h_source.html#l00141">util.h:141</a></div></div>
3318
3325
  <div class="ttc" id="namespaceSVF_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="SVFBasicTypes_8h_source.html#l00075">SVFBasicTypes.h:75</a></div></div>
3319
- <div class="ttc" id="classSVF_1_1UnaryOPStmt_html"><div class="ttname"><a href="classSVF_1_1UnaryOPStmt.html">SVF::UnaryOPStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00854">SVFStatements.h:854</a></div></div>
3326
+ <div class="ttc" id="classSVF_1_1UnaryOPStmt_html"><div class="ttname"><a href="classSVF_1_1UnaryOPStmt.html">SVF::UnaryOPStmt</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFStatements_8h_source.html#l00859">SVFStatements.h:859</a></div></div>
3320
3327
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>
3321
3328
  </div><!-- fragment -->
3322
3329
  </div>
@@ -3367,8 +3374,8 @@ Private Attributes</h2></td></tr>
3367
3374
  <p>TODO: var arguments need to be handled. <a href="https://llvm.org/docs/LangRef.html#id1911">https://llvm.org/docs/LangRef.html#id1911</a></p>
3368
3375
  <p>ap = alloca struct.va_list ap2 = bitcast struct.va_list* ap to i8* ; Read a single integer argument from ap2 tmp = va_arg i8* ap2, i32 (VAArgInst) TODO: for now, create a copy edge from ap2 to tmp, we assume here tmp should point to the n-th argument of the var_args </p>
3369
3376
 
3370
- <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00869">869</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3371
- <div class="fragment"><div class="line"><a name="l00869"></a><span class="lineno"> 869</span>&#160; {</div><div class="line"><a name="l00870"></a><span class="lineno"> 870</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00871"></a><span class="lineno"> 871</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div><div class="line"><a name="l00872"></a><span class="lineno"> 872</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div><div class="line"><a name="l00873"></a><span class="lineno"> 873</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src,dst);</div><div class="line"><a name="l00874"></a><span class="lineno"> 874</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3377
+ <p class="definition">Definition at line <a class="el" href="SVFIRBuilder_8cpp_source.html#l00882">882</a> of file <a class="el" href="SVFIRBuilder_8cpp_source.html">SVFIRBuilder.cpp</a>.</p>
3378
+ <div class="fragment"><div class="line"><a name="l00882"></a><span class="lineno"> 882</span>&#160; {</div><div class="line"><a name="l00883"></a><span class="lineno"> 883</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(&amp;inst);</div><div class="line"><a name="l00884"></a><span class="lineno"> 884</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a>* opnd = inst.getPointerOperand();</div><div class="line"><a name="l00885"></a><span class="lineno"> 885</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src = <a class="code" href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">getValueNode</a>(opnd);</div><div class="line"><a name="l00886"></a><span class="lineno"> 886</span>&#160; <a class="code" href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">addCopyEdge</a>(src,dst);</div><div class="line"><a name="l00887"></a><span class="lineno"> 887</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFIRBuilder_html_acc69fc638380f34164db649d9bf2a7d6"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#acc69fc638380f34164db649d9bf2a7d6">SVF::SVFIRBuilder::getValueNode</a></div><div class="ttdeci">NodeID getValueNode(const Value *V)</div><div class="ttdoc">Get different kinds of node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00085">SVFIRBuilder.h:85</a></div></div>
3372
3379
  <div class="ttc" id="namespaceSVF_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="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
3373
3380
  <div class="ttc" id="classSVF_1_1SVFIRBuilder_html_a140defeb309d895394822f8780deda16"><div class="ttname"><a href="classSVF_1_1SVFIRBuilder.html#a140defeb309d895394822f8780deda16">SVF::SVFIRBuilder::addCopyEdge</a></div><div class="ttdeci">CopyStmt * addCopyEdge(NodeID src, NodeID dst)</div><div class="ttdoc">Add Copy edge. </div><div class="ttdef"><b>Definition:</b> <a href="SVFIRBuilder_8h_source.html#l00296">SVFIRBuilder.h:296</a></div></div>
3374
3381
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="BasicTypes_8h_source.html#l00078">BasicTypes.h:78</a></div></div>