svf-tools 1.0.286 → 1.0.287

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 (139) hide show
  1. package/SVF-doxygen/html/html/ConditionalPT_8h.html +2 -0
  2. package/SVF-doxygen/html/html/ConditionalPT_8h_source.html +56 -53
  3. package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +1 -2
  4. package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +13 -13
  5. package/SVF-doxygen/html/html/FSMPTA_8h_source.html +50 -50
  6. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +2 -2
  7. package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +2 -2
  8. package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +2 -2
  9. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
  10. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
  11. package/SVF-doxygen/html/html/SVFGEdge_8h_source.html +5 -5
  12. package/SVF-doxygen/html/html/SVFGNode_8h_source.html +4 -4
  13. package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +2 -2
  14. package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
  15. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +1 -2
  16. package/SVF-doxygen/html/html/SVFG_8cpp_source.html +4 -4
  17. package/SVF-doxygen/html/html/SVFG_8h_source.html +1 -1
  18. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp.html +1 -0
  19. package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +10 -10
  20. package/SVF-doxygen/html/html/SaberSVFGBuilder_8h_source.html +11 -11
  21. package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +2 -2
  22. package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +3 -3
  23. package/SVF-doxygen/html/html/annotated.html +14 -13
  24. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode-members.html +2 -2
  25. package/SVF-doxygen/html/html/classSVF_1_1ActualINSVFGNode.html +7 -7
  26. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode-members.html +2 -2
  27. package/SVF-doxygen/html/html/classSVF_1_1ActualOUTSVFGNode.html +7 -7
  28. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge-members.html +2 -2
  29. package/SVF-doxygen/html/html/classSVF_1_1CallIndSVFGEdge.html +5 -5
  30. package/SVF-doxygen/html/html/classSVF_1_1CondPointsToSet.html +115 -115
  31. package/SVF-doxygen/html/html/classSVF_1_1CondPointsToSet_1_1CondPtsSetIterator.html +35 -35
  32. package/SVF-doxygen/html/html/classSVF_1_1CondStdSet-members.html +27 -26
  33. package/SVF-doxygen/html/html/classSVF_1_1CondStdSet.html +56 -21
  34. package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +2 -2
  35. package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +25 -25
  36. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +3 -5
  37. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +2 -2
  38. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +2 -2
  39. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode-members.html +2 -2
  40. package/SVF-doxygen/html/html/classSVF_1_1FormalINSVFGNode.html +7 -7
  41. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode-members.html +2 -2
  42. package/SVF-doxygen/html/html/classSVF_1_1FormalOUTSVFGNode.html +7 -7
  43. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge-members.html +3 -3
  44. package/SVF-doxygen/html/html/classSVF_1_1IndirectSVFGEdge.html +20 -20
  45. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode-members.html +2 -2
  46. package/SVF-doxygen/html/html/classSVF_1_1InterMSSAPHISVFGNode.html +5 -5
  47. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge-members.html +2 -2
  48. package/SVF-doxygen/html/html/classSVF_1_1IntraIndSVFGEdge.html +5 -5
  49. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode-members.html +2 -2
  50. package/SVF-doxygen/html/html/classSVF_1_1IntraMSSAPHISVFGNode.html +5 -5
  51. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode-members.html +2 -2
  52. package/SVF-doxygen/html/html/classSVF_1_1MRSVFGNode.html +12 -12
  53. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode-members.html +2 -2
  54. package/SVF-doxygen/html/html/classSVF_1_1MSSAPHISVFGNode.html +7 -7
  55. package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +106 -104
  56. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
  57. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
  58. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge-members.html +2 -2
  59. package/SVF-doxygen/html/html/classSVF_1_1RetIndSVFGEdge.html +5 -5
  60. package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +11 -11
  61. package/SVF-doxygen/html/html/classSVF_1_1SVFGNodeLockSpan.html +23 -23
  62. package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +6 -6
  63. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +2 -2
  64. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder-members.html +3 -3
  65. package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +43 -43
  66. package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +2 -2
  67. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge-members.html +2 -2
  68. package/SVF-doxygen/html/html/classSVF_1_1ThreadMHPIndSVFGEdge.html +5 -5
  69. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +9 -9
  70. package/SVF-doxygen/html/html/classes.html +93 -92
  71. package/SVF-doxygen/html/html/functions_a.html +1 -1
  72. package/SVF-doxygen/html/html/functions_c.html +24 -19
  73. package/SVF-doxygen/html/html/functions_f.html +6 -6
  74. package/SVF-doxygen/html/html/functions_func.html +1 -1
  75. package/SVF-doxygen/html/html/functions_func_c.html +20 -17
  76. package/SVF-doxygen/html/html/functions_func_g.html +2 -2
  77. package/SVF-doxygen/html/html/functions_func_o.html +2 -1
  78. package/SVF-doxygen/html/html/functions_g.html +3 -3
  79. package/SVF-doxygen/html/html/functions_i.html +3 -3
  80. package/SVF-doxygen/html/html/functions_l.html +3 -3
  81. package/SVF-doxygen/html/html/functions_n.html +1 -1
  82. package/SVF-doxygen/html/html/functions_o.html +5 -4
  83. package/SVF-doxygen/html/html/functions_p.html +14 -16
  84. package/SVF-doxygen/html/html/functions_r.html +3 -7
  85. package/SVF-doxygen/html/html/functions_s.html +10 -12
  86. package/SVF-doxygen/html/html/functions_type_n.html +1 -1
  87. package/SVF-doxygen/html/html/functions_u.html +3 -3
  88. package/SVF-doxygen/html/html/functions_v.html +3 -3
  89. package/SVF-doxygen/html/html/functions_vars_c.html +2 -2
  90. package/SVF-doxygen/html/html/functions_vars_g.html +1 -1
  91. package/SVF-doxygen/html/html/hierarchy.html +165 -164
  92. package/SVF-doxygen/html/html/search/all_1.js +1 -1
  93. package/SVF-doxygen/html/html/search/all_10.js +10 -10
  94. package/SVF-doxygen/html/html/search/all_12.js +1 -1
  95. package/SVF-doxygen/html/html/search/all_13.js +7 -7
  96. package/SVF-doxygen/html/html/search/all_14.js +3 -3
  97. package/SVF-doxygen/html/html/search/all_15.js +2 -2
  98. package/SVF-doxygen/html/html/search/all_16.js +1 -1
  99. package/SVF-doxygen/html/html/search/all_3.js +3 -2
  100. package/SVF-doxygen/html/html/search/all_6.js +2 -2
  101. package/SVF-doxygen/html/html/search/all_7.js +2 -2
  102. package/SVF-doxygen/html/html/search/all_8.js +1 -0
  103. package/SVF-doxygen/html/html/search/all_9.js +1 -1
  104. package/SVF-doxygen/html/html/search/all_c.js +1 -1
  105. package/SVF-doxygen/html/html/search/all_d.js +1 -1
  106. package/SVF-doxygen/html/html/search/all_e.js +5 -5
  107. package/SVF-doxygen/html/html/search/all_f.js +1 -1
  108. package/SVF-doxygen/html/html/search/classes_7.js +1 -0
  109. package/SVF-doxygen/html/html/search/functions_0.js +1 -1
  110. package/SVF-doxygen/html/html/search/functions_2.js +2 -1
  111. package/SVF-doxygen/html/html/search/functions_6.js +1 -1
  112. package/SVF-doxygen/html/html/search/functions_d.js +1 -1
  113. package/SVF-doxygen/html/html/search/typedefs_d.js +1 -1
  114. package/SVF-doxygen/html/html/search/variables_14.js +2 -2
  115. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  116. package/SVF-doxygen/html/html/search/variables_3.js +1 -1
  117. package/SVF-doxygen/html/html/search/variables_7.js +1 -1
  118. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  119. package/SVF-doxygen/html/html/search/variables_e.js +2 -2
  120. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CondStdSet_3_01Element_01_4_01_4-members.html +81 -0
  121. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CondStdSet_3_01Element_01_4_01_4.html +131 -0
  122. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1CondVar_3_01Cond_01_4_01_4.html +3 -3
  123. package/SVF-doxygen/html/html/structstd_1_1hash_3_01SVF_1_1SVFGNodeLockSpan_01_4.html +3 -3
  124. package/SVF-doxygen/html/html/structstd_1_1hash_3_01const_01SVF_1_1CondVar_3_01Cond_01_4_01_4.html +3 -3
  125. package/include/DDA/DDAVFSolver.h +1 -1
  126. package/include/Graphs/SVFGEdge.h +3 -3
  127. package/include/Graphs/SVFGNode.h +2 -2
  128. package/include/MTA/FSMPTA.h +1 -0
  129. package/include/MemoryModel/ConditionalPT.h +21 -5
  130. package/include/SABER/SaberSVFGBuilder.h +3 -3
  131. package/lib/Graphs/SVFGStat.cpp +1 -1
  132. package/lib/Graphs/ThreadCallGraph.cpp +4 -4
  133. package/lib/MTA/FSMPTA.cpp +7 -7
  134. package/lib/MemoryModel/PointerAnalysis.cpp +1 -1
  135. package/lib/SABER/SaberSVFGBuilder.cpp +2 -1
  136. package/lib/WPA/FlowSensitive.cpp +2 -2
  137. package/lib/WPA/FlowSensitiveTBHC.cpp +2 -2
  138. package/lib/WPA/VersionedFlowSensitive.cpp +1 -1
  139. package/package.json +1 -1
@@ -66,7 +66,7 @@ $(function() {
66
66
  <div class="title">DDAVFSolver.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="DDAVFSolver_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * DDAVFSolver.h</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: Jul 3, 2014</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#ifndef VALUEFLOWDDA_H_</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#define VALUEFLOWDDA_H_</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DDAStat_8h.html">DDA/DDAStat.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFGBuilder_8h.html">MSSA/SVFGBuilder.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SCC_8h.html">Util/SCC.h</a>&quot;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> CVar, <span class="keyword">class</span> CPtSet, <span class="keyword">class</span> DPIm&gt;</div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html"> 24</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1DDAVFSolver.html">DDAVFSolver</a></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af83f88f2ae2456f2691e8822d56b1598"> 26</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1DDAStat.html">DDAStat</a>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a502207f81ed22fa42f9e18ccba83ad4e"> 28</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SCCDetection.html">SCCDetection&lt;SVFG*&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a502207f81ed22fa42f9e18ccba83ad4e">SVFGSCC</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af6e05e87ba8d6b6ae65807803b1b0221"> 29</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SCCDetection.html">SCCDetection&lt;PTACallGraph*&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#af6e05e87ba8d6b6ae65807803b1b0221">CallGraphSCC</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ac227096ad71dfda8bc48c139fccb3af2"> 30</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html#aca11d1b778309a72e9d345bd02324459">PTACallGraphEdge::CallInstSet</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#ac227096ad71dfda8bc48c139fccb3af2">CallInstSet</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7248a3fe0078a2b13786765b5f014ba6"> 31</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PAG.html#af34fb84e6a39ff6b23aa5e9381c7c80c">PAG::CallSiteSet</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7248a3fe0078a2b13786765b5f014ba6">CallSiteSet</a>;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a05d6b074b04aad7dc1f3cbe0ca587467"> 32</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;DPIm&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a05d6b074b04aad7dc1f3cbe0ca587467">DPTItemSet</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a8b5a34679fb1362425c88d6e74b6c019"> 33</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;DPIm, CPtSet&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a8b5a34679fb1362425c88d6e74b6c019">DPImToCPtSetMap</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af0538abf12c01d31a0296553e2f7c92d"> 34</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;DPIm,CVar&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#af0538abf12c01d31a0296553e2f7c92d">DPMToCVarMap</a>;</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a2ccbcfa949a1796094b5d9499177fc2b"> 35</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;DPIm,DPIm&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a2ccbcfa949a1796094b5d9499177fc2b">DPMToDPMMap</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aab76f98ae4f0c1f62f101ac5c5fdbf83"> 36</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;NodeID, DPTItemSet&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#aab76f98ae4f0c1f62f101ac5c5fdbf83">LocToDPMVecMap</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aef98e8e9144a69bb7481fef5d2dcb303"> 37</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;const SVFGEdge* &gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#aef98e8e9144a69bb7481fef5d2dcb303">ConstSVFGEdgeSet</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a6489319b33a807f7caba2d34017a3e1b"> 38</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VFGEdge.html#a557334ef75bb5479b045f68c27b38701">SVFGEdge::SVFGEdgeSetTy</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a6489319b33a807f7caba2d34017a3e1b">SVFGEdgeSet</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#accaacd2dd680f92ff83cfe75eef6ffab"> 39</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;const SVFGNode*, DPTItemSet&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#accaacd2dd680f92ff83cfe75eef6ffab">StoreToPMSetMap</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7ee96b513074c283d23434590ce15e7d"> 42</a></span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a7ee96b513074c283d23434590ce15e7d">DDAVFSolver</a>(): <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>(false),<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>(nullptr),<a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a>(nullptr),<a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a>(nullptr),<a class="code" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5">_callGraph</a>(nullptr), <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a>(nullptr), <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>(nullptr), <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>(nullptr)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a211f2f0c572d5085d22c2cb40341b606"> 46</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a211f2f0c572d5085d22c2cb40341b606">~DDAVFSolver</a>()</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a> != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// AndersenWaveDiff::releaseAndersenWaveDiff();</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a> != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">// DDASVFGBuilder::releaseDDASVFG();</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a> != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5">_callGraph</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a73bbf4f763316e8d5db62d163da35a18"> 68</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#a73bbf4f763316e8d5db62d163da35a18">getCandidateQueries</a>()</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae0e78fafb7eec0fbc1a02d24547335e9">candidateQueries</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ad7d92fad8606d5512786a7b7a08930e2"> 73</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> DPIm <a class="code" href="classSVF_1_1DDAVFSolver.html#ad7d92fad8606d5512786a7b7a08930e2">getDPIm</a>(<span class="keyword">const</span> CVar&amp; var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* loc)<span class="keyword"> const</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; DPIm dpm(var,loc);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> dpm;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a99764ee5bc19378795fe464e9036e78b"> 79</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a99764ee5bc19378795fe464e9036e78b">unionDDAPts</a>(CPtSet&amp; pts, <span class="keyword">const</span> CPtSet&amp; targetPts)</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">return</span> (pts |= targetPts);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ae7949e141978474f3b6cb510bacafa37"> 84</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae7949e141978474f3b6cb510bacafa37">unionDDAPts</a>(DPIm dpm, <span class="keyword">const</span> CPtSet&amp; targetPts)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; CPtSet&amp; pts = <a class="code" href="classSVF_1_1DDAVFSolver.html#a7b35588de00e322afd742041bf735571">isTopLevelPtrStmt</a>(dpm.getLoc()) ? <a class="code" href="classSVF_1_1DDAVFSolver.html#a2d6df8149b45d719e22fc505df94171a">dpmToTLCPtSetMap</a>[dpm] : <a class="code" href="classSVF_1_1DDAVFSolver.html#a2565bf8dcacb22350dc1dc98ec7595f2">dpmToADCPtSetMap</a>[dpm];</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> pts |= targetPts;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a5a8632a957fce63f186dd8b657566dd2"> 90</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a5a8632a957fce63f186dd8b657566dd2">addDDAPts</a>(CPtSet&amp; pts, <span class="keyword">const</span> CVar&amp; var)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; pts.set(var);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9"> 95</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a1fdd7c0efa8f0506edfba2da8f2b3cc0"> 100</a></span>&#160; <span class="keyword">inline</span> SVFGSCC* <a class="code" href="classSVF_1_1DDAVFSolver.html#a1fdd7c0efa8f0506edfba2da8f2b3cc0">getSVFGSCC</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>;</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="comment">// Dump cptsSet</span></div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aa4dc73ea65f736282a413a9d286141e5"> 105</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aa4dc73ea65f736282a413a9d286141e5">dumpCPtSet</a>(<span class="keyword">const</span> CPtSet&amp; cpts)<span class="keyword"> const</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;{&quot;</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> CPtSet::iterator it = cpts.begin(), eit = cpts.end(); it!=eit; ++it)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; (*it) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce"> 115</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> CPtSet&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a9a9c3a8b5e4ffc89418073110e446f20">isbkVisited</a>(dpm))</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">const</span> CPtSet&amp; cpts = <a class="code" href="classSVF_1_1DDAVFSolver.html#ae31e9281e4f1e0585fdf328b7339e1bf">getCachedPointsTo</a>(dpm);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t already backward visited dpm: &quot;</span>);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, dpm.dump());</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t return points-to: &quot;</span>);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="classSVF_1_1DDAVFSolver.html#aa4dc73ea65f736282a413a9d286141e5">dumpCPtSet</a>(cpts));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> cpts;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t backward visit dpm: &quot;</span>);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, dpm.dump());</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a7112ce6145be0855f8b035bb0d8a331c">markbkVisited</a>(dpm);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af7be3fa6c73dde97d6f9fd0395c9aee0">addDpmToLoc</a>(dpm);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fb52286c5324ea3d58e22c630b307e3">testOutOfBudget</a>(dpm) == <span class="keyword">false</span>)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; CPtSet pts;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a99f631cf1bc438e3f08f7f935e98e38d">handleSingleStatement</a>(dpm, pts);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a239a55960dfbbe73df63063070a18b56">updateCachedPointsTo</a>(dpm, pts);</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="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae31e9281e4f1e0585fdf328b7339e1bf">getCachedPointsTo</a>(dpm);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a99f631cf1bc438e3f08f7f935e98e38d"> 147</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a99f631cf1bc438e3f08f7f935e98e38d">handleSingleStatement</a>(<span class="keyword">const</span> DPIm&amp; dpm, CPtSet&amp; pts)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#afcc074be34dd0c45418ff16b3d9d4192">resolveFunPtr</a>(dpm);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = dpm.getLoc();</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;AddrSVFGNode&gt;(node))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#acfe7d961caac8f0f558881a9a006b1fa">handleAddr</a>(pts,dpm,SVFUtil::cast&lt;AddrSVFGNode&gt;(node));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;CopySVFGNode&gt;(node) || SVFUtil::isa&lt;PHISVFGNode&gt;(node)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; || SVFUtil::isa&lt;ActualParmSVFGNode&gt;(node) || SVFUtil::isa&lt;FormalParmSVFGNode&gt;(node)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; || SVFUtil::isa&lt;ActualRetSVFGNode&gt;(node) || SVFUtil::isa&lt;FormalRetSVFGNode&gt;(node)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; || SVFUtil::isa&lt;NullPtrSVFGNode&gt;(node))</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a7a6af30f30f32d55fc910f2ae4909791">backtraceAlongDirectVF</a>(pts,dpm);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;GepSVFGNode&gt;(node))</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; CPtSet gepPts;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a7a6af30f30f32d55fc910f2ae4909791">backtraceAlongDirectVF</a>(gepPts,dpm);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a99764ee5bc19378795fe464e9036e78b">unionDDAPts</a>(pts, <a class="code" href="classSVF_1_1DDAVFSolver.html#ab10a34efa1acb6125ea32cf7a8cf919f">processGepPts</a>(SVFUtil::cast&lt;GepSVFGNode&gt;(node),gepPts));</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadSVFGNode&gt;(node))</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; CPtSet loadpts;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#acd694c2092adf8c516d1aba5f798cec7">startNewPTCompFromLoadSrc</a>(loadpts,dpm);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> CPtSet::iterator it = loadpts.begin(), eit = loadpts.end(); it!=eit; ++it)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46">backtraceAlongIndirectVF</a>(pts,<a class="code" href="classSVF_1_1DDAVFSolver.html#ac4cb0b666d68d135c5e385bfc880fd67">getDPImWithOldCond</a>(dpm,*it,node));</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; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;StoreSVFGNode&gt;(node))</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a345e5379f53b618adef014aa6887bfe7">isMustAlias</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(dpm),dpm))</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;+++must alias for load and store:&quot;</span>);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(dpm).dump());</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, dpm.dump());</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;+++\n&quot;</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a0aec64ca944ea4f914a6fa799b7a8b38">_NumOfMustAliases</a>++);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#adbd209b4a2327b2b068fbb56e12042f7">backtraceToStoreSrc</a>(pts,dpm);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; CPtSet storepts;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aff744e724dcf06a2b1cdd7ba2b1093f1">startNewPTCompFromStoreDst</a>(storepts,dpm);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> CPtSet::iterator it = storepts.begin(), eit = storepts.end(); it!=eit; ++it)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ace35b8247204d9806ca1a4f01bff2364">propagateViaObj</a>(*it,<a class="code" href="classSVF_1_1DDAVFSolver.html#ad42efad8e857290459689833c224e467">getLoadCVar</a>(dpm)))</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#adbd209b4a2327b2b068fbb56e12042f7">backtraceToStoreSrc</a>(pts,<a class="code" href="classSVF_1_1DDAVFSolver.html#ac4cb0b666d68d135c5e385bfc880fd67">getDPImWithOldCond</a>(dpm,*it,node));</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a94bcddbc7b9ccecb3fbb693b13372785">isStrongUpdate</a>(storepts,SVFUtil::cast&lt;StoreSVFGNode&gt;(node)))</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;backward strong update for obj &quot;</span> &lt;&lt; dpm.getCurNodeID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#aeb6b56cf3d140d251b0524eb5cbd6dce">addSUStat</a>(dpm,node);)</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a7d0775354df32f293e98578ed071d33c">rmSUStat</a>(dpm,node);)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46">backtraceAlongIndirectVF</a>(pts,<a class="code" href="classSVF_1_1DDAVFSolver.html#ac4cb0b666d68d135c5e385bfc880fd67">getDPImWithOldCond</a>(dpm,*it,node));</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46">backtraceAlongIndirectVF</a>(pts,dpm);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;MRSVFGNode&gt;(node))</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46">backtraceAlongIndirectVF</a>(pts,dpm);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unexpected kind of SVFG nodes&quot;</span>);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a8c5220108a65fa281959529cb1e9cc57"> 227</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a8c5220108a65fa281959529cb1e9cc57">reCompute</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; SVFGEdgeSet newIndirectEdges;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a20e9df3a6397153dc3741ad5b370dc94">isFunPtr</a>(dpm.getCurNodeID()))</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keyword">const</span> CallSiteSet&amp; csSet = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a63a8131c082052fc4a8c61430ce196af">getIndCallSites</a>(dpm.getCurNodeID());</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">for</span>(CallSiteSet::const_iterator it = csSet.begin(), eit = csSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a4f63b6b3a06633675ae99667cbaa6cdc">updateCallGraphAndSVFG</a>(dpm, (*it),newIndirectEdges);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span>(!newIndirectEdges.empty())</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a123b5006a6da7053e5e357140da3c5a3">find</a>();</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ace037388135f272365cee2e87844bfba">reComputeForEdges</a>(dpm,newIndirectEdges,<span class="keyword">true</span>);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; SVFGEdgeSet edgeSet(dpm.getLoc()-&gt;getOutEdges());</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ace037388135f272365cee2e87844bfba">reComputeForEdges</a>(dpm,edgeSet,<span class="keyword">false</span>);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ace037388135f272365cee2e87844bfba"> 248</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ace037388135f272365cee2e87844bfba">reComputeForEdges</a>(<span class="keyword">const</span> DPIm&amp; dpm, <span class="keyword">const</span> SVFGEdgeSet&amp; edgeSet, <span class="keywordtype">bool</span> indirectCall = <span class="keyword">false</span>)</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVFGNode::const_iterator</a> it = edgeSet.begin(), eit = edgeSet.end(); it != eit; ++it)</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="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *it;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keyword">typename</span> LocToDPMVecMap::const_iterator locIt = <a class="code" href="classSVF_1_1DDAVFSolver.html#ad849ae4509e88832f784c748468ab959">getLocToDPMVecMap</a>().find(dst-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span> (locIt == <a class="code" href="classSVF_1_1DDAVFSolver.html#ad849ae4509e88832f784c748468ab959">getLocToDPMVecMap</a>().end())</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; DPTItemSet dpmSet(locIt-&gt;second.begin(), locIt-&gt;second.end());</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> DPTItemSet::const_iterator it = dpmSet.begin(),eit = dpmSet.end(); it!=eit; ++it)</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="keyword">const</span> DPIm&amp; dstDpm = *it;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span>(!indirectCall &amp;&amp; SVFUtil::isa&lt;IndirectSVFGEdge&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;LoadSVFGNode&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()))</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">if</span>(dstDpm.getCurNodeID() == dpm.getCurNodeID())</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t Recompute, forward from :&quot;</span>);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, dpm.dump());</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#aa9daed44e9d2ca2722ea9ab9d4517a21">_NumOfStepInCycle</a>++);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa7e5839c5bc6f913561de10bce61e74b">clearbkVisited</a>(dstDpm);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(dstDpm);</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; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">else</span></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="keywordflow">if</span>(indirectCall)</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t Recompute for indirect call from :&quot;</span>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t Recompute forward from :&quot;</span>);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, dpm.dump());</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#aa9daed44e9d2ca2722ea9ab9d4517a21">_NumOfStepInCycle</a>++);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa7e5839c5bc6f913561de10bce61e74b">clearbkVisited</a>(dstDpm);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(dstDpm);</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; }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af2a0732401e5904ebf81878d3ffe0675"> 289</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#af2a0732401e5904ebf81878d3ffe0675">buildSVFG</a>(<a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag)</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a> = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a74134978db1c0d9c71122bc63f4b73c1">AndersenWaveDiff::createAndersenWaveDiff</a>(pag);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a> = <a class="code" href="classSVF_1_1DDAVFSolver.html#a0d563fe8b016b27a58f5b054fec9c38a">svfgBuilder</a>.<a class="code" href="classSVF_1_1SVFGBuilder.html#a3b162da8dfb123cada7a13ce0c154a46">buildPTROnlySVFGWithoutOPT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a>);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a> = <a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a>-&gt;<a class="code" href="classSVF_1_1VFG.html#a560e0d31a6a9ba4c2b0ac540c233fef1">getPAG</a>();</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#afe518d3d7f8051de5b9860f2460aa1b7"> 296</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#afe518d3d7f8051de5b9860f2460aa1b7">resetQuery</a>()</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ab60c701f1881d88aa4440991fb972638">OOBResetVisited</a>();</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>.clear();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.clear();</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.clear();</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a674248754300d58fcef8eaf09436249e">_NumOfStep</a> = 0;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div><div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ab60c701f1881d88aa4440991fb972638"> 308</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ab60c701f1881d88aa4440991fb972638">OOBResetVisited</a>()</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> LocToDPMVecMap::const_iterator it = <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>.begin(),eit = <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; DPTItemSet dpmSet(it-&gt;second.begin(), it-&gt;second.end());</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> DPTItemSet::const_iterator dit = dpmSet.begin(),deit=dpmSet.end(); dit!=deit; ++dit)</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a0b1f774883adc7d535f8363bf3c8b1e8">isOutOfBudgetDpm</a>(*dit)==<span class="keyword">false</span>)</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa7e5839c5bc6f913561de10bce61e74b">clearbkVisited</a>(*dit);</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; }</div><div class="line"><a name="l00319"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28"> 319</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* pagNode)<span class="keyword"> const</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1SVFG.html#a8e7a945f4266e8dc7dcfff2ad6494bfb">getDefSVFGNode</a>(pagNode);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46"> 324</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46">backtraceAlongIndirectVF</a>(CPtSet&amp; pts, <span class="keyword">const</span> DPIm&amp; oldDpm)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = oldDpm.getLoc();</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = oldDpm.getCurNodeID();</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">isConstantObj</a>(obj) || <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a2bd0a705705138be2bbc7e0b6ef3bf0f">isNonPointerObj</a>(obj))</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">const</span> SVFGEdgeSet edgeSet(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>());</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVFGNode::const_iterator</a> it = edgeSet.begin(), eit = edgeSet.end(); it != eit; ++it)</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; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* indirEdge = SVFUtil::dyn_cast&lt;IndirectSVFGEdge&gt;(*it))</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; <a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp; guard = <span class="keyword">const_cast&lt;</span><a class="code" href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">PointsTo</a>&amp;<span class="keyword">&gt;</span>(indirEdge-&gt;getPointsTo());</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span>(guard.test(obj))</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\t==backtrace indirectVF svfgNode &quot;</span> &lt;&lt;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; indirEdge-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot; --&gt; &quot;</span> &lt;&lt; indirEdge-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(pts,oldDpm.getCurNodeID(),oldDpm,indirEdge);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; }</div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7a6af30f30f32d55fc910f2ae4909791"> 346</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7a6af30f30f32d55fc910f2ae4909791">backtraceAlongDirectVF</a>(CPtSet&amp; pts, <span class="keyword">const</span> DPIm&amp; oldDpm)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = oldDpm.getLoc();</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keyword">const</span> SVFGEdgeSet edgeSet(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>());</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVFGNode::const_iterator</a> it = edgeSet.begin(), eit = edgeSet.end(); it != eit; ++it)</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="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1DirectSVFGEdge.html">DirectSVFGEdge</a>* dirEdge = SVFUtil::dyn_cast&lt;DirectSVFGEdge&gt;(*it))</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\t==backtrace directVF svfgNode &quot;</span> &lt;&lt;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; dirEdge-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot; --&gt; &quot;</span> &lt;&lt; dirEdge-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcNode = dirEdge-&gt;getSrcNode();</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(pts,<a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;getLHSTopLevPtr(srcNode)-&gt;getId(),oldDpm,dirEdge);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; }</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#acd694c2092adf8c516d1aba5f798cec7"> 364</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#acd694c2092adf8c516d1aba5f798cec7">startNewPTCompFromLoadSrc</a>(CPtSet&amp; pts, <span class="keyword">const</span> DPIm&amp; oldDpm)</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* load = SVFUtil::cast&lt;LoadSVFGNode&gt;(oldDpm.getLoc());</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* loadSrc = <a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a837da5917c31e14aa51c6fa3e2640849">getPAGSrcNode</a>());</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;!##start new computation from loadSrc svfgNode &quot;</span> &lt;&lt;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; load-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; --&gt; &quot;</span> &lt;&lt; loadSrc-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50">getIntraVFGEdge</a>(loadSrc,load,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">SVFGEdge::IntraDirectVF</a>);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;Edge not found!!&quot;</span>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(pts,load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(),oldDpm,edge);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div><div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aff744e724dcf06a2b1cdd7ba2b1093f1"> 375</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aff744e724dcf06a2b1cdd7ba2b1093f1">startNewPTCompFromStoreDst</a>(CPtSet&amp; pts, <span class="keyword">const</span> DPIm&amp; oldDpm)</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::cast&lt;StoreSVFGNode&gt;(oldDpm.getLoc());</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* storeDst = <a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a8ba0e783f7fcbfa7cbd1d3a709ffa07f">getPAGDstNode</a>());</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;!##start new computation from storeDst svfgNode &quot;</span> &lt;&lt;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; store-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; --&gt; &quot;</span> &lt;&lt; storeDst-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50">getIntraVFGEdge</a>(storeDst,store,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">SVFGEdge::IntraDirectVF</a>);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;Edge not found!!&quot;</span>);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(pts,store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(),oldDpm,edge);</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"><a class="line" href="classSVF_1_1DDAVFSolver.html#adbd209b4a2327b2b068fbb56e12042f7"> 385</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#adbd209b4a2327b2b068fbb56e12042f7">backtraceToStoreSrc</a>(CPtSet&amp; pts, <span class="keyword">const</span> DPIm&amp; oldDpm)</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::cast&lt;StoreSVFGNode&gt;(oldDpm.getLoc());</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* storeSrc = <a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a837da5917c31e14aa51c6fa3e2640849">getPAGSrcNode</a>());</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;++backtrace to storeSrc from svfgNode &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(oldDpm).getLoc()-&gt;getId() &lt;&lt; <span class="stringliteral">&quot; to &quot;</span>&lt;&lt;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; store-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; to &quot;</span> &lt;&lt; storeSrc-&gt;getId() &lt;&lt;<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50">getIntraVFGEdge</a>(storeSrc,store,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">SVFGEdge::IntraDirectVF</a>);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;Edge not found!!&quot;</span>);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(pts,store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(),oldDpm,edge);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a"> 398</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(CPtSet&amp; pts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptr,<span class="keyword">const</span> DPIm&amp; oldDpm,<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; DPIm dpm(oldDpm);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; dpm.setLocVar(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>(),ptr);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">DDAStat::getClk</a>());</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a601282325e55badc15f3ba9141816af5">handleBKCondition</a>(dpm,edge)==<span class="keyword">false</span>)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a9625c4623acc4f6ccaca1ec8f04f5a54">_TotalTimeOfBKCondition</a> += <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">DDAStat::getClk</a>() - start);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t!!! infeasible path svfgNode: &quot;</span> &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() &lt;&lt; <span class="stringliteral">&quot; --| &quot;</span> &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a5ebc592d6bd7ef40aff848fb63e9e166">_NumOfInfeasiblePath</a>++);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; }</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;IndirectSVFGEdge&gt;(edge))</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a1cd1023bca18db16bc54e622c881e494">addLoadDpmAndCVar</a>(dpm,<a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(oldDpm),<a class="code" href="classSVF_1_1DDAVFSolver.html#ad42efad8e857290459689833c224e467">getLoadCVar</a>(oldDpm));</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a5ad94d2109b293d306f67741effc73aa">_NumOfDPM</a>++);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a99764ee5bc19378795fe464e9036e78b">unionDDAPts</a>(pts,<a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(dpm));</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div><div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a345e5379f53b618adef014aa6887bfe7"> 421</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a345e5379f53b618adef014aa6887bfe7">isMustAlias</a>(<span class="keyword">const</span> DPIm&amp;, <span class="keyword">const</span> DPIm&amp;)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a94bcddbc7b9ccecb3fbb693b13372785"> 426</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a94bcddbc7b9ccecb3fbb693b13372785">isStrongUpdate</a>(<span class="keyword">const</span> CPtSet&amp; dstCPSet, <span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span> (dstCPSet.count() == 1)</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keyword">typename</span> CPtSet::iterator it = dstCPSet.begin();</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">const</span> CVar&amp; var = *it;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="comment">// Strong update can be made if this points-to target is not heap, array or field-insensitive.</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1DDAVFSolver.html#a645c7d0637b49e139898016ff652e1f3">isHeapCondMemObj</a>(var,store) &amp;&amp; !<a class="code" href="classSVF_1_1DDAVFSolver.html#a9aaa5ee3dc8abc51c4b6e463e1949ee7">isArrayCondMemObj</a>(var)</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; &amp;&amp; !<a class="code" href="classSVF_1_1DDAVFSolver.html#a37a6321f50bef2939b287cc088e76170">isFieldInsenCondMemObj</a>(var) &amp;&amp; !<a class="code" href="classSVF_1_1DDAVFSolver.html#a20cadb651b41343437e135e985c4e566">isLocalCVarInRecursion</a>(var))</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; }</div><div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a20cadb651b41343437e135e985c4e566"> 443</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a20cadb651b41343437e135e985c4e566">isLocalCVarInRecursion</a>(<span class="keyword">const</span> CVar&amp; var)<span class="keyword"> const</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(var);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a2b288fce8efa1b0b1b620efec2c96eb6">getObject</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj &amp;&amp; <span class="stringliteral">&quot;object not found!!&quot;</span>);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">if</span>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a65735220b56354f7b6c7ce6753f84e4b">isStack</a>())</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a>* local = SVFUtil::dyn_cast&lt;AllocaInst&gt;(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#ae952c8b6b92c6cbef9494a83b411a60f">getRefVal</a>()))</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(local-&gt;getFunction());</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">isInCycle</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5">_callGraph</a>-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(fun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;</div><div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ace35b8247204d9806ca1a4f01bff2364"> 460</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ace35b8247204d9806ca1a4f01bff2364">propagateViaObj</a>(<span class="keyword">const</span> CVar&amp; storeObj, <span class="keyword">const</span> CVar&amp; loadObj)</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(storeObj) == <a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(loadObj))</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; }</div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#afcc074be34dd0c45418ff16b3d9d4192"> 467</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#afcc074be34dd0c45418ff16b3d9d4192">resolveFunPtr</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cbn= <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;isCallSiteRetSVFGNode(dpm.getLoc()))</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#abe123c69769f8edb29acb32aaef1449d">isIndirectCallSites</a>(cbn))</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; {</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> funPtr = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ae4bfb3e30a81cd8ece36f59a60f0f0ca">getFunPtr</a>(cbn);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; DPIm funPtrDpm(dpm);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; funPtrDpm.setLocVar(<a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(funPtr)),funPtr);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(funPtrDpm);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;isFunEntrySVFGNode(dpm.getLoc()))</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; CallInstSet csSet;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a9a4b0c6672288b9201ab254b4c49548d">getIndCallSitesInvokingCallee</a>(fun,csSet);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">for</span>(CallInstSet::const_iterator it = csSet.begin(), eit = csSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> funPtr = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ae4bfb3e30a81cd8ece36f59a60f0f0ca">getFunPtr</a>(*it);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; DPIm funPtrDpm(dpm);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; funPtrDpm.setLocVar(<a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(funPtr)),funPtr);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(funPtrDpm);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(<span class="keyword">const</span> CVar&amp; var) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">virtual</span> CPtSet <a class="code" href="classSVF_1_1DDAVFSolver.html#ab10a34efa1acb6125ea32cf7a8cf919f">processGepPts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepVFGNode.html">GepSVFGNode</a>* gep, <span class="keyword">const</span> CPtSet&amp; srcPts) = 0;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#acfe7d961caac8f0f558881a9a006b1fa">handleAddr</a>(CPtSet&amp; pts,<span class="keyword">const</span> DPIm&amp; dpm,<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrVFGNode.html">AddrSVFGNode</a>* addr) = 0;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keyword">virtual</span> CPtSet <a class="code" href="classSVF_1_1DDAVFSolver.html#a38f5a6b666b2a427d55f1217f9c5595f">getConservativeCPts</a>(<span class="keyword">const</span> DPIm&amp; dpm) = 0;</div><div class="line"><a name="l00504"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a601282325e55badc15f3ba9141816af5"> 504</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a601282325e55badc15f3ba9141816af5">handleBKCondition</a>(DPIm&amp;, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>*)</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div><div class="line"><a name="l00509"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a4f63b6b3a06633675ae99667cbaa6cdc"> 509</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a4f63b6b3a06633675ae99667cbaa6cdc">updateCallGraphAndSVFG</a>(<span class="keyword">const</span> DPIm&amp;, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>*, SVFGEdgeSet&amp;) {}</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7112ce6145be0855f8b035bb0d8a331c"> 514</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7112ce6145be0855f8b035bb0d8a331c">markbkVisited</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.insert(dpm);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; }</div><div class="line"><a name="l00518"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a9a9c3a8b5e4ffc89418073110e446f20"> 518</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a9a9c3a8b5e4ffc89418073110e446f20">isbkVisited</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; {</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.find(dpm)!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.end();</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div><div class="line"><a name="l00522"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aa7e5839c5bc6f913561de10bce61e74b"> 522</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aa7e5839c5bc6f913561de10bce61e74b">clearbkVisited</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.find(dpm)!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.end() &amp;&amp; <span class="stringliteral">&quot;dpm not found!&quot;</span>);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.erase(dpm);</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;</div><div class="line"><a name="l00531"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ae31e9281e4f1e0585fdf328b7339e1bf"> 531</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> CPtSet&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae31e9281e4f1e0585fdf328b7339e1bf">getCachedPointsTo</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; {</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#a7b35588de00e322afd742041bf735571">isTopLevelPtrStmt</a>(dpm.getLoc()))</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aac432dfa7ccfc3434d9e0e2eb65afe7f">getCachedTLPointsTo</a>(dpm);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a2a2b3783074c9f509fc265b97b979704">getCachedADPointsTo</a>(dpm);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div><div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a239a55960dfbbe73df63063070a18b56"> 538</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a239a55960dfbbe73df63063070a18b56">updateCachedPointsTo</a>(<span class="keyword">const</span> DPIm&amp; dpm, <span class="keyword">const</span> CPtSet&amp; pts)</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#a99764ee5bc19378795fe464e9036e78b">unionDDAPts</a>(dpm, pts))</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">DDAStat::getClk</a>());</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a8c5220108a65fa281959529cb1e9cc57">reCompute</a>(dpm);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#aae8366a4876154fa66298c7bf0fc47c4">_AnaTimeCyclePerQuery</a> += <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">DDAStat::getClk</a>() - start);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; }</div><div class="line"><a name="l00547"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aac432dfa7ccfc3434d9e0e2eb65afe7f"> 547</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> CPtSet&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#aac432dfa7ccfc3434d9e0e2eb65afe7f">getCachedTLPointsTo</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a2d6df8149b45d719e22fc505df94171a">dpmToTLCPtSetMap</a>[dpm];</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; }</div><div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a2a2b3783074c9f509fc265b97b979704"> 551</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> CPtSet&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#a2a2b3783074c9f509fc265b97b979704">getCachedADPointsTo</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a2565bf8dcacb22350dc1dc98ec7595f2">dpmToADCPtSetMap</a>[dpm];</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7b35588de00e322afd742041bf735571"> 558</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7b35588de00e322afd742041bf735571">isTopLevelPtrStmt</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* stmt)</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(stmt) || SVFUtil::isa&lt;MRSVFGNode&gt;(stmt))</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; }</div><div class="line"><a name="l00566"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ac4cb0b666d68d135c5e385bfc880fd67"> 566</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> DPIm <a class="code" href="classSVF_1_1DDAVFSolver.html#ac4cb0b666d68d135c5e385bfc880fd67">getDPImWithOldCond</a>(<span class="keyword">const</span> DPIm&amp; oldDpm,<span class="keyword">const</span> CVar&amp; var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* loc)</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; DPIm dpm(oldDpm);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; dpm.setLocVar(loc,<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(var));</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;StoreSVFGNode&gt;(loc))</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a1cd1023bca18db16bc54e622c881e494">addLoadDpmAndCVar</a>(dpm,<a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(oldDpm),var);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadSVFGNode&gt;(loc))</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a1cd1023bca18db16bc54e622c881e494">addLoadDpmAndCVar</a>(dpm,oldDpm,var);</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a5ad94d2109b293d306f67741effc73aa">_NumOfDPM</a>++);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">return</span> dpm;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aba0ec611a5cfd096ac0b8b11e0bd5580"> 581</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aba0ec611a5cfd096ac0b8b11e0bd5580">SVFGSCCDetection</a>()</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; {</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>==<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a502207f81ed22fa42f9e18ccba83ad4e">SVFGSCC</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>());</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; }</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a123b5006a6da7053e5e357140da3c5a3">find</a>();</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</div><div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a1583ed2eb1d4b88dc2a5b4c0b6842496"> 590</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a1583ed2eb1d4b88dc2a5b4c0b6842496">getSVFGSCCRepNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; {</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a3a5fdc9330a657240f77199f5aee602d">repNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; }</div><div class="line"><a name="l00595"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#add7daee4a0ecae479a5ab015130c8c93"> 595</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#add7daee4a0ecae479a5ab015130c8c93">isSVFGNodeInCycle</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">isInCycle</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; }</div><div class="line"><a name="l00600"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a034e3c8b2eec00aee9de439dfeeda332"> 600</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a034e3c8b2eec00aee9de439dfeeda332">edgeInSVFGSCC</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#a1583ed2eb1d4b88dc2a5b4c0b6842496">getSVFGSCCRepNode</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>()) == <a class="code" href="classSVF_1_1DDAVFSolver.html#a1583ed2eb1d4b88dc2a5b4c0b6842496">getSVFGSCCRepNode</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>()));</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00605"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#afc2b0eeb1d5d5f292690f3c949217c38"> 605</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#afc2b0eeb1d5d5f292690f3c949217c38">setCallGraph</a> (<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* cg)</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5">_callGraph</a> = cg;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; }</div><div class="line"><a name="l00610"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#abd652b2627f68d7d4f8bf3bdb20ce975"> 610</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#abd652b2627f68d7d4f8bf3bdb20ce975">setCallGraphSCC</a> (CallGraphSCC* scc)</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a> = scc;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;</div><div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a645c7d0637b49e139898016ff652e1f3"> 616</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a645c7d0637b49e139898016ff652e1f3">isHeapCondMemObj</a>(<span class="keyword">const</span> CVar&amp; var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>*)</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; {</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a2b288fce8efa1b0b1b620efec2c96eb6">getObject</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(var));</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mem &amp;&amp; <span class="stringliteral">&quot;memory object is null??&quot;</span>);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">return</span> mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#af8f4f85cfbcb09615fb04ca63d634138">isHeap</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;</div><div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a9aaa5ee3dc8abc51c4b6e463e1949ee7"> 623</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a9aaa5ee3dc8abc51c4b6e463e1949ee7">isArrayCondMemObj</a>(<span class="keyword">const</span> CVar&amp; var)<span class="keyword"> const</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a2b288fce8efa1b0b1b620efec2c96eb6">getObject</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(var));</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mem &amp;&amp; <span class="stringliteral">&quot;memory object is null??&quot;</span>);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keywordflow">return</span> mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a5796d7fec7f0fc2260e8a36493409eab">isArray</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"><a class="line" href="classSVF_1_1DDAVFSolver.html#a37a6321f50bef2939b287cc088e76170"> 629</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a37a6321f50bef2939b287cc088e76170">isFieldInsenCondMemObj</a>(<span class="keyword">const</span> CVar&amp; var)<span class="keyword"> const</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a459e2ef671d002ef6edf25cf0bfb7924">getBaseObj</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(var));</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">return</span> mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a9d50a00ff608df21f50b3b2823128901">isFieldInsensitive</a>();</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ad849ae4509e88832f784c748468ab959"> 638</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> LocToDPMVecMap&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#ad849ae4509e88832f784c748468ab959">getLocToDPMVecMap</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div><div class="line"><a name="l00642"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a6c32a1cdcdbea0151c8cf17ffe598f29"> 642</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> DPTItemSet&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#a6c32a1cdcdbea0151c8cf17ffe598f29">getDpmSetAtLoc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* loc)</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>[loc-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()];</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; }</div><div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af7be3fa6c73dde97d6f9fd0395c9aee0"> 646</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#af7be3fa6c73dde97d6f9fd0395c9aee0">addDpmToLoc</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>[dpm.getLoc()-&gt;getId()].insert(dpm);</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"><a class="line" href="classSVF_1_1DDAVFSolver.html#a00ae738a76564b7b334faae567674e34"> 650</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a00ae738a76564b7b334faae567674e34">removeDpmFromLoc</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dpm == <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>[dpm.getLoc()].back() &amp;&amp; <span class="stringliteral">&quot;dpm not match with the end of vector&quot;</span>);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>[dpm.getLoc()-&gt;getId()].erase(dpm);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a1cd1023bca18db16bc54e622c881e494"> 659</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a1cd1023bca18db16bc54e622c881e494">addLoadDpmAndCVar</a>(<span class="keyword">const</span> DPIm&amp; dpm,<span class="keyword">const</span> DPIm&amp; loadDpm,<span class="keyword">const</span> CVar&amp; loadVar)</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a7579491400f1781356cb7d1913537547">addLoadCVar</a>(dpm,loadVar);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a4725013a7617645e1418ed670d4837b5">addLoadDpm</a>(dpm,loadDpm);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a4725013a7617645e1418ed670d4837b5"> 665</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a4725013a7617645e1418ed670d4837b5">addLoadDpm</a>(<span class="keyword">const</span> DPIm&amp; dpm,<span class="keyword">const</span> DPIm&amp; loadDpm)</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keyword">typename</span> DPMToDPMMap::iterator it = <a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.find(dpm);</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.end())</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; it-&gt;second = loadDpm;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.insert(std::make_pair(dpm,loadDpm));</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div><div class="line"><a name="l00673"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9"> 673</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> DPIm&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(<span class="keyword">const</span> DPIm&amp; dpm)<span class="keyword"> const</span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keyword">typename</span> DPMToDPMMap::const_iterator it = <a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.find(dpm);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.end() &amp;&amp; <span class="stringliteral">&quot;not found??&quot;</span>);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</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"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7579491400f1781356cb7d1913537547"> 679</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7579491400f1781356cb7d1913537547">addLoadCVar</a>(<span class="keyword">const</span> DPIm&amp; dpm, <span class="keyword">const</span> CVar&amp; loadVar)</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="keyword">typename</span> DPMToCVarMap::iterator it = <a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.find(dpm);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.end())</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; it-&gt;second = loadVar;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.insert(std::make_pair(dpm,loadVar));</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; }</div><div class="line"><a name="l00687"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ad42efad8e857290459689833c224e467"> 687</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CVar&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#ad42efad8e857290459689833c224e467">getLoadCVar</a>(<span class="keyword">const</span> DPIm&amp; dpm)<span class="keyword"> const</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keyword">typename</span> DPMToCVarMap::const_iterator it = <a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.find(dpm);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.end() &amp;&amp; <span class="stringliteral">&quot;not found??&quot;</span>);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; }</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#ac39860015b45b9af6351d0343f8983bb">getAndersenAnalysis</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a>;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a9005f1f0e4a808838276ff44b300f96d">handleOutOfBudgetDpm</a>(<span class="keyword">const</span> DPIm&amp; dpm) {}</div><div class="line"><a name="l00703"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a3fb52286c5324ea3d58e22c630b307e3"> 703</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a3fb52286c5324ea3d58e22c630b307e3">testOutOfBudget</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; {</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">if</span>(++<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a674248754300d58fcef8eaf09436249e">_NumOfStep</a> &gt; DPIm::getMaxBudget())</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a0b1f774883adc7d535f8363bf3c8b1e8">isOutOfBudgetDpm</a>(dpm) || <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; }</div><div class="line"><a name="l00710"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7994236bff84ba8244592fdf5e546734"> 710</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7994236bff84ba8244592fdf5e546734">isOutOfBudgetQuery</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>;</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"><a class="line" href="classSVF_1_1DDAVFSolver.html#ae1e77060ac22d465b5cc9430962e280c"> 714</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae1e77060ac22d465b5cc9430962e280c">addOutOfBudgetDpm</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; {</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aad57a954473f3099188cf8c8fba87880">outOfBudgetDpms</a>.insert(dpm);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; }</div><div class="line"><a name="l00718"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a0b1f774883adc7d535f8363bf3c8b1e8"> 718</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a0b1f774883adc7d535f8363bf3c8b1e8">isOutOfBudgetDpm</a>(<span class="keyword">const</span> DPIm&amp; dpm)<span class="keyword"> const</span></div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aad57a954473f3099188cf8c8fba87880">outOfBudgetDpms</a>.find(dpm) != <a class="code" href="classSVF_1_1DDAVFSolver.html#aad57a954473f3099188cf8c8fba87880">outOfBudgetDpms</a>.end();</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; }</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#adcb641eec4f620effdb3f61a46429f40"> 725</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1DDAStat.html">DDAStat</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#adcb641eec4f620effdb3f61a46429f40">setDDAStat</a>(<a class="code" href="classSVF_1_1DDAStat.html">DDAStat</a>* s)</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; {</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a> = s;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; }</div><div class="line"><a name="l00731"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aeb6b56cf3d140d251b0524eb5cbd6dce"> 731</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aeb6b56cf3d140d251b0524eb5cbd6dce">addSUStat</a>(<span class="keyword">const</span> DPIm&amp; dpm, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node)</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; {</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#af66895278f0ecbc882f9e4f43ef9c8a8">storeToDPMs</a>[node].insert(dpm).second)</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; {</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a5c007645d73bfc5cfefef672f3c1dcf1">_NumOfStrongUpdates</a>++;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#ad53ad7a958c05b45624d2859a6a9e647">_StrongUpdateStores</a>.set(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; }</div><div class="line"><a name="l00740"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7d0775354df32f293e98578ed071d33c"> 740</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7d0775354df32f293e98578ed071d33c">rmSUStat</a>(<span class="keyword">const</span> DPIm&amp; dpm, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node)</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; {</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; DPTItemSet&amp; dpmSet = <a class="code" href="classSVF_1_1DDAVFSolver.html#af66895278f0ecbc882f9e4f43ef9c8a8">storeToDPMs</a>[node];</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span> (dpmSet.erase(dpm))</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a5c007645d73bfc5cfefef672f3c1dcf1">_NumOfStrongUpdates</a>--;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">if</span>(dpmSet.empty())</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#ad53ad7a958c05b45624d2859a6a9e647">_StrongUpdateStores</a>.reset(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; }</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; }</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6"> 751</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>; </div><div class="line"><a name="l00752"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729"> 752</a></span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>; </div><div class="line"><a name="l00753"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6"> 753</a></span>&#160; <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a>; </div><div class="line"><a name="l00754"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf"> 754</a></span>&#160; <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a>; </div><div class="line"><a name="l00755"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ae0e78fafb7eec0fbc1a02d24547335e9"> 755</a></span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae0e78fafb7eec0fbc1a02d24547335e9">candidateQueries</a>; </div><div class="line"><a name="l00756"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5"> 756</a></span>&#160; <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5">_callGraph</a>; </div><div class="line"><a name="l00757"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a"> 757</a></span>&#160; CallGraphSCC* <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a>; </div><div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644"> 758</a></span>&#160; SVFGSCC* <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>; </div><div class="line"><a name="l00759"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c"> 759</a></span>&#160; DPTItemSet <a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>; </div><div class="line"><a name="l00760"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a2d6df8149b45d719e22fc505df94171a"> 760</a></span>&#160; DPImToCPtSetMap <a class="code" href="classSVF_1_1DDAVFSolver.html#a2d6df8149b45d719e22fc505df94171a">dpmToTLCPtSetMap</a>; </div><div class="line"><a name="l00761"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a2565bf8dcacb22350dc1dc98ec7595f2"> 761</a></span>&#160; DPImToCPtSetMap <a class="code" href="classSVF_1_1DDAVFSolver.html#a2565bf8dcacb22350dc1dc98ec7595f2">dpmToADCPtSetMap</a>; </div><div class="line"><a name="l00762"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7"> 762</a></span>&#160; LocToDPMVecMap <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>; </div><div class="line"><a name="l00763"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692"> 763</a></span>&#160; DPMToDPMMap <a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>; </div><div class="line"><a name="l00764"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4"> 764</a></span>&#160; DPMToCVarMap <a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>; </div><div class="line"><a name="l00765"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aad57a954473f3099188cf8c8fba87880"> 765</a></span>&#160; DPTItemSet <a class="code" href="classSVF_1_1DDAVFSolver.html#aad57a954473f3099188cf8c8fba87880">outOfBudgetDpms</a>; </div><div class="line"><a name="l00766"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af66895278f0ecbc882f9e4f43ef9c8a8"> 766</a></span>&#160; StoreToPMSetMap <a class="code" href="classSVF_1_1DDAVFSolver.html#af66895278f0ecbc882f9e4f43ef9c8a8">storeToDPMs</a>; </div><div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2"> 767</a></span>&#160; <a class="code" href="classSVF_1_1DDAStat.html">DDAStat</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>; </div><div class="line"><a name="l00768"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a0d563fe8b016b27a58f5b054fec9c38a"> 768</a></span>&#160; <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a0d563fe8b016b27a58f5b054fec9c38a">svfgBuilder</a>; </div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;};</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* VALUEFLOWDDA_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
69
+ <a href="DDAVFSolver_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * DDAVFSolver.h</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Created on: Jul 3, 2014</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * Author: Yulei Sui</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="preprocessor">#ifndef VALUEFLOWDDA_H_</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="preprocessor">#define VALUEFLOWDDA_H_</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="DDAStat_8h.html">DDA/DDAStat.h</a>&quot;</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SVFGBuilder_8h.html">MSSA/SVFGBuilder.h</a>&quot;</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Andersen_8h.html">WPA/Andersen.h</a>&quot;</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="SCC_8h.html">Util/SCC.h</a>&quot;</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;algorithm&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">class</span> CVar, <span class="keyword">class</span> CPtSet, <span class="keyword">class</span> DPIm&gt;</div><div class="line"><a name="l00024"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html"> 24</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1DDAVFSolver.html">DDAVFSolver</a></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af83f88f2ae2456f2691e8822d56b1598"> 26</a></span>&#160; <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classSVF_1_1DDAStat.html">DDAStat</a>;</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00028"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a502207f81ed22fa42f9e18ccba83ad4e"> 28</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SCCDetection.html">SCCDetection&lt;SVFG*&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a502207f81ed22fa42f9e18ccba83ad4e">SVFGSCC</a>;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af6e05e87ba8d6b6ae65807803b1b0221"> 29</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1SCCDetection.html">SCCDetection&lt;PTACallGraph*&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#af6e05e87ba8d6b6ae65807803b1b0221">CallGraphSCC</a>;</div><div class="line"><a name="l00030"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ac227096ad71dfda8bc48c139fccb3af2"> 30</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PTACallGraphEdge.html#aca11d1b778309a72e9d345bd02324459">PTACallGraphEdge::CallInstSet</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#ac227096ad71dfda8bc48c139fccb3af2">CallInstSet</a>;</div><div class="line"><a name="l00031"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7248a3fe0078a2b13786765b5f014ba6"> 31</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1PAG.html#af34fb84e6a39ff6b23aa5e9381c7c80c">PAG::CallSiteSet</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7248a3fe0078a2b13786765b5f014ba6">CallSiteSet</a>;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a05d6b074b04aad7dc1f3cbe0ca587467"> 32</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;DPIm&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a05d6b074b04aad7dc1f3cbe0ca587467">DPTItemSet</a>;</div><div class="line"><a name="l00033"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a8b5a34679fb1362425c88d6e74b6c019"> 33</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;DPIm, CPtSet&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a8b5a34679fb1362425c88d6e74b6c019">DPImToCPtSetMap</a>;</div><div class="line"><a name="l00034"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af0538abf12c01d31a0296553e2f7c92d"> 34</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;DPIm,CVar&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#af0538abf12c01d31a0296553e2f7c92d">DPMToCVarMap</a>;</div><div class="line"><a name="l00035"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a2ccbcfa949a1796094b5d9499177fc2b"> 35</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;DPIm,DPIm&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a2ccbcfa949a1796094b5d9499177fc2b">DPMToDPMMap</a>;</div><div class="line"><a name="l00036"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aab76f98ae4f0c1f62f101ac5c5fdbf83"> 36</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;NodeID, DPTItemSet&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#aab76f98ae4f0c1f62f101ac5c5fdbf83">LocToDPMVecMap</a>;</div><div class="line"><a name="l00037"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aef98e8e9144a69bb7481fef5d2dcb303"> 37</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#a4f21e91ff8eaea5207afe5c60dbd78d7">OrderedSet&lt;const SVFGEdge* &gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#aef98e8e9144a69bb7481fef5d2dcb303">ConstSVFGEdgeSet</a>;</div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a6489319b33a807f7caba2d34017a3e1b"> 38</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="classSVF_1_1VFGEdge.html#a557334ef75bb5479b045f68c27b38701">SVFGEdge::SVFGEdgeSetTy</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a6489319b33a807f7caba2d34017a3e1b">SVFGEdgeSet</a>;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#accaacd2dd680f92ff83cfe75eef6ffab"> 39</a></span>&#160; <span class="keyword">typedef</span> <a class="code" href="namespaceSVF.html#aedf0d6718ca176e0b9e17ab4b30729c6">OrderedMap&lt;const SVFGNode*, DPTItemSet&gt;</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#accaacd2dd680f92ff83cfe75eef6ffab">StoreToPMSetMap</a>;</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7ee96b513074c283d23434590ce15e7d"> 42</a></span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a7ee96b513074c283d23434590ce15e7d">DDAVFSolver</a>(): <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>(false),<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>(nullptr),<a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a>(nullptr),<a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a>(nullptr),<a class="code" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5">_callGraph</a>(nullptr), <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a>(nullptr), <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>(nullptr), <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>(nullptr)</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; {</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; }</div><div class="line"><a name="l00046"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a211f2f0c572d5085d22c2cb40341b606"> 46</a></span>&#160; <span class="keyword">virtual</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a211f2f0c572d5085d22c2cb40341b606">~DDAVFSolver</a>()</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; {</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a> != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="comment">// AndersenWaveDiff::releaseAndersenWaveDiff();</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a> != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; <span class="comment">// DDASVFGBuilder::releaseDDASVFG();</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; }</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a> != <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; <span class="keyword">delete</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>;</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5">_callGraph</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a> = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; }</div><div class="line"><a name="l00068"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a73bbf4f763316e8d5db62d163da35a18"> 68</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#a73bbf4f763316e8d5db62d163da35a18">getCandidateQueries</a>()</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae0e78fafb7eec0fbc1a02d24547335e9">candidateQueries</a>;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; }</div><div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ad7d92fad8606d5512786a7b7a08930e2"> 73</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> DPIm <a class="code" href="classSVF_1_1DDAVFSolver.html#ad7d92fad8606d5512786a7b7a08930e2">getDPIm</a>(<span class="keyword">const</span> CVar&amp; var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* loc)<span class="keyword"> const</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; DPIm dpm(var,loc);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; <span class="keywordflow">return</span> dpm;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; }</div><div class="line"><a name="l00079"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a99764ee5bc19378795fe464e9036e78b"> 79</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a99764ee5bc19378795fe464e9036e78b">unionDDAPts</a>(CPtSet&amp; pts, <span class="keyword">const</span> CPtSet&amp; targetPts)</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">return</span> (pts |= targetPts);</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; }</div><div class="line"><a name="l00084"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ae7949e141978474f3b6cb510bacafa37"> 84</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae7949e141978474f3b6cb510bacafa37">unionDDAPts</a>(DPIm dpm, <span class="keyword">const</span> CPtSet&amp; targetPts)</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; {</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; CPtSet&amp; pts = <a class="code" href="classSVF_1_1DDAVFSolver.html#a7b35588de00e322afd742041bf735571">isTopLevelPtrStmt</a>(dpm.getLoc()) ? <a class="code" href="classSVF_1_1DDAVFSolver.html#a2d6df8149b45d719e22fc505df94171a">dpmToTLCPtSetMap</a>[dpm] : <a class="code" href="classSVF_1_1DDAVFSolver.html#a2565bf8dcacb22350dc1dc98ec7595f2">dpmToADCPtSetMap</a>[dpm];</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">return</span> pts |= targetPts;</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; }</div><div class="line"><a name="l00090"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a5a8632a957fce63f186dd8b657566dd2"> 90</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a5a8632a957fce63f186dd8b657566dd2">addDDAPts</a>(CPtSet&amp; pts, <span class="keyword">const</span> CVar&amp; var)</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; {</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; pts.set(var);</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; }</div><div class="line"><a name="l00095"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9"> 95</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a>;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; }</div><div class="line"><a name="l00100"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a1fdd7c0efa8f0506edfba2da8f2b3cc0"> 100</a></span>&#160; <span class="keyword">inline</span> SVFGSCC* <a class="code" href="classSVF_1_1DDAVFSolver.html#a1fdd7c0efa8f0506edfba2da8f2b3cc0">getSVFGSCC</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>;</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="comment">// Dump cptsSet</span></div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aa4dc73ea65f736282a413a9d286141e5"> 105</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aa4dc73ea65f736282a413a9d286141e5">dumpCPtSet</a>(<span class="keyword">const</span> CPtSet&amp; cpts)<span class="keyword"> const</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;{&quot;</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> CPtSet::iterator it = cpts.begin(), eit = cpts.end(); it!=eit; ++it)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; (*it) &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; }</div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce"> 115</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">const</span> CPtSet&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; {</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a9a9c3a8b5e4ffc89418073110e446f20">isbkVisited</a>(dpm))</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keyword">const</span> CPtSet&amp; cpts = <a class="code" href="classSVF_1_1DDAVFSolver.html#ae31e9281e4f1e0585fdf328b7339e1bf">getCachedPointsTo</a>(dpm);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t already backward visited dpm: &quot;</span>);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, dpm.dump());</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t return points-to: &quot;</span>);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="classSVF_1_1DDAVFSolver.html#aa4dc73ea65f736282a413a9d286141e5">dumpCPtSet</a>(cpts));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="keywordflow">return</span> cpts;</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; }</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t backward visit dpm: &quot;</span>);</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, dpm.dump());</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a7112ce6145be0855f8b035bb0d8a331c">markbkVisited</a>(dpm);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af7be3fa6c73dde97d6f9fd0395c9aee0">addDpmToLoc</a>(dpm);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fb52286c5324ea3d58e22c630b307e3">testOutOfBudget</a>(dpm) == <span class="keyword">false</span>)</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; {</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; CPtSet pts;</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a99f631cf1bc438e3f08f7f935e98e38d">handleSingleStatement</a>(dpm, pts);</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a239a55960dfbbe73df63063070a18b56">updateCachedPointsTo</a>(dpm, pts);</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="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae31e9281e4f1e0585fdf328b7339e1bf">getCachedPointsTo</a>(dpm);</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a99f631cf1bc438e3f08f7f935e98e38d"> 147</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a99f631cf1bc438e3f08f7f935e98e38d">handleSingleStatement</a>(<span class="keyword">const</span> DPIm&amp; dpm, CPtSet&amp; pts)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; {</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#afcc074be34dd0c45418ff16b3d9d4192">resolveFunPtr</a>(dpm);</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = dpm.getLoc();</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;AddrSVFGNode&gt;(node))</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; {</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#acfe7d961caac8f0f558881a9a006b1fa">handleAddr</a>(pts,dpm,SVFUtil::cast&lt;AddrSVFGNode&gt;(node));</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; }</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;CopySVFGNode&gt;(node) || SVFUtil::isa&lt;PHISVFGNode&gt;(node)</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; || SVFUtil::isa&lt;ActualParmSVFGNode&gt;(node) || SVFUtil::isa&lt;FormalParmSVFGNode&gt;(node)</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; || SVFUtil::isa&lt;ActualRetSVFGNode&gt;(node) || SVFUtil::isa&lt;FormalRetSVFGNode&gt;(node)</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; || SVFUtil::isa&lt;NullPtrSVFGNode&gt;(node))</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a7a6af30f30f32d55fc910f2ae4909791">backtraceAlongDirectVF</a>(pts,dpm);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;GepSVFGNode&gt;(node))</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; CPtSet gepPts;</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a7a6af30f30f32d55fc910f2ae4909791">backtraceAlongDirectVF</a>(gepPts,dpm);</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a99764ee5bc19378795fe464e9036e78b">unionDDAPts</a>(pts, <a class="code" href="classSVF_1_1DDAVFSolver.html#ab10a34efa1acb6125ea32cf7a8cf919f">processGepPts</a>(SVFUtil::cast&lt;GepSVFGNode&gt;(node),gepPts));</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; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadSVFGNode&gt;(node))</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; CPtSet loadpts;</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#acd694c2092adf8c516d1aba5f798cec7">startNewPTCompFromLoadSrc</a>(loadpts,dpm);</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> CPtSet::iterator it = loadpts.begin(), eit = loadpts.end(); it!=eit; ++it)</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46">backtraceAlongIndirectVF</a>(pts,<a class="code" href="classSVF_1_1DDAVFSolver.html#ac4cb0b666d68d135c5e385bfc880fd67">getDPImWithOldCond</a>(dpm,*it,node));</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; }</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;StoreSVFGNode&gt;(node))</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a345e5379f53b618adef014aa6887bfe7">isMustAlias</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(dpm),dpm))</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;+++must alias for load and store:&quot;</span>);</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(dpm).dump());</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, dpm.dump());</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;+++\n&quot;</span>);</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a0aec64ca944ea4f914a6fa799b7a8b38">_NumOfMustAliases</a>++);</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#adbd209b4a2327b2b068fbb56e12042f7">backtraceToStoreSrc</a>(pts,dpm);</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; }</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; {</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160; CPtSet storepts;</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aff744e724dcf06a2b1cdd7ba2b1093f1">startNewPTCompFromStoreDst</a>(storepts,dpm);</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> CPtSet::iterator it = storepts.begin(), eit = storepts.end(); it!=eit; ++it)</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; {</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ace35b8247204d9806ca1a4f01bff2364">propagateViaObj</a>(*it,<a class="code" href="classSVF_1_1DDAVFSolver.html#ad42efad8e857290459689833c224e467">getLoadCVar</a>(dpm)))</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#adbd209b4a2327b2b068fbb56e12042f7">backtraceToStoreSrc</a>(pts,<a class="code" href="classSVF_1_1DDAVFSolver.html#ac4cb0b666d68d135c5e385bfc880fd67">getDPImWithOldCond</a>(dpm,*it,node));</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a94bcddbc7b9ccecb3fbb693b13372785">isStrongUpdate</a>(storepts,SVFUtil::cast&lt;StoreSVFGNode&gt;(node)))</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; {</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;backward strong update for obj &quot;</span> &lt;&lt; dpm.getCurNodeID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#aeb6b56cf3d140d251b0524eb5cbd6dce">addSUStat</a>(dpm,node);)</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; }</div><div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a7d0775354df32f293e98578ed071d33c">rmSUStat</a>(dpm,node);)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46">backtraceAlongIndirectVF</a>(pts,<a class="code" href="classSVF_1_1DDAVFSolver.html#ac4cb0b666d68d135c5e385bfc880fd67">getDPImWithOldCond</a>(dpm,*it,node));</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; }</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; {</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46">backtraceAlongIndirectVF</a>(pts,dpm);</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; }</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; }</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; }</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa&lt;MRSVFGNode&gt;(node))</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>&#160; {</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46">backtraceAlongIndirectVF</a>(pts,dpm);</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; }</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> &amp;&amp; <span class="stringliteral">&quot;unexpected kind of SVFG nodes&quot;</span>);</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; }</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a8c5220108a65fa281959529cb1e9cc57"> 227</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a8c5220108a65fa281959529cb1e9cc57">reCompute</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; {</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; SVFGEdgeSet newIndirectEdges;</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a20e9df3a6397153dc3741ad5b370dc94">isFunPtr</a>(dpm.getCurNodeID()))</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; {</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; <span class="keyword">const</span> CallSiteSet&amp; csSet = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a63a8131c082052fc4a8c61430ce196af">getIndCallSites</a>(dpm.getCurNodeID());</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keywordflow">for</span>(CallSiteSet::const_iterator it = csSet.begin(), eit = csSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a4f63b6b3a06633675ae99667cbaa6cdc">updateCallGraphAndSVFG</a>(dpm, (*it),newIndirectEdges);</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; }</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="keywordflow">if</span>(!newIndirectEdges.empty())</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a123b5006a6da7053e5e357140da3c5a3">find</a>();</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ace037388135f272365cee2e87844bfba">reComputeForEdges</a>(dpm,newIndirectEdges,<span class="keyword">true</span>);</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; SVFGEdgeSet edgeSet(dpm.getLoc()-&gt;getOutEdges());</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ace037388135f272365cee2e87844bfba">reComputeForEdges</a>(dpm,edgeSet,<span class="keyword">false</span>);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ace037388135f272365cee2e87844bfba"> 248</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ace037388135f272365cee2e87844bfba">reComputeForEdges</a>(<span class="keyword">const</span> DPIm&amp; dpm, <span class="keyword">const</span> SVFGEdgeSet&amp; edgeSet, <span class="keywordtype">bool</span> indirectCall = <span class="keyword">false</span>)</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVFGNode::const_iterator</a> it = edgeSet.begin(), eit = edgeSet.end(); it != eit; ++it)</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="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = *it;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* dst = edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>();</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="keyword">typename</span> LocToDPMVecMap::const_iterator locIt = <a class="code" href="classSVF_1_1DDAVFSolver.html#ad849ae4509e88832f784c748468ab959">getLocToDPMVecMap</a>().find(dst-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <span class="keywordflow">if</span> (locIt == <a class="code" href="classSVF_1_1DDAVFSolver.html#ad849ae4509e88832f784c748468ab959">getLocToDPMVecMap</a>().end())</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="keywordflow">continue</span>;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; DPTItemSet dpmSet(locIt-&gt;second.begin(), locIt-&gt;second.end());</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> DPTItemSet::const_iterator it = dpmSet.begin(),eit = dpmSet.end(); it!=eit; ++it)</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="keyword">const</span> DPIm&amp; dstDpm = *it;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="keywordflow">if</span>(!indirectCall &amp;&amp; SVFUtil::isa&lt;IndirectSVFGEdge&gt;(edge) &amp;&amp; !SVFUtil::isa&lt;LoadSVFGNode&gt;(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()))</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; {</div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <span class="keywordflow">if</span>(dstDpm.getCurNodeID() == dpm.getCurNodeID())</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; {</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t Recompute, forward from :&quot;</span>);</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, dpm.dump());</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#aa9daed44e9d2ca2722ea9ab9d4517a21">_NumOfStepInCycle</a>++);</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa7e5839c5bc6f913561de10bce61e74b">clearbkVisited</a>(dstDpm);</div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(dstDpm);</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; }</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="keywordflow">else</span></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="keywordflow">if</span>(indirectCall)</div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t Recompute for indirect call from :&quot;</span>);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>,<a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t Recompute forward from :&quot;</span>);</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, dpm.dump());</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#aa9daed44e9d2ca2722ea9ab9d4517a21">_NumOfStepInCycle</a>++);</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa7e5839c5bc6f913561de10bce61e74b">clearbkVisited</a>(dstDpm);</div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(dstDpm);</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; }</div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; }</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; }</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160;</div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af2a0732401e5904ebf81878d3ffe0675"> 289</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#af2a0732401e5904ebf81878d3ffe0675">buildSVFG</a>(<a class="code" href="classSVF_1_1PAG.html">PAG</a>* pag)</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; {</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a> = <a class="code" href="classSVF_1_1AndersenWaveDiff.html#a74134978db1c0d9c71122bc63f4b73c1">AndersenWaveDiff::createAndersenWaveDiff</a>(pag);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a> = <a class="code" href="classSVF_1_1DDAVFSolver.html#a0d563fe8b016b27a58f5b054fec9c38a">svfgBuilder</a>.<a class="code" href="classSVF_1_1SVFGBuilder.html#a3b162da8dfb123cada7a13ce0c154a46">buildPTROnlySVFGWithoutOPT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a>);</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a> = <a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a>-&gt;<a class="code" href="classSVF_1_1VFG.html#a560e0d31a6a9ba4c2b0ac540c233fef1">getPAG</a>();</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; }</div><div class="line"><a name="l00296"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#afe518d3d7f8051de5b9860f2460aa1b7"> 296</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#afe518d3d7f8051de5b9860f2460aa1b7">resetQuery</a>()</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; {</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>)</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ab60c701f1881d88aa4440991fb972638">OOBResetVisited</a>();</div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>.clear();</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.clear();</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.clear();</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a674248754300d58fcef8eaf09436249e">_NumOfStep</a> = 0;</div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; }</div><div class="line"><a name="l00308"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ab60c701f1881d88aa4440991fb972638"> 308</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ab60c701f1881d88aa4440991fb972638">OOBResetVisited</a>()</div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; {</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> LocToDPMVecMap::const_iterator it = <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>.begin(),eit = <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>.end(); it!=eit; ++it)</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; {</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; DPTItemSet dpmSet(it-&gt;second.begin(), it-&gt;second.end());</div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">typename</span> DPTItemSet::const_iterator dit = dpmSet.begin(),deit=dpmSet.end(); dit!=deit; ++dit)</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a0b1f774883adc7d535f8363bf3c8b1e8">isOutOfBudgetDpm</a>(*dit)==<span class="keyword">false</span>)</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa7e5839c5bc6f913561de10bce61e74b">clearbkVisited</a>(*dit);</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; }</div><div class="line"><a name="l00319"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28"> 319</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1PAGNode.html">PAGNode</a>* pagNode)<span class="keyword"> const</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1SVFG.html#a8e7a945f4266e8dc7dcfff2ad6494bfb">getDefSVFGNode</a>(pagNode);</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; }</div><div class="line"><a name="l00324"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46"> 324</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a040bc02742836b0a6d46ce3c3e89fa46">backtraceAlongIndirectVF</a>(CPtSet&amp; pts, <span class="keyword">const</span> DPIm&amp; oldDpm)</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; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = oldDpm.getLoc();</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> obj = oldDpm.getCurNodeID();</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a5382518f3bc9c3bbb3148b9499ae5ae2">isConstantObj</a>(obj) || <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a2bd0a705705138be2bbc7e0b6ef3bf0f">isNonPointerObj</a>(obj))</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; <span class="keyword">const</span> SVFGEdgeSet edgeSet(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>());</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVFGNode::const_iterator</a> it = edgeSet.begin(), eit = edgeSet.end(); it != eit; ++it)</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; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1IndirectSVFGEdge.html">IndirectSVFGEdge</a>* indirEdge = SVFUtil::dyn_cast&lt;IndirectSVFGEdge&gt;(*it))</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="keyword">const</span> <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a>&amp; guard = indirEdge-&gt;getPointsTo();</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">if</span>(guard.test(obj))</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\t==backtrace indirectVF svfgNode &quot;</span> &lt;&lt;</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; indirEdge-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot; --&gt; &quot;</span> &lt;&lt; indirEdge-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(pts,oldDpm.getCurNodeID(),oldDpm,indirEdge);</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; }</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; }</div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; }</div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7a6af30f30f32d55fc910f2ae4909791"> 346</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7a6af30f30f32d55fc910f2ae4909791">backtraceAlongDirectVF</a>(CPtSet&amp; pts, <span class="keyword">const</span> DPIm&amp; oldDpm)</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; {</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node = oldDpm.getLoc();</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="keyword">const</span> SVFGEdgeSet edgeSet(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#afc8b5f86d7795b6a0dfc0687d942d79b">getInEdges</a>());</div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="classSVF_1_1VFGNode.html#a3c558955f60c237c558d8faafed781e8">SVFGNode::const_iterator</a> it = edgeSet.begin(), eit = edgeSet.end(); it != eit; ++it)</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="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1DirectSVFGEdge.html">DirectSVFGEdge</a>* dirEdge = SVFUtil::dyn_cast&lt;DirectSVFGEdge&gt;(*it))</div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; {</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t\t==backtrace directVF svfgNode &quot;</span> &lt;&lt;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; dirEdge-&gt;getDstID() &lt;&lt; <span class="stringliteral">&quot; --&gt; &quot;</span> &lt;&lt; dirEdge-&gt;getSrcID() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* srcNode = dirEdge-&gt;getSrcNode();</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(pts,<a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;getLHSTopLevPtr(srcNode)-&gt;getId(),oldDpm,dirEdge);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; }</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; }</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#acd694c2092adf8c516d1aba5f798cec7"> 364</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#acd694c2092adf8c516d1aba5f798cec7">startNewPTCompFromLoadSrc</a>(CPtSet&amp; pts, <span class="keyword">const</span> DPIm&amp; oldDpm)</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1LoadVFGNode.html">LoadSVFGNode</a>* load = SVFUtil::cast&lt;LoadSVFGNode&gt;(oldDpm.getLoc());</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* loadSrc = <a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a837da5917c31e14aa51c6fa3e2640849">getPAGSrcNode</a>());</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;!##start new computation from loadSrc svfgNode &quot;</span> &lt;&lt;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; load-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; --&gt; &quot;</span> &lt;&lt; loadSrc-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50">getIntraVFGEdge</a>(loadSrc,load,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">SVFGEdge::IntraDirectVF</a>);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;Edge not found!!&quot;</span>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(pts,load-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(),oldDpm,edge);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; }</div><div class="line"><a name="l00375"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aff744e724dcf06a2b1cdd7ba2b1093f1"> 375</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aff744e724dcf06a2b1cdd7ba2b1093f1">startNewPTCompFromStoreDst</a>(CPtSet&amp; pts, <span class="keyword">const</span> DPIm&amp; oldDpm)</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; {</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::cast&lt;StoreSVFGNode&gt;(oldDpm.getLoc());</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* storeDst = <a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a8ba0e783f7fcbfa7cbd1d3a709ffa07f">getPAGDstNode</a>());</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;!##start new computation from storeDst svfgNode &quot;</span> &lt;&lt;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; store-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; --&gt; &quot;</span> &lt;&lt; storeDst-&gt;getId() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50">getIntraVFGEdge</a>(storeDst,store,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">SVFGEdge::IntraDirectVF</a>);</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;Edge not found!!&quot;</span>);</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(pts,store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a04986961ad507be9fcf141ab51787da8">getPAGDstNodeID</a>(),oldDpm,edge);</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"><a class="line" href="classSVF_1_1DDAVFSolver.html#adbd209b4a2327b2b068fbb56e12042f7"> 385</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#adbd209b4a2327b2b068fbb56e12042f7">backtraceToStoreSrc</a>(CPtSet&amp; pts, <span class="keyword">const</span> DPIm&amp; oldDpm)</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store = SVFUtil::cast&lt;StoreSVFGNode&gt;(oldDpm.getLoc());</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* storeSrc = <a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a837da5917c31e14aa51c6fa3e2640849">getPAGSrcNode</a>());</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;++backtrace to storeSrc from svfgNode &quot;</span> &lt;&lt; <a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(oldDpm).getLoc()-&gt;getId() &lt;&lt; <span class="stringliteral">&quot; to &quot;</span>&lt;&lt;</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; store-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>() &lt;&lt; <span class="stringliteral">&quot; to &quot;</span> &lt;&lt; storeSrc-&gt;getId() &lt;&lt;<span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge = <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1VFG.html#ae1348fd6d196ee8a6bd8d98022464d50">getIntraVFGEdge</a>(storeSrc,store,<a class="code" href="classSVF_1_1VFGEdge.html#a156ae6a8b3a033f505c18c6b162e7cf5a08201e6cbff4817e44568747a966b71d">SVFGEdge::IntraDirectVF</a>);</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(edge &amp;&amp; <span class="stringliteral">&quot;Edge not found!!&quot;</span>);</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(pts,store-&gt;<a class="code" href="classSVF_1_1StmtVFGNode.html#a791a01f5d3528f8a8bf19369b5c61c37">getPAGSrcNodeID</a>(),oldDpm,edge);</div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; }</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160;</div><div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a"> 398</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#af6a6243b497df5fdab9f658b9add9c8a">backwardPropDpm</a>(CPtSet&amp; pts, <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> ptr,<span class="keyword">const</span> DPIm&amp; oldDpm,<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; DPIm dpm(oldDpm);</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; dpm.setLocVar(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>(),ptr);</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">DDAStat::getClk</a>());</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a601282325e55badc15f3ba9141816af5">handleBKCondition</a>(dpm,edge)==<span class="keyword">false</span>)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a9625c4623acc4f6ccaca1ec8f04f5a54">_TotalTimeOfBKCondition</a> += <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">DDAStat::getClk</a>() - start);</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a>(<a class="code" href="SVFBasicTypes_8h.html#a40845b3027a1237076aa8297ca39e730">DDDA</a>, <a class="code" href="namespaceSVF_1_1SVFUtil.html#a85ab6b592fefc45a0674d3295e01638f">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\t!!! infeasible path svfgNode: &quot;</span> &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>() &lt;&lt; <span class="stringliteral">&quot; --| &quot;</span> &lt;&lt; edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>() &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>);</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a5ebc592d6bd7ef40aff848fb63e9e166">_NumOfInfeasiblePath</a>++);</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; <span class="keywordflow">return</span>;</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; }</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;IndirectSVFGEdge&gt;(edge))</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a1cd1023bca18db16bc54e622c881e494">addLoadDpmAndCVar</a>(dpm,<a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(oldDpm),<a class="code" href="classSVF_1_1DDAVFSolver.html#ad42efad8e857290459689833c224e467">getLoadCVar</a>(oldDpm));</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160;</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a5ad94d2109b293d306f67741effc73aa">_NumOfDPM</a>++);</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a99764ee5bc19378795fe464e9036e78b">unionDDAPts</a>(pts,<a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(dpm));</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; }</div><div class="line"><a name="l00421"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a345e5379f53b618adef014aa6887bfe7"> 421</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a345e5379f53b618adef014aa6887bfe7">isMustAlias</a>(<span class="keyword">const</span> DPIm&amp;, <span class="keyword">const</span> DPIm&amp;)</div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; {</div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; }</div><div class="line"><a name="l00426"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a94bcddbc7b9ccecb3fbb693b13372785"> 426</a></span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a94bcddbc7b9ccecb3fbb693b13372785">isStrongUpdate</a>(<span class="keyword">const</span> CPtSet&amp; dstCPSet, <span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>* store)</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; {</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; <span class="keywordflow">if</span> (dstCPSet.count() == 1)</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; {</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="keyword">typename</span> CPtSet::iterator it = dstCPSet.begin();</div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="keyword">const</span> CVar&amp; var = *it;</div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; <span class="comment">// Strong update can be made if this points-to target is not heap, array or field-insensitive.</span></div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classSVF_1_1DDAVFSolver.html#a645c7d0637b49e139898016ff652e1f3">isHeapCondMemObj</a>(var,store) &amp;&amp; !<a class="code" href="classSVF_1_1DDAVFSolver.html#a9aaa5ee3dc8abc51c4b6e463e1949ee7">isArrayCondMemObj</a>(var)</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; &amp;&amp; !<a class="code" href="classSVF_1_1DDAVFSolver.html#a37a6321f50bef2939b287cc088e76170">isFieldInsenCondMemObj</a>(var) &amp;&amp; !<a class="code" href="classSVF_1_1DDAVFSolver.html#a20cadb651b41343437e135e985c4e566">isLocalCVarInRecursion</a>(var))</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; {</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; }</div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; }</div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; }</div><div class="line"><a name="l00443"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a20cadb651b41343437e135e985c4e566"> 443</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a20cadb651b41343437e135e985c4e566">isLocalCVarInRecursion</a>(<span class="keyword">const</span> CVar&amp; var)<span class="keyword"> const</span></div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = <a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(var);</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* obj = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a2b288fce8efa1b0b1b620efec2c96eb6">getObject</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(obj &amp;&amp; <span class="stringliteral">&quot;object not found!!&quot;</span>);</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="keywordflow">if</span>(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#a65735220b56354f7b6c7ce6753f84e4b">isStack</a>())</div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; {</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a3bacb4f95c73e6d794901d01c6b65a83">AllocaInst</a>* local = SVFUtil::dyn_cast&lt;AllocaInst&gt;(obj-&gt;<a class="code" href="classSVF_1_1MemObj.html#ae952c8b6b92c6cbef9494a83b411a60f">getRefVal</a>()))</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; {</div><div class="line"><a name="l00452"></a><span class="lineno"> 452</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1LLVMModuleSet.html#acf40310917909e4234282c0695a43160">LLVMModuleSet::getLLVMModuleSet</a>()-&gt;<a class="code" href="classSVF_1_1LLVMModuleSet.html#a547b3bc62de65b9dbfc6dee55c063dd7">getSVFFunction</a>(local-&gt;getFunction());</div><div class="line"><a name="l00453"></a><span class="lineno"> 453</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">isInCycle</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5">_callGraph</a>-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#aaab54c670518d9d6790707f76ea76aa1">getCallGraphNode</a>(fun)-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00454"></a><span class="lineno"> 454</span>&#160; }</div><div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; }</div><div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; }</div><div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160;</div><div class="line"><a name="l00460"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ace35b8247204d9806ca1a4f01bff2364"> 460</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ace35b8247204d9806ca1a4f01bff2364">propagateViaObj</a>(<span class="keyword">const</span> CVar&amp; storeObj, <span class="keyword">const</span> CVar&amp; loadObj)</div><div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; {</div><div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(storeObj) == <a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(loadObj))</div><div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00464"></a><span class="lineno"> 464</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00465"></a><span class="lineno"> 465</span>&#160; }</div><div class="line"><a name="l00467"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#afcc074be34dd0c45418ff16b3d9d4192"> 467</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#afcc074be34dd0c45418ff16b3d9d4192">resolveFunPtr</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00468"></a><span class="lineno"> 468</span>&#160; {</div><div class="line"><a name="l00469"></a><span class="lineno"> 469</span>&#160; <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>* cbn= <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;isCallSiteRetSVFGNode(dpm.getLoc()))</div><div class="line"><a name="l00470"></a><span class="lineno"> 470</span>&#160; {</div><div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#abe123c69769f8edb29acb32aaef1449d">isIndirectCallSites</a>(cbn))</div><div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160; {</div><div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> funPtr = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ae4bfb3e30a81cd8ece36f59a60f0f0ca">getFunPtr</a>(cbn);</div><div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; DPIm funPtrDpm(dpm);</div><div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; funPtrDpm.setLocVar(<a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(funPtr)),funPtr);</div><div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(funPtrDpm);</div><div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; }</div><div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160; }</div><div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a>* fun = <a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;isFunEntrySVFGNode(dpm.getLoc()))</div><div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; {</div><div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; CallInstSet csSet;</div><div class="line"><a name="l00483"></a><span class="lineno"> 483</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a>-&gt;<a class="code" href="classSVF_1_1PointerAnalysis.html#a7c9b7e5fe37ae31ba84d167945ca57df">getPTACallGraph</a>()-&gt;<a class="code" href="classSVF_1_1PTACallGraph.html#a9a4b0c6672288b9201ab254b4c49548d">getIndCallSitesInvokingCallee</a>(fun,csSet);</div><div class="line"><a name="l00484"></a><span class="lineno"> 484</span>&#160; <span class="keywordflow">for</span>(CallInstSet::const_iterator it = csSet.begin(), eit = csSet.end(); it!=eit; ++it)</div><div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; {</div><div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> funPtr = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#ae4bfb3e30a81cd8ece36f59a60f0f0ca">getFunPtr</a>(*it);</div><div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; DPIm funPtrDpm(dpm);</div><div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; funPtrDpm.setLocVar(<a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>()-&gt;<a class="code" href="classSVF_1_1DDAVFSolver.html#a55803a2d30137b5ad15c5afeec7c6b28">getDefSVFGNode</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a3aa1c92eb8a6fab72996964de80f19ac">getPAGNode</a>(funPtr)),funPtr);</div><div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a52737dd41c63404ef91691154aa250ce">findPT</a>(funPtrDpm);</div><div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; }</div><div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; }</div><div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div><div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160;</div><div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; <span class="keyword">virtual</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(<span class="keyword">const</span> CVar&amp; var) <span class="keyword">const</span> = 0;</div><div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">virtual</span> CPtSet <a class="code" href="classSVF_1_1DDAVFSolver.html#ab10a34efa1acb6125ea32cf7a8cf919f">processGepPts</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1GepVFGNode.html">GepSVFGNode</a>* gep, <span class="keyword">const</span> CPtSet&amp; srcPts) = 0;</div><div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#acfe7d961caac8f0f558881a9a006b1fa">handleAddr</a>(CPtSet&amp; pts,<span class="keyword">const</span> DPIm&amp; dpm,<span class="keyword">const</span> <a class="code" href="classSVF_1_1AddrVFGNode.html">AddrSVFGNode</a>* addr) = 0;</div><div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keyword">virtual</span> CPtSet <a class="code" href="classSVF_1_1DDAVFSolver.html#a38f5a6b666b2a427d55f1217f9c5595f">getConservativeCPts</a>(<span class="keyword">const</span> DPIm&amp; dpm) = 0;</div><div class="line"><a name="l00504"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a601282325e55badc15f3ba9141816af5"> 504</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a601282325e55badc15f3ba9141816af5">handleBKCondition</a>(DPIm&amp;, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>*)</div><div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; {</div><div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; }</div><div class="line"><a name="l00509"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a4f63b6b3a06633675ae99667cbaa6cdc"> 509</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a4f63b6b3a06633675ae99667cbaa6cdc">updateCallGraphAndSVFG</a>(<span class="keyword">const</span> DPIm&amp;, <span class="keyword">const</span> <a class="code" href="classSVF_1_1CallBlockNode.html">CallBlockNode</a>*, SVFGEdgeSet&amp;) {}</div><div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160;</div><div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160;</div><div class="line"><a name="l00514"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7112ce6145be0855f8b035bb0d8a331c"> 514</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7112ce6145be0855f8b035bb0d8a331c">markbkVisited</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; {</div><div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.insert(dpm);</div><div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; }</div><div class="line"><a name="l00518"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a9a9c3a8b5e4ffc89418073110e446f20"> 518</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a9a9c3a8b5e4ffc89418073110e446f20">isbkVisited</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; {</div><div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.find(dpm)!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.end();</div><div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; }</div><div class="line"><a name="l00522"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aa7e5839c5bc6f913561de10bce61e74b"> 522</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aa7e5839c5bc6f913561de10bce61e74b">clearbkVisited</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; {</div><div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.find(dpm)!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.end() &amp;&amp; <span class="stringliteral">&quot;dpm not found!&quot;</span>);</div><div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>.erase(dpm);</div><div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div><div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160;</div><div class="line"><a name="l00531"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ae31e9281e4f1e0585fdf328b7339e1bf"> 531</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> CPtSet&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae31e9281e4f1e0585fdf328b7339e1bf">getCachedPointsTo</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; {</div><div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#a7b35588de00e322afd742041bf735571">isTopLevelPtrStmt</a>(dpm.getLoc()))</div><div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aac432dfa7ccfc3434d9e0e2eb65afe7f">getCachedTLPointsTo</a>(dpm);</div><div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a2a2b3783074c9f509fc265b97b979704">getCachedADPointsTo</a>(dpm);</div><div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; }</div><div class="line"><a name="l00538"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a239a55960dfbbe73df63063070a18b56"> 538</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a239a55960dfbbe73df63063070a18b56">updateCachedPointsTo</a>(<span class="keyword">const</span> DPIm&amp; dpm, <span class="keyword">const</span> CPtSet&amp; pts)</div><div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; {</div><div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#a99764ee5bc19378795fe464e9036e78b">unionDDAPts</a>(dpm, pts))</div><div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; {</div><div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<span class="keywordtype">double</span> start = <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">DDAStat::getClk</a>());</div><div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a8c5220108a65fa281959529cb1e9cc57">reCompute</a>(dpm);</div><div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#aae8366a4876154fa66298c7bf0fc47c4">_AnaTimeCyclePerQuery</a> += <a class="code" href="classSVF_1_1PTAStat.html#a3c4eaa1695ea13405911ae1621f98edc">DDAStat::getClk</a>() - start);</div><div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; }</div><div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; }</div><div class="line"><a name="l00547"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aac432dfa7ccfc3434d9e0e2eb65afe7f"> 547</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> CPtSet&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#aac432dfa7ccfc3434d9e0e2eb65afe7f">getCachedTLPointsTo</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; {</div><div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a2d6df8149b45d719e22fc505df94171a">dpmToTLCPtSetMap</a>[dpm];</div><div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; }</div><div class="line"><a name="l00551"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a2a2b3783074c9f509fc265b97b979704"> 551</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keyword">const</span> CPtSet&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#a2a2b3783074c9f509fc265b97b979704">getCachedADPointsTo</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div><div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a2565bf8dcacb22350dc1dc98ec7595f2">dpmToADCPtSetMap</a>[dpm];</div><div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; }</div><div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160;</div><div class="line"><a name="l00558"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7b35588de00e322afd742041bf735571"> 558</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7b35588de00e322afd742041bf735571">isTopLevelPtrStmt</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* stmt)</div><div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; {</div><div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; <span class="keywordflow">if</span> (SVFUtil::isa&lt;StoreSVFGNode&gt;(stmt) || SVFUtil::isa&lt;MRSVFGNode&gt;(stmt))</div><div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; }</div><div class="line"><a name="l00566"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ac4cb0b666d68d135c5e385bfc880fd67"> 566</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> DPIm <a class="code" href="classSVF_1_1DDAVFSolver.html#ac4cb0b666d68d135c5e385bfc880fd67">getDPImWithOldCond</a>(<span class="keyword">const</span> DPIm&amp; oldDpm,<span class="keyword">const</span> CVar&amp; var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* loc)</div><div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; {</div><div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; DPIm dpm(oldDpm);</div><div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; dpm.setLocVar(loc,<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(var));</div><div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160;</div><div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;StoreSVFGNode&gt;(loc))</div><div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a1cd1023bca18db16bc54e622c881e494">addLoadDpmAndCVar</a>(dpm,<a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(oldDpm),var);</div><div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160;</div><div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">if</span>(SVFUtil::isa&lt;LoadSVFGNode&gt;(loc))</div><div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a1cd1023bca18db16bc54e622c881e494">addLoadDpmAndCVar</a>(dpm,oldDpm,var);</div><div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="SVFBasicTypes_8h.html#a6c9e2209a2c38607a9e3b7fab242886a">DOSTAT</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a5ad94d2109b293d306f67741effc73aa">_NumOfDPM</a>++);</div><div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <span class="keywordflow">return</span> dpm;</div><div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; }</div><div class="line"><a name="l00581"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aba0ec611a5cfd096ac0b8b11e0bd5580"> 581</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aba0ec611a5cfd096ac0b8b11e0bd5580">SVFGSCCDetection</a>()</div><div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; {</div><div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>==<span class="keyword">nullptr</span>)</div><div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; {</div><div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a> = <span class="keyword">new</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a502207f81ed22fa42f9e18ccba83ad4e">SVFGSCC</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#acb7980c7e0d1d8ad6abab0b80831d2a9">getSVFG</a>());</div><div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; }</div><div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a123b5006a6da7053e5e357140da3c5a3">find</a>();</div><div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; }</div><div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a1583ed2eb1d4b88dc2a5b4c0b6842496"> 590</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a1583ed2eb1d4b88dc2a5b4c0b6842496">getSVFGSCCRepNode</a>(<a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span>)</div><div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; {</div><div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a3a5fdc9330a657240f77199f5aee602d">repNode</a>(<span class="keywordtype">id</span>);</div><div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; }</div><div class="line"><a name="l00595"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#add7daee4a0ecae479a5ab015130c8c93"> 595</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#add7daee4a0ecae479a5ab015130c8c93">isSVFGNodeInCycle</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node)</div><div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; {</div><div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>-&gt;<a class="code" href="classSVF_1_1SCCDetection.html#a5d699af73b1e7ad4e3a5f6d26b8b6d15">isInCycle</a>(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; }</div><div class="line"><a name="l00600"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a034e3c8b2eec00aee9de439dfeeda332"> 600</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a034e3c8b2eec00aee9de439dfeeda332">edgeInSVFGSCC</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGEdge.html">SVFGEdge</a>* edge)</div><div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; {</div><div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <span class="keywordflow">return</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#a1583ed2eb1d4b88dc2a5b4c0b6842496">getSVFGSCCRepNode</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>()) == <a class="code" href="classSVF_1_1DDAVFSolver.html#a1583ed2eb1d4b88dc2a5b4c0b6842496">getSVFGSCCRepNode</a>(edge-&gt;<a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>()));</div><div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; }</div><div class="line"><a name="l00605"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#afc2b0eeb1d5d5f292690f3c949217c38"> 605</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#afc2b0eeb1d5d5f292690f3c949217c38">setCallGraph</a> (<a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* cg)</div><div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; {</div><div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5">_callGraph</a> = cg;</div><div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; }</div><div class="line"><a name="l00610"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#abd652b2627f68d7d4f8bf3bdb20ce975"> 610</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#abd652b2627f68d7d4f8bf3bdb20ce975">setCallGraphSCC</a> (CallGraphSCC* scc)</div><div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; {</div><div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a> = scc;</div><div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; }</div><div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160;</div><div class="line"><a name="l00616"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a645c7d0637b49e139898016ff652e1f3"> 616</a></span>&#160; <span class="keyword">virtual</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a645c7d0637b49e139898016ff652e1f3">isHeapCondMemObj</a>(<span class="keyword">const</span> CVar&amp; var, <span class="keyword">const</span> <a class="code" href="classSVF_1_1StoreVFGNode.html">StoreSVFGNode</a>*)</div><div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; {</div><div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a2b288fce8efa1b0b1b620efec2c96eb6">getObject</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(var));</div><div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mem &amp;&amp; <span class="stringliteral">&quot;memory object is null??&quot;</span>);</div><div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">return</span> mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#af8f4f85cfbcb09615fb04ca63d634138">isHeap</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;</div><div class="line"><a name="l00623"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a9aaa5ee3dc8abc51c4b6e463e1949ee7"> 623</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a9aaa5ee3dc8abc51c4b6e463e1949ee7">isArrayCondMemObj</a>(<span class="keyword">const</span> CVar&amp; var)<span class="keyword"> const</span></div><div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a2b288fce8efa1b0b1b620efec2c96eb6">getObject</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(var));</div><div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(mem &amp;&amp; <span class="stringliteral">&quot;memory object is null??&quot;</span>);</div><div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keywordflow">return</span> mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a5796d7fec7f0fc2260e8a36493409eab">isArray</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"><a class="line" href="classSVF_1_1DDAVFSolver.html#a37a6321f50bef2939b287cc088e76170"> 629</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a37a6321f50bef2939b287cc088e76170">isFieldInsenCondMemObj</a>(<span class="keyword">const</span> CVar&amp; var)<span class="keyword"> const</span></div><div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; <span class="keyword">const</span> <a class="code" href="classSVF_1_1MemObj.html">MemObj</a>* mem = <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>-&gt;<a class="code" href="classSVF_1_1PAG.html#a459e2ef671d002ef6edf25cf0bfb7924">getBaseObj</a>(<a class="code" href="classSVF_1_1DDAVFSolver.html#a3fa002d4ba4194ffde62ecbdd361a24d">getPtrNodeID</a>(var));</div><div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">return</span> mem-&gt;<a class="code" href="classSVF_1_1MemObj.html#a9d50a00ff608df21f50b3b2823128901">isFieldInsensitive</a>();</div><div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; }</div><div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160;</div><div class="line"><a name="l00638"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ad849ae4509e88832f784c748468ab959"> 638</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> LocToDPMVecMap&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#ad849ae4509e88832f784c748468ab959">getLocToDPMVecMap</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>;</div><div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; }</div><div class="line"><a name="l00642"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a6c32a1cdcdbea0151c8cf17ffe598f29"> 642</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> DPTItemSet&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#a6c32a1cdcdbea0151c8cf17ffe598f29">getDpmSetAtLoc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* loc)</div><div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; {</div><div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>[loc-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>()];</div><div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; }</div><div class="line"><a name="l00646"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af7be3fa6c73dde97d6f9fd0395c9aee0"> 646</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#af7be3fa6c73dde97d6f9fd0395c9aee0">addDpmToLoc</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; {</div><div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>[dpm.getLoc()-&gt;getId()].insert(dpm);</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"><a class="line" href="classSVF_1_1DDAVFSolver.html#a00ae738a76564b7b334faae567674e34"> 650</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a00ae738a76564b7b334faae567674e34">removeDpmFromLoc</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; {</div><div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(dpm == <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>[dpm.getLoc()].back() &amp;&amp; <span class="stringliteral">&quot;dpm not match with the end of vector&quot;</span>);</div><div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>[dpm.getLoc()-&gt;getId()].erase(dpm);</div><div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div><div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160;<span class="keyword">protected</span>:</div><div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160;</div><div class="line"><a name="l00659"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a1cd1023bca18db16bc54e622c881e494"> 659</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a1cd1023bca18db16bc54e622c881e494">addLoadDpmAndCVar</a>(<span class="keyword">const</span> DPIm&amp; dpm,<span class="keyword">const</span> DPIm&amp; loadDpm,<span class="keyword">const</span> CVar&amp; loadVar)</div><div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; {</div><div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a7579491400f1781356cb7d1913537547">addLoadCVar</a>(dpm,loadVar);</div><div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a4725013a7617645e1418ed670d4837b5">addLoadDpm</a>(dpm,loadDpm);</div><div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; }</div><div class="line"><a name="l00665"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a4725013a7617645e1418ed670d4837b5"> 665</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a4725013a7617645e1418ed670d4837b5">addLoadDpm</a>(<span class="keyword">const</span> DPIm&amp; dpm,<span class="keyword">const</span> DPIm&amp; loadDpm)</div><div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; {</div><div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; <span class="keyword">typename</span> DPMToDPMMap::iterator it = <a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.find(dpm);</div><div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.end())</div><div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; it-&gt;second = loadDpm;</div><div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.insert(std::make_pair(dpm,loadDpm));</div><div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div><div class="line"><a name="l00673"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9"> 673</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> DPIm&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#a630aad14a285c954a50c632f9cb13fa9">getLoadDpm</a>(<span class="keyword">const</span> DPIm&amp; dpm)<span class="keyword"> const</span></div><div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; <span class="keyword">typename</span> DPMToDPMMap::const_iterator it = <a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.find(dpm);</div><div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>.end() &amp;&amp; <span class="stringliteral">&quot;not found??&quot;</span>);</div><div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</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"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7579491400f1781356cb7d1913537547"> 679</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7579491400f1781356cb7d1913537547">addLoadCVar</a>(<span class="keyword">const</span> DPIm&amp; dpm, <span class="keyword">const</span> CVar&amp; loadVar)</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="keyword">typename</span> DPMToCVarMap::iterator it = <a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.find(dpm);</div><div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="keywordflow">if</span>(it!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.end())</div><div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; it-&gt;second = loadVar;</div><div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="keywordflow">else</span></div><div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.insert(std::make_pair(dpm,loadVar));</div><div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; }</div><div class="line"><a name="l00687"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ad42efad8e857290459689833c224e467"> 687</a></span>&#160; <span class="keyword">inline</span> <span class="keyword">const</span> CVar&amp; <a class="code" href="classSVF_1_1DDAVFSolver.html#ad42efad8e857290459689833c224e467">getLoadCVar</a>(<span class="keyword">const</span> DPIm&amp; dpm)<span class="keyword"> const</span></div><div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keyword">typename</span> DPMToCVarMap::const_iterator it = <a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.find(dpm);</div><div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(it!=<a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>.end() &amp;&amp; <span class="stringliteral">&quot;not found??&quot;</span>);</div><div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keywordflow">return</span> it-&gt;second;</div><div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; }</div><div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#ac39860015b45b9af6351d0343f8983bb">getAndersenAnalysis</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a>;</div><div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; }</div><div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a9005f1f0e4a808838276ff44b300f96d">handleOutOfBudgetDpm</a>(<span class="keyword">const</span> DPIm&amp; dpm) {}</div><div class="line"><a name="l00703"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a3fb52286c5324ea3d58e22c630b307e3"> 703</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a3fb52286c5324ea3d58e22c630b307e3">testOutOfBudget</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; {</div><div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>) <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">if</span>(++<a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a674248754300d58fcef8eaf09436249e">_NumOfStep</a> &gt; DPIm::getMaxBudget())</div><div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a0b1f774883adc7d535f8363bf3c8b1e8">isOutOfBudgetDpm</a>(dpm) || <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>;</div><div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; }</div><div class="line"><a name="l00710"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7994236bff84ba8244592fdf5e546734"> 710</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7994236bff84ba8244592fdf5e546734">isOutOfBudgetQuery</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>;</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"><a class="line" href="classSVF_1_1DDAVFSolver.html#ae1e77060ac22d465b5cc9430962e280c"> 714</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae1e77060ac22d465b5cc9430962e280c">addOutOfBudgetDpm</a>(<span class="keyword">const</span> DPIm&amp; dpm)</div><div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; {</div><div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#aad57a954473f3099188cf8c8fba87880">outOfBudgetDpms</a>.insert(dpm);</div><div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; }</div><div class="line"><a name="l00718"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a0b1f774883adc7d535f8363bf3c8b1e8"> 718</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a0b1f774883adc7d535f8363bf3c8b1e8">isOutOfBudgetDpm</a>(<span class="keyword">const</span> DPIm&amp; dpm)<span class="keyword"> const</span></div><div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160;<span class="keyword"> </span>{</div><div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aad57a954473f3099188cf8c8fba87880">outOfBudgetDpms</a>.find(dpm) != <a class="code" href="classSVF_1_1DDAVFSolver.html#aad57a954473f3099188cf8c8fba87880">outOfBudgetDpms</a>.end();</div><div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; }</div><div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160;</div><div class="line"><a name="l00725"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#adcb641eec4f620effdb3f61a46429f40"> 725</a></span>&#160; <span class="keyword">inline</span> <a class="code" href="classSVF_1_1DDAStat.html">DDAStat</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#adcb641eec4f620effdb3f61a46429f40">setDDAStat</a>(<a class="code" href="classSVF_1_1DDAStat.html">DDAStat</a>* s)</div><div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; {</div><div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a> = s;</div><div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>;</div><div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; }</div><div class="line"><a name="l00731"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aeb6b56cf3d140d251b0524eb5cbd6dce"> 731</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#aeb6b56cf3d140d251b0524eb5cbd6dce">addSUStat</a>(<span class="keyword">const</span> DPIm&amp; dpm, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node)</div><div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; {</div><div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1DDAVFSolver.html#af66895278f0ecbc882f9e4f43ef9c8a8">storeToDPMs</a>[node].insert(dpm).second)</div><div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; {</div><div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a5c007645d73bfc5cfefef672f3c1dcf1">_NumOfStrongUpdates</a>++;</div><div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#ad53ad7a958c05b45624d2859a6a9e647">_StrongUpdateStores</a>.set(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; }</div><div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; }</div><div class="line"><a name="l00740"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a7d0775354df32f293e98578ed071d33c"> 740</a></span>&#160; <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#a7d0775354df32f293e98578ed071d33c">rmSUStat</a>(<span class="keyword">const</span> DPIm&amp; dpm, <span class="keyword">const</span> <a class="code" href="classSVF_1_1VFGNode.html">SVFGNode</a>* node)</div><div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; {</div><div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; DPTItemSet&amp; dpmSet = <a class="code" href="classSVF_1_1DDAVFSolver.html#af66895278f0ecbc882f9e4f43ef9c8a8">storeToDPMs</a>[node];</div><div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; <span class="keywordflow">if</span> (dpmSet.erase(dpm))</div><div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; {</div><div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#a5c007645d73bfc5cfefef672f3c1dcf1">_NumOfStrongUpdates</a>--;</div><div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">if</span>(dpmSet.empty())</div><div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>-&gt;<a class="code" href="classSVF_1_1DDAStat.html#ad53ad7a958c05b45624d2859a6a9e647">_StrongUpdateStores</a>.reset(node-&gt;<a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>());</div><div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; }</div><div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160; }</div><div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160;</div><div class="line"><a name="l00751"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6"> 751</a></span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1DDAVFSolver.html#afdecfbacc64cb8d694268aa73ec8a7b6">outOfBudgetQuery</a>; </div><div class="line"><a name="l00752"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729"> 752</a></span>&#160; <a class="code" href="classSVF_1_1PAG.html">PAG</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#af08857f907caa32c090eed2c1b404729">_pag</a>; </div><div class="line"><a name="l00753"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6"> 753</a></span>&#160; <a class="code" href="classSVF_1_1SVFG.html">SVFG</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#a74d83f06e8fc0ecedc1e1846030c99c6">_svfg</a>; </div><div class="line"><a name="l00754"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf"> 754</a></span>&#160; <a class="code" href="classSVF_1_1AndersenWaveDiff.html">AndersenWaveDiff</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#aa1d1b6e8cc23f0a6d3935cbe4f02cbdf">_ander</a>; </div><div class="line"><a name="l00755"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ae0e78fafb7eec0fbc1a02d24547335e9"> 755</a></span>&#160; <a class="code" href="namespaceSVF.html#a740396763e377643790c8b803ab3e4ea">NodeBS</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#ae0e78fafb7eec0fbc1a02d24547335e9">candidateQueries</a>; </div><div class="line"><a name="l00756"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5"> 756</a></span>&#160; <a class="code" href="classSVF_1_1PTACallGraph.html">PTACallGraph</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#abf24080617c6a74abed9f0bb0bc9c0c5">_callGraph</a>; </div><div class="line"><a name="l00757"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a"> 757</a></span>&#160; CallGraphSCC* <a class="code" href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">_callGraphSCC</a>; </div><div class="line"><a name="l00758"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644"> 758</a></span>&#160; SVFGSCC* <a class="code" href="classSVF_1_1DDAVFSolver.html#a54f5d4972238ae69f19c9da3b9f51644">_svfgSCC</a>; </div><div class="line"><a name="l00759"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c"> 759</a></span>&#160; DPTItemSet <a class="code" href="classSVF_1_1DDAVFSolver.html#a63d04c3af4529d0e0f82acd76ed57f6c">backwardVisited</a>; </div><div class="line"><a name="l00760"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a2d6df8149b45d719e22fc505df94171a"> 760</a></span>&#160; DPImToCPtSetMap <a class="code" href="classSVF_1_1DDAVFSolver.html#a2d6df8149b45d719e22fc505df94171a">dpmToTLCPtSetMap</a>; </div><div class="line"><a name="l00761"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a2565bf8dcacb22350dc1dc98ec7595f2"> 761</a></span>&#160; DPImToCPtSetMap <a class="code" href="classSVF_1_1DDAVFSolver.html#a2565bf8dcacb22350dc1dc98ec7595f2">dpmToADCPtSetMap</a>; </div><div class="line"><a name="l00762"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7"> 762</a></span>&#160; LocToDPMVecMap <a class="code" href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">locToDpmSetMap</a>; </div><div class="line"><a name="l00763"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692"> 763</a></span>&#160; DPMToDPMMap <a class="code" href="classSVF_1_1DDAVFSolver.html#a9d8959dfee05685cd74d0d7a78069692">dpmToloadDpmMap</a>; </div><div class="line"><a name="l00764"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4"> 764</a></span>&#160; DPMToCVarMap <a class="code" href="classSVF_1_1DDAVFSolver.html#a6d62420837fe0c7814fc4da68a91eda4">loadToPTCVarMap</a>; </div><div class="line"><a name="l00765"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#aad57a954473f3099188cf8c8fba87880"> 765</a></span>&#160; DPTItemSet <a class="code" href="classSVF_1_1DDAVFSolver.html#aad57a954473f3099188cf8c8fba87880">outOfBudgetDpms</a>; </div><div class="line"><a name="l00766"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#af66895278f0ecbc882f9e4f43ef9c8a8"> 766</a></span>&#160; StoreToPMSetMap <a class="code" href="classSVF_1_1DDAVFSolver.html#af66895278f0ecbc882f9e4f43ef9c8a8">storeToDPMs</a>; </div><div class="line"><a name="l00767"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2"> 767</a></span>&#160; <a class="code" href="classSVF_1_1DDAStat.html">DDAStat</a>* <a class="code" href="classSVF_1_1DDAVFSolver.html#ae40c7bad663e0fa07dee4be3d1794ff2">ddaStat</a>; </div><div class="line"><a name="l00768"></a><span class="lineno"><a class="line" href="classSVF_1_1DDAVFSolver.html#a0d563fe8b016b27a58f5b054fec9c38a"> 768</a></span>&#160; <a class="code" href="classSVF_1_1SVFGBuilder.html">SVFGBuilder</a> <a class="code" href="classSVF_1_1DDAVFSolver.html#a0d563fe8b016b27a58f5b054fec9c38a">svfgBuilder</a>; </div><div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160;};</div><div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160;</div><div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160;</div><div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;<span class="preprocessor">#endif </span><span class="comment">/* VALUEFLOWDDA_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="Andersen_8h_html"><div class="ttname"><a href="Andersen_8h.html">Andersen.h</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1DDAVFSolver_html_a37a6321f50bef2939b287cc088e76170"><div class="ttname"><a href="classSVF_1_1DDAVFSolver.html#a37a6321f50bef2939b287cc088e76170">SVF::DDAVFSolver::isFieldInsenCondMemObj</a></div><div class="ttdeci">bool isFieldInsenCondMemObj(const CVar &amp;var) const</div><div class="ttdef"><b>Definition:</b> <a href="DDAVFSolver_8h_source.html#l00629">DDAVFSolver.h:629</a></div></div>
71
71
  <div class="ttc" id="classSVF_1_1DDAVFSolver_html_a8b5a34679fb1362425c88d6e74b6c019"><div class="ttname"><a href="classSVF_1_1DDAVFSolver.html#a8b5a34679fb1362425c88d6e74b6c019">SVF::DDAVFSolver::DPImToCPtSetMap</a></div><div class="ttdeci">OrderedMap&lt; DPIm, CPtSet &gt; DPImToCPtSetMap</div><div class="ttdef"><b>Definition:</b> <a href="DDAVFSolver_8h_source.html#l00033">DDAVFSolver.h:33</a></div></div>
72
72
  <div class="ttc" id="classSVF_1_1DDAVFSolver_html_a4c307d486756daa1e79595b1e9edc40a"><div class="ttname"><a href="classSVF_1_1DDAVFSolver.html#a4c307d486756daa1e79595b1e9edc40a">SVF::DDAVFSolver::_callGraphSCC</a></div><div class="ttdeci">CallGraphSCC * _callGraphSCC</div><div class="ttdoc">SCC for CallGraph. </div><div class="ttdef"><b>Definition:</b> <a href="DDAVFSolver_8h_source.html#l00757">DDAVFSolver.h:757</a></div></div>
@@ -242,7 +242,6 @@ $(function() {
242
242
  <div class="ttc" id="classSVF_1_1DDAVFSolver_html_af2a0732401e5904ebf81878d3ffe0675"><div class="ttname"><a href="classSVF_1_1DDAVFSolver.html#af2a0732401e5904ebf81878d3ffe0675">SVF::DDAVFSolver::buildSVFG</a></div><div class="ttdeci">virtual void buildSVFG(PAG *pag)</div><div class="ttdoc">Build SVFG. </div><div class="ttdef"><b>Definition:</b> <a href="DDAVFSolver_8h_source.html#l00289">DDAVFSolver.h:289</a></div></div>
243
243
  <div class="ttc" id="classSVF_1_1MemObj_html_af8f4f85cfbcb09615fb04ca63d634138"><div class="ttname"><a href="classSVF_1_1MemObj.html#af8f4f85cfbcb09615fb04ca63d634138">SVF::MemObj::isHeap</a></div><div class="ttdeci">bool isHeap() const</div><div class="ttdef"><b>Definition:</b> <a href="MemModel_8h_source.html#l00372">MemModel.h:372</a></div></div>
244
244
  <div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00142">SVFBasicTypes.h:142</a></div></div>
245
- <div class="ttc" id="namespaceSVF_html_a0c6594b4bae7924369bb61943c1da4fb"><div class="ttname"><a href="namespaceSVF.html#a0c6594b4bae7924369bb61943c1da4fb">SVF::PointsTo</a></div><div class="ttdeci">NodeBS PointsTo</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00088">SVFBasicTypes.h:88</a></div></div>
246
245
  <div class="ttc" id="classSVF_1_1DDAVFSolver_html_aa724698d499615bce7caf8f312b746a7"><div class="ttname"><a href="classSVF_1_1DDAVFSolver.html#aa724698d499615bce7caf8f312b746a7">SVF::DDAVFSolver::locToDpmSetMap</a></div><div class="ttdeci">LocToDPMVecMap locToDpmSetMap</div><div class="ttdoc">map location to its dpms </div><div class="ttdef"><b>Definition:</b> <a href="DDAVFSolver_8h_source.html#l00762">DDAVFSolver.h:762</a></div></div>
247
246
  <div class="ttc" id="SVFBasicTypes_8h_html_ab6f41e9db3675dc689c5492418885041"><div class="ttname"><a href="SVFBasicTypes_8h.html#ab6f41e9db3675dc689c5492418885041">DOTIMESTAT</a></div><div class="ttdeci">#define DOTIMESTAT(X)</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00144">SVFBasicTypes.h:144</a></div></div>
248
247
  <div class="ttc" id="classSVF_1_1DDAVFSolver_html_a94bcddbc7b9ccecb3fbb693b13372785"><div class="ttname"><a href="classSVF_1_1DDAVFSolver.html#a94bcddbc7b9ccecb3fbb693b13372785">SVF::DDAVFSolver::isStrongUpdate</a></div><div class="ttdeci">virtual bool isStrongUpdate(const CPtSet &amp;dstCPSet, const StoreSVFGNode *store)</div><div class="ttdoc">Return TRUE if this is a strong update STORE statement. </div><div class="ttdef"><b>Definition:</b> <a href="DDAVFSolver_8h_source.html#l00426">DDAVFSolver.h:426</a></div></div>