svf-tools 1.0.412 → 1.0.415

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 (164) hide show
  1. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +3 -3
  2. package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +3 -3
  3. package/SVF-doxygen/html/html/ContextDDA_8h_source.html +5 -5
  4. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +9 -9
  5. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +4 -4
  6. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +1 -1
  7. package/SVF-doxygen/html/html/FlowDDA_8cpp_source.html +3 -3
  8. package/SVF-doxygen/html/html/FlowDDA_8h_source.html +5 -5
  9. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
  10. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp.html +1 -1
  11. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +14 -14
  12. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8h_source.html +6 -6
  13. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +21 -21
  14. package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +8 -8
  15. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
  16. package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +1 -1
  17. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +89 -88
  18. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +15 -15
  19. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +19 -19
  20. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +71 -69
  21. package/SVF-doxygen/html/html/SVFG_8h_source.html +41 -41
  22. package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +2 -2
  23. package/SVF-doxygen/html/html/SVFUtil_8h.html +2 -2
  24. package/SVF-doxygen/html/html/SVFUtil_8h_source.html +2 -2
  25. package/SVF-doxygen/html/html/SaberAnnotator_8cpp_source.html +1 -1
  26. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +2 -2
  27. package/SVF-doxygen/html/html/VFGEdge_8h_source.html +1 -1
  28. package/SVF-doxygen/html/html/VFGNode_8h.html +1 -1
  29. package/SVF-doxygen/html/html/VFGNode_8h_source.html +197 -195
  30. package/SVF-doxygen/html/html/VFG_8cpp_source.html +89 -72
  31. package/SVF-doxygen/html/html/VFG_8h_source.html +39 -39
  32. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +7 -7
  33. package/SVF-doxygen/html/html/VersionedFlowSensitive_8h_source.html +2 -2
  34. package/SVF-doxygen/html/html/WPAStat_8h_source.html +2 -2
  35. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +46 -45
  36. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +24 -21
  37. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +46 -45
  38. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +25 -22
  39. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode-members.html +45 -44
  40. package/SVF-doxygen/html/html/classSVF_1_1ActualParmVFGNode.html +59 -22
  41. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode-members.html +46 -45
  42. package/SVF-doxygen/html/html/classSVF_1_1ActualRetVFGNode.html +61 -24
  43. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode-members.html +51 -50
  44. package/SVF-doxygen/html/html/classSVF_1_1AddrVFGNode.html +50 -14
  45. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +6 -6
  46. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode-members.html +44 -43
  47. package/SVF-doxygen/html/html/classSVF_1_1ArgumentVFGNode.html +23 -20
  48. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode-members.html +52 -51
  49. package/SVF-doxygen/html/html/classSVF_1_1BinaryOPVFGNode.html +69 -32
  50. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode-members.html +46 -45
  51. package/SVF-doxygen/html/html/classSVF_1_1BranchVFGNode.html +59 -24
  52. package/SVF-doxygen/html/html/classSVF_1_1CallDirSVFGEdge.html +2 -2
  53. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +2 -2
  54. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode-members.html +52 -51
  55. package/SVF-doxygen/html/html/classSVF_1_1CmpVFGNode.html +70 -33
  56. package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +2 -2
  57. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode-members.html +51 -50
  58. package/SVF-doxygen/html/html/classSVF_1_1CopyVFGNode.html +50 -14
  59. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +3 -3
  60. package/SVF-doxygen/html/html/classSVF_1_1DirectSVFGEdge.html +2 -2
  61. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode-members.html +46 -45
  62. package/SVF-doxygen/html/html/classSVF_1_1DummyVersionPropSVFGNode.html +53 -17
  63. package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +2 -2
  64. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +32 -32
  65. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +2 -2
  66. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +17 -17
  67. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +47 -46
  68. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +24 -21
  69. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +47 -46
  70. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +22 -19
  71. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode-members.html +45 -44
  72. package/SVF-doxygen/html/html/classSVF_1_1FormalParmVFGNode.html +65 -28
  73. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode-members.html +49 -48
  74. package/SVF-doxygen/html/html/classSVF_1_1FormalRetVFGNode.html +65 -28
  75. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode-members.html +51 -50
  76. package/SVF-doxygen/html/html/classSVF_1_1GepVFGNode.html +50 -14
  77. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +2 -2
  78. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +58 -57
  79. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +45 -42
  80. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode-members.html +56 -55
  81. package/SVF-doxygen/html/html/classSVF_1_1InterPHIVFGNode.html +40 -37
  82. package/SVF-doxygen/html/html/classSVF_1_1IntraDirSVFGEdge.html +2 -2
  83. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +2 -2
  84. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +56 -55
  85. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +26 -23
  86. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode-members.html +57 -56
  87. package/SVF-doxygen/html/html/classSVF_1_1IntraPHIVFGNode.html +26 -23
  88. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode-members.html +54 -53
  89. package/SVF-doxygen/html/html/classSVF_1_1LoadVFGNode.html +50 -14
  90. package/SVF-doxygen/html/html/classSVF_1_1MRGenerator.html +2 -2
  91. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode-members.html +44 -43
  92. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +48 -13
  93. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode-members.html +53 -52
  94. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +36 -33
  95. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +32 -32
  96. package/SVF-doxygen/html/html/classSVF_1_1NodeIDAllocator_1_1Clusterer.html +1 -2
  97. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode-members.html +46 -45
  98. package/SVF-doxygen/html/html/classSVF_1_1NullPtrVFGNode.html +58 -21
  99. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode-members.html +53 -52
  100. package/SVF-doxygen/html/html/classSVF_1_1PHIVFGNode.html +71 -34
  101. package/SVF-doxygen/html/html/classSVF_1_1RetDirSVFGEdge.html +2 -2
  102. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +2 -2
  103. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +77 -77
  104. package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +4 -4
  105. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +29 -29
  106. package/SVF-doxygen/html/html/classSVF_1_1SaberAnnotator.html +1 -1
  107. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +7 -7
  108. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode-members.html +51 -50
  109. package/SVF-doxygen/html/html/classSVF_1_1StmtVFGNode.html +35 -32
  110. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode-members.html +54 -53
  111. package/SVF-doxygen/html/html/classSVF_1_1StoreVFGNode.html +51 -14
  112. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +2 -2
  113. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode-members.html +55 -54
  114. package/SVF-doxygen/html/html/classSVF_1_1UnaryOPVFGNode.html +76 -39
  115. package/SVF-doxygen/html/html/classSVF_1_1VFG.html +70 -70
  116. package/SVF-doxygen/html/html/classSVF_1_1VFGEdge.html +2 -2
  117. package/SVF-doxygen/html/html/classSVF_1_1VFGNode-members.html +43 -42
  118. package/SVF-doxygen/html/html/classSVF_1_1VFGNode.html +41 -9
  119. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +10 -10
  120. package/SVF-doxygen/html/html/functions_func_g.html +32 -12
  121. package/SVF-doxygen/html/html/functions_func_t.html +2 -2
  122. package/SVF-doxygen/html/html/functions_g.html +27 -7
  123. package/SVF-doxygen/html/html/functions_i.html +1 -1
  124. package/SVF-doxygen/html/html/functions_l.html +5 -5
  125. package/SVF-doxygen/html/html/functions_p.html +6 -6
  126. package/SVF-doxygen/html/html/functions_r.html +8 -8
  127. package/SVF-doxygen/html/html/functions_t.html +8 -6
  128. package/SVF-doxygen/html/html/functions_v.html +3 -3
  129. package/SVF-doxygen/html/html/namespaceSVF.html +1 -1
  130. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +7 -7
  131. package/SVF-doxygen/html/html/namespacemembers_p.html +1 -1
  132. package/SVF-doxygen/html/html/namespacemembers_type_p.html +1 -1
  133. package/SVF-doxygen/html/html/search/all_10.js +5 -5
  134. package/SVF-doxygen/html/html/search/all_12.js +3 -3
  135. package/SVF-doxygen/html/html/search/all_13.js +3 -3
  136. package/SVF-doxygen/html/html/search/all_14.js +7 -7
  137. package/SVF-doxygen/html/html/search/all_16.js +2 -2
  138. package/SVF-doxygen/html/html/search/all_7.js +1 -0
  139. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  140. package/SVF-doxygen/html/html/search/all_c.js +3 -3
  141. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  142. package/SVF-doxygen/html/html/search/all_e.js +3 -3
  143. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  144. package/SVF-doxygen/html/html/search/functions_10.js +1 -1
  145. package/SVF-doxygen/html/html/search/functions_11.js +1 -1
  146. package/SVF-doxygen/html/html/search/functions_6.js +1 -0
  147. package/SVF-doxygen/html/html/search/functions_8.js +1 -1
  148. package/SVF-doxygen/html/html/search/functions_e.js +1 -1
  149. package/SVF-doxygen/html/html/search/typedefs_f.js +1 -1
  150. package/SVF-doxygen/html/html/search/variables_14.js +4 -4
  151. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  152. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  153. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +48 -48
  154. package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01VFG_01_5_01_4.html +36 -36
  155. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SVFGNodeLockSpan_01_4.html +1 -1
  156. package/include/Graphs/SVFGNode.h +6 -1
  157. package/include/Graphs/VFG.h +1 -1
  158. package/include/Graphs/VFGNode.h +38 -3
  159. package/include/Util/SVFUtil.h +1 -1
  160. package/lib/Graphs/SVFG.cpp +9 -0
  161. package/lib/Graphs/VFG.cpp +86 -0
  162. package/lib/Util/NodeIDAllocator.cpp +2 -2
  163. package/lib/WPA/AndersenStat.cpp +0 -8
  164. package/package.json +1 -1
@@ -1234,8 +1234,8 @@ Additional Inherited Members</h2></td></tr>
1234
1234
  <div class="ttc" id="namespaceSVF_html_af739db846e47ba6b2fd15eaad31ab7fb"><div class="ttname"><a href="namespaceSVF.html#af739db846e47ba6b2fd15eaad31ab7fb">SVF::Set</a></div><div class="ttdeci">std::unordered_set&lt; Key, Hash, KeyEqual, Allocator &gt; Set</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00097">SVFBasicTypes.h:97</a></div></div>
1235
1235
  <div class="ttc" id="classSVF_1_1PTACallGraph_html_a9a4b0c6672288b9201ab254b4c49548d"><div class="ttname"><a href="classSVF_1_1PTACallGraph.html#a9a4b0c6672288b9201ab254b4c49548d">SVF::PTACallGraph::getIndCallSitesInvokingCallee</a></div><div class="ttdeci">void getIndCallSitesInvokingCallee(const SVFFunction *callee, PTACallGraphEdge::CallInstSet &amp;csSet)</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8cpp_source.html#l00246">PTACallGraph.cpp:246</a></div></div>
1236
1236
  <div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00364">ICFGNode.h:364</a></div></div>
1237
- <div class="ttc" id="classSVF_1_1SVFG_html_ae2cff3c963136f474fac0a66aa8cff7b"><div class="ttname"><a href="classSVF_1_1SVFG.html#ae2cff3c963136f474fac0a66aa8cff7b">SVF::SVFG::isFunEntrySVFGNode</a></div><div class="ttdeci">const SVFFunction * isFunEntrySVFGNode(const SVFGNode *node) const</div><div class="ttdoc">Whether a node is function entry SVFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00689">SVFG.cpp:689</a></div></div>
1238
- <div class="ttc" id="classSVF_1_1SVFG_html_ad189e45b0c810e68566ccc3bdb3f2e59"><div class="ttname"><a href="classSVF_1_1SVFG.html#ad189e45b0c810e68566ccc3bdb3f2e59">SVF::SVFG::isCallSiteRetSVFGNode</a></div><div class="ttdeci">const CallICFGNode * isCallSiteRetSVFGNode(const SVFGNode *node) const</div><div class="ttdoc">Whether a node is callsite return SVFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00715">SVFG.cpp:715</a></div></div>
1237
+ <div class="ttc" id="classSVF_1_1SVFG_html_ae2cff3c963136f474fac0a66aa8cff7b"><div class="ttname"><a href="classSVF_1_1SVFG.html#ae2cff3c963136f474fac0a66aa8cff7b">SVF::SVFG::isFunEntrySVFGNode</a></div><div class="ttdeci">const SVFFunction * isFunEntrySVFGNode(const SVFGNode *node) const</div><div class="ttdoc">Whether a node is function entry SVFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00698">SVFG.cpp:698</a></div></div>
1238
+ <div class="ttc" id="classSVF_1_1SVFG_html_ad189e45b0c810e68566ccc3bdb3f2e59"><div class="ttname"><a href="classSVF_1_1SVFG.html#ad189e45b0c810e68566ccc3bdb3f2e59">SVF::SVFG::isCallSiteRetSVFGNode</a></div><div class="ttdeci">const CallICFGNode * isCallSiteRetSVFGNode(const SVFGNode *node) const</div><div class="ttdoc">Whether a node is callsite return SVFGNode. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8cpp_source.html#l00724">SVFG.cpp:724</a></div></div>
1239
1239
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a5cfee013a1a5821ef0c449842dd8690d"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">SVF::FlowSensitive::ander</a></div><div class="ttdeci">AndersenWaveDiff * ander</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00284">FlowSensitive.h:284</a></div></div>
1240
1240
  <div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00046">VFGNode.h:46</a></div></div>
1241
1241
  </div><!-- fragment -->
@@ -2016,7 +2016,7 @@ Additional Inherited Members</h2></td></tr>
2016
2016
 
2017
2017
  <p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00120">120</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
2018
2018
  <div class="fragment"><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;{</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</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; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1Options.html#adba18ce8f1496fe2e57a934f11c2dfd9">Options::VersioningThreads</a> &gt; 0 &amp;&amp; <span class="stringliteral">&quot;VFS::meldLabel: number of versioning threads must be &gt; 0!&quot;</span>);</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; <span class="comment">// Nodes which have at least one object on them given a prelabel.</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; std::vector&lt;const SVFGNode *&gt; prelabeledNodes;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="comment">// Fast query for the above.</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; std::vector&lt;bool&gt; isPrelabeled(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a8c8d16036008f87c7811586047599858">getTotalNodeNum</a>(), <span class="keyword">false</span>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <span class="keywordflow">while</span> (!<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a7056704c224dfb4b57287fe90c004aa8">empty</a>())</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="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#a8fa72918fce7e9c0b2dc34b683a797c6">pop</a>();</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; prelabeledNodes.push_back(<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-&gt;<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(n));</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; isPrelabeled[n] = <span class="keyword">true</span>;</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;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <span class="comment">// Delta, delta source, store, and load nodes, which require versions during</span></div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; <span class="comment">// solving, unlike other nodes with which we can make do with the reliance map.</span></div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; std::vector&lt;NodeID&gt; nodesWhichNeedVersions;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFG.html#a225a91c04afac6a8fe198e9860890a52">SVFG::const_iterator</a> it = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</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; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = it-&gt;first;</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">delta</a>(n) || <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3fa5afa4f54e0828ec090fde07b1bfa2">deltaSource</a>(n) || <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(n) || <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a984a4f929a18f97bfefac0102088a7fd">isLoad</a>(n)) nodesWhichNeedVersions.push_back(n);</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; }</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; std::mutex *versionMutexes = <span class="keyword">new</span> std::mutex[nodesWhichNeedVersions.size()];</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160;</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; <span class="comment">// Map of footprints to the canonical object &quot;owning&quot; the footprint.</span></div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::vector&lt;const IndirectSVFGEdge *&gt;</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>&gt; footprintOwner;</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; std::queue&lt;NodeID&gt; objectQueue;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aaae8c6858593ed050dcf2c9220228e3e">prelabeledObjects</a>)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; <span class="comment">// &quot;Touch&quot; maps with o so we don&#39;t need to lock on them.</span></div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>[o];</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>[o];</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; objectQueue.push(o);</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; std::mutex objectQueueMutex;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; std::mutex footprintOwnerMutex;</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; <span class="keyword">auto</span> meldVersionWorker = [<span class="keyword">this</span>, &amp;footprintOwner, &amp;objectQueue,</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; &amp;objectQueueMutex, &amp;footprintOwnerMutex, &amp;versionMutexes,</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; &amp;prelabeledNodes, &amp;isPrelabeled, &amp;nodesWhichNeedVersions]</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> thread)</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o;</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; { std::lock_guard&lt;std::mutex&gt; guard(objectQueueMutex);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <span class="comment">// No more objects? Done.</span></div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (objectQueue.empty()) <span class="keywordflow">return</span>;</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; o = objectQueue.front();</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; objectQueue.pop();</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;</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; <span class="comment">// 1. Compute the SCCs for the nodes on the graph overlay of o.</span></div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="comment">// For starting nodes, we only need those which did prelabeling for o specifically.</span></div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <span class="comment">// TODO: maybe we should move this to prelabel with a map (o -&gt; starting nodes).</span></div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; std::vector&lt;const SVFGNode *&gt; osStartingNodes;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *sn : prelabeledNodes)</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; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a> *store = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(sn))</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="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = store-&gt;getPAGDstNodeID();</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a>-&gt;<a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(p).<a class="code" href="classSVF_1_1PointsTo.html#af61271fefa574c39f405fdfee59a8b3f">test</a>(o)) osStartingNodes.push_back(sn);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; }</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">delta</a>(sn-&gt;getId()))</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_1MRSVFGNode.html">MRSVFGNode</a> *mr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a>&gt;(sn);</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; <span class="keywordflow">if</span> (mr != <span class="keyword">nullptr</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; <span class="keywordflow">if</span> (mr-&gt;<a class="code" href="classSVF_1_1MRSVFGNode.html#a28fe266d0e4618aa4448aa218495a332">getPointsTo</a>().test(o)) osStartingNodes.push_back(sn);</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; }</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160; std::vector&lt;int&gt; partOf;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; std::vector&lt;const IndirectSVFGEdge *&gt; footprint;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; <span class="keywordtype">unsigned</span> numSCCs = <a class="code" href="classSVF_1_1VersionedFlowSensitive_1_1SCC.html#ad52f6f586168ca4ceaf85cca8dfab825">SCC::detectSCCs</a>(<span class="keyword">this</span>, this-&gt;<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>, o, osStartingNodes, partOf, footprint);</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; <span class="comment">// 2. Skip any further processing of a footprint we have seen before.</span></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; { std::lock_guard&lt;std::mutex&gt; guard(footprintOwnerMutex);</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;std::vector&lt;const IndirectSVFGEdge *&gt;</a>, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a>&gt;::const_iterator canonOwner</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; = footprintOwner.find(footprint);</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <span class="keywordflow">if</span> (canonOwner == footprintOwner.end())</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">equivalentObject</a>[o] = o;</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; footprintOwner[footprint] = o;</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; <span class="keywordflow">else</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; this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2d451d89f99a4bff828b682723df477f">equivalentObject</a>[o] = canonOwner-&gt;second;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <span class="comment">// Same version and stmt reliance as the canonical. During solving we cannot just reuse</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="comment">// the canonical object&#39;s reliance because it may change due to on-the-fly call graph</span></div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; <span class="comment">// construction. Something like copy-on-write could be good... probably negligible.</span></div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>.at(o) = this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>.at(canonOwner-&gt;second);</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>.at(o) = this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>.at(canonOwner-&gt;second);</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</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">// 3. a. Initialise the MeldVersion of prelabeled nodes (SCCs).</span></div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; <span class="comment">// b. Initialise a todo list of all the nodes we need to version,</span></div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <span class="comment">// sorted according to topological order.</span></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <span class="comment">// We will use a map of sccs to meld versions for what is consumed.</span></div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; std::vector&lt;MeldVersion&gt; sccToMeldVersion(numSCCs);</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="comment">// At stores, what is consumed is different to what is yielded, so we</span></div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <span class="comment">// maintain that separately.</span></div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, MeldVersion&gt;</a> storesYieldedMeldVersion;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// SVFG nodes of interest -- those part of an SCC from the starting nodes.</span></div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; std::vector&lt;NodeID&gt; todoList;</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordtype">unsigned</span> bit = 0;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = 0; n &lt; partOf.size(); ++n)</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; <span class="keywordflow">if</span> (partOf[n] == -1) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordflow">if</span> (isPrelabeled[n])</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; {</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(n)) storesYieldedMeldVersion[n].<span class="keyword">set</span>(bit);</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="keywordflow">else</span> sccToMeldVersion[partOf[n]].set(bit);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; ++bit;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; }</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; todoList.push_back(n);</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; }</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// Sort topologically so each nodes is only visited once.</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keyword">auto</span> cmp = [&amp;partOf](<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> a, <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> b)</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; {</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="keywordflow">return</span> partOf[a] &gt; partOf[b];</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; std::sort(todoList.begin(), todoList.end(), cmp);</div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="comment">// 4. a. Do meld versioning.</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// b. Determine SCC reliances.</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// c. Build a footprint for o (all edges which it is found on).</span></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// d. Determine which SCCs belong to stores.</span></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="comment">// sccReliance[x] = { y_1, y_2, ... } if there exists an edge from a node</span></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// in SCC x to SCC y_i.</span></div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; std::vector&lt;Set&lt;int&gt;&gt; sccReliance(numSCCs);</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="comment">// Maps SCC to the store it corresponds to or -1 if it doesn&#39;t. TODO: unsigned vs signed -- nasty.</span></div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; std::vector&lt;int&gt; storeSCC(numSCCs, -1);</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; todoList.size(); ++i)</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="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = todoList[i];</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *sn = this-&gt;<a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-&gt;<a class="code" href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">getSVFGNode</a>(n);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="keyword">const</span> <span class="keywordtype">bool</span> nIsStore = this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(n);</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="keywordtype">int</span> nSCC = partOf[n];</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">if</span> (nIsStore) storeSCC[nSCC] = n;</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; <span class="comment">// Given n -&gt; m, the yielded version of n will be melded into m.</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <span class="comment">// For stores, that is in storesYieldedMeldVersion, otherwise, consume == yield and</span></div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// we can just use sccToMeldVersion.</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> &amp;nMV = nIsStore ? storesYieldedMeldVersion[n] : sccToMeldVersion[nSCC];</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a> *e : sn-&gt;<a class="code" href="classSVF_1_1GenericNode.html#a2d9cd758d6f8c5189d9b90b74f43e009">getOutEdges</a>())</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a> *ie = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>&gt;(e);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordflow">if</span> (!ie) <span class="keywordflow">continue</span>;</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="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> m = ie-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()-&gt;getId();</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="comment">// Ignoreedges which don&#39;t involve o.</span></div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; <span class="keywordflow">if</span> (!ie-&gt;<a class="code" href="classSVF_1_1IndirectSVFGEdge.html#a30aca718d25924f1babdf348bb0ace71">getPointsTo</a>().test(o)) <span class="keywordflow">continue</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="keywordtype">int</span> mSCC = partOf[m];</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; <span class="comment">// There is an edge from the SCC n belongs to to that m belongs to.</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; sccReliance[nSCC].insert(mSCC);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="comment">// Ignore edges to delta nodes (prelabeled consume).</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="comment">// No point propagating when n&#39;s SCC == m&#39;s SCC (same meld version there)</span></div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <span class="comment">// except when it is a store, because we are actually propagating n&#39;s yielded</span></div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// into m&#39;s consumed. Store nodes are in their own SCCs, so it is a self</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="comment">// loop on a store node.</span></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">if</span> (!this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">delta</a>(m) &amp;&amp; (nSCC != mSCC || nIsStore))</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; sccToMeldVersion[mSCC] |= nMV;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; }</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; }</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; }</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// 5. Transform meld versions belonging to SCCs into versions.</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;MeldVersion, Version&gt;</a> mvv;</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; std::vector&lt;Version&gt; sccToVersion(numSCCs, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a>);</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> curVersion = 0;</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a> = 0; <a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a> &lt; sccToMeldVersion.size(); ++<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>)</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; {</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> &amp;mv = sccToMeldVersion[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>];</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;MeldVersion, Version&gt;::const_iterator</a> foundVersion = mvv.find(mv);</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = foundVersion == mvv.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>() ? mvv[mv] = ++curVersion : foundVersion-&gt;second;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; sccToVersion[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>] = v;</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; }</div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; sccToMeldVersion.clear();</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="comment">// Same for storesYieldedMeldVersion.</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, Version&gt;</a> storesYieldedVersion;</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; nmv : storesYieldedMeldVersion)</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="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = nmv.first;</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a630eeca9c3344d24fa196f7de45bce18">MeldVersion</a> &amp;mv = nmv.second;</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160;</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;MeldVersion, Version&gt;::const_iterator</a> foundVersion = mvv.find(mv);</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> v = foundVersion == mvv.<a class="code" href="classSVF_1_1CoreBitVector.html#a93cdd9890522cc9fee2451567e0b1f0d">end</a>() ? mvv[mv] = ++curVersion : foundVersion-&gt;second;</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; storesYieldedVersion[n] = v;</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; }</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160;</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; storesYieldedMeldVersion.clear();</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; mvv.clear();</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160;</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <span class="comment">// 6. From SCC reliance, determine version reliances.</span></div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;Version, std::vector&lt;Version&gt;</a>&gt; &amp;osVersionReliance = this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a1dc6e3d4931b53e7e426c0f76d06aeb3">versionReliance</a>.at(o);</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a> = 0; <a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a> &lt; numSCCs; ++<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>)</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; <span class="keywordflow">if</span> (sccReliance[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>].<a class="code" href="cuddInt_8c.html#a5beb39637a978181c7c17714ac96672e">empty</a>()) <span class="keywordflow">continue</span>;</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="comment">// Some consume relies on a yield. When it&#39;s a store, we need to pick whether to</span></div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; <span class="comment">// use the consume or yield unlike when it is not because they are the same.</span></div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> version</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; = storeSCC[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>] != -1 ? storesYieldedVersion[storeSCC[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>]] : sccToVersion[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</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; std::vector&lt;Version&gt; &amp;reliantVersions = osVersionReliance[version];</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">int</span> reliantSCC : sccReliance[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>])</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; {</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> reliantVersion = sccToVersion[reliantSCC];</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">if</span> (version != reliantVersion)</div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; {</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="comment">// sccReliance is a set, no need to worry about duplicates.</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; reliantVersions.push_back(reliantVersion);</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; }</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; }</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <span class="comment">// 7. a. Save versions for nodes which need them.</span></div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="comment">// b. Fill in stmtReliance.</span></div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="comment">// TODO: maybe randomise iteration order for less contention? Needs profiling.</span></div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;Version, NodeBS&gt;</a> &amp;osStmtReliance = this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af0859eb2a5b46c45aa4314e6e54f4438">stmtReliance</a>.at(o);</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; nodesWhichNeedVersions.size(); ++i)</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; {</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> n = nodesWhichNeedVersions[i];</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; std::mutex &amp;mutex = versionMutexes[i];</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="keyword">const</span> <span class="keywordtype">int</span> scc = partOf[n];</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">if</span> (scc == -1) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160;</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; std::lock_guard&lt;std::mutex&gt; guard(mutex);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = sccToVersion[<a class="code" href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">scc</a>];</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">if</span> (c != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a>)</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; {</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aabc0a5a7a31b8d880e019773ba960741">setConsume</a>(n, o, c);</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(n) || this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a984a4f929a18f97bfefac0102088a7fd">isLoad</a>(n)) osStmtReliance[c].set(n);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <span class="keywordflow">if</span> (this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aac920c9a5f13dd147e3c130425e005eb">isStore</a>(n))</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; {</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a8234d4b959abc9123993bcff4eee34c1">Map&lt;NodeID, Version&gt;::const_iterator</a> yIt = storesYieldedVersion.find(n);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (yIt != storesYieldedVersion.end()) this-&gt;<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#ac33c7cef2d1d143950820ea48e97e806">setYield</a>(n, o, yIt-&gt;second);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; }</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; }</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; }</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; std::vector&lt;std::thread&gt; workers;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i &lt; <a class="code" href="classSVF_1_1Options.html#adba18ce8f1496fe2e57a934f11c2dfd9">Options::VersioningThreads</a>; ++i) workers.push_back(std::thread(meldVersionWorker, i));</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; <span class="keywordflow">for</span> (std::thread &amp;worker : workers) worker.join();</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160;</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <span class="keyword">delete</span>[] versionMutexes;</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="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a4a594c8d6ccaa27b5328c6388fdb258d">meldLabelingTime</a> = (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00361">GenericGraph.h:361</a></div></div>
2019
- <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#l00235">VFGNode.h:235</a></div></div>
2019
+ <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>
2020
2020
  <div class="ttc" id="classSVF_1_1Andersen_html_a187285a5bdf9422d9188b2b11b667639"><div class="ttname"><a href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">SVF::Andersen::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdoc">Operation of points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00216">Andersen.h:216</a></div></div>
2021
2021
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
2022
2022
  <div class="ttc" id="classSVF_1_1WPASolver_html_a21709a0f33b6238afe735cc9fe49ff70"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a21709a0f33b6238afe735cc9fe49ff70">SVF::WPASolver::scc</a></div><div class="ttdeci">SCC * scc</div><div class="ttdoc">SCC. </div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00199">WPASolver.h:199</a></div></div>
@@ -2094,7 +2094,7 @@ Additional Inherited Members</h2></td></tr>
2094
2094
 
2095
2095
  <p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00073">73</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
2096
2096
  <div class="fragment"><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;{</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFG.html#a241d0489bf0315460e2b07db87e7847c">SVFG::iterator</a> it = <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">begin</a>(); it != <a class="code" href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">svfg</a>-&gt;<a class="code" href="classSVF_1_1GenericGraph.html#a4bef15157423cef48dc7333a803cd27d">end</a>(); ++it)</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; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = it-&gt;first;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a> *ln = it-&gt;second;</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a> *stn = SVFUtil::dyn_cast&lt;StoreSVFGNode&gt;(ln))</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="comment">// l: *p = q.</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <span class="comment">// If p points to o (Andersen&#39;s), l yields a new version for o.</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = stn-&gt;getPAGDstNodeID();</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : <a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a>-&gt;<a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(p))</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; {</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aaae8c6858593ed050dcf2c9220228e3e">prelabeledObjects</a>.insert(o);</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;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(l);</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FlowSensitive.html#a5cfee013a1a5821ef0c449842dd8690d">ander</a>-&gt;<a class="code" href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">getPts</a>(p).<a class="code" href="classSVF_1_1PointsTo.html#a879783ba6629e500af9aa7dfcda2563d">count</a>() != 0) ++<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aff5029fca933376be1fa374bec790da6">numPrelabeledNodes</a>;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a9f9b00551c157f42d1d995e8c4efb54b">delta</a>(l))</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; <span class="comment">// The outgoing edges are not only what will later be propagated. SVFGOPT may</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; <span class="comment">// move around nodes such that there can be an MRSVFGNode with no incoming or</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <span class="comment">// outgoing edges which will be added at runtime. In essence, we can no</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; <span class="comment">// longer rely on the outgoing edges of a delta node when SVFGOPT is enabled.</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a> *mr = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="classSVF_1_1MRSVFGNode.html">MRSVFGNode</a>&gt;(ln);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">if</span> (mr != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; {</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : mr-&gt;<a class="code" href="classSVF_1_1MRSVFGNode.html#a28fe266d0e4618aa4448aa218495a332">getPointsTo</a>())</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aaae8c6858593ed050dcf2c9220228e3e">prelabeledObjects</a>.insert(o);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; }</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; <span class="comment">// Push into worklist because its consume == its yield.</span></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">vWorklist</a>.<a class="code" href="classSVF_1_1FIFOWorkList.html#ad4c6a48b60c870d63049fe7272cc7eb8">push</a>(l);</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <span class="keywordflow">if</span> (mr-&gt;<a class="code" href="classSVF_1_1MRSVFGNode.html#a28fe266d0e4618aa4448aa218495a332">getPointsTo</a>().count() != 0) ++<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#aff5029fca933376be1fa374bec790da6">numPrelabeledNodes</a>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; }</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>(<span class="keyword">true</span>);</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a77a5dd9578def9a8e2b48e8b90d9b996">prelabelingTime</a> = (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160;}</div><div class="ttc" id="classSVF_1_1GenericGraph_html_a0d9744b1b0e7a09a6f7af29188e243b7"><div class="ttname"><a href="classSVF_1_1GenericGraph.html#a0d9744b1b0e7a09a6f7af29188e243b7">SVF::GenericGraph::begin</a></div><div class="ttdeci">iterator begin()</div><div class="ttdoc">Iterators. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00361">GenericGraph.h:361</a></div></div>
2097
- <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#l00235">VFGNode.h:235</a></div></div>
2097
+ <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>
2098
2098
  <div class="ttc" id="classSVF_1_1Andersen_html_a187285a5bdf9422d9188b2b11b667639"><div class="ttname"><a href="classSVF_1_1Andersen.html#a187285a5bdf9422d9188b2b11b667639">SVF::Andersen::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdoc">Operation of points-to set. </div><div class="ttdef"><b>Definition:</b> <a href="Andersen_8h_source.html#l00216">Andersen.h:216</a></div></div>
2099
2099
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_aae032e5f5d53b131d0112dc8faa464a9"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aae032e5f5d53b131d0112dc8faa464a9">SVF::FlowSensitive::svfg</a></div><div class="ttdeci">SVFG * svfg</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00250">FlowSensitive.h:250</a></div></div>
2100
2100
  <div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_adfefc0dfa4e7fb4d20fafeaf96a5fa67"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#adfefc0dfa4e7fb4d20fafeaf96a5fa67">SVF::VersionedFlowSensitive::vWorklist</a></div><div class="ttdeci">FIFOWorkList&lt; NodeID &gt; vWorklist</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00202">VersionedFlowSensitive.h:202</a></div></div>
@@ -2149,7 +2149,7 @@ Additional Inherited Members</h2></td></tr>
2149
2149
  <p>Reimplemented from <a class="el" href="classSVF_1_1FlowSensitive.html#a9968530b3dee876f55e6659530decf27">SVF::FlowSensitive</a>.</p>
2150
2150
 
2151
2151
  <p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00618">618</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
2152
- <div class="fragment"><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;{</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// l: p = *q</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = load-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> q = load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; qpt = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(q);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : qpt)</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; {</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(o) || <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a980e54129ece0757d7f0373f37428507">isNonPointerObj</a>(o)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af93e65faae99459621ae45cf9d36005d">getConsume</a>(l, o);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (c != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> &amp;&amp; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-&gt;<a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(p, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, c)))</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; fields = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5dddd53b4ca9d7cc23d88ed9f3de9fde">getAllFieldsObjVars</a>(o);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> of : fields)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af93e65faae99459621ae45cf9d36005d">getConsume</a>(l, of);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">if</span> (c != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> &amp;&amp; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-&gt;<a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(p, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(of, c)))</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; }</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; }</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; }</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <a class="code" href="classSVF_1_1FlowSensitive.html#aab4f70210eb1e6447a24697d3b459067">loadTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;}</div><div class="ttc" id="classSVF_1_1StmtVFGNode_html_a04986961ad507be9fcf141ab51787da8"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">SVF::StmtVFGNode::getPAGDstNodeID</a></div><div class="ttdeci">NodeID getPAGDstNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00143">VFGNode.h:143</a></div></div>
2152
+ <div class="fragment"><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160;{</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160;</div><div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160;</div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="comment">// l: p = *q</span></div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = load-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> q = load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160;</div><div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a>&amp; qpt = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(q);</div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : qpt)</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; {</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(o) || <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a980e54129ece0757d7f0373f37428507">isNonPointerObj</a>(o)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160;</div><div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af93e65faae99459621ae45cf9d36005d">getConsume</a>(l, o);</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; <span class="keywordflow">if</span> (c != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> &amp;&amp; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-&gt;<a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(p, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, c)))</div><div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; {</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; }</div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#a0f71e4cd0948b294c7d33a690bde7dbe">isFieldInsensitive</a>(o))</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; fields = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5dddd53b4ca9d7cc23d88ed9f3de9fde">getAllFieldsObjVars</a>(o);</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> of : fields)</div><div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; {</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#af93e65faae99459621ae45cf9d36005d">getConsume</a>(l, of);</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="keywordflow">if</span> (c != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> &amp;&amp; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-&gt;<a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(p, <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(of, c)))</div><div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; {</div><div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; }</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; }</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; }</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div><div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <a class="code" href="classSVF_1_1FlowSensitive.html#aab4f70210eb1e6447a24697d3b459067">loadTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160;}</div><div class="ttc" id="classSVF_1_1StmtVFGNode_html_a04986961ad507be9fcf141ab51787da8"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">SVF::StmtVFGNode::getPAGDstNodeID</a></div><div class="ttdeci">NodeID getPAGDstNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00146">VFGNode.h:146</a></div></div>
2153
2153
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_aab4f70210eb1e6447a24697d3b459067"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#aab4f70210eb1e6447a24697d3b459067">SVF::FlowSensitive::loadTime</a></div><div class="ttdeci">double loadTime</div><div class="ttdoc">time of load edges </div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00315">FlowSensitive.h:315</a></div></div>
2154
2154
  <div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a59f3dd74ed8c3e2fc48b9353ba2452aa"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">SVF::VersionedFlowSensitive::atKey</a></div><div class="ttdeci">static VersionedVar atKey(NodeID, Version)</div><div class="ttdoc">Return key into vPtD for address-taken var of a specific version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00024">VersionedFlowSensitive.cpp:24</a></div></div>
2155
2155
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
@@ -2158,7 +2158,7 @@ Additional Inherited Members</h2></td></tr>
2158
2158
  <div class="ttc" id="namespaceSVF_html_a9ec7a8dc63411ee3724a25a59191be0c"><div class="ttname"><a href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">SVF::Version</a></div><div class="ttdeci">unsigned Version</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00130">SVFBasicTypes.h:130</a></div></div>
2159
2159
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5dddd53b4ca9d7cc23d88ed9f3de9fde"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5dddd53b4ca9d7cc23d88ed9f3de9fde">SVF::PointerAnalysis::getAllFieldsObjVars</a></div><div class="ttdeci">virtual const NodeBS &amp; getAllFieldsObjVars(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00353">PointerAnalysis.h:353</a></div></div>
2160
2160
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00099">PointerAnalysisImpl.h:99</a></div></div>
2161
- <div class="ttc" id="classSVF_1_1StmtVFGNode_html_a791a01f5d3528f8a8bf19369b5c61c37"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">SVF::StmtVFGNode::getPAGSrcNodeID</a></div><div class="ttdeci">NodeID getPAGSrcNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00138">VFGNode.h:138</a></div></div>
2161
+ <div class="ttc" id="classSVF_1_1StmtVFGNode_html_a791a01f5d3528f8a8bf19369b5c61c37"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">SVF::StmtVFGNode::getPAGSrcNodeID</a></div><div class="ttdeci">NodeID getPAGSrcNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00141">VFGNode.h:141</a></div></div>
2162
2162
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
2163
2163
  <div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3d44a343a2e3f5d276fd1b069c92e112"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">SVF::VersionedFlowSensitive::invalidVersion</a></div><div class="ttdeci">static const Version invalidVersion</div><div class="ttdoc">If this version appears, there has been an error. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00044">VersionedFlowSensitive.h:44</a></div></div>
2164
2164
  <div class="ttc" id="SVFBasicTypes_8h_html_a1aeda3370621dc00e9a0fe8e7aabc736"><div class="ttname"><a href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a></div><div class="ttdeci">#define TIMEINTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00178">SVFBasicTypes.h:178</a></div></div>
@@ -2209,7 +2209,7 @@ Additional Inherited Members</h2></td></tr>
2209
2209
  <div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a7a98162b69de90f80ce853a6ff43af56"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">SVF::VersionedFlowSensitive::propagateVersion</a></div><div class="ttdeci">void propagateVersion(NodeID o, Version v)</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00518">VersionedFlowSensitive.cpp:518</a></div></div>
2210
2210
  <div class="ttc" id="classSVF_1_1SVFG_html_a7ace06b6c893b31f7dec2abe54e33e11"><div class="ttname"><a href="classSVF_1_1SVFG.html#a7ace06b6c893b31f7dec2abe54e33e11">SVF::SVFG::getSVFGNode</a></div><div class="ttdeci">SVFGNode * getSVFGNode(NodeID id) const</div><div class="ttdoc">Get a SVFG node. </div><div class="ttdef"><b>Definition:</b> <a href="SVFG_8h_source.html#l00150">SVFG.h:150</a></div></div>
2211
2211
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a979f89495966d71f9b470d832384ebd6"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a979f89495966d71f9b470d832384ebd6">SVF::FlowSensitive::processSVFGNode</a></div><div class="ttdeci">bool processSVFGNode(SVFGNode *node)</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8cpp_source.html#l00201">FlowSensitive.cpp:201</a></div></div>
2212
- <div class="ttc" id="classSVF_1_1DummyVersionPropSVFGNode_html"><div class="ttname"><a href="classSVF_1_1DummyVersionPropSVFGNode.html">SVF::DummyVersionPropSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00466">SVFGNode.h:466</a></div></div>
2212
+ <div class="ttc" id="classSVF_1_1DummyVersionPropSVFGNode_html"><div class="ttname"><a href="classSVF_1_1DummyVersionPropSVFGNode.html">SVF::DummyVersionPropSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00469">SVFGNode.h:469</a></div></div>
2213
2213
  <div class="ttc" id="classSVF_1_1VFGNode_html"><div class="ttname"><a href="classSVF_1_1VFGNode.html">SVF::VFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00046">VFGNode.h:46</a></div></div>
2214
2214
  </div><!-- fragment -->
2215
2215
  </div>
@@ -2246,7 +2246,7 @@ Additional Inherited Members</h2></td></tr>
2246
2246
 
2247
2247
  <p class="definition">Definition at line <a class="el" href="VersionedFlowSensitive_8cpp_source.html#l00661">661</a> of file <a class="el" href="VersionedFlowSensitive_8cpp_source.html">VersionedFlowSensitive.cpp</a>.</p>
2248
2248
  <div class="fragment"><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160;{</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> p = store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>();</div><div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;ppt = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(p);</div><div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160;</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keywordflow">if</span> (ppt.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>()) <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160;</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> q = store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>();</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1PointsTo.html">PointsTo</a> &amp;qpt = <a class="code" href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">getPts</a>(q);</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> l = store-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; <span class="comment">// l: *p = q</span></div><div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160;</div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; <span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keywordtype">bool</span> changed = <span class="keyword">false</span>;</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="comment">// The version for these objects would be y_l(o).</span></div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> changedObjects;</div><div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160;</div><div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160; <span class="keywordflow">if</span> (!qpt.<a class="code" href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">empty</a>())</div><div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; {</div><div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : ppt)</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; {</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a5d15e4b09784f438568ebe61f8aa5156">isConstantObj</a>(o) || <a class="code" href="classSVF_1_1PointerAnalysis.html#adc7f5c71efb9cd1bec4f5ca9127654c3">pag</a>-&gt;<a class="code" href="classSVF_1_1SVFIR.html#a980e54129ece0757d7f0373f37428507">isNonPointerObj</a>(o)) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> y = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a01a199e9fdb5759c7f78ee344dbc413c">getYield</a>(l, o);</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; <span class="keywordflow">if</span> (y != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> &amp;&amp; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-&gt;<a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, y), q))</div><div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; {</div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; changedObjects.set(o);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; }</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; }</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; }</div><div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160;</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordtype">double</span> end = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <a class="code" href="classSVF_1_1FlowSensitive.html#a82b76087363b26fbe749653935569de7">storeTime</a> += (end - start) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keywordtype">double</span> updateStart = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160;</div><div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> singleton = 0;</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordtype">bool</span> isSU = <a class="code" href="classSVF_1_1FlowSensitive.html#a42a7e39e0e15576742f8ba7c32579ea2">isStrongUpdate</a>(store, singleton);</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keywordflow">if</span> (isSU) <a class="code" href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">svfgHasSU</a>.set(l);</div><div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordflow">else</span> <a class="code" href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">svfgHasSU</a>.reset(l);</div><div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160;</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; <span class="comment">// For all objects, perform pts(o:y) = pts(o:y) U pts(o:c) at loc,</span></div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="comment">// except when a strong update is taking place.</span></div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> ObjToVersionMap::value_type &amp;oc : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">consume</a>[l])</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; {</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o = oc.first;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> c = oc.second;</div><div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160;</div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="comment">// Strong-updated; don&#39;t propagate.</span></div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">if</span> (isSU &amp;&amp; o == singleton) <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160;</div><div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> y = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a01a199e9fdb5759c7f78ee344dbc413c">getYield</a>(l, o);</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">if</span> (y != <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3d44a343a2e3f5d276fd1b069c92e112">invalidVersion</a> &amp;&amp; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a03f5f16377daa0258166a73de3e21f07">vPtD</a>-&gt;<a class="code" href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">unionPts</a>(<a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, y), <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">atKey</a>(o, c)))</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; {</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; changed = <span class="keyword">true</span>;</div><div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; changedObjects.set(o);</div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; }</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; }</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160;</div><div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keywordtype">double</span> updateEnd = <a class="code" href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">stat</a>-&gt;<a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">getClk</a>();</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <a class="code" href="classSVF_1_1FlowSensitive.html#af5a94d14096ae2bbc47b3b3b9f723226">updateTime</a> += (updateEnd - updateStart) / <a class="code" href="SVFBasicTypes_8h.html#a1aeda3370621dc00e9a0fe8e7aabc736">TIMEINTERVAL</a>;</div><div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="comment">// Changed objects need to be propagated. Time here should be inconsequential</span></div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="comment">// *except* for time taken for propagateVersion, which will time itself.</span></div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (!changedObjects.empty())</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; {</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> o : changedObjects)</div><div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; {</div><div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="comment">// Definitely has a yielded version (came from prelabelling) as these are</span></div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="comment">// the changed objects which must&#39;ve been pointed to in Andersen&#39;s too.</span></div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a9ec7a8dc63411ee3724a25a59191be0c">Version</a> y = <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a01a199e9fdb5759c7f78ee344dbc413c">getYield</a>(l, o);</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">propagateVersion</a>(o, y);</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="comment">// Some o/v pairs changed: statements need to know.</span></div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> s : <a class="code" href="classSVF_1_1VersionedFlowSensitive.html#a3489def8e16e4d7c83d2c909d3287fc0">getStmtReliance</a>(o, y)) <a class="code" href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">pushIntoWorklist</a>(s);</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; }</div><div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; }</div><div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160;</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; <span class="keywordflow">return</span> changed;</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160;}</div><div class="ttc" id="classSVF_1_1WPASolver_html_a4af1c3e72f5af96c4facff672108da58"><div class="ttname"><a href="classSVF_1_1WPASolver.html#a4af1c3e72f5af96c4facff672108da58">SVF::WPASolver::pushIntoWorklist</a></div><div class="ttdeci">virtual void pushIntoWorklist(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="WPASolver_8h_source.html#l00162">WPASolver.h:162</a></div></div>
2249
- <div class="ttc" id="classSVF_1_1StmtVFGNode_html_a04986961ad507be9fcf141ab51787da8"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">SVF::StmtVFGNode::getPAGDstNodeID</a></div><div class="ttdeci">NodeID getPAGDstNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00143">VFGNode.h:143</a></div></div>
2249
+ <div class="ttc" id="classSVF_1_1StmtVFGNode_html_a04986961ad507be9fcf141ab51787da8"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">SVF::StmtVFGNode::getPAGDstNodeID</a></div><div class="ttdeci">NodeID getPAGDstNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00146">VFGNode.h:146</a></div></div>
2250
2250
  <div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a7a98162b69de90f80ce853a6ff43af56"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a7a98162b69de90f80ce853a6ff43af56">SVF::VersionedFlowSensitive::propagateVersion</a></div><div class="ttdeci">void propagateVersion(NodeID o, Version v)</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00518">VersionedFlowSensitive.cpp:518</a></div></div>
2251
2251
  <div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a59f3dd74ed8c3e2fc48b9353ba2452aa"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a59f3dd74ed8c3e2fc48b9353ba2452aa">SVF::VersionedFlowSensitive::atKey</a></div><div class="ttdeci">static VersionedVar atKey(NodeID, Version)</div><div class="ttdoc">Return key into vPtD for address-taken var of a specific version. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00024">VersionedFlowSensitive.cpp:24</a></div></div>
2252
2252
  <div class="ttc" id="namespaceSVF_html_a43a65e0d33af3c743294f7a1139d2301"><div class="ttname"><a href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">SVF::NodeID</a></div><div class="ttdeci">unsigned NodeID</div><div class="ttdef"><b>Definition:</b> <a href="MTAResultValidator_8h_source.html#l00018">MTAResultValidator.h:18</a></div></div>
@@ -2258,7 +2258,7 @@ Additional Inherited Members</h2></td></tr>
2258
2258
  <div class="ttc" id="classSVF_1_1BVDataPTAImpl_html_aee289e298e421448caaa604b7eb34fcb"><div class="ttname"><a href="classSVF_1_1BVDataPTAImpl.html#aee289e298e421448caaa604b7eb34fcb">SVF::BVDataPTAImpl::getPts</a></div><div class="ttdeci">virtual const PointsTo &amp; getPts(NodeID id)</div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysisImpl_8h_source.html#l00099">PointerAnalysisImpl.h:99</a></div></div>
2259
2259
  <div class="ttc" id="classSVF_1_1PointsTo_html_ac4688413177b49b37dbbfd3ed188d59b"><div class="ttname"><a href="classSVF_1_1PointsTo.html#ac4688413177b49b37dbbfd3ed188d59b">SVF::PointsTo::empty</a></div><div class="ttdeci">bool empty(void) const</div><div class="ttdoc">Returns true if set is empty. </div><div class="ttdef"><b>Definition:</b> <a href="PointsTo_8cpp_source.html#l00094">PointsTo.cpp:94</a></div></div>
2260
2260
  <div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a2e4e6a84cbfd553ad9cca8fdf9fd4a8d"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a2e4e6a84cbfd553ad9cca8fdf9fd4a8d">SVF::VersionedFlowSensitive::consume</a></div><div class="ttdeci">LocVersionMap consume</div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8h_source.html#l00182">VersionedFlowSensitive.h:182</a></div></div>
2261
- <div class="ttc" id="classSVF_1_1StmtVFGNode_html_a791a01f5d3528f8a8bf19369b5c61c37"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">SVF::StmtVFGNode::getPAGSrcNodeID</a></div><div class="ttdeci">NodeID getPAGSrcNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00138">VFGNode.h:138</a></div></div>
2261
+ <div class="ttc" id="classSVF_1_1StmtVFGNode_html_a791a01f5d3528f8a8bf19369b5c61c37"><div class="ttname"><a href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">SVF::StmtVFGNode::getPAGSrcNodeID</a></div><div class="ttdeci">NodeID getPAGSrcNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="VFGNode_8h_source.html#l00141">VFGNode.h:141</a></div></div>
2262
2262
  <div class="ttc" id="classSVF_1_1PointerAnalysis_html_a5ec3d9bf1fc81346c9df29638daedc0f"><div class="ttname"><a href="classSVF_1_1PointerAnalysis.html#a5ec3d9bf1fc81346c9df29638daedc0f">SVF::PointerAnalysis::stat</a></div><div class="ttdeci">PTAStat * stat</div><div class="ttdoc">Statistics. </div><div class="ttdef"><b>Definition:</b> <a href="PointerAnalysis_8h_source.html#l00155">PointerAnalysis.h:155</a></div></div>
2263
2263
  <div class="ttc" id="classSVF_1_1VersionedFlowSensitive_html_a3489def8e16e4d7c83d2c909d3287fc0"><div class="ttname"><a href="classSVF_1_1VersionedFlowSensitive.html#a3489def8e16e4d7c83d2c909d3287fc0">SVF::VersionedFlowSensitive::getStmtReliance</a></div><div class="ttdeci">NodeBS &amp; getStmtReliance(const NodeID o, const Version v)</div><div class="ttdoc">Returns the statements which rely on o:v. </div><div class="ttdef"><b>Definition:</b> <a href="VersionedFlowSensitive_8cpp_source.html#l00809">VersionedFlowSensitive.cpp:809</a></div></div>
2264
2264
  <div class="ttc" id="classSVF_1_1FlowSensitive_html_a43e8ca2e69e6e8643c9abd1fa231d305"><div class="ttname"><a href="classSVF_1_1FlowSensitive.html#a43e8ca2e69e6e8643c9abd1fa231d305">SVF::FlowSensitive::svfgHasSU</a></div><div class="ttdeci">NodeBS svfgHasSU</div><div class="ttdef"><b>Definition:</b> <a href="FlowSensitive_8h_source.html#l00320">FlowSensitive.h:320</a></div></div>
@@ -2385,7 +2385,7 @@ Additional Inherited Members</h2></td></tr>
2385
2385
  <div class="ttc" id="classSVF_1_1VersionedPTData_html_a8b9d50b5ad1c779b2ff231f07f3002ea"><div class="ttname"><a href="classSVF_1_1VersionedPTData.html#a8b9d50b5ad1c779b2ff231f07f3002ea">SVF::VersionedPTData::unionPts</a></div><div class="ttdeci">virtual bool unionPts(const VersionedKey &amp;dstVar, const VersionedKey &amp;srcVar)=0</div></div>
2386
2386
  <div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00165">GenericGraph.h:165</a></div></div>
2387
2387
  <div class="ttc" id="namespaceSVF_html_a32489632f53dce062ca2e8bff42c65cf"><div class="ttname"><a href="namespaceSVF.html#a32489632f53dce062ca2e8bff42c65cf">SVF::VersionedVar</a></div><div class="ttdeci">std::pair&lt; NodeID, Version &gt; VersionedVar</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00132">SVFBasicTypes.h:132</a></div></div>
2388
- <div class="ttc" id="classSVF_1_1DummyVersionPropSVFGNode_html"><div class="ttname"><a href="classSVF_1_1DummyVersionPropSVFGNode.html">SVF::DummyVersionPropSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00466">SVFGNode.h:466</a></div></div>
2388
+ <div class="ttc" id="classSVF_1_1DummyVersionPropSVFGNode_html"><div class="ttname"><a href="classSVF_1_1DummyVersionPropSVFGNode.html">SVF::DummyVersionPropSVFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SVFGNode_8h_source.html#l00469">SVFGNode.h:469</a></div></div>
2389
2389
  <div class="ttc" id="classSVF_1_1PTAStat_html_a3c4eaa1695ea13405911ae1621f98edc"><div class="ttname"><a href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">SVF::PTAStat::getClk</a></div><div class="ttdeci">static double getClk(bool mark=false)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00114">PTAStat.cpp:114</a></div></div>
2390
2390
  </div><!-- fragment -->
2391
2391
  </div>