svf-tools 1.0.556 → 1.0.559

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 (202) hide show
  1. package/README.md +2 -2
  2. package/SVF-doxygen/html/html/AndersenPWC_8h_source.html +15 -15
  3. package/SVF-doxygen/html/html/AndersenSCD_8cpp_source.html +12 -11
  4. package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +11 -10
  5. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +47 -46
  6. package/SVF-doxygen/html/html/AndersenWaveDiff_8cpp_source.html +9 -8
  7. package/SVF-doxygen/html/html/Andersen_8cpp_source.html +35 -34
  8. package/SVF-doxygen/html/html/Andersen_8h_source.html +6 -6
  9. package/SVF-doxygen/html/html/CHGBuilder_8cpp.html +2 -2
  10. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +19 -18
  11. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +15 -15
  12. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +4 -4
  13. package/SVF-doxygen/html/html/DDAPass_8cpp_source.html +13 -12
  14. package/SVF-doxygen/html/html/DDAPass_8h_source.html +11 -11
  15. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +20 -19
  16. package/SVF-doxygen/html/html/DDAStat_8h_source.html +13 -13
  17. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +2 -2
  18. package/SVF-doxygen/html/html/ExtAPI_8cpp_source.html +5 -2
  19. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +3 -2
  20. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +3 -3
  21. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +5 -4
  22. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +2 -2
  23. package/SVF-doxygen/html/html/MHP_8cpp_source.html +2 -2
  24. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +5 -5
  25. package/SVF-doxygen/html/html/MTAStat_8h_source.html +1 -1
  26. package/SVF-doxygen/html/html/MTA_8cpp_source.html +2 -2
  27. package/SVF-doxygen/html/html/MemSSA_8cpp_source.html +2 -2
  28. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +2 -2
  29. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +67 -69
  30. package/SVF-doxygen/html/html/PTAStat_8h.html +1 -0
  31. package/SVF-doxygen/html/html/PTAStat_8h_source.html +70 -76
  32. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +2 -2
  33. package/SVF-doxygen/html/html/PointerAnalysis_8h_source.html +1 -1
  34. package/SVF-doxygen/html/html/PointsTo_8cpp_source.html +2 -1
  35. package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +5 -4
  36. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +22 -21
  37. package/SVF-doxygen/html/html/SVFGStat_8h_source.html +5 -5
  38. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +5 -5
  39. package/SVF-doxygen/html/html/SVFG_8h_source.html +3 -3
  40. package/SVF-doxygen/html/html/SVFStat_8cpp.html +81 -0
  41. package/SVF-doxygen/html/html/SVFStat_8cpp_source.html +85 -0
  42. package/SVF-doxygen/html/html/SVFStat_8h.html +94 -0
  43. package/SVF-doxygen/html/html/SVFStat_8h_source.html +103 -0
  44. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +1 -1
  45. package/SVF-doxygen/html/html/Steensgaard_8h_source.html +1 -1
  46. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
  47. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +3 -3
  48. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
  49. package/SVF-doxygen/html/html/WPAStat_8h_source.html +8 -8
  50. package/SVF-doxygen/html/html/annotated.html +39 -38
  51. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +79 -79
  52. package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +15 -15
  53. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +37 -37
  54. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR-members.html +1 -1
  55. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +22 -22
  56. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat-members.html +24 -22
  57. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +97 -86
  58. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.png +0 -0
  59. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +24 -24
  60. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +47 -47
  61. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +4 -4
  62. package/SVF-doxygen/html/html/classSVF_1_1DDAPass.html +30 -30
  63. package/SVF-doxygen/html/html/classSVF_1_1DDAStat-members.html +24 -23
  64. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +80 -67
  65. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.png +0 -0
  66. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +4 -4
  67. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI-members.html +5 -4
  68. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +40 -5
  69. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +4 -4
  70. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +26 -26
  71. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat-members.html +24 -22
  72. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +67 -56
  73. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.png +0 -0
  74. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat-members.html +23 -21
  75. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.html +55 -42
  76. package/SVF-doxygen/html/html/classSVF_1_1ICFGStat.png +0 -0
  77. package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +6 -6
  78. package/SVF-doxygen/html/html/classSVF_1_1MHP.html +4 -4
  79. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +2 -2
  80. package/SVF-doxygen/html/html/classSVF_1_1MTAStat-members.html +25 -23
  81. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +59 -48
  82. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.png +0 -0
  83. package/SVF-doxygen/html/html/classSVF_1_1MemSSA.html +5 -5
  84. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat-members.html +22 -21
  85. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +57 -44
  86. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.png +0 -0
  87. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +6 -6
  88. package/SVF-doxygen/html/html/classSVF_1_1Options.html +2 -2
  89. package/SVF-doxygen/html/html/classSVF_1_1PTAStat-members.html +24 -22
  90. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +186 -420
  91. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.png +0 -0
  92. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +2 -2
  93. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +12 -12
  94. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat-members.html +33 -32
  95. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +100 -87
  96. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.png +0 -0
  97. package/SVF-doxygen/html/html/classSVF_1_1SVFStat-members.html +100 -0
  98. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.html +605 -0
  99. package/SVF-doxygen/html/html/classSVF_1_1SVFStat.png +0 -0
  100. package/SVF-doxygen/html/html/classSVF_1_1Steensgaard.html +1 -1
  101. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +4 -4
  102. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +12 -12
  103. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat-members.html +26 -24
  104. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +65 -54
  105. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.png +0 -0
  106. package/SVF-doxygen/html/html/classes.html +50 -50
  107. package/SVF-doxygen/html/html/dda_8cpp.html +1 -1
  108. package/SVF-doxygen/html/html/dda_8cpp_source.html +1 -1
  109. package/SVF-doxygen/html/html/dir_862d3276083eaac55caed79b9120bf29.html +2 -0
  110. package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +2 -0
  111. package/SVF-doxygen/html/html/files.html +10 -8
  112. package/SVF-doxygen/html/html/functions_0x7e.html +3 -0
  113. package/SVF-doxygen/html/html/functions_c.html +28 -29
  114. package/SVF-doxygen/html/html/functions_e.html +3 -2
  115. package/SVF-doxygen/html/html/functions_enum.html +1 -1
  116. package/SVF-doxygen/html/html/functions_eval_c.html +1 -1
  117. package/SVF-doxygen/html/html/functions_eval_w.html +1 -1
  118. package/SVF-doxygen/html/html/functions_func_0x7e.html +3 -0
  119. package/SVF-doxygen/html/html/functions_func_c.html +28 -27
  120. package/SVF-doxygen/html/html/functions_func_e.html +1 -1
  121. package/SVF-doxygen/html/html/functions_func_g.html +1 -1
  122. package/SVF-doxygen/html/html/functions_func_i.html +11 -8
  123. package/SVF-doxygen/html/html/functions_func_p.html +9 -7
  124. package/SVF-doxygen/html/html/functions_func_s.html +15 -12
  125. package/SVF-doxygen/html/html/functions_g.html +2 -2
  126. package/SVF-doxygen/html/html/functions_i.html +8 -5
  127. package/SVF-doxygen/html/html/functions_l.html +3 -3
  128. package/SVF-doxygen/html/html/functions_m.html +2 -1
  129. package/SVF-doxygen/html/html/functions_n.html +1 -1
  130. package/SVF-doxygen/html/html/functions_p.html +17 -13
  131. package/SVF-doxygen/html/html/functions_r.html +7 -3
  132. package/SVF-doxygen/html/html/functions_s.html +23 -21
  133. package/SVF-doxygen/html/html/functions_t.html +6 -6
  134. package/SVF-doxygen/html/html/functions_type_n.html +1 -1
  135. package/SVF-doxygen/html/html/functions_type_s.html +1 -1
  136. package/SVF-doxygen/html/html/functions_type_t.html +1 -1
  137. package/SVF-doxygen/html/html/functions_v.html +3 -3
  138. package/SVF-doxygen/html/html/functions_vars_e.html +1 -0
  139. package/SVF-doxygen/html/html/functions_vars_g.html +1 -1
  140. package/SVF-doxygen/html/html/functions_vars_m.html +1 -0
  141. package/SVF-doxygen/html/html/functions_vars_s.html +1 -0
  142. package/SVF-doxygen/html/html/functions_vars_t.html +1 -1
  143. package/SVF-doxygen/html/html/functions_w.html +1 -1
  144. package/SVF-doxygen/html/html/hierarchy.html +47 -46
  145. package/SVF-doxygen/html/html/namespaceSVF.html +2 -0
  146. package/SVF-doxygen/html/html/search/all_10.js +8 -8
  147. package/SVF-doxygen/html/html/search/all_11.js +2 -2
  148. package/SVF-doxygen/html/html/search/all_12.js +13 -10
  149. package/SVF-doxygen/html/html/search/all_13.js +4 -4
  150. package/SVF-doxygen/html/html/search/all_14.js +1 -1
  151. package/SVF-doxygen/html/html/search/all_15.js +2 -2
  152. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  153. package/SVF-doxygen/html/html/search/all_19.js +1 -0
  154. package/SVF-doxygen/html/html/search/all_3.js +3 -3
  155. package/SVF-doxygen/html/html/search/all_5.js +2 -2
  156. package/SVF-doxygen/html/html/search/all_7.js +2 -2
  157. package/SVF-doxygen/html/html/search/all_9.js +1 -0
  158. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  159. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  160. package/SVF-doxygen/html/html/search/all_e.js +2 -2
  161. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  162. package/SVF-doxygen/html/html/search/classes_f.js +1 -0
  163. package/SVF-doxygen/html/html/search/enums_1.js +1 -1
  164. package/SVF-doxygen/html/html/search/enumvalues_13.js +1 -1
  165. package/SVF-doxygen/html/html/search/enumvalues_2.js +1 -1
  166. package/SVF-doxygen/html/html/search/files_d.js +2 -0
  167. package/SVF-doxygen/html/html/search/functions_11.js +3 -2
  168. package/SVF-doxygen/html/html/search/functions_17.js +1 -0
  169. package/SVF-doxygen/html/html/search/functions_2.js +1 -1
  170. package/SVF-doxygen/html/html/search/functions_4.js +1 -1
  171. package/SVF-doxygen/html/html/search/functions_6.js +1 -1
  172. package/SVF-doxygen/html/html/search/functions_8.js +1 -0
  173. package/SVF-doxygen/html/html/search/functions_f.js +4 -4
  174. package/SVF-doxygen/html/html/search/typedefs_10.js +1 -1
  175. package/SVF-doxygen/html/html/search/typedefs_11.js +1 -1
  176. package/SVF-doxygen/html/html/search/typedefs_c.js +1 -1
  177. package/SVF-doxygen/html/html/search/variables_12.js +1 -1
  178. package/SVF-doxygen/html/html/search/variables_13.js +2 -2
  179. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  180. package/SVF-doxygen/html/html/search/variables_5.js +1 -1
  181. package/SVF-doxygen/html/html/search/variables_7.js +1 -1
  182. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  183. package/include/Graphs/ICFGStat.h +1 -1
  184. package/include/Util/ExtAPI.h +3 -0
  185. package/include/Util/ExtAPI.json +1456 -44
  186. package/include/Util/PTAStat.h +6 -36
  187. package/include/Util/SVFStat.h +95 -0
  188. package/include/WPA/AndersenPWC.h +1 -1
  189. package/lib/DDA/DDAPass.cpp +1 -0
  190. package/lib/DDA/DDAStat.cpp +1 -0
  191. package/lib/Graphs/SVFGReadWrite.cpp +1 -0
  192. package/lib/Graphs/SVFGStat.cpp +1 -0
  193. package/lib/SVF-FE/CHGBuilder.cpp +1 -0
  194. package/lib/Util/ExtAPI.cpp +42 -4
  195. package/lib/Util/PTAStat.cpp +2 -21
  196. package/lib/Util/SVFStat.cpp +58 -0
  197. package/lib/WPA/Andersen.cpp +1 -0
  198. package/lib/WPA/AndersenSCD.cpp +1 -0
  199. package/lib/WPA/AndersenSFR.cpp +1 -0
  200. package/lib/WPA/AndersenStat.cpp +1 -0
  201. package/lib/WPA/AndersenWaveDiff.cpp +1 -0
  202. package/package.json +1 -1
@@ -1971,15 +1971,15 @@ Additional Inherited Members</h2></td></tr>
1971
1971
  <p>Reimplemented in <a class="el" href="classSVF_1_1SVFGOPT.html#af4d2c6d2e3b316b256f860801fe3b178">SVF::SVFGOPT</a>.</p>
1972
1972
 
1973
1973
  <p class="definition">Definition at line <a class="el" href="SVFG_8cpp_source.html#l00224">224</a> of file <a class="el" href="SVFG_8cpp_source.html">SVFG.cpp</a>.</p>
1974
- <div class="fragment"><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;{</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;Build Sparse Value-Flow Graph \n&quot;</span>));</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a5524ff7901659f56e9de343992be8f3b">startClk</a>();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#a1608ded89f829a780d67cb82e1e62944">Options::ReadSVFG</a>.empty())</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a9da50b8f467066b478143af64f7c9858">readFile</a>(<a class="code" href="classSVF_1_1Options.html#a1608ded89f829a780d67cb82e1e62944">Options::ReadSVFG</a>);</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;\tCreate SVFG Addr-taken Node\n&quot;</span>));</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#a4bf9a39b93b7254f627dd393b9f2b82c">ATVFNodeStart</a>();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#abddfc95cf644d0729ee29eccf95699f1">addSVFGNodesForAddrTakenVars</a>();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#aa39231c3d81fa87cdb6089f17bc35af8">ATVFNodeEnd</a>();</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;\tCreate SVFG Indirect Edge\n&quot;</span>));</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#adcb30427bb220dc122ad22030e10eb21">indVFEdgeStart</a>();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a164a3df08fc24bacc0b97aee8b6eec38">connectIndirectSVFGEdges</a>();</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#a8b3b9a211f410e67e8fd1a79d3db9023">indVFEdgeEnd</a>();</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#a4a9e039ba28cc7cdadf9d9d4fa64ab11">Options::WriteSVFG</a>.empty())</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a7ce9ec638995467c211958262be08ee1">writeToFile</a>(<a class="code" href="classSVF_1_1Options.html#a4a9e039ba28cc7cdadf9d9d4fa64ab11">Options::WriteSVFG</a>);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFGStat_html_a4bf9a39b93b7254f627dd393b9f2b82c"><div class="ttname"><a href="classSVF_1_1SVFGStat.html#a4bf9a39b93b7254f627dd393b9f2b82c">SVF::SVFGStat::ATVFNodeStart</a></div><div class="ttdeci">void ATVFNodeStart()</div><div class="ttdef"><b>Definition:</b> <a href="SVFGStat_8h_source.html#l00139">SVFGStat.h:139</a></div></div>
1974
+ <div class="fragment"><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;{</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;Build Sparse Value-Flow Graph \n&quot;</span>));</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFStat.html#a730cc814fede3edb563aa9957c869e9e">startClk</a>();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#a1608ded89f829a780d67cb82e1e62944">Options::ReadSVFG</a>.empty())</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a9da50b8f467066b478143af64f7c9858">readFile</a>(<a class="code" href="classSVF_1_1Options.html#a1608ded89f829a780d67cb82e1e62944">Options::ReadSVFG</a>);</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; <span class="keywordflow">else</span></div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; {</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;\tCreate SVFG Addr-taken Node\n&quot;</span>));</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#a4bf9a39b93b7254f627dd393b9f2b82c">ATVFNodeStart</a>();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#abddfc95cf644d0729ee29eccf95699f1">addSVFGNodesForAddrTakenVars</a>();</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#aa39231c3d81fa87cdb6089f17bc35af8">ATVFNodeEnd</a>();</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a2c64190a065f342897573a3ef4973adb">DGENERAL</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">pasMsg</a>(<span class="stringliteral">&quot;\tCreate SVFG Indirect Edge\n&quot;</span>));</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#adcb30427bb220dc122ad22030e10eb21">indVFEdgeStart</a>();</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a164a3df08fc24bacc0b97aee8b6eec38">connectIndirectSVFGEdges</a>();</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#a8b3b9a211f410e67e8fd1a79d3db9023">indVFEdgeEnd</a>();</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1Options.html#a4a9e039ba28cc7cdadf9d9d4fa64ab11">Options::WriteSVFG</a>.empty())</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a7ce9ec638995467c211958262be08ee1">writeToFile</a>(<a class="code" href="classSVF_1_1Options.html#a4a9e039ba28cc7cdadf9d9d4fa64ab11">Options::WriteSVFG</a>);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFGStat_html_a4bf9a39b93b7254f627dd393b9f2b82c"><div class="ttname"><a href="classSVF_1_1SVFGStat.html#a4bf9a39b93b7254f627dd393b9f2b82c">SVF::SVFGStat::ATVFNodeStart</a></div><div class="ttdeci">void ATVFNodeStart()</div><div class="ttdef"><b>Definition:</b> <a href="SVFGStat_8h_source.html#l00139">SVFGStat.h:139</a></div></div>
1975
1975
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a609eea630a8f88fe9eaba15ce7e48738"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a609eea630a8f88fe9eaba15ce7e48738">SVF::SVFUtil::pasMsg</a></div><div class="ttdeci">std::string pasMsg(std::string msg)</div><div class="ttdoc">Print each pass/phase message by converting a string into blue string output. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00099">SVFUtil.cpp:99</a></div></div>
1976
1976
  <div class="ttc" id="classSVF_1_1Options_html_a1608ded89f829a780d67cb82e1e62944"><div class="ttname"><a href="classSVF_1_1Options.html#a1608ded89f829a780d67cb82e1e62944">SVF::Options::ReadSVFG</a></div><div class="ttdeci">static const llvm::cl::opt&lt; std ::string &gt; ReadSVFG</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00162">Options.h:162</a></div></div>
1977
1977
  <div class="ttc" id="classSVF_1_1Options_html_a4a9e039ba28cc7cdadf9d9d4fa64ab11"><div class="ttname"><a href="classSVF_1_1Options.html#a4a9e039ba28cc7cdadf9d9d4fa64ab11">SVF::Options::WriteSVFG</a></div><div class="ttdeci">static const llvm::cl::opt&lt; std ::string &gt; WriteSVFG</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00161">Options.h:161</a></div></div>
1978
- <div class="ttc" id="classSVF_1_1SVFG_html_a9da50b8f467066b478143af64f7c9858"><div class="ttname"><a href="classSVF_1_1SVFG.html#a9da50b8f467066b478143af64f7c9858">SVF::SVFG::readFile</a></div><div class="ttdeci">virtual void readFile(const std::string &amp;filename)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGReadWrite_8cpp_source.html#l00205">SVFGReadWrite.cpp:205</a></div></div>
1978
+ <div class="ttc" id="classSVF_1_1SVFStat_html_a730cc814fede3edb563aa9957c869e9e"><div class="ttname"><a href="classSVF_1_1SVFStat.html#a730cc814fede3edb563aa9957c869e9e">SVF::SVFStat::startClk</a></div><div class="ttdeci">virtual void startClk()</div><div class="ttdef"><b>Definition:</b> <a href="SVFStat_8h_source.html#l00058">SVFStat.h:58</a></div></div>
1979
+ <div class="ttc" id="classSVF_1_1SVFG_html_a9da50b8f467066b478143af64f7c9858"><div class="ttname"><a href="classSVF_1_1SVFG.html#a9da50b8f467066b478143af64f7c9858">SVF::SVFG::readFile</a></div><div class="ttdeci">virtual void readFile(const std::string &amp;filename)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGReadWrite_8cpp_source.html#l00206">SVFGReadWrite.cpp:206</a></div></div>
1979
1980
  <div class="ttc" id="classSVF_1_1SVFG_html_abddfc95cf644d0729ee29eccf95699f1"><div class="ttname"><a href="classSVF_1_1SVFG.html#abddfc95cf644d0729ee29eccf95699f1">SVF::SVFG::addSVFGNodesForAddrTakenVars</a></div><div class="ttdeci">void addSVFGNodesForAddrTakenVars()</div><div class="ttdoc">Create SVFG nodes for address-taken variables. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00251">SVFG.cpp:251</a></div></div>
1980
1981
  <div class="ttc" id="classSVF_1_1SVFG_html_a164a3df08fc24bacc0b97aee8b6eec38"><div class="ttname"><a href="classSVF_1_1SVFG.html#a164a3df08fc24bacc0b97aee8b6eec38">SVF::SVFG::connectIndirectSVFGEdges</a></div><div class="ttdeci">void connectIndirectSVFGEdges()</div><div class="ttdoc">Connect direct SVFG edges between two SVFG nodes (value-flow of top address-taken variables) ...</div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00325">SVFG.cpp:325</a></div></div>
1981
- <div class="ttc" id="classSVF_1_1SVFG_html_a7ce9ec638995467c211958262be08ee1"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ce9ec638995467c211958262be08ee1">SVF::SVFG::writeToFile</a></div><div class="ttdeci">virtual void writeToFile(const std::string &amp;filename)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGReadWrite_8cpp_source.html#l00046">SVFGReadWrite.cpp:46</a></div></div>
1982
- <div class="ttc" id="classSVF_1_1PTAStat_html_a5524ff7901659f56e9de343992be8f3b"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a5524ff7901659f56e9de343992be8f3b">SVF::PTAStat::startClk</a></div><div class="ttdeci">virtual void startClk()</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8h_source.html#l00134">PTAStat.h:134</a></div></div>
1982
+ <div class="ttc" id="classSVF_1_1SVFG_html_a7ce9ec638995467c211958262be08ee1"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ce9ec638995467c211958262be08ee1">SVF::SVFG::writeToFile</a></div><div class="ttdeci">virtual void writeToFile(const std::string &amp;filename)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGReadWrite_8cpp_source.html#l00047">SVFGReadWrite.cpp:47</a></div></div>
1983
1983
  <div class="ttc" id="classSVF_1_1SVFG_html_ad5c1415f488ec4412d5457262269eff3"><div class="ttname"><a href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">SVF::SVFG::stat</a></div><div class="ttdeci">SVFGStat * stat</div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00104">SVFG.h:104</a></div></div>
1984
1984
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::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>
1985
1985
  <div class="ttc" id="classSVF_1_1SVFGStat_html_aa39231c3d81fa87cdb6089f17bc35af8"><div class="ttname"><a href="classSVF_1_1SVFGStat.html#aa39231c3d81fa87cdb6089f17bc35af8">SVF::SVFGStat::ATVFNodeEnd</a></div><div class="ttdeci">void ATVFNodeEnd()</div><div class="ttdef"><b>Definition:</b> <a href="SVFGStat_8h_source.html#l00144">SVFGStat.h:144</a></div></div>
@@ -2915,8 +2915,8 @@ Additional Inherited Members</h2></td></tr>
2915
2915
  </table>
2916
2916
  </div><div class="memdoc">
2917
2917
 
2918
- <p class="definition">Definition at line <a class="el" href="SVFGReadWrite_8cpp_source.html#l00429">429</a> of file <a class="el" href="SVFGReadWrite_8cpp_source.html">SVFGReadWrite.cpp</a>.</p>
2919
- <div class="fragment"><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160;{</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keywordflow">if</span>(s == <span class="stringliteral">&quot;&quot;</span>)</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; {</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#a1a05ede2ad100bf5de5dfa7ccdfa4397">NULL</a>;</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; }</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordtype">string</span> temp;</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordtype">size_t</span> last = 0;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="cJSON_8cpp.html#a2599f74bdbbc1b3fd1ba8db3789a0be7">next</a> = 0;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempMRVer;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* tempMemRegion;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="classSVF_1_1MSSADEF.html">MSSADEF</a>* tempDef;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <span class="comment">//{create Memory Region object</span></div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; next = s.find(<span class="stringliteral">&quot;MemRegion: pts{&quot;</span>) + 15;</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; last = s.find(<span class="stringliteral">&quot;} MRVERSION: &quot;</span>);</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; temp = s.substr(next, last-next);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <span class="comment">// convert string to PointsTo</span></div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> dstPts;</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <span class="keywordtype">string</span> point;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; stringstream ss(temp);</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; <span class="keywordflow">while</span> (getline(ss, point, <span class="charliteral">&#39; &#39;</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; istringstream sss(point);</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj;</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; sss &gt;&gt; obj;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; dstPts.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(obj);</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; tempMemRegion = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>(dstPts);</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="comment">// create mssdef</span></div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; next = s.find(<span class="stringliteral">&quot;MSSADef: &quot;</span>) + 9;</div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; last = s.find(<span class="stringliteral">&quot;} &gt;=&quot;</span>);</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; temp = s.substr(next, last-next);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; <span class="comment">// convert string to deftype</span></div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; istringstream ss1(temp.substr(0, temp.find(<span class="stringliteral">&quot;, &quot;</span>)));</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordtype">int</span> obj1;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; ss1 &gt;&gt; obj1;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; <a class="code" href="classSVF_1_1MSSADEF.html#a32682e20c9c08d2bdd5abc62ea17af18">MSSADEF::DEFTYPE</a> defType = <span class="keyword">static_cast&lt;</span><a class="code" href="classSVF_1_1MSSADEF.html#a32682e20c9c08d2bdd5abc62ea17af18">MSSADEF::DEFTYPE</a><span class="keyword">&gt;</span>(obj1);</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; tempDef = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MSSADEF.html">MSSADEF</a>(defType, tempMemRegion);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; <span class="comment">// mrversion</span></div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; next = s.find(<span class="stringliteral">&quot;MRVERSION: &quot;</span>) + 11;</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; last = s.find(<span class="stringliteral">&quot; MSSADef:&quot;</span>);</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; temp = s.substr(next, last-next);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="comment">// convert mrversion to nodeid</span></div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; istringstream ss2(temp);</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj2;</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; ss2 &gt;&gt; obj2;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; <span class="comment">// create mrver</span></div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; tempMRVer = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>(tempMemRegion, obj2, tempDef);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <span class="keywordflow">return</span> tempMRVer;</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;}</div><div class="ttc" id="classSVF_1_1MRVer_html"><div class="ttname"><a href="classSVF_1_1MRVer.html">SVF::MRVer</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00043">MSSAMuChi.h:43</a></div></div>
2918
+ <p class="definition">Definition at line <a class="el" href="SVFGReadWrite_8cpp_source.html#l00430">430</a> of file <a class="el" href="SVFGReadWrite_8cpp_source.html">SVFGReadWrite.cpp</a>.</p>
2919
+ <div class="fragment"><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160;{</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keywordflow">if</span>(s == <span class="stringliteral">&quot;&quot;</span>)</div><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; <span class="keywordflow">return</span> <a class="code" href="cJSON_8cpp.html#a1a05ede2ad100bf5de5dfa7ccdfa4397">NULL</a>;</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; }</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <span class="keywordtype">string</span> temp;</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordtype">size_t</span> last = 0;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="cJSON_8cpp.html#a2599f74bdbbc1b3fd1ba8db3789a0be7">next</a> = 0;</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempMRVer;</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>* tempMemRegion;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; <a class="code" href="classSVF_1_1MSSADEF.html">MSSADEF</a>* tempDef;</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="comment">//{create Memory Region object</span></div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; next = s.find(<span class="stringliteral">&quot;MemRegion: pts{&quot;</span>) + 15;</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; last = s.find(<span class="stringliteral">&quot;} MRVERSION: &quot;</span>);</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; temp = s.substr(next, last-next);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="comment">// convert string to PointsTo</span></div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <a class="code" href="classSVF_1_1SparseBitVector.html">NodeBS</a> dstPts;</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordtype">string</span> point;</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; stringstream ss(temp);</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">while</span> (getline(ss, point, <span class="charliteral">&#39; &#39;</span>))</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; istringstream sss(point);</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj;</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; sss &gt;&gt; obj;</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; dstPts.<a class="code" href="classSVF_1_1SparseBitVector.html#a61bd86909a141f9de873d92c0f904832">set</a>(obj);</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; tempMemRegion = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MemRegion.html">MemRegion</a>(dstPts);</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="comment">// create mssdef</span></div><div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160; next = s.find(<span class="stringliteral">&quot;MSSADef: &quot;</span>) + 9;</div><div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; last = s.find(<span class="stringliteral">&quot;} &gt;=&quot;</span>);</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; temp = s.substr(next, last-next);</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="comment">// convert string to deftype</span></div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; istringstream ss1(temp.substr(0, temp.find(<span class="stringliteral">&quot;, &quot;</span>)));</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordtype">int</span> obj1;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; ss1 &gt;&gt; obj1;</div><div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; <a class="code" href="classSVF_1_1MSSADEF.html#a32682e20c9c08d2bdd5abc62ea17af18">MSSADEF::DEFTYPE</a> defType = <span class="keyword">static_cast&lt;</span><a class="code" href="classSVF_1_1MSSADEF.html#a32682e20c9c08d2bdd5abc62ea17af18">MSSADEF::DEFTYPE</a><span class="keyword">&gt;</span>(obj1);</div><div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; tempDef = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MSSADEF.html">MSSADEF</a>(defType, tempMemRegion);</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; <span class="comment">// mrversion</span></div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; next = s.find(<span class="stringliteral">&quot;MRVERSION: &quot;</span>) + 11;</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; last = s.find(<span class="stringliteral">&quot; MSSADef:&quot;</span>);</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; temp = s.substr(next, last-next);</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; <span class="comment">// convert mrversion to nodeid</span></div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; istringstream ss2(temp);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj2;</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; ss2 &gt;&gt; obj2;</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <span class="comment">// create mrver</span></div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; tempMRVer = <span class="keyword">new</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>(tempMemRegion, obj2, tempDef);</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; <span class="keywordflow">return</span> tempMRVer;</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160;}</div><div class="ttc" id="classSVF_1_1MRVer_html"><div class="ttname"><a href="classSVF_1_1MRVer.html">SVF::MRVer</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00043">MSSAMuChi.h:43</a></div></div>
2920
2920
  <div class="ttc" id="cJSON_8cpp_html_a2599f74bdbbc1b3fd1ba8db3789a0be7"><div class="ttname"><a href="cJSON_8cpp.html#a2599f74bdbbc1b3fd1ba8db3789a0be7">next</a></div><div class="ttdeci">item next</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02224">cJSON.cpp:2224</a></div></div>
2921
2921
  <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#l00019">MTAResultValidator.h:19</a></div></div>
2922
2922
  <div class="ttc" id="classSVF_1_1MSSADEF_html"><div class="ttname"><a href="classSVF_1_1MSSADEF.html">SVF::MSSADEF</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00325">MSSAMuChi.h:325</a></div></div>
@@ -3449,7 +3449,7 @@ Additional Inherited Members</h2></td></tr>
3449
3449
 
3450
3450
  <p class="definition">Definition at line <a class="el" href="SVFG_8cpp_source.html#l00755">755</a> of file <a class="el" href="SVFG_8cpp_source.html">SVFG.cpp</a>.</p>
3451
3451
  <div class="fragment"><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_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#a037600bfff11659542f8595d8700dec4">performStat</a>();</div><div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160;}</div><div class="ttc" id="classSVF_1_1SVFG_html_ad5c1415f488ec4412d5457262269eff3"><div class="ttname"><a href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">SVF::SVFG::stat</a></div><div class="ttdeci">SVFGStat * stat</div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00104">SVFG.h:104</a></div></div>
3452
- <div class="ttc" id="classSVF_1_1SVFGStat_html_a037600bfff11659542f8595d8700dec4"><div class="ttname"><a href="classSVF_1_1SVFGStat.html#a037600bfff11659542f8595d8700dec4">SVF::SVFGStat::performStat</a></div><div class="ttdeci">virtual void performStat() override</div><div class="ttdef"><b>Definition:</b> <a href="SVFGStat_8cpp_source.html#l00177">SVFGStat.cpp:177</a></div></div>
3452
+ <div class="ttc" id="classSVF_1_1SVFGStat_html_a037600bfff11659542f8595d8700dec4"><div class="ttname"><a href="classSVF_1_1SVFGStat.html#a037600bfff11659542f8595d8700dec4">SVF::SVFGStat::performStat</a></div><div class="ttdeci">virtual void performStat() override</div><div class="ttdef"><b>Definition:</b> <a href="SVFGStat_8cpp_source.html#l00178">SVFGStat.cpp:178</a></div></div>
3453
3453
  </div><!-- fragment -->
3454
3454
  </div>
3455
3455
  </div>
@@ -3477,8 +3477,8 @@ Additional Inherited Members</h2></td></tr>
3477
3477
  </table>
3478
3478
  </div><div class="memdoc">
3479
3479
 
3480
- <p class="definition">Definition at line <a class="el" href="SVFGReadWrite_8cpp_source.html#l00205">205</a> of file <a class="el" href="SVFGReadWrite_8cpp_source.html">SVFGReadWrite.cpp</a>.</p>
3481
- <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="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Loading SVFG analysis results from &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; ifstream <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>(filename.c_str());</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>.is_open())</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for reading!\n&quot;</span>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <span class="keywordflow">return</span>;</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;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="classSVF_1_1SVFStmt.html#a2bdfa37167b5496629e5cae62705d5f2">PAGEdge::PAGEdgeSetTy</a>&amp; stores = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">PAGEdge::Store</a>);</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = stores.begin(), eiter =</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; stores.end(); iter != eiter; ++iter)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* store = SVFUtil::cast&lt;StoreStmt&gt;(*iter);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* sNode = <a class="code" href="classSVF_1_1VFG.html#a32b1586d326fbe47080bd1fa2d3270e6">getStmtVFGNode</a>(store);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">for</span>(CHISet::iterator pi = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(store).begin(), epi = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(store).end(); pi!=epi; ++pi)</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#accd1cbd26c9b194971f3107a57a0ab2e">setDef</a>((*pi)-&gt;getResVer(),sNode);</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; }</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">//outer loop through each line in the file</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="keywordtype">string</span> line;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="comment">// add nodes</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#a4bf9a39b93b7254f627dd393b9f2b82c">ATVFNodeStart</a>();</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <span class="keywordflow">while</span> (<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>.good())</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; getline(<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>, line);</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">if</span> (line.empty())</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">if</span> (line.find(<span class="stringliteral">&quot;__Edges__&quot;</span>) != std::string::npos)</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">break</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; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s = line;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter = <span class="stringliteral">&quot; &gt;= &quot;</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordtype">string</span> temp;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">int</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="comment">//implement delimiter to split string using &quot;&gt;=&quot;</span></div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="cJSON_8cpp.html#a2599f74bdbbc1b3fd1ba8db3789a0be7">next</a> = 0;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordtype">size_t</span> last = 0;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordtype">size_t</span> outer_last = 0;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordtype">size_t</span> nextTemp; <span class="comment">//size_t lastTemp;</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = 0;</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="keywordtype">string</span> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordtype">string</span> MR;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordtype">string</span> basicBlock;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordtype">string</span> opVer;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">//inner loop through to get each element in the line</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="keywordflow">while</span> ((next = s.find(delimiter, last)) != string::npos)</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; temp = s.substr(last, next-last);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; last = next + 4;</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; outer_last = next + 4;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span>(index == 0)</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; nextTemp = temp.find(<span class="stringliteral">&quot;SVFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordtype">id</span> = atoi(temp.substr(nextTemp).c_str());</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; }</div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; <span class="keywordflow">if</span>(index == 1)</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; {</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; type = temp;</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="keywordflow">if</span>(index &gt; 1)</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; <span class="keywordflow">if</span>(index == 2)</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; MR = temp;</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; <span class="keywordflow">if</span>(index == 3)</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; {</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; basicBlock = temp;</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; }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; index++;</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; <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempMRVer;</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">if</span>(!MR.empty())</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; tempMRVer = <a class="code" href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">getMRVERFromString</a>(MR);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; }</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; {</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; tempMRVer = <a class="code" href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">getMRVERFromString</a>(<span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">//add nodes using the variables we extracted</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;FormalINSVFGNode&quot;</span>)</div><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; outer_last = s.find(<span class="stringliteral">&quot;ICFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> FunID = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ab4690114393820f580e805d2e0d6a41d">addFormalINSVFGNode</a>(SVFUtil::dyn_cast&lt;FunEntryICFGNode&gt;(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(FunID)), tempMRVer, <span class="keywordtype">id</span>);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;FormalOUTSVFGNode&quot;</span>)</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; {</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; outer_last = s.find(<span class="stringliteral">&quot;ICFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> FunID = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a804824faa3a042cb1b63edd9e9eb7207">addFormalOUTSVFGNode</a>(SVFUtil::dyn_cast&lt;FunExitICFGNode&gt;(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(FunID)), tempMRVer, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; }</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;ActualINSVFGNode&quot;</span>)</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; {</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; outer_last = s.find(<span class="stringliteral">&quot;ICFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a923924d3887c668b355f4029502a3754">addActualINSVFGNode</a>(SVFUtil::dyn_cast&lt;CallICFGNode&gt;(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(CallSiteID)), tempMRVer, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; }</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;ActualOUTSVFGNode&quot;</span>)</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; outer_last = s.find(<span class="stringliteral">&quot;ICFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> CallSiteID = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a74aa824a68f99756ac3e65231c7bc2e9">addActualOUTSVFGNode</a>(SVFUtil::dyn_cast&lt;CallICFGNode&gt;(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(CallSiteID)), tempMRVer, <span class="keywordtype">id</span>);</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> (type == <span class="stringliteral">&quot;PHISVFGNode&quot;</span>)</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; opVer = s.substr(outer_last);</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; next = opVer.find(<span class="stringliteral">&quot;{&quot;</span>) + 1;</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; last = opVer.find(<span class="stringliteral">&quot;,}&quot;</span>);</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; temp = opVer.substr(next, last);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t,const MRVer*&gt;</a> OPVers;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="keywordtype">int</span> index = 0;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordflow">while</span> ((next = temp.find(<span class="stringliteral">&quot;{&quot;</span>) + 1) != string::npos)</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; {</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; <span class="keywordflow">if</span> (temp == <span class="stringliteral">&quot;,}&quot;</span>)</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; last = temp.find(<span class="stringliteral">&quot;},&quot;</span>);</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordtype">string</span> temp1;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; temp1 = temp.substr(next, last-next);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempOPVer = <a class="code" href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">getMRVERFromString</a>(temp1);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; OPVers.insert(make_pair(index, tempOPVer));</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; temp = temp.substr(last + 1);</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; index++;</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; next = basicBlock.find(<span class="stringliteral">&quot;ICFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; temp = basicBlock.substr(next);</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a0554abe7c072b66ab24a900284646572">addIntraMSSAPHISVFGNode</a>(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(atoi(temp.c_str())), OPVers.begin(), OPVers.end(), tempMRVer, id);</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="keywordflow">else</span></div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div><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;</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#acb181d4f9faa40578c80e2018e2742b8">totalVFGNode</a> &lt; <span class="keywordtype">id</span>)</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="classSVF_1_1VFG.html#acb181d4f9faa40578c80e2018e2742b8">totalVFGNode</a> = <span class="keywordtype">id</span> + 1;</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#aa39231c3d81fa87cdb6089f17bc35af8">ATVFNodeEnd</a>();</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_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#adcb30427bb220dc122ad22030e10eb21">indVFEdgeStart</a>();</div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; <span class="comment">// Edges</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">while</span> (<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>.good())</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; getline(<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>, line);</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">if</span> (line.empty())</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160;</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s = line;</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter = <span class="stringliteral">&quot; &gt;= &quot;</span>;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <span class="keywordtype">string</span> temp;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="comment">// int index = 0;</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="keywordtype">size_t</span> last = 0;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordtype">size_t</span> next = 0; <span class="comment">// size_t outer_last = 0;</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">string</span> edge;</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordtype">string</span> attributes;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; next = s.find(delimiter);</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; edge = s.substr(0, next);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; attributes = s.substr(next + 4);</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="comment">// extract nodeIDs for src and dst nodes</span></div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; next = edge.find(<span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span>) + 15;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; last = edge.find(<span class="stringliteral">&quot; =&gt; &quot;</span>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; src = atoi(edge.substr(next, last-next).c_str());</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; next = edge.find(<span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span>) + 15;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; dst = atoi(edge.substr(next).c_str());</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="keywordtype">string</span> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keywordtype">string</span> attribute;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">if</span> (attributes.find(<span class="stringliteral">&quot; | &quot;</span>) == string::npos)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; type = attributes;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; {</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; next = attributes.find(<span class="stringliteral">&quot; | &quot;</span>);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; type = attributes.substr(0, next);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; attribute = attributes.substr(next + 3);</div><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;</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;FormalINSVFGNode&quot;</span>)</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="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::cast&lt;FormalINSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(src));</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::cast&lt;ActualINSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(dst));</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a57629591037e16e57a0178d102a405f2">addInterIndirectVFCallEdge</a>(actualIn,formalIn, <a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(actualIn-&gt;getCallSite(), formalIn-&gt;<a class="code" href="classSVF_1_1VFGNode.html#ab98e74dfd4756e70e3e3c5b7d5e5ae27">getFun</a>()));</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="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;FormalOUTSVFGNode&quot;</span>)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::cast&lt;FormalOUTSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(src));</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keywordflow">if</span> (attribute.find(<span class="stringliteral">&quot;intra&quot;</span>) != string::npos)</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad03f0064d3a1ff397b35a606304a9c80">addIntraIndirectVFEdge</a>(dst, src, formalOut-&gt;<a class="code" href="classSVF_1_1FormalOUTSVFGNode.html#ad2e841a18b777220c2b13f38289d6168">getMRVer</a>()-&gt;<a class="code" href="classSVF_1_1MRVer.html#a63bd0641be553860cc5f517634b65825">getMR</a>()-&gt;<a class="code" href="classSVF_1_1MemRegion.html#a1e5befaa1a46943e101b33adaf141ca1">getPointsTo</a>());</div><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; <span class="keywordflow">else</span></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="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::cast&lt;ActualOUTSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(dst));</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ac9666ae7266cf1a9c0a5f7d28b39d1e9">addInterIndirectVFRetEdge</a>(formalOut,actualOut,<a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(actualOut-&gt;<a class="code" href="classSVF_1_1ActualOUTSVFGNode.html#a89cb274936513df411a75fb33a86702f">getCallSite</a>(), formalOut-&gt;<a class="code" href="classSVF_1_1VFGNode.html#ab98e74dfd4756e70e3e3c5b7d5e5ae27">getFun</a>()));</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; }</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;ActualINSVFGNode&quot;</span>)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::cast&lt;ActualINSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(src));</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad03f0064d3a1ff397b35a606304a9c80">addIntraIndirectVFEdge</a>(dst,src, actualIn-&gt;<a class="code" href="classSVF_1_1ActualINSVFGNode.html#aa92b36228a6f42496984cfea32f3415c">getMRVer</a>()-&gt;<a class="code" href="classSVF_1_1MRVer.html#a63bd0641be553860cc5f517634b65825">getMR</a>()-&gt;<a class="code" href="classSVF_1_1MemRegion.html#a1e5befaa1a46943e101b33adaf141ca1">getPointsTo</a>());</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; }</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;ActualOUTSVFGNode&quot;</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="comment">// There&#39;s no need to connect actual out node to its definition site in the same function.</span></div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <span class="stringliteral">&quot;StoreNode&quot;</span> || type == <span class="stringliteral">&quot;LoadNode&quot;</span> || type == <span class="stringliteral">&quot;PHISVFGNode&quot;</span>)</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; <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempMRVer;</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; tempMRVer = <a class="code" href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">getMRVERFromString</a>(attribute);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad03f0064d3a1ff397b35a606304a9c80">addIntraIndirectVFEdge</a>(dst,src, tempMRVer-&gt;<a class="code" href="classSVF_1_1MRVer.html#a63bd0641be553860cc5f517634b65825">getMR</a>()-&gt;<a class="code" href="classSVF_1_1MemRegion.html#a1e5befaa1a46943e101b33adaf141ca1">getPointsTo</a>());</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; }</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#a8b3b9a211f410e67e8fd1a79d3db9023">indVFEdgeEnd</a>();</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a5921483cd5e1bf77b1b2bc8fb3250612">connectFromGlobalToProgEntry</a>();</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160;}</div><div class="ttc" id="classSVF_1_1MRVer_html"><div class="ttname"><a href="classSVF_1_1MRVer.html">SVF::MRVer</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00043">MSSAMuChi.h:43</a></div></div>
3480
+ <p class="definition">Definition at line <a class="el" href="SVFGReadWrite_8cpp_source.html#l00206">206</a> of file <a class="el" href="SVFGReadWrite_8cpp_source.html">SVFGReadWrite.cpp</a>.</p>
3481
+ <div class="fragment"><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160;{</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Loading SVFG analysis results from &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; ifstream <a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>(filename.c_str());</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>.is_open())</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; {</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for reading!\n&quot;</span>;</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</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; <a class="code" href="classSVF_1_1SVFStmt.html#a2bdfa37167b5496629e5cae62705d5f2">PAGEdge::PAGEdgeSetTy</a>&amp; stores = <a class="code" href="classSVF_1_1VFG.html#a2e182f7e90a3519a2147a300470a88f1">getPAGEdgeSet</a>(<a class="code" href="classSVF_1_1SVFStmt.html#a0ab8621e75e75f03425c323b3ed62ce9aa0f700b514c431ec5329aec49df56dcc">PAGEdge::Store</a>);</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="keywordflow">for</span> (PAGEdge::PAGEdgeSetTy::iterator iter = stores.begin(), eiter =</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; stores.end(); iter != eiter; ++iter)</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; <a class="code" href="classSVF_1_1StoreStmt.html">StoreStmt</a>* store = SVFUtil::cast&lt;StoreStmt&gt;(*iter);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StmtVFGNode.html">StmtSVFGNode</a>* sNode = <a class="code" href="classSVF_1_1VFG.html#a32b1586d326fbe47080bd1fa2d3270e6">getStmtVFGNode</a>(store);</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">for</span>(CHISet::iterator pi = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(store).begin(), epi = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(store).end(); pi!=epi; ++pi)</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#accd1cbd26c9b194971f3107a57a0ab2e">setDef</a>((*pi)-&gt;getResVer(),sNode);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">//outer loop through each line in the file</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="keywordtype">string</span> line;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// add nodes</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#a4bf9a39b93b7254f627dd393b9f2b82c">ATVFNodeStart</a>();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keywordflow">while</span> (<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>.good())</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; getline(<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>, line);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="keywordflow">if</span> (line.empty())</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">if</span> (line.find(<span class="stringliteral">&quot;__Edges__&quot;</span>) != std::string::npos)</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s = line;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter = <span class="stringliteral">&quot; &gt;= &quot;</span>;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">string</span> temp;</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <span class="keywordtype">int</span> <a class="code" href="cJSON_8h.html#a750b5d744c39a06bfb13e6eb010e35d0">index</a> = 0;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">//implement delimiter to split string using &quot;&gt;=&quot;</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordtype">size_t</span> <a class="code" href="cJSON_8cpp.html#a2599f74bdbbc1b3fd1ba8db3789a0be7">next</a> = 0;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <span class="keywordtype">size_t</span> last = 0;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="keywordtype">size_t</span> outer_last = 0;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="keywordtype">size_t</span> nextTemp; <span class="comment">//size_t lastTemp;</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = 0;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="keywordtype">string</span> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="keywordtype">string</span> MR;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="keywordtype">string</span> basicBlock;</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordtype">string</span> opVer;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; <span class="comment">//inner loop through to get each element in the line</span></div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">while</span> ((next = s.find(delimiter, last)) != string::npos)</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; temp = s.substr(last, next-last);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; last = next + 4;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; outer_last = next + 4;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">if</span>(index == 0)</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; {</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; nextTemp = temp.find(<span class="stringliteral">&quot;SVFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="keywordtype">id</span> = atoi(temp.substr(nextTemp).c_str());</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; <span class="keywordflow">if</span>(index == 1)</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; type = temp;</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; <span class="keywordflow">if</span>(index &gt; 1)</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="keywordflow">if</span>(index == 2)</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; {</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; MR = temp;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; }</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160; <span class="keywordflow">if</span>(index == 3)</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; {</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; basicBlock = temp;</div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; }</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; }</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; index++;</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; <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempMRVer;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="keywordflow">if</span>(!MR.empty())</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; tempMRVer = <a class="code" href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">getMRVERFromString</a>(MR);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; }</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; {</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; tempMRVer = <a class="code" href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">getMRVERFromString</a>(<span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; }</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">//add nodes using the variables we extracted</span></div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;FormalINSVFGNode&quot;</span>)</div><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; outer_last = s.find(<span class="stringliteral">&quot;ICFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> FunID = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ab4690114393820f580e805d2e0d6a41d">addFormalINSVFGNode</a>(SVFUtil::dyn_cast&lt;FunEntryICFGNode&gt;(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(FunID)), tempMRVer, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;FormalOUTSVFGNode&quot;</span>)</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; {</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; outer_last = s.find(<span class="stringliteral">&quot;ICFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> FunID = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a804824faa3a042cb1b63edd9e9eb7207">addFormalOUTSVFGNode</a>(SVFUtil::dyn_cast&lt;FunExitICFGNode&gt;(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(FunID)), tempMRVer, <span class="keywordtype">id</span>);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;ActualINSVFGNode&quot;</span>)</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; {</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; outer_last = s.find(<span class="stringliteral">&quot;ICFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="namespaceSVF.html#a03d88a0302bcd253387690f13f693f64">CallSiteID</a> = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a923924d3887c668b355f4029502a3754">addActualINSVFGNode</a>(SVFUtil::dyn_cast&lt;CallICFGNode&gt;(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(CallSiteID)), tempMRVer, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;ActualOUTSVFGNode&quot;</span>)</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; {</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; outer_last = s.find(<span class="stringliteral">&quot;ICFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> CallSiteID = atoi(s.substr(outer_last).c_str());</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a74aa824a68f99756ac3e65231c7bc2e9">addActualOUTSVFGNode</a>(SVFUtil::dyn_cast&lt;CallICFGNode&gt;(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(CallSiteID)), tempMRVer, <span class="keywordtype">id</span>);</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <span class="stringliteral">&quot;PHISVFGNode&quot;</span>)</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; {</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; opVer = s.substr(outer_last);</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; next = opVer.find(<span class="stringliteral">&quot;{&quot;</span>) + 1;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; last = opVer.find(<span class="stringliteral">&quot;,}&quot;</span>);</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; temp = opVer.substr(next, last);</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;u32_t,const MRVer*&gt;</a> OPVers;</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="keywordtype">int</span> index = 0;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">while</span> ((next = temp.find(<span class="stringliteral">&quot;{&quot;</span>) + 1) != string::npos)</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">if</span> (temp == <span class="stringliteral">&quot;,}&quot;</span>)</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">break</span>;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; last = temp.find(<span class="stringliteral">&quot;},&quot;</span>);</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordtype">string</span> temp1;</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; temp1 = temp.substr(next, last-next);</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempOPVer = <a class="code" href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">getMRVERFromString</a>(temp1);</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; OPVers.insert(make_pair(index, tempOPVer));</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; temp = temp.substr(last + 1);</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; index++;</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; }</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; next = basicBlock.find(<span class="stringliteral">&quot;ICFGNodeID: &quot;</span>) + 12;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; temp = basicBlock.substr(next);</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a0554abe7c072b66ab24a900284646572">addIntraMSSAPHISVFGNode</a>(<a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(atoi(temp.c_str())), OPVers.begin(), OPVers.end(), tempMRVer, id);</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; }</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">else</span></div><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; }</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VFG.html#acb181d4f9faa40578c80e2018e2742b8">totalVFGNode</a> &lt; <span class="keywordtype">id</span>)</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <a class="code" href="classSVF_1_1VFG.html#acb181d4f9faa40578c80e2018e2742b8">totalVFGNode</a> = <span class="keywordtype">id</span> + 1;</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; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#aa39231c3d81fa87cdb6089f17bc35af8">ATVFNodeEnd</a>();</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; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#adcb30427bb220dc122ad22030e10eb21">indVFEdgeStart</a>();</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="comment">// Edges</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keywordflow">while</span> (<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>.good())</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; {</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; getline(<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>, line);</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; <span class="keywordflow">if</span> (line.empty())</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="keywordflow">continue</span>;</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; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s = line;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter = <span class="stringliteral">&quot; &gt;= &quot;</span>;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keywordtype">string</span> temp;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// int index = 0;</span></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="keywordtype">size_t</span> last = 0;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordtype">size_t</span> next = 0; <span class="comment">// size_t outer_last = 0;</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="keywordtype">string</span> edge;</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="keywordtype">string</span> attributes;</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; next = s.find(delimiter);</div><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; edge = s.substr(0, next);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; attributes = s.substr(next + 4);</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="comment">// extract nodeIDs for src and dst nodes</span></div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> src;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> dst;</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; next = edge.find(<span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span>) + 15;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; last = edge.find(<span class="stringliteral">&quot; =&gt; &quot;</span>);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; src = atoi(edge.substr(next, last-next).c_str());</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; next = edge.find(<span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span>) + 15;</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; dst = atoi(edge.substr(next).c_str());</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="keywordtype">string</span> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>;</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordtype">string</span> attribute;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">if</span> (attributes.find(<span class="stringliteral">&quot; | &quot;</span>) == string::npos)</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; type = attributes;</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; next = attributes.find(<span class="stringliteral">&quot; | &quot;</span>);</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; type = attributes.substr(0, next);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; attribute = attributes.substr(next + 3);</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;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;FormalINSVFGNode&quot;</span>)</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; {</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::cast&lt;FormalINSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(src));</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::cast&lt;ActualINSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(dst));</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a57629591037e16e57a0178d102a405f2">addInterIndirectVFCallEdge</a>(actualIn,formalIn, <a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(actualIn-&gt;getCallSite(), formalIn-&gt;<a class="code" href="classSVF_1_1VFGNode.html#ab98e74dfd4756e70e3e3c5b7d5e5ae27">getFun</a>()));</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;FormalOUTSVFGNode&quot;</span>)</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; {</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::cast&lt;FormalOUTSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(src));</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="keywordflow">if</span> (attribute.find(<span class="stringliteral">&quot;intra&quot;</span>) != string::npos)</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; {</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad03f0064d3a1ff397b35a606304a9c80">addIntraIndirectVFEdge</a>(dst, src, formalOut-&gt;<a class="code" href="classSVF_1_1FormalOUTSVFGNode.html#ad2e841a18b777220c2b13f38289d6168">getMRVer</a>()-&gt;<a class="code" href="classSVF_1_1MRVer.html#a63bd0641be553860cc5f517634b65825">getMR</a>()-&gt;<a class="code" href="classSVF_1_1MemRegion.html#a1e5befaa1a46943e101b33adaf141ca1">getPointsTo</a>());</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; }</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <span class="keywordflow">else</span></div><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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::cast&lt;ActualOUTSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(dst));</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ac9666ae7266cf1a9c0a5f7d28b39d1e9">addInterIndirectVFRetEdge</a>(formalOut,actualOut,<a class="code" href="classSVF_1_1VFG.html#a5f82b3c2e8e6412e2781b960ffa98387">getCallSiteID</a>(actualOut-&gt;<a class="code" href="classSVF_1_1ActualOUTSVFGNode.html#a89cb274936513df411a75fb33a86702f">getCallSite</a>(), formalOut-&gt;<a class="code" href="classSVF_1_1VFGNode.html#ab98e74dfd4756e70e3e3c5b7d5e5ae27">getFun</a>()));</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; }</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">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;ActualINSVFGNode&quot;</span>)</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; {</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::cast&lt;ActualINSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(src));</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad03f0064d3a1ff397b35a606304a9c80">addIntraIndirectVFEdge</a>(dst,src, actualIn-&gt;<a class="code" href="classSVF_1_1ActualINSVFGNode.html#aa92b36228a6f42496984cfea32f3415c">getMRVer</a>()-&gt;<a class="code" href="classSVF_1_1MRVer.html#a63bd0641be553860cc5f517634b65825">getMR</a>()-&gt;<a class="code" href="classSVF_1_1MemRegion.html#a1e5befaa1a46943e101b33adaf141ca1">getPointsTo</a>());</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; }</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(type == <span class="stringliteral">&quot;ActualOUTSVFGNode&quot;</span>)</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; {</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <span class="comment">// There&#39;s no need to connect actual out node to its definition site in the same function.</span></div><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; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (type == <span class="stringliteral">&quot;StoreNode&quot;</span> || type == <span class="stringliteral">&quot;LoadNode&quot;</span> || type == <span class="stringliteral">&quot;PHISVFGNode&quot;</span>)</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; <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* tempMRVer;</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; tempMRVer = <a class="code" href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">getMRVERFromString</a>(attribute);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad03f0064d3a1ff397b35a606304a9c80">addIntraIndirectVFEdge</a>(dst,src, tempMRVer-&gt;<a class="code" href="classSVF_1_1MRVer.html#a63bd0641be553860cc5f517634b65825">getMR</a>()-&gt;<a class="code" href="classSVF_1_1MemRegion.html#a1e5befaa1a46943e101b33adaf141ca1">getPointsTo</a>());</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; }</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; {</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#ad5c1415f488ec4412d5457262269eff3">stat</a>-&gt;<a class="code" href="classSVF_1_1SVFGStat.html#a8b3b9a211f410e67e8fd1a79d3db9023">indVFEdgeEnd</a>();</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a5921483cd5e1bf77b1b2bc8fb3250612">connectFromGlobalToProgEntry</a>();</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160;}</div><div class="ttc" id="classSVF_1_1MRVer_html"><div class="ttname"><a href="classSVF_1_1MRVer.html">SVF::MRVer</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00043">MSSAMuChi.h:43</a></div></div>
3482
3482
  <div class="ttc" id="classSVF_1_1MemSSA_html_a2e656a50f8964fc3e99d1d436de64418"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">SVF::MemSSA::getCHISet</a></div><div class="ttdeci">CHISet &amp; getCHISet(const StoreStmt *st)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00392">MemSSA.h:392</a></div></div>
3483
3483
  <div class="ttc" id="classSVF_1_1ActualINSVFGNode_html_aa92b36228a6f42496984cfea32f3415c"><div class="ttname"><a href="classSVF_1_1ActualINSVFGNode.html#aa92b36228a6f42496984cfea32f3415c">SVF::ActualINSVFGNode::getMRVer</a></div><div class="ttdeci">const MRVer * getMRVer() const</div><div class="ttdoc">Ver. </div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00200">SVFGNode.h:200</a></div></div>
3484
3484
  <div class="ttc" id="classSVF_1_1SVFGStat_html_a4bf9a39b93b7254f627dd393b9f2b82c"><div class="ttname"><a href="classSVF_1_1SVFGStat.html#a4bf9a39b93b7254f627dd393b9f2b82c">SVF::SVFGStat::ATVFNodeStart</a></div><div class="ttdeci">void ATVFNodeStart()</div><div class="ttdef"><b>Definition:</b> <a href="SVFGStat_8h_source.html#l00139">SVFGStat.h:139</a></div></div>
@@ -3497,7 +3497,7 @@ Additional Inherited Members</h2></td></tr>
3497
3497
  <div class="ttc" id="classSVF_1_1VFGNode_html_ab98e74dfd4756e70e3e3c5b7d5e5ae27"><div class="ttname"><a href="classSVF_1_1VFGNode.html#ab98e74dfd4756e70e3e3c5b7d5e5ae27">SVF::VFGNode::getFun</a></div><div class="ttdeci">virtual const SVFFunction * getFun() const</div><div class="ttdoc">Get the function of this SVFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00084">VFGNode.h:84</a></div></div>
3498
3498
  <div class="ttc" id="classSVF_1_1ActualOUTSVFGNode_html"><div class="ttname"><a href="classSVF_1_1ActualOUTSVFGNode.html">SVF::ActualOUTSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00229">SVFGNode.h:229</a></div></div>
3499
3499
  <div class="ttc" id="namespaceSVF_html_a8234d4b959abc9123993bcff4eee34c1"><div class="ttname"><a href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">SVF::Map</a></div><div class="ttdeci">std::unordered_map&lt; Key, Value, Hash, KeyEqual, Allocator &gt; Map</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00110">SVFBasicTypes.h:110</a></div></div>
3500
- <div class="ttc" id="classSVF_1_1SVFG_html_a910298ed854a6b88b9dae44181ca72de"><div class="ttname"><a href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">SVF::SVFG::getMRVERFromString</a></div><div class="ttdeci">virtual MRVer * getMRVERFromString(const std::string &amp;input)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGReadWrite_8cpp_source.html#l00429">SVFGReadWrite.cpp:429</a></div></div>
3500
+ <div class="ttc" id="classSVF_1_1SVFG_html_a910298ed854a6b88b9dae44181ca72de"><div class="ttname"><a href="classSVF_1_1SVFG.html#a910298ed854a6b88b9dae44181ca72de">SVF::SVFG::getMRVERFromString</a></div><div class="ttdeci">virtual MRVer * getMRVERFromString(const std::string &amp;input)</div><div class="ttdef"><b>Definition:</b> <a href="SVFGReadWrite_8cpp_source.html#l00430">SVFGReadWrite.cpp:430</a></div></div>
3501
3501
  <div class="ttc" id="classSVF_1_1ActualINSVFGNode_html"><div class="ttname"><a href="classSVF_1_1ActualINSVFGNode.html">SVF::ActualINSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00180">SVFGNode.h:180</a></div></div>
3502
3502
  <div class="ttc" id="classSVF_1_1FormalOUTSVFGNode_html_ad2e841a18b777220c2b13f38289d6168"><div class="ttname"><a href="classSVF_1_1FormalOUTSVFGNode.html#ad2e841a18b777220c2b13f38289d6168">SVF::FormalOUTSVFGNode::getMRVer</a></div><div class="ttdeci">const MRVer * getMRVer() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00153">SVFGNode.h:153</a></div></div>
3503
3503
  <div class="ttc" id="classSVF_1_1SVFG_html_a0554abe7c072b66ab24a900284646572"><div class="ttname"><a href="classSVF_1_1SVFG.html#a0554abe7c072b66ab24a900284646572">SVF::SVFG::addIntraMSSAPHISVFGNode</a></div><div class="ttdeci">void addIntraMSSAPHISVFGNode(ICFGNode *BlockICFGNode, const Map&lt; u32_t, const MRVer *&gt;::const_iterator opVerBegin, const Map&lt; u32_t, const MRVer *&gt;::const_iterator opVerEnd, const MRVer *resVer, const NodeID nodeId)</div><div class="ttdoc">Add memory SSA PHI SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00431">SVFG.h:431</a></div></div>
@@ -3700,8 +3700,8 @@ Additional Inherited Members</h2></td></tr>
3700
3700
  </table>
3701
3701
  </div><div class="memdoc">
3702
3702
 
3703
- <p class="definition">Definition at line <a class="el" href="SVFGReadWrite_8cpp_source.html#l00046">46</a> of file <a class="el" href="SVFGReadWrite_8cpp_source.html">SVFGReadWrite.cpp</a>.</p>
3704
- <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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Writing SVFG analysis to &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; error_code err;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; std::fstream f(filename.c_str(), std::ios_base::out);</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <span class="keywordflow">if</span> (!f.good())</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="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for writing!\n&quot;</span>;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">return</span>;</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; f &lt;&lt; <span class="stringliteral">&quot;__Nodes__\n&quot;</span>;</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <span class="comment">// Iterate over nodes and write to file</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; ++it)</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="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it-&gt;first;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it-&gt;second;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::dyn_cast&lt;FormalINSVFGNode&gt;(node))</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">//node</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;SVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; &gt;= &quot;</span> &lt;&lt; <span class="stringliteral">&quot;FormalINSVFGNode&quot;</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &gt;= MVER: {&quot;</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; f &lt;&lt; *formalIn-&gt;getMRVer() &lt;&lt; <span class="stringliteral">&quot;} &gt;= ICFGNodeID: &quot;</span> &lt;&lt; formalIn-&gt;getFunEntryNode()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::dyn_cast&lt;FormalOUTSVFGNode&gt;(node))</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; {</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">//node</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;SVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; &gt;= &quot;</span> &lt;&lt; <span class="stringliteral">&quot;FormalOUTSVFGNode&quot;</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &gt;= MVER: {&quot;</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; f &lt;&lt; *formalOut-&gt;getMRVer() &lt;&lt; <span class="stringliteral">&quot;} &gt;= ICFGNodeID: &quot;</span> &lt;&lt; formalOut-&gt;getFunExitNode()-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; }</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::dyn_cast&lt;ActualINSVFGNode&gt;(node))</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; {</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <span class="comment">//node</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;SVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; &gt;= &quot;</span> &lt;&lt; <span class="stringliteral">&quot;ActualINSVFGNode&quot;</span>;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &gt;= MVER: {&quot;</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; f &lt;&lt; *actualIn-&gt;getMRVer() &lt;&lt; <span class="stringliteral">&quot;} &gt;= ICFGNodeID: &quot;</span> &lt;&lt; actualIn-&gt;getCallSite()-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::dyn_cast&lt;ActualOUTSVFGNode&gt;(node))</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; {</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <span class="comment">//node</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;SVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; &gt;= &quot;</span> &lt;&lt; <span class="stringliteral">&quot;ActualOUTSVFGNode&quot;</span> &lt;&lt; <span class="stringliteral">&quot; &gt;= MVER: {&quot;</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; f &lt;&lt; *actualOut-&gt;getMRVer() &lt;&lt; <span class="stringliteral">&quot;} &gt;= ICFGNodeID: &quot;</span> &lt;&lt; actualOut-&gt;getCallSite()-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MSSAPHISVFGNode.html">MSSAPHISVFGNode</a>* phiNode = SVFUtil::dyn_cast&lt;MSSAPHISVFGNode&gt;(node))</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; {</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="comment">//node</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;SVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; &gt;= &quot;</span> &lt;&lt; <span class="stringliteral">&quot;PHISVFGNode&quot;</span>;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; unordered_map&lt;u32_t,const MRVer*&gt; opvers;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; <span class="keywordflow">for</span> (MemSSA::PHI::OPVers::const_iterator it = phiNode-&gt;opVerBegin(), eit = phiNode-&gt;opVerEnd();</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; it != eit; it++)</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; {</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; opvers.insert(make_pair(it-&gt;first, it-&gt;second));</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// opvers</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &gt;= MVER: {&quot;</span>;</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; f &lt;&lt; *phiNode-&gt;getResVer();</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;} &gt;= ICFGNodeID: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(&amp;(phiNode-&gt;getICFGNode()-&gt;getBB()-&gt;front()))-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &gt;= OPVers: {&quot;</span>;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> x: opvers)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* op = x.second;</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;{&quot;</span> &lt;&lt; *op &lt;&lt; <span class="stringliteral">&quot;}&quot;</span> &lt;&lt; <span class="stringliteral">&quot;,&quot;</span>;</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; f &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</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; f &lt;&lt; <span class="stringliteral">&quot;\n\n__Edges__\n&quot;</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <span class="comment">// Iterate over edges and write to file</span></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; ++it)</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="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it-&gt;first;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it-&gt;second;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* loadNode = SVFUtil::dyn_cast&lt;LoadSVFGNode&gt;(node))</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_1SVFG.html#acdbe1c510273107b708935061b6c4127">MUSet</a>&amp; muSet = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#af4d11a0c7da0ddd7dff8d75a00279847">getMUSet</a>(SVFUtil::cast&lt;LoadStmt&gt;(loadNode-&gt;getPAGEdge()));</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">for</span>(MUSet::iterator it = muSet.begin(), eit = muSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFG.html#a86d4a41a881a3d2e5def103d7ba8bb2f">LOADMU</a>* mu = SVFUtil::dyn_cast&lt;LOADMU&gt;(*it))</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; {</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(mu-&gt;getMRVer());</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; def &lt;&lt; <span class="stringliteral">&quot; &gt;= LoadNode | MVER: {&quot;</span> &lt;&lt; *mu-&gt;getMRVer() &lt;&lt; <span class="stringliteral">&quot;}&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; }</div><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; }</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* storeNode = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(node))</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; {</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a8843ab4a4608f7f5f46f68ad31314c07">CHISet</a>&amp; chiSet = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(SVFUtil::cast&lt;StoreStmt&gt;(storeNode-&gt;getPAGEdge()));</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; <span class="keywordflow">for</span>(CHISet::iterator it = chiSet.begin(), eit = chiSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFG.html#ad14cdbb3f1df1f716aa03b4d39f4e52b">STORECHI</a>* chi = SVFUtil::dyn_cast&lt;STORECHI&gt;(*it))</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; {</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(chi-&gt;getOpVer());</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; def &lt;&lt; <span class="stringliteral">&quot; &gt;= StoreNode | MVER: {&quot;</span> &lt;&lt; *chi-&gt;getOpVer() &lt;&lt; <span class="stringliteral">&quot;}&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; }</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::dyn_cast&lt;FormalINSVFGNode&gt;(node))</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_1PTACallGraphEdge.html#adbedb15ac0f9395c5264f087a63bad3b">PTACallGraphEdge::CallInstSet</a> callInstSet;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>()-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a0d2544130cc2cdc3ac418c975c278eb2">getDirCallSitesInvokingCallee</a>(formalIn-&gt;getFun(),callInstSet);</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)</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="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = *it;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#af5e356e82c3f93b65bd89908e0f465dc">hasMU</a>(cs))</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#aa9f520779475e4783eccc45c460e346a">ActualINSVFGNodeSet</a>&amp; actualIns = <a class="code" href="classSVF_1_1SVFG.html#a475205e221890204c7770c414ee63975">getActualINSVFGNodes</a>(cs);</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">ActualINSVFGNodeSet::iterator</a> ait = actualIns.begin(), aeit = actualIns.end(); ait!=aeit; ++ait)</div><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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::cast&lt;ActualINSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*ait));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; actualIn-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; &gt;= FormalINSVFGNode&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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; }</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::dyn_cast&lt;FormalOUTSVFGNode&gt;(node))</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; <a class="code" href="classSVF_1_1PTACallGraphEdge.html#adbedb15ac0f9395c5264f087a63bad3b">PTACallGraphEdge::CallInstSet</a> callInstSet;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>()-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a0d2544130cc2cdc3ac418c975c278eb2">getDirCallSitesInvokingCallee</a>(formalOut-&gt;getFun(),callInstSet);</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = *it;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#abfb338ce36ad46a9654d50dd6e2b07f1">hasCHI</a>(cs))</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_1SVFG.html#a2f6ed8a9f14657abc1e2a89247a84b99">ActualOUTSVFGNodeSet</a>&amp; actualOuts = <a class="code" href="classSVF_1_1SVFG.html#a5b7ae610bee28acc2905ca82928e714f">getActualOUTSVFGNodes</a>(cs);</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">ActualOUTSVFGNodeSet::iterator</a> ait = actualOuts.begin(), aeit = actualOuts.end(); ait!=aeit; ++ait)</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="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::cast&lt;ActualOUTSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*ait));</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; actualOut-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; &gt;= FormalOUTSVFGNode&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; }</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; }</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(formalOut-&gt;getMRVer());</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; def &lt;&lt; <span class="stringliteral">&quot; &gt;= FormalOUTSVFGNode | intra&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::dyn_cast&lt;ActualINSVFGNode&gt;(node))</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="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(actualIn-&gt;getMRVer());</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; def &lt;&lt; <span class="stringliteral">&quot; &gt;= ActualINSVFGNode&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MSSAPHISVFGNode.html">MSSAPHISVFGNode</a>* phiNode = SVFUtil::dyn_cast&lt;MSSAPHISVFGNode&gt;(node))</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">for</span> (MemSSA::PHI::OPVers::const_iterator it = phiNode-&gt;opVerBegin(), eit = phiNode-&gt;opVerEnd();</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; it != eit; it++)</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* op = it-&gt;second;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(op);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; def &lt;&lt; <span class="stringliteral">&quot; &gt;= PHISVFGNode | MVER: {&quot;</span> &lt;&lt; *op &lt;&lt; <span class="stringliteral">&quot;}&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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; }</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; f.close();</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <span class="keywordflow">if</span> (f.good())</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; {</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; }</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160;}</div><div class="ttc" id="classSVF_1_1MRVer_html"><div class="ttname"><a href="classSVF_1_1MRVer.html">SVF::MRVer</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00043">MSSAMuChi.h:43</a></div></div>
3703
+ <p class="definition">Definition at line <a class="el" href="SVFGReadWrite_8cpp_source.html#l00047">47</a> of file <a class="el" href="SVFGReadWrite_8cpp_source.html">SVFGReadWrite.cpp</a>.</p>
3704
+ <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; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;Writing SVFG analysis to &#39;&quot;</span> &lt;&lt; filename &lt;&lt; <span class="stringliteral">&quot;&#39;...&quot;</span>;</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; error_code err;</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; std::fstream f(filename.c_str(), std::ios_base::out);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="keywordflow">if</span> (!f.good())</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; {</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot; error opening file for writing!\n&quot;</span>;</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; <span class="keywordflow">return</span>;</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; f &lt;&lt; <span class="stringliteral">&quot;__Nodes__\n&quot;</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; <span class="comment">// Iterate over nodes and write to file</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; ++it)</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="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it-&gt;first;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it-&gt;second;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::dyn_cast&lt;FormalINSVFGNode&gt;(node))</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; {</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="comment">//node</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;SVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; &gt;= &quot;</span> &lt;&lt; <span class="stringliteral">&quot;FormalINSVFGNode&quot;</span>;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &gt;= MVER: {&quot;</span>;</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; f &lt;&lt; *formalIn-&gt;getMRVer() &lt;&lt; <span class="stringliteral">&quot;} &gt;= ICFGNodeID: &quot;</span> &lt;&lt; formalIn-&gt;getFunEntryNode()-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; }</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::dyn_cast&lt;FormalOUTSVFGNode&gt;(node))</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <span class="comment">//node</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;SVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; &gt;= &quot;</span> &lt;&lt; <span class="stringliteral">&quot;FormalOUTSVFGNode&quot;</span>;</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &gt;= MVER: {&quot;</span>;</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; f &lt;&lt; *formalOut-&gt;getMRVer() &lt;&lt; <span class="stringliteral">&quot;} &gt;= ICFGNodeID: &quot;</span> &lt;&lt; formalOut-&gt;getFunExitNode()-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::dyn_cast&lt;ActualINSVFGNode&gt;(node))</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="comment">//node</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;SVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; &gt;= &quot;</span> &lt;&lt; <span class="stringliteral">&quot;ActualINSVFGNode&quot;</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &gt;= MVER: {&quot;</span>;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; f &lt;&lt; *actualIn-&gt;getMRVer() &lt;&lt; <span class="stringliteral">&quot;} &gt;= ICFGNodeID: &quot;</span> &lt;&lt; actualIn-&gt;getCallSite()-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::dyn_cast&lt;ActualOUTSVFGNode&gt;(node))</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="comment">//node</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;SVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; &gt;= &quot;</span> &lt;&lt; <span class="stringliteral">&quot;ActualOUTSVFGNode&quot;</span> &lt;&lt; <span class="stringliteral">&quot; &gt;= MVER: {&quot;</span>;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; f &lt;&lt; *actualOut-&gt;getMRVer() &lt;&lt; <span class="stringliteral">&quot;} &gt;= ICFGNodeID: &quot;</span> &lt;&lt; actualOut-&gt;getCallSite()-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MSSAPHISVFGNode.html">MSSAPHISVFGNode</a>* phiNode = SVFUtil::dyn_cast&lt;MSSAPHISVFGNode&gt;(node))</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; <span class="comment">//node</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;SVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; &gt;= &quot;</span> &lt;&lt; <span class="stringliteral">&quot;PHISVFGNode&quot;</span>;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; unordered_map&lt;u32_t,const MRVer*&gt; opvers;</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">for</span> (MemSSA::PHI::OPVers::const_iterator it = phiNode-&gt;opVerBegin(), eit = phiNode-&gt;opVerEnd();</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; it != eit; it++)</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; {</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; opvers.insert(make_pair(it-&gt;first, it-&gt;second));</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; }</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// opvers</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &gt;= MVER: {&quot;</span>;</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; f &lt;&lt; *phiNode-&gt;getResVer();</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;} &gt;= ICFGNodeID: &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1VFG.html#a25c2bbbc2e966e2aaa59a5b83363557a">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#aa1943d53e75aef9b014953143c6894da">getICFG</a>()-&gt;<a class="code" href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">getICFGNode</a>(&amp;(phiNode-&gt;getICFGNode()-&gt;getBB()-&gt;front()))-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; f &lt;&lt; <span class="stringliteral">&quot; &gt;= OPVers: {&quot;</span>;</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> x: opvers)</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; {</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* op = x.second;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;{&quot;</span> &lt;&lt; *op &lt;&lt; <span class="stringliteral">&quot;}&quot;</span> &lt;&lt; <span class="stringliteral">&quot;,&quot;</span>;</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; f &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</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; f &lt;&lt; <span class="stringliteral">&quot;\n\n__Edges__\n&quot;</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <span class="comment">// Iterate over edges and write to file</span></div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">iterator</a> it = <a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(), eit = <a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); it!=eit; ++it)</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="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> nodeId = it-&gt;first;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = it-&gt;second;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* loadNode = SVFUtil::dyn_cast&lt;LoadSVFGNode&gt;(node))</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; <a class="code" href="classSVF_1_1SVFG.html#acdbe1c510273107b708935061b6c4127">MUSet</a>&amp; muSet = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#af4d11a0c7da0ddd7dff8d75a00279847">getMUSet</a>(SVFUtil::cast&lt;LoadStmt&gt;(loadNode-&gt;getPAGEdge()));</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="keywordflow">for</span>(MUSet::iterator it = muSet.begin(), eit = muSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; {</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFG.html#a86d4a41a881a3d2e5def103d7ba8bb2f">LOADMU</a>* mu = SVFUtil::dyn_cast&lt;LOADMU&gt;(*it))</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(mu-&gt;getMRVer());</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; def &lt;&lt; <span class="stringliteral">&quot; &gt;= LoadNode | MVER: {&quot;</span> &lt;&lt; *mu-&gt;getMRVer() &lt;&lt; <span class="stringliteral">&quot;}&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><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; }</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* storeNode = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(node))</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_1SVFG.html#a8843ab4a4608f7f5f46f68ad31314c07">CHISet</a>&amp; chiSet = <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">getCHISet</a>(SVFUtil::cast&lt;StoreStmt&gt;(storeNode-&gt;getPAGEdge()));</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <span class="keywordflow">for</span>(CHISet::iterator it = chiSet.begin(), eit = chiSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; {</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1SVFG.html#ad14cdbb3f1df1f716aa03b4d39f4e52b">STORECHI</a>* chi = SVFUtil::dyn_cast&lt;STORECHI&gt;(*it))</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(chi-&gt;getOpVer());</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; def &lt;&lt; <span class="stringliteral">&quot; &gt;= StoreNode | MVER: {&quot;</span> &lt;&lt; *chi-&gt;getOpVer() &lt;&lt; <span class="stringliteral">&quot;}&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</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; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalINSVFGNode.html">FormalINSVFGNode</a>* formalIn = SVFUtil::dyn_cast&lt;FormalINSVFGNode&gt;(node))</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; <a class="code" href="classSVF_1_1PTACallGraphEdge.html#adbedb15ac0f9395c5264f087a63bad3b">PTACallGraphEdge::CallInstSet</a> callInstSet;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>()-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a0d2544130cc2cdc3ac418c975c278eb2">getDirCallSitesInvokingCallee</a>(formalIn-&gt;getFun(),callInstSet);</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = *it;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#af5e356e82c3f93b65bd89908e0f465dc">hasMU</a>(cs))</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#aa9f520779475e4783eccc45c460e346a">ActualINSVFGNodeSet</a>&amp; actualIns = <a class="code" href="classSVF_1_1SVFG.html#a475205e221890204c7770c414ee63975">getActualINSVFGNodes</a>(cs);</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">ActualINSVFGNodeSet::iterator</a> ait = actualIns.begin(), aeit = actualIns.end(); ait!=aeit; ++ait)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::cast&lt;ActualINSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*ait));</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; actualIn-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; &gt;= FormalINSVFGNode&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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; }</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1FormalOUTSVFGNode.html">FormalOUTSVFGNode</a>* formalOut = SVFUtil::dyn_cast&lt;FormalOUTSVFGNode&gt;(node))</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="classSVF_1_1PTACallGraphEdge.html#adbedb15ac0f9395c5264f087a63bad3b">PTACallGraphEdge::CallInstSet</a> callInstSet;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#ad40617a1907b9a6b8cc24888ce54a0ac">getPTA</a>()-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a0d2544130cc2cdc3ac418c975c278eb2">getDirCallSitesInvokingCallee</a>(formalOut-&gt;getFun(),callInstSet);</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <span class="keywordflow">for</span>(PTACallGraphEdge::CallInstSet::iterator it = callInstSet.begin(), eit = callInstSet.end(); it!=eit; ++it)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* cs = *it;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">if</span>(!<a class="code" href="classSVF_1_1SVFG.html#a6f07410ee34e4bf1079e3b5902c81d28">mssa</a>-&gt;<a class="code" href="classSVF_1_1MemSSA.html#abfb338ce36ad46a9654d50dd6e2b07f1">hasCHI</a>(cs))</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="classSVF_1_1SVFG.html#a2f6ed8a9f14657abc1e2a89247a84b99">ActualOUTSVFGNodeSet</a>&amp; actualOuts = <a class="code" href="classSVF_1_1SVFG.html#a5b7ae610bee28acc2905ca82928e714f">getActualOUTSVFGNodes</a>(cs);</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1SparseBitVector.html#a0421e3336137b232edc442ece00a8a9c">ActualOUTSVFGNodeSet::iterator</a> ait = actualOuts.begin(), aeit = actualOuts.end(); ait!=aeit; ++ait)</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {</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_1ActualOUTSVFGNode.html">ActualOUTSVFGNode</a>* actualOut = SVFUtil::cast&lt;ActualOUTSVFGNode&gt;(<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(*ait));</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; actualOut-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; &gt;= FormalOUTSVFGNode&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(formalOut-&gt;getMRVer());</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; def &lt;&lt; <span class="stringliteral">&quot; &gt;= FormalOUTSVFGNode | intra&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1ActualINSVFGNode.html">ActualINSVFGNode</a>* actualIn = SVFUtil::dyn_cast&lt;ActualINSVFGNode&gt;(node))</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(actualIn-&gt;getMRVer());</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; def &lt;&lt; <span class="stringliteral">&quot; &gt;= ActualINSVFGNode&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</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; }</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1MSSAPHISVFGNode.html">MSSAPHISVFGNode</a>* phiNode = SVFUtil::dyn_cast&lt;MSSAPHISVFGNode&gt;(node))</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; <span class="keywordflow">for</span> (MemSSA::PHI::OPVers::const_iterator it = phiNode-&gt;opVerBegin(), eit = phiNode-&gt;opVerEnd();</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; it != eit; it++)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRVer.html">MRVer</a>* op = it-&gt;second;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> def = <a class="code" href="classSVF_1_1SVFG.html#abd917826bf50ed409a307ce00562c97d">getDef</a>(op);</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; f &lt;&lt; <span class="stringliteral">&quot;srcSVFGNodeID: &quot;</span> &lt;&lt; nodeId &lt;&lt; <span class="stringliteral">&quot; =&gt; &quot;</span> &lt;&lt; <span class="stringliteral">&quot;dstSVFGNodeID: &quot;</span> &lt;&lt; def &lt;&lt; <span class="stringliteral">&quot; &gt;= PHISVFGNode | MVER: {&quot;</span> &lt;&lt; *op &lt;&lt; <span class="stringliteral">&quot;}&quot;</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; }</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; }</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; <span class="comment">// Job finish and close file</span></div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; f.close();</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; <span class="keywordflow">if</span> (f.good())</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="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <span class="keywordflow">return</span>;</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="ttc" id="classSVF_1_1MRVer_html"><div class="ttname"><a href="classSVF_1_1MRVer.html">SVF::MRVer</a></div><div class="ttdef"><b>Definition:</b> <a href="MSSAMuChi_8h_source.html#l00043">MSSAMuChi.h:43</a></div></div>
3705
3705
  <div class="ttc" id="classSVF_1_1MemSSA_html_a2e656a50f8964fc3e99d1d436de64418"><div class="ttname"><a href="classSVF_1_1MemSSA.html#a2e656a50f8964fc3e99d1d436de64418">SVF::MemSSA::getCHISet</a></div><div class="ttdeci">CHISet &amp; getCHISet(const StoreStmt *st)</div><div class="ttdef"><b>Definition:</b> <a href="MemSSA_8h_source.html#l00392">MemSSA.h:392</a></div></div>
3706
3706
  <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#l00365">GenericGraph.h:365</a></div></div>
3707
3707
  <div class="ttc" id="classSVF_1_1StoreVFGNode_html"><div class="ttname"><a href="classSVF_1_1StoreVFGNode.html">SVF::StoreVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00240">VFGNode.h:240</a></div></div>